Eu tenho isso por padrão no meu auto-mode-alist
:
("\\.js\\'" . javascript-mode)
(mesmo com emacs -Q
). Eu gostaria de substituir js2-mode
por javascript-mode
. Claro, eu poderia usar assq-delete-all
e, add-to-list
novamente, mas estou me perguntando se não há uma maneira melhor.
Editar: eu explicitamente não quero usar o Customize, prefiro criar o meu init.el
.
elisp
association-lists
mbork
fonte
fonte
Use
setf
para alterar o valor no local:Se você deseja substituir um valor na lista, então
setf
é o mecanismo generalizado necessário. Para a maneira mais idiomática de lidar com issoauto-mode-alist
, consulte a resposta de @ Drew (e sua explicação sobre sombreamento).fonte
setf
capaz realmente deve ser mostrado para caras Java.)setf
é usado o tempo todo no Common Lisp, mas você o encontra com muito menos frequência no elisp.setf
tão raramente, em comparação com CL ...A maneira mais rápida de realmente alterar a célula contras é provavelmente
setcdr
Vale a pena notar que
setf
não está disponível no Emacsen mais antigo, massetcdr
está.fonte
setf
?O OP solicita uma solução que lida com listas que possuem chaves de string. Para lidar com isso, consulte esta pergunta . Se, por acaso, você só precisar lidar com listas com teclas de símbolos, então a partir do Emacs 25 você poderá usar:
para substituir um cdr. Se você tiver acesso ao Emacs 26, essa técnica funcionará com chaves de seqüência de caracteres, da seguinte maneira:
Observe que também existem outras maneiras no Emacs 26 de lidar com chaves de string; veja esta pergunta como mencionado acima.
fonte
(setf (alist-get "\\.js\\'" auto-mode-alist nil nil #'equal) 'js2-mode)
deve funcionar (requer o Emacs 26 embora).alist-get
a string"\\.js\\'"
, mas elaalist-get
é baseada emassq
, portanto, ela não funcionará com uma string como você reivindica em sua resposta.Se você sabe que nunca mais usará o modo javascript, deixe o modo automático alista intocado e adicione ao seu init.el
fonte
javascript-mode
, na verdade:javascript-mode
é apenas um alias parajs-mode
(por padrão) e foi feito dessa maneira especificamente para que os usuários possam fazer o que você sugere, se preferiremjs2-mode
(sem perder a capacidade de usarjs-mode
se quiserem).js-mode
(ao contrário do que aconteceperl-mode
, por exemplo).