emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master 3c3eb1d: PATH- and completion-related fixes in Eshe


From: Eli Zaretskii
Subject: [Emacs-diffs] master 3c3eb1d: PATH- and completion-related fixes in Eshell on MS-Windows
Date: Wed, 29 Apr 2015 17:53:30 +0000

branch: master
commit 3c3eb1d5f2f56bc8e49ae40881a543fbddf8f312
Author: Eli Zaretskii <address@hidden>
Commit: Eli Zaretskii <address@hidden>

    PATH- and completion-related fixes in Eshell on MS-Windows
    
    * lisp/eshell/esh-ext.el (eshell-search-path): When running on
    MS-Windows, prepend "." to list of directories produced from PATH,
    as Windows always implicitly searches the current directory first.
    (eshell-force-execution): Make it have a non-nil default value on
    MS-Windows and MS-DOS.
    * lisp/eshell/em-cmpl.el (eshell-complete-commands-list): If
    eshell-force-execution is non-nil, complete on readable files and
    directories, not only executables.  When running on MS-Windows,
    prepend "." to list of directories produced from PATH, as Windows
    always implicitly searches the current directory first.
---
 lisp/eshell/em-cmpl.el |   10 ++++++++--
 lisp/eshell/esh-ext.el |   17 ++++++++++-------
 2 files changed, 18 insertions(+), 9 deletions(-)

diff --git a/lisp/eshell/em-cmpl.el b/lisp/eshell/em-cmpl.el
index dbea9e5..93b275e 100644
--- a/lisp/eshell/em-cmpl.el
+++ b/lisp/eshell/em-cmpl.el
@@ -405,7 +405,9 @@ to writing a completion function."
   "Generate list of applicable, visible commands."
   (let ((filename (pcomplete-arg)) glob-name)
     (if (file-name-directory filename)
-       (pcomplete-executables)
+        (if eshell-force-execution
+            (pcomplete-dirs-or-entries nil 'file-readable-p)
+          (pcomplete-executables))
       (if (and (> (length filename) 0)
               (eq (aref filename 0) eshell-explicit-command-char))
          (setq filename (substring filename 1)
@@ -416,6 +418,8 @@ to writing a completion function."
                   (expand-file-name default-directory)))
             (path "") (comps-in-path ())
             (file "") (filepath "") (completions ()))
+        (if (eshell-under-windows-p)
+            (push "." paths))
        ;; Go thru each path in the search path, finding completions.
        (while paths
          (setq path (file-name-as-directory
@@ -431,7 +435,9 @@ to writing a completion function."
            (if (and (not (member file completions)) ;
                     (or (string-equal path cwd)
                         (not (file-directory-p filepath)))
-                    (file-executable-p filepath))
+                     (if eshell-force-execution
+                         (file-readable-p filepath)
+                       (file-executable-p filepath)))
                (setq completions (cons file completions)))
            (setq comps-in-path (cdr comps-in-path)))
          (setq paths (cdr paths)))
diff --git a/lisp/eshell/esh-ext.el b/lisp/eshell/esh-ext.el
index 0b25b31..91c4f4b 100644
--- a/lisp/eshell/esh-ext.el
+++ b/lisp/eshell/esh-ext.el
@@ -60,14 +60,15 @@ loaded into memory, thus beginning a new process."
   :type '(repeat string)
   :group 'eshell-ext)
 
-(defcustom eshell-force-execution nil
-  "If non-nil, try to execute binary files regardless of permissions.
+(defcustom eshell-force-execution
+  (not (null (memq system-type '(windows-nt ms-dos))))
+  "If non-nil, try to execute files regardless of execute permissions.
 This can be useful on systems like Windows, where the operating system
-doesn't happen to honor the permission bits in certain cases; or in
-cases where you want to associate an interpreter with a particular
-kind of script file, but the language won't let you but a '#!'
-interpreter line in the file, and you don't want to make it executable
-since nothing else but Eshell will be able to understand
+doesn't support the execution bit for shell scripts; or in cases where
+you want to associate an interpreter with a particular kind of script
+file, but the language won't let you but a '#!' interpreter line in
+the file, and you don't want to make it executable since nothing else
+but Eshell will be able to understand
 `eshell-interpreter-alist'."
   :type 'boolean
   :group 'eshell-ext)
@@ -78,6 +79,8 @@ since nothing else but Eshell will be able to understand
       name
     (let ((list (eshell-parse-colon-path eshell-path-env))
          suffixes n1 n2 file)
+      (if (eshell-under-windows-p)
+          (push "." list))
       (while list
        (setq n1 (concat (car list) name))
        (setq suffixes eshell-binary-suffixes)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]