2015-10-06 166 views
1

我一直在努力最近改善emacs生活,我做的一件事就是利用projectileperspective合理地组织我的缓冲区。发送bash命令到emacs中打开的终端缓冲区

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

我在管道连接后发现了一些问题,是否可以从bash命令发送emacs中的打开的ansi-term缓冲区。具体来说,我试图确保首次打开时,ansi-term buffer cds到正确的项目根目录。这需要首先从projectile包中获取上下文,所以它不是我可以插入到我的.bashrc中的内容。

理想我想能写一个elisp的功能:

1)选择由名称的ANSI长期缓冲区(因为我可以有一个与每个项目的唯一名称)

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)))) 
+0

声音很酷,会给出一个尝试。你看过'shell-pop'和'shell-here'吗? http://wikemacs.org/wiki/Shell#shell-pop他们没有完全回答你的问题,因为当你想为很多不同的项目(和我也!),shell-pop将使用一个单一的shell窗口,但他们的代码可能有帮助。 – Ehvince

回答

4

这是否对你的工作?它切换到名为*terminal*的缓冲区,并运行echo hello

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

非常好,是的,这是有效的。 :-) – cmw

相关问题