从密钥调用Imenu

时间:2014-12-14 21:09:51

标签: emacs elisp imenu

目前,emacs具有有用的imenu功能,可以让我查看当前缓冲区中的功能列表。要实现此目的,我需要输入M-x,然后键入imenu,然后按return键,然后它将在迷你缓冲区中显示提示"索引项目:"我需要输入func,然后它显示另一个迷你缓冲提示,其中包含当前缓冲区中所有函数的完成。 这是非常好的和有用的,但现在我想减少打字的数量,并以某种方式在序列的第一部分宏观化。我试过这种方法:

(defun my-imenu-go-function-list ()
  (interactive)
  (imenu "func"))

(global-set-key (kbd "C-x C-o") 'my-imenu-go-function-list)

另一次尝试:

(defun my-imenu-go-function-list ()
  (interactive)
  (imenu)
  (execute-kbd-macro [?f ?u ?n ?c return]))

但没有一个有效,还有其他可能吗?

2 个答案:

答案 0 :(得分:2)

sebs的答案显示了一个我以前从未见过的非常巧妙的技巧;但是以下内容会更直接:

(imenu (assoc "func" (imenu--make-index-alist)))

它依赖于私有(按惯例)功能,所以YMMV。我看不到用于返回此alist值的明显API。

答案 1 :(得分:1)

您需要以交互方式调用您的功能。

尝试以下方法。它应该工作。

<强>更新:

(defun my-imenu-go-function-list ()
  (interactive) 
  (let ((unread-command-events  (listify-key-sequence "func\n") ))
  (call-interactively 'imenu)))

如果您在Windows中,则可能需要将回车更改为&#34; \ r&#34;或&#34; \ r \ n&#34;