Eu reinicio muito o meu emacs. Tudo o que eu quero fazer é criar uma função que elimine o emacs atual, apenas para gerar um novo em seu lugar. Idealmente, isso também funcionaria em um TTY.
terminal-emacs
PythonNut
fonte
fonte
.emacs.d
, o que significa que eu reinicio o emacs para remover qualquer lixo que tenha sido jogado no meu ambiente. Existem alguns outros casos de uso em que faço isso, mas esse é o maior.bash
para reiniciar depois de terminar? Ouvi
? Ou qualquer outro processo, como regra? Não, porque isso está fora do escopo de suas preocupações e é tratado adequadamente externamente. De qualquer forma, o que você realmente deseja é uma maneira de reinicializar o emacs, limpando sua VM e executando novamente seu código de inicialização ( sem interromper o processo). Isso seria útil e adequado ao emacs. Eu não sei se existe, embora :)bash
a reiniciarexec bash
. Não faço ideia do vim.emacs -q
claro que posso executar e corrigir o problema, mas prefiro manter uma instância 'boa' em execução o tempo todo ao invadir minha configuração, apenas por segurança.Respostas:
Nota: Embrulhei o seguinte em um pacote
restart-emacs
disponível aqui .Aqui está uma maneira alternativa de alcançar o que você deseja usando o elisp puro (não exatamente porque você depende de um shell). O truque é iniciar outro processo do emacs pouco antes do emacs atual ser eliminado.
O código para iniciar uma versão GUI do emacs é simples. O código para iniciar o emacs em um terminal é um pouco complicado. Ele usa o fato de que você pode passar uma string para a
suspend-emacs
qual seria passada como entrada terminal para o processo pai (o shell). A partir da documentaçãoEntão, basicamente suspendemos o emacs imediatamente antes de ser morto, informamos ao shell pai para retomar o emacs atualmente suspenso (que sairá em breve) e depois iniciaremos outro processo do emacs. Observe que isso não funciona em plataformas nas quais o emacs de terminal pode / não realmente suspende, mas inicia um subshell, por exemplo, no Windows.
fonte
sh -c "emacs &"
do shell, ele pára com "emacs: standard input is not a tty
". (Quando eu façoM-x restart-emacs
que eu nem sequer ver essa mensagem de erro, Emacs apenas termina.)Até onde eu sei, você não pode dizer ao Emacs para reiniciar após o término, mas você pode definir o código de saída para que o processo que iniciou o Emacs em primeiro lugar possa detectar que você deseja reiniciar.
Por exemplo, esse script de shell reinicia o Emacs se ele tiver saído com o código 123.
Em seguida, definimos
kill-emacs-and-restart
que faz com que o Emacs termine com o código de saída igual ao número mágico reconhecido pelo script:Agora, se você executar o Emacs através deste script, poderá reiniciar
M-x kill-emacs-and-restart
(ou vinculá-lo a uma sequência de teclas).fonte
you cannot tell Emacs to re-start after terminating
. Isso é uma limitação técnica?exec...
família (nos sistemas POSIX, pelo menos). As funções de controle de processo do Emacs Lisp não expõem chamadas de baixo nível. Porém, eu não sou especialista, então espero que alguém com mais conhecimento entre em contato.Roubado descaradamente de https://unix.stackexchange.com/questions/114238/is-it-possibe-to-change-parent-shells-working-directory-programmatically
Supondo que eu tenho a sintaxe correta para incorporar "em uma string, isso deve ser feito.
fonte