2010-11-06 44 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

相关问题