Avec l'aide de lunaryorn sur reddit , je suppose que j'ai pu comprendre pourquoi vous observez le comportement "bizarre".
Le problème est que vous citez l'expression
'("foo" . (λ () (message "bar")))
Ce qui équivaut à la forme
(cons "foo" '(λ () (message "bar")))
Maintenant, quand emacs ouvre un fichier avec l'extension "foo", il fait quelque chose comme ceci
(funcall '(λ () (message "bar")))
Remarquez la citation supplémentaire, avant (λ
, ce n'est évidemment pas une fonction valide et vous obtenez l'erreur Invalid function: ...
Mais alors pourquoi ça ("foo" . (lambda () (message "bar")))
marche, cela s'explique par l'observation de lunaryorn
Une «liste lambda», c'est-à-dire une liste dont la voiture est lambda, est également une fonction valide
'(lambda () (message "bar"))
Est donc une fonction valide, cela peut être vérifié par le code suivant
(functionp (lambda () "hello")) => t
(functionp (λ () "hello")) => t
(functionp '(lambda () "hello")) => t
(functionp '(λ () "hello")) => nil
La solution serait donc de ne pas citer simplement l'expression à la place
(add-to-list 'auto-mode-alist (cons "foo" (λ () (bar))))
defalias
, mais vous voudrez peut-être vérifierprettify-symbols-mode
, ce qui, entre autres, vous permettra d'afficherlambda
commeλ
sans réellement changer le texte sous-jacent.