O servidor Emacs
A melhor maneira de fazer isso é entrar em contato com o Emacs servidor e execute um comando Emacs Lisp.
emacsclient -e '(with-current-buffer "*scratch*" (write-file "~/scratch.txt"))'
Ou você pode anexar o Emacs ao terminal atual e fazer o que quiser, como mudar para o buffer ' scratch e salvar seu conteúdo.
emacsclient -nw
Infelizmente para você, você precisa iniciar o servidor explicitamente. Eu recomendo que você adicione (server-start)
ao seu arquivo init, porque é muito útil, mas se você não tiver feito isso, não irá ajudá-lo agora.
Enviando entrada para o terminal do Emacs
Quando você executa echo "abd" > /proc/$emacs_pid/fd/0
, isso envia o texto para o terminal em que o Emacs está sendo executado. A gravação de dados em um terminal exibe esses dados. Você não pode enviar entrada para um terminal: entrada é o que vem de um terminal.
Tela
Se você executar um programa em uma tela ou tmux , você pode anexar a sessão existente e continuar interagindo com o programa. Tanto a tela quanto o tmux também suportam programaticamente enviar entrada para um programa rodando dentro dela. Isso requer que o programa seja executado em primeiro lugar, por isso não o ajudará dessa vez.
Com o Emacs, o Screen não vai te comprar muito ao se conectar ao servidor Emacs com emacsclient
.
Core dump
Peneirar o core dump é uma opção. O Emacs armazena o conteúdo de um buffer em um único fragmento, com uma lacuna no meio (o espaço pode conter um lixo arbitrário; se a última operação for uma exclusão, é o que foi excluído).
O sinal SIGQUIT faz com que um processo morra e deixe um dump principal (se habilitado) por padrão. No entanto, o Emacs captura o SIGQUIT (ele sai para o nível superior, o que é conveniente em algumas situações, mas não ajuda você). Então, você precisará anexa a ele com um depurador e faz com que ele descarregue o core . Isso tem benefícios sobre o SIGQUIT de qualquer maneira: ele deixa o processo em execução e funciona mesmo se os dumps do núcleo estiverem desativados.
$ gdb -p $(pidof emacs)
(gdb) gcore
Você pode então filtrar o core dump para extrair os dados
Reconecte o Emacs a um novo terminal
Não há recurso Unix ou Linux para separar um programa de um terminal e anexá-lo em outro. No entanto, é possível anexar um depurador a qualquer programa e fazê-lo abrir um terminal diferente. Isso pode ser errado: às vezes funciona, às vezes trava o programa. Existem várias ferramentas que tentam fazer isso da melhor forma possível; veja Como posso deserdar um processo em execução e associá-lo a um novo shell de tela?