Вызывая Имену из ключа

В настоящее время 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 ответа

Решение

Вам нужно вызвать вашу функцию в интерактивном режиме.

Попробуйте следующее. Он должен работать.

ОБНОВЛЕНО:

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

Если вы находитесь в Windows, вам, возможно, придется изменить возврат каретки на "\r" или "\r\n"

Ответ Себса показывает очень изящную уловку, которую я раньше не видел; однако следующее будет немного более прямым:

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

Это зависит от частной (по соглашению) функции, так что YMMV. Я не вижу очевидного API для возврата этого значения alist.

Другие вопросы по тегам