Mercurial > emacs
changeset 94217:3a71d408918b
(ffap-read-file-or-url): Do not abuse completing-read's
`predicate' argument to pass non-predicate data.
(ffap-read-url-internal, ffap-read-file-or-url-internal):
Use second arg as proper predicate.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Mon, 21 Apr 2008 21:01:38 +0000 |
parents | 34110d646fc8 |
children | 701d10a19a8f |
files | lisp/ChangeLog lisp/ffap.el |
diffstat | 2 files changed, 27 insertions(+), 23 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Mon Apr 21 20:49:06 2008 +0000 +++ b/lisp/ChangeLog Mon Apr 21 21:01:38 2008 +0000 @@ -1,5 +1,10 @@ 2008-04-21 Stefan Monnier <monnier@iro.umontreal.ca> + * ffap.el (ffap-read-file-or-url): Do not abuse completing-read's + `predicate' argument to pass non-predicate data. + (ffap-read-url-internal, ffap-read-file-or-url-internal): + Use second arg as proper predicate. + * vc-bzr.el (vc-bzr-complete-with-prefix): Remove. (vc-bzr-revision-completion-table): Use completion-table-with-context instead.
--- a/lisp/ffap.el Mon Apr 21 20:49:06 2008 +0000 +++ b/lisp/ffap.el Mon Apr 21 21:01:38 2008 +0000 @@ -922,7 +922,7 @@ (ffap-locate-file name t ffap-bib-path)) (defun ffap-dired (name) - (let ((pt (point)) dir try) + (let ((pt (point)) try) (save-excursion (and (progn (beginning-of-line) @@ -1279,15 +1279,17 @@ (push fnh-elem file-name-handler-alist) (unwind-protect (setq guess - (completing-read - prompt - 'ffap-read-file-or-url-internal - dir - nil - (if dir (cons guess (length dir)) guess) - (list 'file-name-history) - (and buffer-file-name - (abbreviate-file-name buffer-file-name)))) + (let ((default-directory (if dir (expand-file-name dir) + default-directory))) + (completing-read + prompt + 'ffap-read-file-or-url-internal + nil + nil + (if dir (cons guess (length dir)) guess) + (list 'file-name-history) + (and buffer-file-name + (abbreviate-file-name buffer-file-name))))) ;; Remove the special handler manually. We used to just let-bind ;; file-name-handler-alist to preserve its value, but that caused ;; other modifications to be lost (e.g. when Tramp gets loaded @@ -1299,26 +1301,24 @@ ;; Note: upcoming url.el package ought to handle this automatically. guess)) -(defun ffap-read-url-internal (string dir action) +(defun ffap-read-url-internal (string pred action) "Complete url's from history, treating given string as valid." (let ((hist (ffap-soft-value "url-global-history-hash-table"))) (cond ((not action) - (or (try-completion string hist) string)) + (or (try-completion string hist pred) string)) ((eq action t) - (or (all-completions string hist) (list string))) + (or (all-completions string hist pred) (list string))) ;; action == lambda, documented where? Tests whether string is a ;; valid "match". Let us always say yes. (t t)))) -(defun ffap-read-file-or-url-internal (string dir action) - (unless dir - (setq dir default-directory)) - (unless string +(defun ffap-read-file-or-url-internal (string pred action) + (unless string ;Why would this ever happen? (setq string default-directory)) (if (ffap-url-p string) - (ffap-read-url-internal string dir action) - (read-file-name-internal string dir action))) + (ffap-read-url-internal string pred action) + (read-file-name-internal string pred action))) ;; The rest of this page is just to work with package complete.el. ;; This code assumes that you load ffap.el after complete.el. @@ -1523,7 +1523,7 @@ (x-popup-menu t (list "" (cons title - (mapcar (function (lambda (i) (cons (car i) i))) + (mapcar (lambda (i) (cons (car i) i)) alist)))))) ;; minibuffer with completion buffer: (t @@ -1537,8 +1537,7 @@ nil))) (sit-for 0) ; redraw original screen ;; Convert string to its entry, or else the default: - (setq choice (or (assoc choice alist) (car alist)))) - ) + (setq choice (or (assoc choice alist) (car alist))))) (if choice (funcall cont choice) (message "No choice made!") ; possible with menus @@ -1569,7 +1568,7 @@ ffap-menu-text-plist) (message "Scanning...%2d%% <%s>" (/ (* 100 (- (point) (point-min))) range) item))) - (or mod (set-buffer-modified-p nil)))) + (or mod (restore-buffer-modified-p nil)))) (message "Scanning...done") ;; Remove duplicates. (setq ffap-menu-alist ; sort by item