]> code.delx.au - gnu-emacs/commitdiff
(shell-dynamic-complete-filename): New fun.
authorChong Yidong <cyd@stupidchicken.com>
Thu, 3 Apr 2008 05:13:15 +0000 (05:13 +0000)
committerChong Yidong <cyd@stupidchicken.com>
Thu, 3 Apr 2008 05:13:15 +0000 (05:13 +0000)
(shell-dynamic-complete-functions): Use it.

lisp/shell.el

index 7d20a877811910646c7d5c7e5a4fb923c36cbe8d..67050c97a88da64e328b4096e7637ef078fdecd3 100644 (file)
@@ -186,7 +186,7 @@ This is a fine thing to set in your `.emacs' file.")
     shell-dynamic-complete-environment-variable
     shell-dynamic-complete-command
     shell-replace-by-expanded-directory
-    comint-dynamic-complete-filename)
+    shell-dynamic-complete-filename)
   "List of functions called to perform completion.
 This variable is used to initialize `comint-dynamic-complete-functions' in the
 shell buffer.
@@ -1010,6 +1010,19 @@ See `shell-dynamic-complete-filename'.  Returns t if successful."
          (insert " "))
       success)))
 
+(defun shell-dynamic-complete-filename ()
+  "Dynamically complete the filename at point.
+This completes only if point is at a suitable position for a
+filename argument."
+  (interactive)
+  (let ((opoint (point))
+       (beg (comint-line-beginning-position)))
+    (when (save-excursion
+           (goto-char (if (re-search-backward "[;|&]" beg t)
+                          (match-end 0)
+                        beg))
+           (re-search-forward "[^ \t][ \t]" opoint t))
+      (comint-dynamic-complete-as-filename))))
 
 (defun shell-match-partial-variable ()
   "Return the shell variable at point, or nil if none is found."
@@ -1023,7 +1036,6 @@ See `shell-dynamic-complete-filename'.  Returns t if successful."
        (re-search-forward "\\$?{?[A-Za-z0-9_]*}?" limit)
        (buffer-substring (match-beginning 0) (match-end 0))))))
 
-
 (defun shell-dynamic-complete-environment-variable ()
   "Dynamically complete the environment variable at point.
 Completes if after a variable, i.e., if it starts with a \"$\".