2015-10-06 216 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

相關問題