aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKim F. Storm2006-12-19 09:04:30 +0000
committerKim F. Storm2006-12-19 09:04:30 +0000
commit10ffa2a1cefca36dd67ef7cf4dfa1e7b143e87d3 (patch)
treeccb15ae73c4761bee4877f6d5dbf83a0f11d6edd
parentbb8792de32d885dbcc0cb6850e1414b5df486c3a (diff)
downloademacs-10ffa2a1cefca36dd67ef7cf4dfa1e7b143e87d3.tar.gz
emacs-10ffa2a1cefca36dd67ef7cf4dfa1e7b143e87d3.zip
(magic-mode-alist): Allow matching file type by
calling a function at bob. Check for image types by calling image-type-from-buffer. Suggested by Juanma Barranquero. (set-auto-mode): Do it.
-rw-r--r--lisp/files.el16
1 files changed, 10 insertions, 6 deletions
diff --git a/lisp/files.el b/lisp/files.el
index 6c9b9a7542e..71f33e5f1a1 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -2115,7 +2115,8 @@ of the regular expression. The mode is then determined as the mode
2115associated with that interpreter in `interpreter-mode-alist'.") 2115associated with that interpreter in `interpreter-mode-alist'.")
2116 2116
2117(defvar magic-mode-alist 2117(defvar magic-mode-alist
2118 `(;; The < comes before the groups (but the first) to reduce backtracking. 2118 `((image-type-from-buffer . image-mode)
2119 ;; The < comes before the groups (but the first) to reduce backtracking.
2119 ;; TODO: UTF-16 <?xml may be preceded by a BOM 0xff 0xfe or 0xfe 0xff. 2120 ;; TODO: UTF-16 <?xml may be preceded by a BOM 0xff 0xfe or 0xfe 0xff.
2120 ;; We use [ \t\n] instead of `\\s ' to make regex overflow less likely. 2121 ;; We use [ \t\n] instead of `\\s ' to make regex overflow less likely.
2121 (,(let* ((incomment-re "\\(?:[^-]\\|-[^-]\\)") 2122 (,(let* ((incomment-re "\\(?:[^-]\\|-[^-]\\)")
@@ -2134,10 +2135,11 @@ associated with that interpreter in `interpreter-mode-alist'.")
2134 ("%![^V]" . ps-mode) 2135 ("%![^V]" . ps-mode)
2135 ("# xmcd " . conf-unix-mode)) 2136 ("# xmcd " . conf-unix-mode))
2136 "Alist of buffer beginnings vs. corresponding major mode functions. 2137 "Alist of buffer beginnings vs. corresponding major mode functions.
2137Each element looks like (REGEXP . FUNCTION). After visiting a file, 2138Each element looks like (REGEXP . FUNCTION) or (MATCH-FUNCTION . FUNCTION).
2138if REGEXP matches the text at the beginning of the buffer, 2139After visiting a file, if REGEXP matches the text at the beginning of the
2139`normal-mode' will call FUNCTION rather than allowing `auto-mode-alist' 2140buffer, or calling MATCH-FUNCTION returns non-nil, `normal-mode' will
2140to decide the buffer's major mode. 2141call FUNCTION rather than allowing `auto-mode-alist' to decide the buffer's
2142major mode.
2141 2143
2142If FUNCTION is nil, then it is not called. (That is a way of saying 2144If FUNCTION is nil, then it is not called. (That is a way of saying
2143\"allow `auto-mode-alist' to decide for these files.\")") 2145\"allow `auto-mode-alist' to decide for these files.\")")
@@ -2225,7 +2227,9 @@ only set the major mode, if that would change it."
2225 (+ (point-min) magic-mode-regexp-match-limit))) 2227 (+ (point-min) magic-mode-regexp-match-limit)))
2226 (assoc-default nil magic-mode-alist 2228 (assoc-default nil magic-mode-alist
2227 (lambda (re dummy) 2229 (lambda (re dummy)
2228 (looking-at re)))))) 2230 (if (functionp re)
2231 (funcall re)
2232 (looking-at re)))))))
2229 (set-auto-mode-0 done keep-mode-if-same) 2233 (set-auto-mode-0 done keep-mode-if-same)
2230 ;; Compare the filename against the entries in auto-mode-alist. 2234 ;; Compare the filename against the entries in auto-mode-alist.
2231 (if buffer-file-name 2235 (if buffer-file-name