Как заставить чтение Emacs буферизовать от stdin на запуске?

С 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
40
задан 01.09.2009, 15:39

3 ответа

Корректный, невозможно считать буфер из stdin.

Единственное упоминание о stdin на страницах информации о Emacs - это, которое говорит:

В пакетном режиме Emacs не отображает текст, отредактированный, и стандартные терминальные символы прерывания такой как C-z и C-c продолжите иметь их нормальный эффект. Функции prin1, princ и print вывод к stdout вместо площади рассеяния, в то время как message и вывод сообщений об ошибках к stderr. Функции, которые обычно читали бы из мини-буферного взятия их вход от stdin вместо этого.

И read функция может читать из stdin, но только в пакетном режиме.

Так, Вы не можете даже работать вокруг этого путем записи пользовательского elisp.

15
ответ дан 07.12.2019, 08:44

Можно перенаправить в файл, затем открыть файл. например.

echo 123 > temp; emacs temp

jweede отмечает, что, если Вы хотите, чтобы временный файл автоматически был удален, Вы можете:

echo 123 > temp; emacs temp; rm temp

Способ Emacsy сделать это должно выполнить команду оболочки в Emacs.

M-! echo 123 RET

Это дает Вам буфер, названный *Вывод Команды Shell* с результатами команды.

14
ответ дан 07.12.2019, 08:44

бесцеремонно, что-то как:

$ echo 123 > tmp.txt; emacs tmp.txt

или

$ echo 123 > tmp.txt; emacs tmp.txt; rm tmp.txt

опция. Emacs просто не интегрируется с UNIX путем, энергия делает.

2
ответ дан 07.12.2019, 08:44

Теги

Похожие вопросы