4

Я хотел бы запустить команду на работающей вкладке iterm (или терминале, что угодно) из elisp. Я не хочу использовать эмулятор терминала, работающий под emacs, так как я еще не нашел тот, который обрабатывает вывод, а также автономный эмулятор терминала.

Это возможно?

Мне это в основном нужно, но для процесса, который не работает под emacs:

(term-simple-send proc "echo hello")

4 ответа4

4

Я нашел решение, которое, кажется, работает хорошо.

Используя tmux , я могу отправить команду запущенному сеансу, например так:

(defun es-send-via-tmux (command)
  (message (concat "running: " command))
  (call-process "/usr/local/bin/tmux" nil nil nil "send-keys" "-t 1" command "C-m")
 )

Пример:

(es-send-via-tmux "echo hello") 
3

Если вас действительно беспокоит качество вывода, почему бы не вызвать uxterm с опцией -hold ?

(defun external-xterm-shell-command (COMMAND)
  "Run a terminal command in an external xterm window."
  (interactive "sShell Command: ")
  (shell-command (concat "uxterm -hold -e " COMMAND)))
2

Прошло некоторое время с тех пор, как я использовал OS X. IIRC, вы можете использовать утилиту osascript для запуска AppleScript, которую можно использовать для отправки команды в Terminal.app. Что-то вроде:

tell application "Terminal"
  do script "ls"
end tell
0

С iTerm.app я использую следующий скрипт, который очень специфичен для моей настройки, но вы, вероятно, можете адаптировать его для своего случая. Он позволяет отправлять код в любое уже существующее окно и, при желании, изменять каталог в соответствии с файлом, из которого вы отправляете текст.

https://github.com/haberdashPI/iterm.el/blob/master/iterm.el

Есть также этот пакет: https://github.com/syohex/emacs-emamux Это может быть более общее решение. Сам не пробовал.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .