J'ai ceci par défaut dans mon auto-mode-alist
:
("\\.js\\'" . javascript-mode)
(même avec emacs -Q
). Je voudrais remplacer js2-mode
par javascript-mode
. Bien sûr, je pourrais utiliser encore assq-delete-all
et add-to-list
encore, mais je me demande s'il n'y a pas de meilleur moyen.
Edit: je ne veux pas explicitement utiliser Customize, je préfère créer moi- init.el
même.
elisp
association-lists
Mbork
la source
la source
Utilisez
setf
pour changer la valeur en place:Si vous souhaitez remplacer une valeur dans la liste,
setf
vous devez utiliser le mécanisme généralisé. Pour la manière plus idiomatique de traiter leauto-mode-alist
, voir la réponse de @ Drew (et son explication de l'observation).la source
setf
possible de le savoir devrait vraiment être montrée aux gars de Java.)setf
on l'utilise tout le temps dans Common Lisp, mais on le croise beaucoup moins souvent dans elisp.setf
si rarement, comparé à CL ...Le moyen le plus rapide de changer réellement la cellule contre est probablement
setcdr
Il est à noter que ce
setf
n’est pas disponible dans les versions précédentes d’Emacsensetcdr
.la source
setf
?L'OP demande une solution qui gère les listes contenant des clés de chaîne. Pour gérer cela, voir cette question . Si, par hasard, vous n’avez besoin que de gérer les listes avec des clés de symbole, à partir d’Emacs 25, vous pouvez utiliser:
pour remplacer un cdr. Si vous avez accès à Emacs 26, cette technique fonctionne avec les clés de chaîne, comme suit:
Notez qu'il existe également dans Emacs 26 d'autres moyens de gérer les clés de chaîne; voir cette question comme mentionné ci-dessus.
la source
(setf (alist-get "\\.js\\'" auto-mode-alist nil nil #'equal) 'js2-mode)
devrait fonctionner (nécessite Emacs 26 cependant).alist-get
avec la chaîne"\\.js\\'"
, maisalist-get
est basé surassq
, donc cela ne fonctionnera pas avec une chaîne comme vous le prétendez dans votre réponse.Si vous savez que vous n'utiliserez plus le mode javascript, laissez la fonction auto-mode-alist intacte et ajoutez-la à votre fichier init.el.
la source
javascript-mode
vraiment,javascript-mode
c’est uniquement un alias pourjs-mode
(par défaut) et cela a été fait spécifiquement pour que les utilisateurs puissent faire ce que vous suggérez s’ils le préfèrentjs2-mode
(sans perdre la possibilité d’utiliserjs-mode
s’ils le souhaitent).js-mode
(contrairement à ce qui se passeperl-mode
par exemple).