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