3

我有一堆带有前缀的交互式函数,比如 *zb/”(例如“zb/create-temp-buffer”)。每次输入Mx交互时,我都会有点累,这是我喜欢的命令的前缀跑。

为了自动化这一点,我想检索我所有交互功能的列表,并通过ido-completing-read显示它们(顺便说一句,可能还有其他替代和现代方法来创建带有预定义项目和自动完成的输入?)。但我没有设法找到如何检索这样的列表。你能给我一个提示如何实现这一目标吗?

所有可用交互功能的列表就足够了;过滤不是问题。

谢谢。

4

3 回答 3

2

也许试试Smex

Smex 是 Emacs 的 Mx 增强。它建立在 Ido 之上,为您最近和最常用的命令提供了一个方便的界面。以及所有其他命令。

于 2013-10-29T05:25:09.400 回答
2

您可以使用此功能进行选择

(defun eab/select-zb/ ()
  (interactive)
  (call-interactively
   (intern
    (ido-completing-read "M-x zb/"
             (mapcar 'symbol-name (apropos-internal "^zb/"))))))
于 2013-10-29T05:27:56.840 回答
1

你说“可能还有其他替代和现代的方法来创建带有预定义项目和自动完成的输入?” .

  1. 使用Icicles并绑定icicle-must-match-regexp
    (defun zb/()
      (交互的)
      (let ((icicle-must-match-regexp "^zb/"))
        (call-interactively (intern (completing-read "zb/ command: " obarray 'commandp t)))))
  1. 你也可以使用 vanilla Emacs 而不使用 Ido:
    (defun zb/()
      (交互的)
      (交互调用
        (实习生(完成阅读
                 “zb/命令:”
                 数组
                 (拉姆达(CMD)
                   (and (commandp cmd) (string-match-p "^zb/" (symbol-name cmd))))
                 t))))

或者按照@artscan 的建议进行操作:用于apropos-internal匹配正则表达式。IOW,要么completing-read进行匹配,要么先使用apropos-internal. 您也可以将commandp谓词传递给apropos-internal

于 2013-10-30T22:58:47.523 回答