1

目前 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]))

但是没有一个有效,还有另一种可能吗?

4

2 回答 2

2

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

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

不过,它确实依赖于一个私有(按照惯例)函数,所以 YMMV。我看不到用于返回此 alist 值的明显 API。

于 2014-12-17T04:20:48.503 回答
1

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

试试下面的。它应该工作。

更新:

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

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

于 2014-12-14T22:24:36.813 回答