有没有办法将非数字参数传递给函数?
Ex:C-u 5 M-x eshell
使(切换到)名为 *eshell*<5>
的eshell。但是我想给eshell buffer命名而不是数字。
答案 0 :(得分:6)
我认为没有任何通用方法可以将{-1}}工作的非数字参数传递给任何命令。
但是,使用迷你缓冲区可以输入不同的模式。例如,C-u
(而不是C-u M-x shell
)允许您命名新的shell缓冲区。
您可以轻松编写自己的eshell
命令,该命令也可以命名缓冲区:
eshell
然后将其绑定到某个键:
(defun eshell-new-buffer (name)
(interactive "sBuffer name:")
(eshell t)
(rename-buffer name))
现在,当您键入(global-set-key (kbd "C-c e") 'eshell-new-buffer)
时,系统将提示您输入缓冲区名称,并为您创建一个具有该名称的新C-c e
缓冲区。
编辑:简化了@sanityinc有用地指出的代码。
答案 1 :(得分:0)
在 M-x 之前键入 C-u 会向命令发送前缀参数。
前缀参数基本上是数字。它们可以非数字,但可能性受到限制,并且不包括字符串。有关详细信息,请参阅信息节点(elisp) Prefix Command Arguments
。
这意味着没有什么能直接类似于 Cu 在调用命令交互式时传递字符串(对于&#34的严格定义;交互式&#34;在Emacs中,评估命令的(interactive)
形式,通常是因为你使用 Mx 来调用它。 以交互方式将字符串传递给命令的唯一方法是,如果它提示您输入它。
非交互式,您可以将任何类型的参数传递给函数,并且调用任意函数并将其传递给字符串参数的最简单方法可能是:
M - : (eshell "foo")
RET
然而,这个特定的例子不会产生你所希望的效果,因为eshell
函数没有记住字符串参数。