Como posso ter meu emulador de terminal sair quando o Emacs faz?

2

Isso pode ser considerado um acompanhamento para: Como salvar o histórico do shell do emacs e usá-lo no terminal?

Estou tentando forçar o bash a sair com o seguinte no meu arquivo .emacs, mas não funciona, mesmo se eu incluir um caractere ^ M incorporado após a palavra "exit". Isso pode ser feito para funcionar?

(defun bye ()
  "Leaving emacs now"
  (interactive)
  (shell)
  (goto-char (point-max))
  (insert-string "exit"))
(add-hook 'kill-emacs-hook 'bye)
    
por wytten 26.08.2013 / 18:23

1 resposta

0

Parte da razão pela qual o que você está fazendo não funcionará é porque (shell) realmente lança um novo shell inferior, que pode ou não ser o alvo de (insert-string) ; em qualquer caso, o máximo que conseguiria é sair da casca inferior. O wiki do Emacs tem uma pergunta não respondida sobre o assunto, o que é relativamente raro em qualquer assunto; entre isso, e o desinteresse geral evidenciado pelo Emacs de modo não em lote em se comunicar com seu processo pai de qualquer maneira, tenho a tendência de duvidar que o que você está tentando é possível.

Isso não significa que você não pode obter o resultado desejado - afinal, você não precisa ter o Emacs se comunicando com seu processo pai; se você substituir o seu processo de shell com o Emacs, então qualquer terminal que você estiver usando sairá ao mesmo tempo que o Emacs, da mesma forma que qualquer terminal quando o processo anexar a sua terminação.

O método irá variar dependendo do seu shell, mas no Bash, zsh, e provavelmente tcsh também (assumindo que alguém ainda o use), você precisa simplesmente iniciar sua chamada do Emacs com exec - se você normalmente diz emacs -nw , em vez disso, diga exec emacs -nw , & c.

Isso pressupõe que você está invocando o Emacs diretamente do shell, como parece provável. Se você usar (por exemplo) um script de shell para invocar o Emacs, isso não funcionará, porque exec irá substituir o processo de shell que está executando o script, em vez daquele que está ligado ao seu arquivo; Nesse caso, apenas exec do script de shell, e você ainda deve obter o resultado que está procurando, a menos que seu script faça algo realmente estranho. Nesse caso, você deve atualizar sua pergunta para incluí-la e alguém provavelmente conseguirá descobrir algo que funcione.

    
por 26.08.2013 / 18:50

Tags