Commit c907d156 authored by Richard M. Stallman's avatar Richard M. Stallman
Browse files

(interpreter-mode-alist): New variable.

(set-auto-mode): Use that for chosing a mode.
parent 6a588f9a
...@@ -839,6 +839,20 @@ If the element has the form (REGEXP FUNCTION), then after calling ...@@ -839,6 +839,20 @@ If the element has the form (REGEXP FUNCTION), then after calling
FUNCTION, we delete the suffix that matched REGEXP and search the list FUNCTION, we delete the suffix that matched REGEXP and search the list
again for another match.") again for another match.")
(defconst interpreter-mode-alist
'(("perl" . perl-mode)
("scope" . tcl-mode)
("wish" . tcl-mode)
("shell" . tcl-mode)
("form" . tcl-mode)
("tcl" . tcl-mode))
"Alist mapping interpreter names to major modes.
This alist applies to files whose first line starts with `#!'.
Each element looks like (INTERPRETER . MODE).
The car of each element is compared with
the name of the interpreter specified in the first line.
If it matches, mode MODE is selected.")
(defconst inhibit-local-variables-regexps '("\\.tar$") (defconst inhibit-local-variables-regexps '("\\.tar$")
"List of regexps; if one matches a file name, don't look for local vars.") "List of regexps; if one matches a file name, don't look for local vars.")
...@@ -928,7 +942,25 @@ If `enable-local-variables' is nil, this function does not check for a ...@@ -928,7 +942,25 @@ If `enable-local-variables' is nil, this function does not check for a
(setq mode (cdr (car alist)) (setq mode (cdr (car alist))
keep-going nil))) keep-going nil)))
(setq alist (cdr alist))) (setq alist (cdr alist)))
(if mode (funcall mode))))))))) (if mode
(funcall mode)
;; If we can't deduce a mode from the file name,
;; look for an interpreter specified in the first line.
(let ((interpreter
(save-excursion
(goto-char (point-min))
(if (looking-at "#! *")
(progn
(goto-char (match-end 0))
(buffer-substring (point)
(progn (end-of-line) (point))))
"")))
elt)
;; Map interpreter name to a mode.
(setq elt (assoc (file-name-nondirectory interpreter)
interpreter-mode-alist))
(if elt
(funcall (cdr elt))))))))))))
(defun hack-local-variables-prop-line () (defun hack-local-variables-prop-line ()
;; Set local variables specified in the -*- line. ;; Set local variables specified in the -*- line.
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment