Emacs 从密钥调用Imenu

Emacs 从密钥调用Imenu,emacs,elisp,imenu,Emacs,Elisp,Imenu,目前,emacs有有用的imenu功能,可以让我查看当前缓冲区中的函数列表。要实现这一点,我需要键入M-x,然后键入imenu,然后按return键,然后它将在minibuffer“索引项”中显示提示符:“我需要键入func,然后它会显示另一个minibuffer提示符,自动完成当前缓冲区中的所有功能。 这是非常好和有用的,但现在我想减少键入的数量,并以某种方式宏观化序列的第一部分。我尝试过这种方法: (defun my-imenu-go-function-list () (interact

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

(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]))

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

您需要以交互方式调用函数

尝试以下方法。它应该会起作用

更新:

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

如果您在Windows中,您可能必须将回车符更改为“\r”或“\r\n”

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

(imenu(关联“func”(imenu——生成索引列表)))

不过,它确实依赖于私有(按约定)函数,所以YMMV。我看不到返回此值的明显API。

您是否尝试了
helm semantic
?我认为它在各方面都优于imenu。还有比“掌握语义”更好的东西,这取决于主要模式。@Seb回答了你关于代码的问题。如果您想快速访问Imenu条目,您可能想试试。在Icicle模式下,
C-C=
(命令)为您提供了一个Imenu浏览器,您的输入可以通过多种方式匹配Imenu条目,包括子字符串、模糊和正则表达式匹配。谢谢,至少这不会给我一个错误,但看起来“func”参数在这里被忽略了,我仍然需要键入
func