]> code.delx.au - gnu-emacs/commitdiff
(PC-do-completion): Make partial-completion work
authorStefan Monnier <monnier@iro.umontreal.ca>
Fri, 8 Nov 2002 23:39:29 +0000 (23:39 +0000)
committerStefan Monnier <monnier@iro.umontreal.ca>
Fri, 8 Nov 2002 23:39:29 +0000 (23:39 +0000)
with incomplete directory names.

lisp/complete.el

index de58752b63617d890c6b98845cb514b137178722..baa8a5a5f108d3cfb1aa74ddeb4eb1fcec2fe760 100644 (file)
 ;; The regular M-TAB (lisp-complete-symbol) command also supports
 ;; partial completion in this package.
 
-;; File name completion does not do partial completion of directories
-;; on the path, e.g., "/u/b/f" will not complete to "/usr/bin/foo",
-;; but you can put *'s in the path to accomplish this:  "/u*/b*/f".
-;; Stars are required for performance reasons.
-
 ;; In addition, this package includes a feature for accessing include
 ;; files.  For example, `C-x C-f <sys/time.h> RET' reads the file
 ;; /usr/include/sys/time.h.  The variable PC-include-file-path is a
@@ -396,6 +391,18 @@ of `minibuffer-completion-table' and the minibuffer contents.")
                PC-ndelims-regex (concat "[^" PC-delims "]*")
                PC-delims-list (append PC-delims nil)))
 
+      ;; Add wildcards if necessary
+      (let ((dir (file-name-directory str))
+           (file (file-name-nondirectory str)))
+       (while (and (stringp dir) (not (file-directory-p dir)))
+         (setq dir (directory-file-name dir))
+         (setq file (concat (replace-regexp-in-string
+                             PC-delim-regex "*\\&"
+                             (file-name-nondirectory dir))
+                            "*/" file))
+         (setq dir (file-name-directory dir)))
+       (setq str (concat dir file)))
+      
       ;; Look for wildcard expansions in directory name
       (and filename
           (string-match "\\*.*/" str)