从 emacs 发送命令到终端

从 emacs 发送命令到终端

我想在 elisp 中运行一个正在运行的 iterm 选项卡(或终端,无论什么)。我想要使用在 emacs 下运行的终端仿真器,因为我还没有找到一个可以处理输出以及独立终端仿真器的终端仿真器。

这可能吗?

我基本上需要这个,但是对于不在 emacs 下运行的进程:

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

答案1

如果您真的只关心输出质量,为什么不使用-holdas so 选项来调用 uxterm?

(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

我找到了一个看起来效果很好的解决方案。

使用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

我已经很久没有使用 OS X 了。如果我没记错的话,你可以使用该osascript实用程序运行 AppleScript,然后向 Terminal.app 发送命令。例如:

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

答案4

对于 iTerm.app,我使用以下脚本,该脚本非常特定于我的设置,但您可能可以根据自己的情况进行调整。它允许您将代码发送到任何现有的窗口,并可选择更改目录以匹配您发送文本的文件。

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

还有这个包:https://github.com/syohex/emacs-emamux 这可能是一个更通用的解决方案。我自己还没有尝试过。

相关内容