С Vim я могу легко сделать
$ echo 123 | vim -
Действительно ли возможно сделать с 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
Действительно невозможно считать буфер из канала Unix?
Править: Как решение, я записал названную обертку оболочки emacspipe
:
#!/bin/sh
TMP=$(mktemp) && cat > $TMP && emacs23 $TMP ; rm $TMP
Корректный, невозможно считать буфер из stdin.
Единственное упоминание о stdin на страницах информации о Emacs - это, которое говорит:
В пакетном режиме Emacs не отображает текст, отредактированный, и стандартные терминальные символы прерывания такой как
C-z
иC-c
продолжите иметь их нормальный эффект. Функцииprin1
,princ
иstdout
вместо площади рассеяния, в то время какmessage
и вывод сообщений об ошибках кstderr
. Функции, которые обычно читали бы из мини-буферного взятия их вход отstdin
вместо этого.
И read
функция может читать из stdin
, но только в пакетном режиме.
Так, Вы не можете даже работать вокруг этого путем записи пользовательского elisp.
Можно перенаправить в файл, затем открыть файл. например.
echo 123 > temp; emacs temp
jweede отмечает, что, если Вы хотите, чтобы временный файл автоматически был удален, Вы можете:
echo 123 > temp; emacs temp; rm temp
Способ Emacsy сделать это должно выполнить команду оболочки в Emacs.
M-! echo 123 RET
Это дает Вам буфер, названный *Вывод Команды Shell* с результатами команды.