Используя elisp, как запустить, отправить ключи и остановить команду в эмуляторе терминала emacs? - PullRequest
3 голосов
/ 25 ноября 2011

Используя elisp (не интерактивные клавишные аккорды), как я могу запустить команду в emacs эмуляторе терминала;и как я могу отправить нажатия клавиш в этот буфер?

Запуск term, кажется, требует (term "/bin/bash"), который не имеет возможности для запуска команды.Я предполагаю, что это может быть связано с тем, что term предназначен для использования в качестве интерактивного инструмента ...

Также я хочу отправить определенные ключи работающему приложению.Можно ли это сделать?Я думал (insert 'x) может работать, но у него нет параметра буфера, и при этом он не допускает M-C-S-s-

Ответы [ 2 ]

4 голосов
/ 26 ноября 2011

Вы можете отправить ввод непосредственно на терминал с помощью term-send-raw-string. Пример:

(progn
  (set-buffer "*terminal*")
  (term-send-raw-string "ls -l\n"))

Имитирует эффект ввода ls -l RET в буфер терминала.

Хотя term не очень гибок в разборе аргументов, обычно достаточно запустить оболочку и передать ей команды с помощью term-send-raw-string для загрузки целевой программы. Вот небольшой фрагмент кода elisp, который записывает некоторые команды для интерактивной программы:

(progn 
  (let ((term-buffer (term "/bin/bash")))
    (set-buffer term-buffer)

    ;; start up vi
    (term-send-raw-string "vi hello.txt\n")

    ;; some line noise :P
    (term-send-raw-string "ihello world\033:wq\n")

    ;; quit our shell
    (term-send-raw-string "exit")))
0 голосов
/ 30 марта 2018

В первом примере вы также можете попробовать:

(with-current-buffer "*terminal*" 
  (term-send-raw-string "ls -l\n"))
...