Use o emacs para editar texto na memória

3

É possível editar de alguma forma o texto na memória no emacs? (Ou seja, sem passar pelo sistema de arquivos.)

Estou escrevendo um script no qual preciso editar a saída de um comando e processar o texto editado em outro comando.

Estou pensando em algo como

command1 | emacs --edit-std-in-and-write-to-stdout | command2

Ou, alternativamente, algo como

TEXT=$(command1)
emacs --edit-this $TEXT | command2
    
por aioobe 08.08.2013 / 15:48

1 resposta

1

O Emacs não lê a entrada padrão, a menos que esteja sendo executado em lote. Em vez disso, você pode usar uma opção de linha de comando para passar um formulário Lisp que o Emacs avaliará imediatamente após a inicialização:

emacs --eval '(shell-command "command1")'

Isso executará command1 e capturará sua saída em um buffer denominado *Shell Command Output* , que você poderá renomear, editar, & c. a gosto.

Uma vez feito, você pode passar o resultado para command2 por meio de C-x h M-| command2 RET ; C-x h chama mark-whole-buffer para que a região inclua todo o texto editado e M-| chama shell-command-on-region para executar command2 e fornecer conteúdo da região na entrada padrão. (Se você tiver recuperado qualquer um desses acordes, apenas chame a função relevante diretamente via M-x function-name RET ; como acontece com todas as funções interativas do Emacs Lisp, elas usarão o minibuffer para solicitar os argumentos de que precisam.)

Assim como com shell-command , shell-command-on-region capturará a saída padrão para o buffer *Shell Command Output* , substituindo o que estiver lá; se você quiser manter a saída editada de command1 , renomeie o buffer antes de invocar command2 .)

Uma observação adicional: você pode achar útil saber que shell-command e shell-command-on-region recebem um argumento opcional de buffer de saída, como um buffer ou um nome de buffer; se um buffer pelo nome dado não existir, um novo buffer com esse nome será criado. Veja a documentação interna ( C-h f function-name RET ou M-x describe-function RET function-name RET ) para mais.

    
por 08.08.2013 / 17:23

Tags