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

问题描述

| 我想从一些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)))
有没有办法以非交互方式调用带有前缀的函数?     

解决方法

        如果我正确地理解了您的意思,则您正在尝试进行一个键绑定,就像您键入
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)
    ,        或者您可以只使用键盘宏
(global-set-key (kbd \"s-l\") (kbd \"C-u C-SPC\"))
在此示例中,组合键\“ sl \”(s(\“ super \”)是PC键盘上的\“ windows logo \”键)将返回标记环,就像您键入\“ Cu C -SPC \”。