"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)
(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
(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)))
: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)
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)