2010-11-06 40 views
4

我做的Rails開發和發現我需要生成一個外殼,重命名緩衝器(例如使用WEBrick),然後揭開序幕命令(軌道S),然後重新做整個事情,如果我想有一個導軌控制檯或rails dbconsole,rspec,spork等,每次啓動emacs。如何定義的Emacs Lisp函數產生一個緩衝外殼在shell中執行特定的命令?

我希望這樣的事情:

(defun spawn-shell() 
    "Invoke shell test" 
    (with-temp-buffer 
     (shell (current-buffer)) 
     (process-send-string nil "echo 'test1'") 
     (process-send-string nil "echo 'test2'"))) 

我不想外殼走開退出時,因爲在shell緩衝區輸出是很重要的,有的時候我要殺死它和重新啓動它,但我不想失去那段歷史。
從本質上講,我想利用手工工藝,使其可調用。

任何幫助深表感謝

湯姆

回答

16

也許這個版本的spawn-shell會做你想要什麼:

(defun spawn-shell (name) 
    "Invoke shell test" 
    (interactive "MName of shell buffer to create: ") 
    (pop-to-buffer (get-buffer-create (generate-new-buffer-name name))) 
    (shell (current-buffer)) 
    (process-send-string nil "echo 'test1'\n") 
    (process-send-string nil "echo 'test2'\n")) 

它會提示輸入名字,當你運行它交互(M-X產卵殼)使用。它創建基於使用generate-new-buffer-name輸入名稱的新緩衝區,而你缺少你發送到過程中的字符串末尾的換行符。

+0

Trey,這太好了。非常感謝你! – traday 2010-11-07 02:57:46

+0

大聲笑,因爲這是我的第一個問題,我沒有足夠的代表處點投你的答案了。 – traday 2010-11-07 02:58:35

3

如果你唯一的問題是,殼緩衝消失的命令已被執行後,爲什麼不使用get-buffer-create代替with-temp-buffer

+0

謝謝加雷斯。 – traday 2010-11-07 02:59:11

相關問題