emacs lisp 以编程方式调用带有前缀参数的函数

标签 emacs elisp

我想从一些 elisp 代码中调用一个函数,就像我用前缀参数交互地调用它一样。具体来说,我想使用前缀调用 grep。

我最接近让它工作的是使用 execute-extended-command ,但这仍然需要我输入要使用前缀调用的命令...

;; calls command with a prefix, but I have to type the command to be called...
(global-set-key (kbd "C-c m g")
                (lambda () (interactive)
                  (execute-extended-command t)))

文档说 execute-extended-command 使用 command-execute 来执行从迷你缓冲区读取的命令,但我无法使其工作:

;; doesn't call with prefix...
(global-set-key (kbd "C-c m g")
                (lambda () (interactive)
                  (command-execute 'grep t [t] t)))

有没有办法以非交互方式调用带前缀的函数

最佳答案

如果我没理解错的话,您正在尝试创建一个按键绑定(bind),其行为就像您键入 C-u M-x grep <ENTER> 一样。 。试试这个:

(global-set-key (kbd "C-c m g")
                (lambda () (interactive)
                  (setq current-prefix-arg '(4)) ; C-u
                  (call-interactively 'grep)))

虽然我可能会为此创建一个命名函数:

(defun grep-with-prefix-arg ()
  (interactive)
  (setq current-prefix-arg '(4)) ; C-u
  (call-interactively 'grep))

(global-set-key (kbd "C-c m g") 'grep-with-prefix-arg)

关于emacs lisp 以编程方式调用带有前缀参数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6156286/

相关文章:

c - Emacs 将 (*ptr_to_struct).member_var 替换为 ptr_to_struct->member_var

Emacs 喜欢 sublime text 3 中的行导航?

c - 将 Emacs 缓冲区传递给 C

emacs - Org-mode 8 中的 Fontify R 代码块

json - 如何将 emacs 连接到 json 服务?

emacs - 如何编写 Emacs 函数以用指定文本包裹标记区域

emacs - 在Elisp中的lambda递归

search - 在 emacs lisp 中,有没有办法搜索与当前点重叠的字符串相匹配的文本?

emacs - 如何在 elisp 中逐个字符地处理缓冲区?

emacs - 将一个 session 的硬换行设置为 68 列