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.