Emacs 24.4 made an incompatible change to interpreter-mode-alist, treating its members now as regular expressions and no longer as simple strings (http://git.savannah.gnu.org/cgit/emacs.git/commit/?id=1af4c2203ce7954c089133234ba80e6272ce9458). I want to replace:

(add-to-list 'interpreter-mode-alist
             ;; Match php, php-3, php5, php7, php5.5, php-7.0.1, etc.
             (cons "php\\(?:-?[3457]\\(?:\\.[0-9]+\\)*\\)?" 'php-mode))

(which works fine with Emacs 24.4 and newer) with compatibility code that, depending on the version of Emacs, adds either a regular expression or strings.

What is the preferred way to test if the Emacs version in use is 24.4 or newer? (if (version< emacs-version "24.4") …)?

  • Using emacs-version with the version* functions is sane, yes. – phils Sep 7 '17 at 2:33
  • You may also be interested in playing with version-list-... and version-to-list; e.g., (unless (version-list-<= (version-to-list emacs-version) '(25 2 50 1)) ...) – lawlist Sep 7 '17 at 5:51
  • @phils: Could you please post your answer as an answer? You can use my code at github.com/scfc/php-mode/commit/… to mirror the code in the question. – Tim Landscheidt Sep 8 '17 at 4:17
  • @lawlist: Thanks, that's interesting. For my use (simple) case, I'll stick with version<. – Tim Landscheidt Sep 8 '17 at 4:18
  • @TimLandscheidt, sure; done. – phils Sep 9 '17 at 4:02

Using emacs-version with the various version* functions is sane, yes.

  • version=
  • version<
  • version<=

(These are convenience wrappers which use the version-list functionality behind the scenes.)

By way of example, the following is the code Tim ended up using:

(if (version< emacs-version "24.4")
    (dolist (i '("php" "php3" "php5" "php7" "php-5" "php-5.5" "php7.0.1"))
      (add-to-list 'interpreter-mode-alist (cons i 'php-mode)))
  (add-to-list 'interpreter-mode-alist
               ;; Match php, php-3, php5, php7, php5.5, php-7.0.1, etc.
               (cons "php\\(?:-?[3457]\\(?:\\.[0-9]+\\)*\\)?" 'php-mode)))
| improve this answer | |
  • n.b. The variables emacs-major-version and emacs-minor-version were also mentioned in another answer (which has unfortunately been deleted), and these might be useful alternatives in some situations. – phils Sep 9 '17 at 4:07

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.