emacs中的非数字参数

时间:2012-01-15 09:13:07

标签: emacs

有没有办法将非数字参数传递给函数?

Ex:C-u 5 M-x eshell使(切换到)名为 *eshell*<5> 的eshell。但是我想给eshell buffer命名而不是数字。

2 个答案:

答案 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函数没有记住字符串参数。