summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
Diffstat (limited to 'lisp')
-rw-r--r--lisp/progmodes/executable.el26
1 files changed, 19 insertions, 7 deletions
diff --git a/lisp/progmodes/executable.el b/lisp/progmodes/executable.el
index 454090d508b..49028f7e7b7 100644
--- a/lisp/progmodes/executable.el
+++ b/lisp/progmodes/executable.el
@@ -136,21 +136,33 @@ This can be included in `font-lock-keywords' by modes that call `executable'.")
See `compilation-error-regexp-alist'.")
;; The C function openp slightly modified would do the trick fine
+(defvar executable-binary-suffixes
+ (if (memq system-type '(ms-dos windows-nt))
+ '(".exe" ".com" ".bat" ".cmd" ".btm" "")
+ '("")))
(defun executable-find (command)
"Search for COMMAND in exec-path and return the absolute file name.
Return nil if COMMAND is not found anywhere in `exec-path'."
(let ((list exec-path)
file)
(while list
- (setq list (if (and (setq file (expand-file-name command (car list)))
- (file-executable-p file)
- (not (file-directory-p file)))
- nil
- (setq file nil)
- (cdr list))))
+ (setq list
+ (if (and (setq file (expand-file-name command (car list)))
+ (let ((suffixes executable-binary-suffixes)
+ candidate)
+ (while suffixes
+ (setq candidate (concat file (car suffixes)))
+ (if (and (file-executable-p candidate)
+ (not (file-directory-p candidate)))
+ (setq suffixes nil)
+ (setq suffixes (cdr suffixes))
+ (setq candidate nil)))
+ (setq file candidate)))
+ nil
+ (setq file nil)
+ (cdr list))))
file))
-
(defun executable-chmod ()
"This gets called after saving a file to assure that it be executable.
You can set the absolute or relative mode in variable `executable-chmod' for