Com o Vim eu posso fazer facilmente
$ echo 123 | vim -
É possível fazer com o Emacs?
$ echo 123 | emacs23
... Emacs starts with a Welcome message
$ echo 123 | emacs23 -
... Emacs starts with an empty *scratch* buffer and “Unknown option”
$ echo 123 | emacs23 --insert -
... “No such file or directory”, empty *scratch* buffer
É realmente impossível ler um buffer de um pipe unix?
Edit : Como solução, escrevi um wrapper chamado emacspipe
:
#!/bin/sh
TMP=$(mktemp) && cat > $TMP && emacs23 $TMP ; rm $TMP
Você pode usar a substituição do processo :
fonte
emacs: standard input is not a tty
Você pode redirecionar para um arquivo e abrir o arquivo. por exemplo
O jweede observa que, se você deseja que o arquivo temporário seja removido automaticamente, você pode:
A maneira do Emacsy fazer isso é executar o comando shell no Emacs .
Isso fornece um buffer chamado * Shell Command Output * com os resultados do comando.
fonte
echo 123 > temp; emacs temp; rm temp
TMP=$(mktemp) && cat > $TMP && emacs23 $TMP ; rm $TMP
. Obrigado a todos!É possível, consulte https://stackoverflow.com/questions/2879746/idomatic-batch-processing-of-text-in-emacs
Aqui está o eco em um script emacs (copiado do link acima):
ou para ler em um buffer e imprimi-lo de uma só vez
fonte
É possível criar uma função shell simples, que funciona como está lendo no stdin (embora na verdade esteja gravando em um arquivo temporário e depois lendo). Aqui está o código que estou usando:
Você apenas usa a função como um alias para o emacs, por exemplo
ou normalmente de arquivos
Substituir
emacs
poremacsclient
na função também funciona.fonte
emacsclient -c -t $@
, ou pelo menos solte a opção -n. páginas man comemacsclient -t --eval "(man \"$1\")" --eval "(delete-window)"
(e agora você podehelm-swoop
seu caminho para Man Glória!)Isso funciona:
mas, por alguma razão, apenas no emacs de modo gráfico (Gnome, Konsole, GNU Emacs 23.4.1). O comando:
gera um erro 'emacs: entrada padrão não é um tty'. O mesmo erro aparece quando tentado no console de texto não processado.
fonte
echo 123 | exec emacs -nw --insert <(cat) </dev/tty
Deveria trabalhar.Outra possibilidade não mencionada em nenhuma das respostas anteriores é usar
/dev/stdin
se a sua variante Unix escolhida a possuir.Simplesmente tentar abrir
/dev/stdin
diretamente não funciona, porque o Emacs faz algumas verificações e depois relataSymbolic link that points to nonexistent file
. (E se o Emacs permitir que você carregue o arquivo, tente salvá-lo novamente, como/dev/stdin
raramente faria o que o usuário esperava.)No entanto, a combinação
/dev/stdin
com o--insert
argumento funciona:Note-se que esta versão só funciona com o X. Se você precisar de uma solução que funcione em um terminal, sugiro que procure outra resposta .
fonte
emacs: standard input is not a tty
mensagem testando-o no linux e bsdunset DISPLAY
, recebo a mesma mensagem de erro que você.de imediato, algo como:
ou
é uma opção. O Emacs simplesmente não se integra ao UNIX da maneira que o vim faz.
fonte
M-!
, que captura automaticamente a saída resultante em um buffer temporário.) guerras à parte, nenhum editor é "melhor" que o outro; eles só têm perspectivas muito diferentes sobre praticamente tudo.curl foo.bar | vim -
.. me desculpe. Eu quis dizercurl foo.bar | emacs
, exceto que você não pode fazer isso