Вызывая Имену из ключа
В настоящее время 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.