From 2a08047aed0017cc2b639e189fc3b5d41c46fcbd Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 10 Sep 2013 23:44:35 -0700 Subject: [PATCH] Improve previous interpreter-mode-alist change * lisp/files.el (interpreter-mode-alist): Remove \\` \\' parts. (set-auto-mode): Don't regexp-quote elements. * lisp/progmodes/python.el (interpreter-mode-alist): Remove \\` \\'. * lisp/progmodes/cc-mode.el (interpreter-mode-alist): * lisp/progmodes/ruby-mode.el (interpreter-mode-alist): Revert previous change. * etc/NEWS: Update. --- etc/NEWS | 8 ++--- lisp/ChangeLog | 9 +++++ lisp/files.el | 65 +++++++++++++++---------------------- lisp/progmodes/cc-mode.el | 7 ++-- lisp/progmodes/python.el | 2 +- lisp/progmodes/ruby-mode.el | 3 +- 6 files changed, 47 insertions(+), 47 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index 929c86a7ba6..a5da8eaa893 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -616,11 +616,9 @@ Formerly it returned a list (-1 LOW USEC PSEC), but this was ambiguous in the presence of files with negative time stamps. ** The cars of the elements in `interpreter-mode-alist' are now treated -as regexps rather than literal strings. For the time being, any -element whose car does not start with "\\" is still treated as a -literal string, so this change should not cause any incompatibilities -if you have code that just adds elements to the list, only if you are -actually using interpreter-mode-alist for something. +as regexps rather than literal strings. Technically this is an +incompatible change, but unless you are using interpreter-mode-alist +for something (not just adding elements to it), it ought not to affect you. * Lisp Changes in Emacs 24.4 diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e1f1aaa1888..89610870f10 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,12 @@ +2013-09-11 Glenn Morris + + * files.el (interpreter-mode-alist): Remove \\` \\' parts. + (set-auto-mode): Don't regexp-quote elements. + * progmodes/python.el (interpreter-mode-alist): Remove \\` \\'. + * progmodes/cc-mode.el (interpreter-mode-alist): + * progmodes/ruby-mode.el (interpreter-mode-alist): + Revert previous change. + 2013-09-11 Stefan Monnier * play/snake.el (snake-mode): diff --git a/lisp/files.el b/lisp/files.el index 2315448c549..5d8fbda6154 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -2447,43 +2447,34 @@ and `magic-mode-alist', which determines modes based on file contents.") (mapcar (lambda (l) (cons (purecopy (car l)) (cdr l))) - '(("\\`\\(mini\\)?perl5?\\'" . perl-mode) - ("\\`wishx?\\'" . tcl-mode) - ("\\`tcl\\(sh\\)?\\'" . tcl-mode) - ("\\`expect\\'" . tcl-mode) - ("\\`scm\\'" . scheme-mode) - ("\\`[acjkwz]sh\\'" . sh-mode) - ("\\`bash2?\\'" . sh-mode) - ("\\`dtksh\\'" . sh-mode) - ("\\`es\\'" . sh-mode) - ("\\`itcsh\\'" . sh-mode) - ("\\`oash\\'" . sh-mode) - ("\\`pdksh\\'" . sh-mode) - ("\\`rbash\\'" . sh-mode) - ("\\`rc\\'" . sh-mode) - ("\\`rpm\\'" . sh-mode) - ("\\`sh5?\\'" . sh-mode) - ("\\`tcsh\\'" . sh-mode) - ("\\`wksh\\'" . sh-mode) - ("\\`tail\\'" . text-mode) - ("\\`more\\'" . text-mode) - ("\\`less\\'" . text-mode) - ("\\`pg\\'" . text-mode) - ("\\`make\\'" . makefile-gmake-mode) ; Debian uses this - ("\\`guile\\'" . scheme-mode) - ("\\`clisp\\'" . lisp-mode) - ("\\`emacs\\'" . emacs-lisp-mode))) + '(("\\(mini\\)?perl5?" . perl-mode) + ("wishx?" . tcl-mode) + ("tcl\\(sh\\)?" . tcl-mode) + ("expect" . tcl-mode) + ("scm" . scheme-mode) + ("[acjkwz]sh" . sh-mode) + ("r?bash2?" . sh-mode) + ("\\(dt\\|pd\\|w\\)ksh" . sh-mode) + ("es" . sh-mode) + ("i?tcsh" . sh-mode) + ("oash" . sh-mode) + ("rc" . sh-mode) + ("rpm" . sh-mode) + ("sh5?" . sh-mode) + ("tail" . text-mode) + ("more" . text-mode) + ("less" . text-mode) + ("pg" . text-mode) + ("make" . makefile-gmake-mode) ; Debian uses this + ("guile" . scheme-mode) + ("clisp" . lisp-mode) + ("emacs" . emacs-lisp-mode))) "Alist mapping interpreter names to major modes. This is used for files whose first lines match `auto-mode-interpreter-regexp'. Each element looks like (REGEXP . MODE). -If REGEXP matches the name (minus any directory part) of the interpreter -specified in the first line of a script, enable major mode MODE. - -Emacs versions earlier than 24.4 treat the car of each element as a -literal string that must match the entire name, rather than a regexp. -For backwards compatibility, any REGEXP that does not begin with \"\\\\\" -continues to be treated in this way. This behavior may be removed in -future and should not be relied upon. +If \\\\`REGEXP\\\\' matches the name (minus any directory part) of +the interpreter specified in the first line of a script, enable +major mode MODE. See also `auto-mode-alist'.") @@ -2687,13 +2678,11 @@ we don't actually set it to the same mode the buffer already has." ;; same time. (setq done (assoc-default (file-name-nondirectory mode) - ;; Backwards compat: if car of i-m-alist does not start - ;; with "\\", treat as literal string. (mapcar (lambda (e) - (if (string-match-p "\\`\\\\" (car e)) + (if (string-match-p "\\`\\\\`" (car e)) e (cons - (format "\\`%s\\'" (regexp-quote (car e))) + (format "\\`%s\\'" (car e)) (cdr e)))) interpreter-mode-alist) #'string-match-p)) diff --git a/lisp/progmodes/cc-mode.el b/lisp/progmodes/cc-mode.el index bffc5b95d25..e977a415d62 100644 --- a/lisp/progmodes/cc-mode.el +++ b/lisp/progmodes/cc-mode.el @@ -1555,7 +1555,7 @@ Key bindings: (cons "Pike" (c-lang-const c-mode-menu pike))) ;;;###autoload (add-to-list 'auto-mode-alist '("\\.\\(u?lpc\\|pike\\|pmod\\(\\.in\\)?\\)\\'" . pike-mode)) -;;;###autoload (add-to-list 'interpreter-mode-alist '("\\`pike\\'" . pike-mode)) +;;;###autoload (add-to-list 'interpreter-mode-alist '("pike" . pike-mode)) ;;;###autoload (define-derived-mode pike-mode prog-mode "Pike" @@ -1589,7 +1589,10 @@ Key bindings: ;; Support for AWK ;;;###autoload (add-to-list 'auto-mode-alist '("\\.awk\\'" . awk-mode)) -;;;###autoload (add-to-list 'interpreter-mode-alist '("\\`[gmn]?awk\\'" . awk-mode)) +;;;###autoload (add-to-list 'interpreter-mode-alist '("awk" . awk-mode)) +;;;###autoload (add-to-list 'interpreter-mode-alist '("mawk" . awk-mode)) +;;;###autoload (add-to-list 'interpreter-mode-alist '("nawk" . awk-mode)) +;;;###autoload (add-to-list 'interpreter-mode-alist '("gawk" . awk-mode)) (c-define-abbrev-table 'awk-mode-abbrev-table '(("else" "else" c-electric-continued-statement 0) diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index 5eecc347f03..5f919bf495f 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -225,7 +225,7 @@ ;;;###autoload (add-to-list 'auto-mode-alist (cons (purecopy "\\.py\\'") 'python-mode)) ;;;###autoload -(add-to-list 'interpreter-mode-alist (cons (purecopy "\\`python[0-9.]*\\'") 'python-mode)) +(add-to-list 'interpreter-mode-alist (cons (purecopy "python[0-9.]*") 'python-mode)) (defgroup python nil "Python Language's flying circus support for Emacs." diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el index 9dc2c4fb6c9..0f868255589 100644 --- a/lisp/progmodes/ruby-mode.el +++ b/lisp/progmodes/ruby-mode.el @@ -1968,7 +1968,8 @@ The variable `ruby-indent-level' controls the amount of indentation. "\\)\\'")) 'ruby-mode)) ;;;###autoload -(add-to-list 'interpreter-mode-alist (cons (purecopy "\\`\\(rbx\\|j?ruby\\(1\\.[89]\\)?\\)\\'") 'ruby-mode)) +(dolist (name (list "ruby" "rbx" "jruby" "ruby1.9" "ruby1.8")) + (add-to-list 'interpreter-mode-alist (cons (purecopy name) 'ruby-mode))) (provide 'ruby-mode) -- 2.39.2