2012-03-01 57 views
1

据我所知,“C-u M-x shell”可以用来运行多个shell。 但是如何定义一个函数来完成与“C-u M-x shell”相同的功能呢?如何定义一个函数在Emacs上运行多个shell?

+0

您还可以看看[多长期(http://emacs-fu.blogspot.com/2010/06/console-apps-in-emacs-with-multi-term.html)。 – Daimrod 2012-03-01 14:03:41

回答

2
(defun my-named-shell() 
    "Equivalent to C-u M-x shell RET" 
    (interactive) 
    (shell (get-buffer 
      (read-buffer 
      "Shell buffer: " 
      (generate-new-buffer-name "*shell*"))))) 

我用describe-functionfind-function检查的shell行为,其interactive声明特别,然后我只是复制了必要的代码,以将其转换成一个参数的非交互式调用shell功能(但将其封装在get-buffer中以提供缓冲区参数)。

其实我已经留下了一些代码,处理远程文件,因为在代码中的注释显得有点混乱。如果你不习惯在通过Tramp访问远程文件的缓冲区中使用C-u M-x shell,那么这个省略不会影响你。

这一切都表示,一个更简单的(和更完整)的办法很简单:

(defun my-named-shell() 
    "Equivalent to C-u M-x shell RET" 
    (interactive) 
    (let ((current-prefix-arg '(4))) 
    (call-interactively 'shell))) 

欲了解更多信息,请参阅https://stackoverflow.com/a/9388058/324105

在这种情况下current-prefix-arg可以是任何非零值,但我认为使用C-u实际产生的值是一个好习惯。

+0

太棒了,它的工作原理!谢谢。 – Xun 2012-03-01 11:00:31

相关问题