Tengo esto por defecto en mi auto-mode-alist
:
("\\.js\\'" . javascript-mode)
(incluso con emacs -Q
). Me gustaría sustituir js2-mode
por javascript-mode
. Por supuesto, podría usar assq-delete-all
y luego add-to-list
otra vez, pero me pregunto si no hay una mejor manera.
Editar: explícitamente no quiero usar Personalizar, prefiero crear mi propio init.el
.
elisp
association-lists
mbork
fuente
fuente
Use
setf
para cambiar el valor en el lugar:Si desea reemplazar un valor en la lista, entonces
setf
es la maquinaria generalizada que necesita para hacerlo. Para la forma más idiomática de lidiar con estoauto-mode-alist
, vea la respuesta de @ Drew (y su explicación sobre el sombreado)fuente
setf
poder realmente debería mostrarse a los chicos de Java.)setf
se usa todo el tiempo en Common Lisp, pero te encuentras con mucha menos frecuencia en elisp.setf
tan raramente, en comparación con CL ...La forma más rápida de cambiar realmente la celda de contras es probablemente
setcdr
Vale la pena señalar que
setf
no está disponible en Emacsen anterior, pero losetcdr
está.fuente
setf
?El OP solicita una solución que maneje las listas que tienen claves de cadena. Para manejar eso, vea esta pregunta . Si por casualidad solo necesita manejar listas con teclas de símbolos, entonces a partir de Emacs 25 puede usar:
para reemplazar un cdr. Si tiene acceso a Emacs 26, esta técnica funciona con las teclas de cadena, de la siguiente manera:
Tenga en cuenta que también hay otras formas en Emacs 26 para manejar claves de cadena; vea esta pregunta como se mencionó anteriormente.
fuente
(setf (alist-get "\\.js\\'" auto-mode-alist nil nil #'equal) 'js2-mode)
debería funcionar (aunque requiere Emacs 26).alist-get
la cadena"\\.js\\'"
, peroalist-get
se basa en ellaassq
, por lo que no funcionará con una cadena como afirma en su respuesta.Si sabe que no volverá a usar javascript-mode nunca más, deje la lista de modo automático intacta y agregue a su init.el
fuente
javascript-mode
, realmente:javascript-mode
es solo un alias parajs-mode
(por defecto) y se hizo de esta manera específicamente para que los usuarios puedan hacer lo que usted sugiere si lo prefierenjs2-mode
(sin perder la capacidad de usarjs-mode
si lo desean).js-mode
(al contrario de lo que sucedeperl-mode
, por ejemplo).