summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Heuer <kwzh@gnu.org>1995-12-15 21:11:52 +0000
committerKarl Heuer <kwzh@gnu.org>1995-12-15 21:11:52 +0000
commitdb32507afeccacae0462b12b818b19fc96a7552e (patch)
tree8902fdc07219c70ac404be88c56ca5d344c8e8b3
parentaed59843bb39bf3ffecea26703d88528de3bf7c4 (diff)
downloademacs-db32507afeccacae0462b12b818b19fc96a7552e.tar.gz
(set-auto-mode): Recognize `#!/bin/env INTERPRETER' hack.
-rw-r--r--lisp/files.el8
1 files changed, 5 insertions, 3 deletions
diff --git a/lisp/files.el b/lisp/files.el
index 0f8f69c6bc4..11ed8883cb3 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -1108,12 +1108,14 @@ If `enable-local-variables' is nil, this function does not check for a
(funcall mode)
;; If we can't deduce a mode from the file name,
;; look for an interpreter specified in the first line.
+ ;; As a special case, allow for things like "#!/bin/env perl",
+ ;; which finds the interpreter anywhere in $PATH.
(let ((interpreter
(save-excursion
(goto-char (point-min))
- (if (looking-at "#! *\\([^ \t\n]+\\)")
- (buffer-substring (match-beginning 1)
- (match-end 1))
+ (if (looking-at "#! *\\([^ \t\n]*/bin/env +\\)?\\([^ \t\n]+\\)")
+ (buffer-substring (match-beginning 2)
+ (match-end 2))
"")))
elt)
;; Map interpreter name to a mode.