[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#20709: 25.0.50; anonymous functions in `auto-mode-alist'
From: |
Michael Heerdegen |
Subject: |
bug#20709: 25.0.50; anonymous functions in `auto-mode-alist' |
Date: |
Mon, 01 Jun 2015 17:58:25 +0200 |
Hello,
the doc of `auto-mode-alist' doesn't say that the mode functions
specified must be named functions. That's good IMO, since using
anonymous functions in the alist e.g. while let-binding it can sometimes
be useful.
But this is buggy. Try this:
--8<---------------cut here---------------start------------->8---
;; -*- lexical-binding: t -*-
(setq auto-mode-alist
`((".*" . ,(lambda ()
(emacs-lisp-mode)
'and-do-something-in-addition))))
--8<---------------cut here---------------end--------------->8---
Save it in a file, and load it (uncompiled) so that
auto-mode-alist
=> ((".*" closure (t) nil (emacs-lisp-mode) (quote
and-do-something-in-addition)))
Now open any file. You get:
File mode specification error: (void-function closure)
The problem is these lines in the defun of `set-auto-mode' starting from
line 2871 in files.el:
--8<---------------cut here---------------start------------->8---
(if (and mode
(consp mode)
(cadr mode))
(setq mode (car mode)
...
--8<---------------cut here---------------end--------------->8---
i.e., the value in the alist pair is not tested whether it is a
function, and the (REGEXP FUNCTION NON-NIL) case is assumed, which is
wrong.
Thanks,
Michael.
In GNU Emacs 25.0.50.4 (x86_64-unknown-linux-gnu, GTK+ Version 3.14.5)
of 2015-05-30 on drachen
Windowing system distributor `The X.Org Foundation', version 11.0.11701000
System Description: Debian GNU/Linux testing (stretch)
- bug#20709: 25.0.50; anonymous functions in `auto-mode-alist',
Michael Heerdegen <=