changeset 104841:02b4657a3268

(locate-file-completion-table): Make it provide boundary information, so partial-completion works better.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Fri, 04 Sep 2009 03:18:08 +0000
parents b255a4a2d4f5
children f6e8bae2f54f
files lisp/ChangeLog lisp/files.el
diffstat 2 files changed, 23 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Fri Sep 04 03:09:44 2009 +0000
+++ b/lisp/ChangeLog	Fri Sep 04 03:18:08 2009 +0000
@@ -1,3 +1,8 @@
+2009-09-04  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* files.el (locate-file-completion-table): Make it provide boundary
+	information, so partial-completion works better.
+
 2009-09-04  Leo  <sdl.web@gmail.com>  (tiny change)
 
 	* mail/footnote.el (Footnote-text-under-cursor):
--- a/lisp/files.el	Fri Sep 04 03:09:44 2009 +0000
+++ b/lisp/files.el	Fri Sep 04 03:18:08 2009 +0000
@@ -716,24 +716,34 @@
 
 (defun locate-file-completion-table (dirs suffixes string pred action)
   "Do completion for file names passed to `locate-file'."
-  (if (file-name-absolute-p string)
-      (let ((read-file-name-predicate pred))
-        (read-file-name-internal string nil action))
+  (cond
+   ((file-name-absolute-p string)
+    (let ((read-file-name-predicate pred))
+      (read-file-name-internal string nil action)))
+   ((eq (car-safe action) 'boundaries)
+    (let ((suffix (cdr action)))
+      (list* 'boundaries 
+             (length (file-name-directory string))
+             (let ((x (file-name-directory suffix)))
+               (if x (1- (length x)) (length suffix))))))
+   (t
     (let ((names nil)
 	  (suffix (concat (regexp-opt suffixes t) "\\'"))
-	  (string-dir (file-name-directory string)))
+	  (string-dir (file-name-directory string))
+          (string-file (file-name-nondirectory string)))
       (dolist (dir dirs)
 	(unless dir
 	  (setq dir default-directory))
 	(if string-dir (setq dir (expand-file-name string-dir dir)))
 	(when (file-directory-p dir)
 	  (dolist (file (file-name-all-completions
-			 (file-name-nondirectory string) dir))
-	    (add-to-list 'names (if string-dir (concat string-dir file) file))
+			 string-file dir))
+	    (push file names)
 	    (when (string-match suffix file)
 	      (setq file (substring file 0 (match-beginning 0)))
-	      (push (if string-dir (concat string-dir file) file) names)))))
-      (complete-with-action action names string pred))))
+              (push file names)))))
+      (completion-table-with-context
+       string-dir names string-file pred action)))))
 
 (defun locate-file-completion (string path-and-suffixes action)
   "Do completion for file names passed to `locate-file'.