Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

affectation dynamique d'un mode dans auto-mode-alist

3 réponses
Avatar
hjuvi
Bonjour,

J'ai besoin de modifier dynamiquement auto-mode-alist, pour ins=E9rer
une r=E8gle sur les fichiers .ref et .new. Je veux que le mode appliqu=E9
pour ces fichiers soit le mode du buffer courant.
Le code ci-dessous ne donne pas le r=E9sultat attendu :

(setq auto-mode-alist (append '(("\\.ref\\'" . major-mode)
("\\.new\\'" . major-
mode)) auto-mode-alist)))

Le probl=E8me, c'est que dans auto-mode-alist, on retrouve major-mode
tel quel, il n'a pas =E9t=E9 "traduit" en c-mode (par exemple).

(("\\.ref\\'" . major-mode)
("\\.new\\'" . major-mode)
[...]

comment r=E9cup=E9rer la valeur de major-mode (et non pas "major-mode") ?


Pour information, j'avais d'abord une m=E9thode plus simple : changer
default-major-mode juste avant de charger le fichier .ref ou .new, et
le r=E9tablir juste apr=E8s. Malheureusement, sur une version d'emacs,
dans un environnement pr=E9cis (que je n'arrive pas =E0 identifier), =E7a
g=E9n=E8re une erreur quand le mode en question est c++-mode (Symbol's
function definition is void: cpp-macro). J'ai donc =E9t=E9 oblig=E9 de me
rabattre sur la m=E9thode auto-mode-alist.
Si quelqu'un a une explication pour le probl=E8me avec default-major-
mode, =E7a m'int=E9resse aussi.

Merci d'avance.

3 réponses

Avatar
Alain Ketterlin
hjuvi writes:

J'ai besoin de modifier dynamiquement auto-mode-alist, pour insérer
une règle sur les fichiers .ref et .new.



J'imagine que t'es sûr de ton coup.

Je veux que le mode appliqué pour ces fichiers soit le mode du buffer
courant. Le code ci-dessous ne donne pas le résultat attendu :

(setq auto-mode-alist (append '((".ref'" . major-mode)
(".new'" . major-
mode)) auto-mode-alist)))



La quote porte sur toute la liste. Regarde "backquote" dans le manuel
elisp.

-- Alain.
Avatar
hjuvi
La quote porte sur toute la liste. Regarde "backquote" dans le manuel
elisp.



Effectivement, j'ai toujours eu un peu de mal avec les listes, et je
ne connaissais pas le sens du quote, dont je me servais souvent pour
faire des listes.
Je m'en suis donc sorti avec :

(push (cons ".ref'" major-mode) auto-mode-alist)
(push (cons ".new'" major-mode) auto-mode-alist)

Merci beaucoup !
Avatar
Vincent Belaïche
(setq auto-mode-alist (append `((".ref'" . ,major-mode)
(".new'" . ,major-mode)) auto-mode-alist))

Alain Ketterlin a écrit :
hjuvi writes:

J'ai besoin de modifier dynamiquement auto-mode-alist, pour insérer
une règle sur les fichiers .ref et .new.



J'imagine que t'es sûr de ton coup.

Je veux que le mode appliqué pour ces fichiers soit le mode du buffer
courant. Le code ci-dessous ne donne pas le résultat attendu :

(setq auto-mode-alist (append '((".ref'" . major-mode)
(".new'" . major-
mode)) auto-mode-alist)))



La quote porte sur toute la liste. Regarde "backquote" dans le manuel
elisp.

-- Alain.