Создание нового буфера с текстовым использованием EmacsClient

У меня есть программа, которая может отправить текст в любую другую программу для дальнейшего анализа (например, sed, grep, и т.д.). Я хотел бы, чтобы это отправило данные Emacs и сделало анализ там. Как я сделал бы это? EmacsClient берет имя файла по умолчанию, это - строка данных не файл, и я действительно не хочу создавать и удалять файлы только, чтобы отправить данные Emacs.

EmacsClient имеет параметр командной строки "оценки" который, позвольте нам, Вы выполняете код шепелявости вместо открытых файлов. Существует ли простая функция шепелявости, которая откроет новый буфер с данным текстом?

Править: Я ищу что-то как:

emacsclientw.exe -eval (open-new-buffer 'hello world')

И новый буфер автоматически появился бы со словом "привет мир". Я не уверен, как имя буфера было бы определено. Надо надеяться, что-то автоматически пронумерованное.

7
задан User1 17 March 2010 в 19:31
поделиться

2 ответа

Это делает то, о чем вы просите:

emacsclient -e '(open-buffer-with "some\nstuff\nhere")'

(defun open-buffer-with (txt)
  "create a new buffer, insert txt"
  (pop-to-buffer (get-buffer-create (generate-new-buffer-name "something")))
  (insert txt))

Очевидно, вы можете настроить open-buffer-with , чтобы делать то, что вы хотите.

Есть аналогичный вопрос, на который вы, возможно, захотите посмотреть: Как мне получить базовую интеграцию App <-> Emacs? .

6
ответ дан 7 December 2019 в 05:21
поделиться

Как насчет этого подхода?

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) предназначено для экранирования кавычек, которые в противном случае завершили бы строковую константу, передаваемую в (вставить) .

Этот подход передает текст в Emacs через Emacsclient в командной строке, поэтому очень длинный вводимый текст может вызвать проблемы. Более общее решение могло бы быть способным разбить длинные входные данные и передать их Emacs через несколько вызовов Emacsclient.

2
ответ дан 7 December 2019 в 05:21
поделиться
Другие вопросы по тегам:

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