2013-10-29 39 views
2

我有一堆带有前缀的说明,比如说“* zb /”(例如“zb/create-temp-buffer”),我每次都有点累在的Mx互动这个前缀的命令,我喜欢类型运行。获取Elisp/Emacs中交互功能的列表

要自动执行此我想找回我的所有交互功能的列表,并让他们通过IDO-完成读取顺便说一句,可能还有其他的替代方法和现代的方法来创建输入与预定义的项目和自动完成?)。但我没有设法找到如何检索这样的列表。请你给我一个提示如何实现这个?

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

谢谢。

回答

2

您可以使用此功能选择

(defun eab/select-zb/() 
    (interactive) 
    (call-interactively 
    (intern 
    (ido-completing-read "M-x zb/" 
      (mapcar 'symbol-name (apropos-internal "^zb/")))))) 
+0

完美! * apropos-internal *是我寻找的关键词。 – zweibaranov

2

也许给Smex试试吗?

Smex是Emacs的M-x增强版。它建立在Ido之上,为您最近和最常用的命令提供了一个方便的界面。也适用于所有其他命令。

+0

感谢您了解Smex,但需要一段时间才能理解;另一方面有一个内置的仪器。 – zweibaranov

1

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

  1. 使用Icicles,只是绑定icicle-must-match-regexp
 
    (defun zb/() 
     (interactive) 
     (let ((icicle-must-match-regexp "^zb/")) 
     (call-interactively (intern (completing-read "zb/ command: " obarray 'commandp t))))) 
  1. 您也可以用香草Emacs和没有伊做到这一点:
 
    (defun zb/() 
     (interactive) 
     (call-interactively 
     (intern (completing-read 
       "zb/ command: " 
       obarray 
       (lambda (cmd) 
        (and (commandp cmd) (string-match-p "^zb/" (symbol-name cmd)))) 
       t)))) 

还是做的@artscan建议:使用apropos-internal来匹配正则表达式。 IOW,或者让completing-read做匹配或者首先使用apropos-internal匹配。您也可以将commandp谓词传递给apropos-internal