diff options
Diffstat (limited to 'lisp/complete.el')
-rw-r--r-- | lisp/complete.el | 68 |
1 files changed, 30 insertions, 38 deletions
diff --git a/lisp/complete.el b/lisp/complete.el index d3ff6c53988..cde669a943f 100644 --- a/lisp/complete.el +++ b/lisp/complete.el @@ -203,15 +203,21 @@ other file in that directory begin with that sequence of characters. Unless `PC-disable-includes' is non-nil, the `<...>' sequence is interpreted specially in \\[find-file]. For example, \\[find-file] <sys/time.h> RET finds the file `/usr/include/sys/time.h'. -See also the variable `PC-include-file-path'." +See also the variable `PC-include-file-path'. + +Partial Completion mode extends the meaning of `completion-auto-help' (which +see), so that if it is neither nil nor t, Emacs shows the `*Completions*' +buffer only on the second attempt to complete. That is, if TAB finds nothing +to complete, the first TAB just says \"Next char not unique\" and the +second TAB brings up the `*Completions*' buffer." :global t :group 'partial-completion ;; Deal with key bindings... (PC-bindings partial-completion-mode) ;; Deal with include file feature... (cond ((not partial-completion-mode) - (remove-hook 'find-file-not-found-hooks 'PC-look-for-include-file)) + (remove-hook 'find-file-not-found-functions 'PC-look-for-include-file)) ((not PC-disable-includes) - (add-hook 'find-file-not-found-hooks 'PC-look-for-include-file))) + (add-hook 'find-file-not-found-functions 'PC-look-for-include-file))) ;; ... with some underhand redefining. (cond ((and (not partial-completion-mode) (functionp PC-old-read-file-name-internal)) @@ -254,8 +260,7 @@ Word-delimiters for the purposes of Partial Completion are \"-\", \"_\", ;; and this command is repeated, scroll that window. (if (and window (window-buffer window) (buffer-name (window-buffer window))) - (save-excursion - (set-buffer (window-buffer window)) + (with-current-buffer (window-buffer window) (if (pos-visible-in-window-p (point-max) window) (set-window-start window (point-min) nil) (scroll-other-window))) @@ -339,11 +344,8 @@ See `PC-complete' for details." (defvar PC-delims-list nil) (defvar PC-completion-as-file-name-predicate - (function - (lambda () - (memq minibuffer-completion-table - '(read-file-name-internal read-directory-name-internal)))) - "A function testing whether a minibuffer completion now will work filename-style. + (lambda () minibuffer-completing-file-name) + "A function testing whether a minibuffer completion now will work filename-style. The function takes no arguments, and typically looks at the value of `minibuffer-completion-table' and the minibuffer contents.") @@ -610,8 +612,7 @@ of `minibuffer-completion-table' and the minibuffer contents.") (insert (substring prefix i (1+ i))) (setq end (1+ end))) (setq i (1+ i))) - (or pt (equal (point) beg) - (setq pt (point))) + (or pt (setq pt (point))) (looking-at PC-delim-regex)) (setq skip (concat skip (regexp-quote prefix) @@ -658,8 +659,7 @@ of `minibuffer-completion-table' and the minibuffer contents.") (eq mode 'help)) (with-output-to-temp-buffer "*Completions*" (display-completion-list (sort helpposs 'string-lessp)) - (save-excursion - (set-buffer standard-output) + (with-current-buffer standard-output ;; Record which part of the buffer we are completing ;; so that choosing a completion from the list ;; knows how much old text to replace. @@ -725,16 +725,12 @@ Otherwise, all symbols with function definitions, values or properties are considered." (interactive) (let* ((end (point)) - (buffer-syntax (syntax-table)) - (beg (unwind-protect - (save-excursion - (if lisp-mode-syntax-table - (set-syntax-table lisp-mode-syntax-table)) - (backward-sexp 1) - (while (= (char-syntax (following-char)) ?\') - (forward-char 1)) - (point)) - (set-syntax-table buffer-syntax))) + (beg (save-excursion + (with-syntax-table lisp-mode-syntax-table + (backward-sexp 1) + (while (= (char-syntax (following-char)) ?\') + (forward-char 1)) + (point)))) (minibuffer-completion-table obarray) (minibuffer-completion-predicate (if (eq (char-after (1- beg)) ?\() @@ -760,12 +756,11 @@ or properties are considered." (goto-char end) (PC-do-completion nil beg end))) -;;; Use the shell to do globbing. -;;; This could now use file-expand-wildcards instead. +;; Use the shell to do globbing. +;; This could now use file-expand-wildcards instead. (defun PC-expand-many-files (name) - (save-excursion - (set-buffer (generate-new-buffer " *Glob Output*")) + (with-current-buffer (generate-new-buffer " *Glob Output*") (erase-buffer) (shell-command (concat "echo " name) t) (goto-char (point-min)) @@ -797,9 +792,9 @@ or properties are considered." (setq files (cdr files))) p)))) -;;; Facilities for loading C header files. This is independent from the -;;; main completion code. See also the variable `PC-include-file-path' -;;; at top of this file. +;; Facilities for loading C header files. This is independent from the +;; main completion code. See also the variable `PC-include-file-path' +;; at top of this file. (defun PC-look-for-include-file () (if (string-match "[\"<]\\([^\"<>]*\\)[\">]?$" (buffer-file-name)) @@ -810,8 +805,7 @@ or properties are considered." new-buf) (kill-buffer (current-buffer)) (if (equal name "") - (save-excursion - (set-buffer (car (buffer-list))) + (with-current-buffer (car (buffer-list)) (save-excursion (beginning-of-line) (if (looking-at @@ -848,8 +842,7 @@ or properties are considered." (if path (setq name (concat (file-name-as-directory (car path)) name)) (error "No such include file: <%s>" name))) - (let ((dir (save-excursion - (set-buffer (car (buffer-list))) + (let ((dir (with-current-buffer (car (buffer-list)) default-directory))) (if (file-exists-p (concat dir name)) (setq name (concat dir name)) @@ -858,8 +851,7 @@ or properties are considered." (if new-buf ;; no need to verify last-modified time for this! (set-buffer new-buf) - (setq new-buf (create-file-buffer name)) - (set-buffer new-buf) + (set-buffer (create-file-buffer name)) (erase-buffer) (insert-file-contents name t)) ;; Returning non-nil with the new buffer current @@ -878,7 +870,7 @@ or properties are considered." env (substring env 0 pos))) path))) -;;; This is adapted from lib-complete.el, by Mike Williams. +;; This is adapted from lib-complete.el, by Mike Williams. (defun PC-include-file-all-completions (file search-path &optional full) "Return all completions for FILE in any directory on SEARCH-PATH. If optional third argument FULL is non-nil, returned pathnames should be |