获取Elisp/Emacs中的交互函数列表

获取Elisp/Emacs中的交互函数列表,emacs,elisp,Emacs,Elisp,我有一大堆带有前缀的交互函数,比如*zb/(例如“zb/create temp buffer”)。每次输入M-xinteraction这个我喜欢运行的命令前缀时,我都有点累 为了实现自动化,我想检索我所有交互功能的列表,并通过ido completing read显示它们(顺便说一句,可能还有其他替代和现代的方法来创建具有预定义项和自动完成功能的输入?).但是我没有找到如何检索这样的列表。您能给我一个提示吗 列出所有可用的交互功能就足够了;过滤不是问题 谢谢。可以试试吗 Smex是Emacs的一

我有一大堆带有前缀的交互函数,比如*zb/(例如“zb/create temp buffer”)。每次输入M-xinteraction这个我喜欢运行的命令前缀时,我都有点累

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

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

谢谢。

可以试试吗

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


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

(defun eab/select-zb/ ()
  (interactive)
  (call-interactively
   (intern
    (ido-completing-read "M-x zb/"
             (mapcar 'symbol-name (apropos-internal "^zb/"))))))
您会说“可能还有其他替代和现代的方法来创建带有预定义项和自动完成的输入?”

  • 使用并仅绑定icicle必须与regexp匹配:
  • (defun zb/() (互动) (let((冰柱必须与regexp“^zb/”)匹配) (以交互方式呼叫(实习生(完成阅读“zb/command:“obarray'commandp t()()))”)
  • 您也可以使用香草Emacs而不使用Ido:
  • (defun zb/() (互动) (以交互方式呼叫 (实习生(完成阅读) “zb/command:” 奥巴雷 (lambda(cmd) (和(commandp cmd)(string-match-p“^zb/”(符号名cmd))) t) ))
    或者按照@artscan的建议:使用
    apropos internal
    匹配regexp.IOW,或者让
    完成读取
    进行匹配,或者先使用
    apropos internal
    进行匹配。您也可以将
    commandp
    谓词传递给
    apropos internal

    完美!apropos internal是我寻找的关键字。感谢您让我们了解Smex,但它需要一段时间来理解;另一方面,它有一个内置的工具。 (defun zb/ () (interactive) (let ((icicle-must-match-regexp "^zb/")) (call-interactively (intern (completing-read "zb/ command: " obarray 'commandp t))))) (defun zb/ () (interactive) (call-interactively (intern (completing-read "zb/ command: " obarray (lambda (cmd) (and (commandp cmd) (string-match-p "^zb/" (symbol-name cmd)))) t))))