将bash命令发送到emacs中的开放终端缓冲区

时间:2015-10-06 19:06:35

标签: bash emacs ansi-term

我最近一直在努力改善我的emacs生活,我做过的一件事就是利用projectileperspective来合理地组织我的缓冲区。

作为其中的一部分,我编写了一个elisp函数来打开(或返回)一个特定于项目的命名的ansi-term缓冲区。这使我可以快速进入我正在查看的项目的bash终端。

我在查找管道之后遇到的问题是,是否可以从emacs中将bash命令发送到打开的ansi-term缓冲区。具体来说,我正在尝试确保第一次打开时ansi-term缓冲区cds到正确的项目根目录。这需要首先从projectile包中获取上下文,因此我不能将其放入.bashrc

理想情况下,我可以编写一个elisp函数:

1)按名称选择一个ansi-term缓冲区(因为我可以为每个项目打开一个具有唯一名称的缓冲区)

2)在该缓冲区中发送并执行命令

有没有办法做到这一点?

修改

感兴趣的任何人的最终解决方案:

(defun visit-project-term-buffer ()
  "Create or visit a terminal buffer."
  (interactive)
  (if (not (get-buffer (persp-ansi-buffer-name)))
  (progn
    (split-window-sensibly (selected-window))
    (other-window 1)
    (ansi-term (getenv "SHELL"))
    (rename-buffer (persp-ansi-buffer-name))
    (end-of-buffer)
    (insert (format "cd %s" (projectile-project-root)))
    (term-send-input))
(switch-to-buffer-other-window (persp-ansi-buffer-name))))

1 个答案:

答案 0 :(得分:4)

这对你有用吗?它切换到名为*terminal*的缓冲区并运行echo hello

(defun my-echo ()
  (interactive)
  (switch-to-buffer "*terminal*")
  (end-of-buffer)
  (insert "echo hello")
  (term-send-input))