Довольно часто я просматриваю документацию команды C-h f
, а затем сразу же вызываю команду M-x
.
Прямо сейчас самый короткий способ «вызова последней команды просмотра» - это скопировать его имя (из буфера справки или из истории) и вставить его в M-x
подсказку минибуфера.
То, что я действительно хотел бы, чтобы имена команд были
describe-function
включены в историю
execute-extended-command
. Так что я мог просто сделать M-x M-p RET
.
Какой самый простой способ сделать это?
documentation
m-x
history-variables
Malabarba
источник
источник
smex
иhelm-M-x
? первый находится в MELPA, последний включенhelm
в MELPA.Ответы:
«Самый простой способ» - просто определить свою собственную версию
describe-function
и связать ее сC-h f
.Возьмите ванильный код и измените только вызов
completing-read
так, чтобы он использовал тот же список истории, который используетM-x
(execute-extended-command
), то естьextended-command-history
.Как я нашел оригинальный код?
C-h f describe-function
,C-h k M-x
,C-h f execute-extended-command
. В коде дляexecute-extended-command
я увидел, что он читает имя команды, используяread-extended-command
, и это вызываетcompleting-read
передачуextended-command-history
в качествеHISTORY
аргумента.источник
Я могу добавить не точный ответ на ваш вопрос, а рабочий процесс, который устраняет необходимость в нем.
Я использую
smex
вместоexecute-extended-command
. Однажды в минибуфереsmex
:execute-extended-command
smex-describe-function
smex-find-function
Мне не нравятся привязки по умолчанию, поэтому я настроил их:
источник
Обратите внимание, что команду очень легко вызвать из буфера справки. После ввода
C-h f
просто введитеM-x M-n RET
. Это работает, потому что в новом буфере справки имя команды находится вверху буфера под курсором иM-n
извлекает его в минибуфер.Однако, если вы хотите добавлять команду при
extended-command-history
каждом посещении ее документации, то вы можете сделать это с помощью небольшого совета:или используя новый макрос,
define-advice
только что добавленный в 25.0.50:источник
(interactive)
?(commandp function)
проверяет, что искомая функция является интерактивной, потому что только команды должны быть добавленыextended-command-history
. Поэтому, если искомая функция не является интерактивной, она не добавляетсяextended-command-history
.Если вы используете
helm-M-x
, вам не нужно вводить текстC-h f
для просмотра документации команд, просто используйтеC-j
илиC-z
во время работыhelm-M-x
для переключения отображения документации.Смотрите также особенности Helm Mx .
источник