Após a atualização dos pacotes, o local dos arquivos elisp carregados será alterado para a pasta da nova versão do pacote.
O Yasnippet tenta carregar preguiçosamente trechos para o arquivo em que foi instalado, quando abro um arquivo no modo principal que o yasnippet não tinha visto antes.
Isso significa que carregar coisas com modos principais nunca vistos antes que o emacs seja atualizado falhará, porque o yasnippet interrompe a coisa toda reclamando sobre "esse arquivo ou diretório não existe".
Existe uma boa maneira geral de resolver isso, como não deixar que as atualizações quebrem as coisas? (Eu recebo um problema semelhante, mas menos tedioso, quando o ag é atualizado). Como alternativa, aconselhar algo no yasnippet a engolir apenas os erros, para que apenas avise em vez de errar quando não puder carregar pacotes, seria um plano melhor?
Esclarecimento:
- Inicio o emacs e o yasnippet é carregado.
- Não carrego arquivos cujo modo principal seja (por exemplo) makefiles.
- Eu atualizo para uma nova versão do yasnippet, usando o gerenciador de pacotes
- Eu carrego um makefile e o yasnippet tenta carregar os trechos para makefiles, mas ele falha, porque a pasta que estava usando para trechos não existe mais. Não apenas isso, mas praticamente todos os outros comandos falham, porque o pré-gancho para eles que o yasnippet instalado falha.
- Solução alternativa: abra o buffer de mensagem, encontre qual pasta não pode ser aberta e execute
mkdir ~/.blargh/folder-yasnippet-wants
.
Claramente, alguém poderia escrever alguns conselhos para um pouco de yasnippet, mas estou esperando por uma solução mais global (e levaria um tempo para brincar com o elisp para que o conselho funcionasse, tenho certeza).
package.el
trabalhar na perfeição e provavelmente está procurando uma solução em relação a isso. Pessoalmente, fico desapegado quando as coisas quebram, então reduzo a probabilidade de quebra colocando as bibliotecas em um local completamente diferente - em alguns casos, até altero todos os nomes adicionando um prefixo na biblioteca - por exemplo,lawlist-...
Dessa forma, nada quebras, exceto uma função modificada pela equipe do Emacs - por exemplo, um novo argumento para uma função existente etc. Copieiyasnippet.el
em outro lugar, removi-o do gerenciador de pacotes e nunca me preocupei.Respostas:
O que faço é um pouco complexo: eu aconselho a função de
package-activate
modo que toda vez que um pacote é ativado, o Emacs procurará um arquivo chamado[package]-conf.el
e o executará usando emload
vez derequire
, para que possa ser executado várias vezes.E no meu
pkg-configs/yasnippet-conf.el
, eu defino ayas-snippet-dirs
variável para apontar onde está oyasnippet
pacote:kzn-path
é uma função que eu uso para encontrar meus diretórios personalizados por símbolo; você pode substituí-lo por diretórios.Tudo isso é copiado diretamente dos meus arquivos de configuração. Eu acho que é tudo que você precisa, ou deveria, pelo menos, apontar na direção certa.
fonte