;;; completion.el --- dynamic word-completion code
-;; Copyright (C) 1990, 1993, 1995, 1997, 2001-2012
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1990, 1993, 1995, 1997, 2001-2013 Free Software
+;; Foundation, Inc.
;; Maintainer: FSF
;; Keywords: abbrev convenience
;; superior to that of the LISPM version.
;;
;;-----------------------------------------------
-;; Acknowledgements
+;; Acknowledgments
;;-----------------------------------------------
;; Cliff Lasser (cal@think.com), Kevin Herbert (kph@cisco.com),
;; eero@media-lab, kgk@cs.brown.edu, jla@ai.mit.edu,
:type '(set (const lisp) (const c))
:group 'completion)
-;;(defvar *record-cmpl-statistics-p* nil
-;; "If non-nil, record completion statistics.")
-
;;(defvar *completion-auto-save-period* 1800
;; "The period in seconds to wait for emacs to be idle before autosaving
;;the completions. Default is a 1/2 hour.")
;; Note that the guts of this has been turned off. The guts
;; are in completion-stats.el.
-;;-----------------------------------------------
-;; Conditionalizing code on *record-cmpl-statistics-p*
-;;-----------------------------------------------
-;; All statistics code outside this block should use this
-(defmacro cmpl-statistics-block (&rest _body))
-;; "Only executes body if we are recording statistics."
-;; (list 'cond
-;; (list* '*record-cmpl-statistics-p* body)
-;; ))
-
;;-----------------------------------------------
;; Completion Sources
;;-----------------------------------------------
"Initialize the completion storage. All existing completions are lost."
(interactive)
(setq cmpl-prefix-obarray (make-vector cmpl-obarray-length 0))
- (setq cmpl-obarray (make-vector cmpl-obarray-length 0))
- (cmpl-statistics-block
- (record-clear-all-completions)))
+ (setq cmpl-obarray (make-vector cmpl-obarray-length 0)))
(defvar completions-list-return-value)
(set-cmpl-prefix-entry-tail prefix-entry entry))
(t
(set cmpl-db-prefix-symbol (make-cmpl-prefix-entry entry))))
- ;; statistics
- (cmpl-statistics-block
- (note-added-completion))
;; set symbol
(set cmpl-db-symbol (car entry)))))
(t
;; Start new prefix entry
(set cmpl-db-prefix-symbol (make-cmpl-prefix-entry entry))))
- ;; statistics
- (cmpl-statistics-block
- (note-added-completion))
;; Add it to the symbol
(set cmpl-db-symbol (car entry)))))
(or (set-cmpl-prefix-entry-head
prefix-entry (cdr (cmpl-prefix-entry-head prefix-entry)))
;; List is now empty
- (set cmpl-db-prefix-symbol nil))))
- (cmpl-statistics-block
- (note-completion-deleted)))
+ (set cmpl-db-prefix-symbol nil)))))
(error "Unknown completion `%s'" completion-string)))
;; Tests --
(defun check-completion-length (string)
(if (< (length string) completion-min-length)
- (error "The string `%s' is too short to be saved as a completion"
- string)
+ (user-error "The string `%s' is too short to be saved as a completion"
+ string)
(list string)))
(defun add-completion (string &optional num-uses last-use-time)
(let ((string (and enable-completion (symbol-before-point)))
(current-completion-source cmpl-source-separator)
entry)
- (cmpl-statistics-block
- (note-separator-character string))
(cond (string
(setq entry (add-completion-to-head string))
(if (and completion-on-separator-character
completion-prefix-min-length)))
;; get index
(setq cmpl-current-index (if current-prefix-arg arg 0))
- ;; statistics
- (cmpl-statistics-block
- (note-complete-entered-afresh cmpl-original-string))
;; reset database
(completion-search-reset cmpl-original-string)
;; erase what we've got
;; Get the next completion
(let* ((print-status-p
(and (>= baud-rate completion-prompt-speed-threshold)
- (not (window-minibuffer-p (selected-window)))))
+ (not (window-minibuffer-p))))
(insert-point (point))
(entry (completion-search-next cmpl-current-index))
string)
(goto-char insert-point))
(t;; point at end,
(setq cmpl-last-insert-location insert-point)))
- ;; statistics
- (cmpl-statistics-block
- (note-complete-inserted entry cmpl-current-index))
;; Done ! cmpl-stat-complete-successful
;;display the next completion
(cond
(if (and print-status-p (sit-for 0))
(message "No %scompletions."
(if (eq this-command last-command) "more " "")))
- ;; statistics
- (cmpl-statistics-block
- (record-complete-failed cmpl-current-index))
;; Pretend that we were never here
(setq this-command 'failed-complete)))))
\f
(defun add-completions-from-buffer ()
(interactive)
- (let ((current-completion-source cmpl-source-file-parsing)
- (start-num
- (cmpl-statistics-block
- (aref completion-add-count-vector cmpl-source-file-parsing)))
- mode)
+ (let ((current-completion-source cmpl-source-file-parsing))
(cond ((memq major-mode '(emacs-lisp-mode lisp-mode))
- (add-completions-from-lisp-buffer)
- (setq mode 'lisp))
+ (add-completions-from-lisp-buffer))
((memq major-mode '(c-mode))
- (add-completions-from-c-buffer)
- (setq mode 'c))
+ (add-completions-from-c-buffer))
(t
(error "Cannot parse completions in %s buffers"
- major-mode)))
- (cmpl-statistics-block
- (record-cmpl-parse-file
- mode (point-max)
- (- (aref completion-add-count-vector cmpl-source-file-parsing)
- start-num)))))
+ major-mode)))))
;; Find file hook
(defun completion-find-file-hook ()
((not cmpl-completions-accepted-p)
(message "Completions database has not changed - not writing."))
(t
- (save-completions-to-file))))
- (cmpl-statistics-block (record-cmpl-kill-emacs)))
+ (save-completions-to-file)))))
;; There is no point bothering to change this again
;; unless the package changes so much that it matters
(set-buffer-modified-p nil)
(message "Couldn't save completion file `%s'" filename)))
;; Reset accepted-p flag
- (setq cmpl-completions-accepted-p nil) )
- (cmpl-statistics-block
- (record-save-completions total-in-db total-perm total-saved))))))
+ (setq cmpl-completions-accepted-p nil) )))))
;;(defun auto-save-completions ()
;; (if (and save-completions-flag enable-completion cmpl-initialized-p
string entry last-use-time
cmpl-entry cmpl-last-use-time
(current-completion-source cmpl-source-init-file)
- (start-num
- (cmpl-statistics-block
- (aref completion-add-count-vector cmpl-source-file-parsing)))
(total-in-file 0) (total-perm 0))
;; insert the file into a buffer
(condition-case nil
(message "Loading completions from file %s . . . Done."
filename))
(message "End of file while reading completions."))))))
-
- (cmpl-statistics-block
- (record-load-completions
- total-in-file total-perm
- (- (aref completion-add-count-vector cmpl-source-init-file)
- start-num)))
))))))
(defun completion-initialize ()
(cond ((eq last-command 'complete)
(delete-region (point) cmpl-last-insert-location)
(insert cmpl-original-string)
- (setq completion-to-accept nil)
- (cmpl-statistics-block
- (record-complete-failed)))
+ (setq completion-to-accept nil))
(t
(kill-region beg end))))
(use-completion-before-separator)))
(defun use-completion-backward-under ()
- (use-completion-under-point)
- (if (eq last-command 'complete)
- ;; probably a failed completion if you have to back up
- (cmpl-statistics-block (record-complete-failed))))
+ (use-completion-under-point))
(defun use-completion-backward ()
- (if (eq last-command 'complete)
- ;; probably a failed completion if you have to back up
- (cmpl-statistics-block (record-complete-failed))))
+ nil)
(defun completion-before-command ()
(funcall (or (and (symbolp this-command)
and disable it otherwise. If called from Lisp, enable the mode
if ARG is omitted or nil."
:global t
+ :group 'completion
;; This is always good, not specific to dynamic-completion-mode.
(define-key function-key-map [C-return] [?\C-\r])
;; fooquux
;; fooper
- (cmpl-statistics-block
- (record-completion-file-loaded))
-
(completion-initialize)))
;;-----------------------------------------------
(defvaralias 'cmpl-syntax-table 'completion-syntax-table)
(defalias 'initialize-completions 'completion-initialize)
-(dolist (x '("^To complete, the point must be after a symbol at least [0-9]* character long\\.$"
- "^The string \".*\" is too short to be saved as a completion\\.$"))
- (add-to-list 'debug-ignored-errors x))
-
(provide 'completion)
;;; completion.el ends here