众所周知,“C-u M-x shell”可用于运行多个shell。 但是如何定义一个与“C-u M-x shell”做同样事情的函数呢?
答案 0 :(得分: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-function
和find-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
实际生成的值是一个好习惯。