Как насчет этого подхода?
emacsclient -e '
(progn
(pop-to-buffer (generate-new-buffer "Piped"))
(insert (decode-hex-string "
'$(perl -e 'print unpack "H*", qq("Hello, World!")'
)'")))
'
Я вставил новые строки, чтобы разбить эту очень длинную строку для отображения.
Когда я запускаю это из окна терминала, в моем окне Emacs открывается новый буфер с именем Piped
, содержащий текст "Hello, World!"
(с кавычками). Когда я запускаю его снова, открывается другой буфер с именем Piped<2>
с тем же текстом.
Шестнадцатеричное экранирование (которое, вероятно, так же легко может быть выполнено с помощью любого другого языка высокого уровня, не только Perl) предназначено для экранирования кавычек, которые в противном случае заканчивали бы строковую константу, передаваемую в (insert)
.
Этот подход передает текст в Emacs через Emacsclient из командной строки, поэтому очень длинный вводимый текст может вызвать проблемы. Более общее решение может быть в состоянии разбить длинные входные данные и передать их в Emacs через несколько вызовов Emacsclient.