cmw*_*cmw 1 emacs bash ansi-term
最近,我一直在努力改善emacs的生活,而我所做的一件事就是合理地利用projectile
和perspective
整理缓冲区。
在此过程中,我编写了一个elisp函数来打开(或返回)特定于项目的命名ansi-term缓冲区。这使我可以快速进入当前正在查看的项目的bash终端。
在遍历Interweb之后,我一直无法找到的问题是,是否有可能从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))))
Run Code Online (Sandbox Code Playgroud)
这对您有用吗?它切换到一个名为的缓冲区*terminal*
并运行echo hello
:
(defun my-echo ()
(interactive)
(switch-to-buffer "*terminal*")
(end-of-buffer)
(insert "echo hello")
(term-send-input))
Run Code Online (Sandbox Code Playgroud)