Mercurial > emacs
diff lisp/files.el @ 75003:bb4f2b144d6f
(auto-mode-case-fold): New defcustom.
(set-auto-mode): If non-nil, perform second case-sensitive pass
through auto-mode-alist if first pass failed.
author | Kim F. Storm <storm@cua.dk> |
---|---|
date | Sun, 31 Dec 2006 00:29:49 +0000 |
parents | 2711fe24b0e3 |
children | 20d27ba582d9 |
line wrap: on
line diff
--- a/lisp/files.el Sat Dec 30 23:03:03 2006 +0000 +++ b/lisp/files.el Sun Dec 31 00:29:49 2006 +0000 @@ -1876,6 +1876,16 @@ (if (fboundp 'ucs-set-table-for-input) ; don't lose when building (ucs-set-table-for-input))) +(defcustom auto-mode-case-fold nil + "Non-nil means to try second pass through `auto-mode-alist'. +This means that if the first case-sensitive search through the alist fails +to find a matching major mode, a second case-insensitive search is made. +On systems with case-insensitive file names, this variable is ignored, +since only a single case-sensitive search through the alist is made." + :group 'files + :version "22.1" + :type 'boolean) + (defvar auto-mode-alist ;; Note: The entries for the modes defined in cc-mode.el (c-mode, ;; c++-mode, java-mode and more) are added through autoload @@ -2238,15 +2248,29 @@ (setq name (file-name-sans-versions name)) (while name ;; Find first matching alist entry. - (let ((case-fold-search - (memq system-type '(vax-vms windows-nt cygwin)))) - (if (and (setq mode (assoc-default name auto-mode-alist - 'string-match)) - (consp mode) - (cadr mode)) - (setq mode (car mode) - name (substring name 0 (match-beginning 0))) - (setq name))) + (setq mode + (if (memq system-type '(vax-vms windows-nt cygwin)) + ;; System is case-insensitive. + (let ((case-fold-search t)) + (assoc-default name auto-mode-alist + 'string-match)) + ;; System is case-sensitive. + (or + ;; First match case-sensitively. + (let ((case-fold-search nil)) + (assoc-default name auto-mode-alist + 'string-match)) + ;; Fallback to case-insensitive match. + (and auto-mode-case-fold + (let ((case-fold-search t)) + (assoc-default name auto-mode-alist + 'string-match)))))) + (if (and mode + (consp mode) + (cadr mode)) + (setq mode (car mode) + name (substring name 0 (match-beginning 0))) + (setq name)) (when mode (set-auto-mode-0 mode keep-mode-if-same)))))))))