Tengo esto por defecto en mi auto-mode-alist:
("\\.js\\'" . javascript-mode)
(incluso con emacs -Q). Me gustaría sustituir js2-modepor javascript-mode. Por supuesto, podría usar assq-delete-ally luego add-to-listotra 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
setfpara cambiar el valor en el lugar:Si desea reemplazar un valor en la lista, entonces
setfes 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
setfpoder realmente debería mostrarse a los chicos de Java.)setfse usa todo el tiempo en Common Lisp, pero te encuentras con mucha menos frecuencia en elisp.setftan raramente, en comparación con CL ...La forma más rápida de cambiar realmente la celda de contras es probablemente
setcdrVale la pena señalar que
setfno está disponible en Emacsen anterior, pero losetcdrestá.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-getla cadena"\\.js\\'", peroalist-getse 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-modees 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-modesi lo desean).js-mode(al contrario de lo que sucedeperl-mode, por ejemplo).