"Найпростіший спосіб" - це просто визначити свою власну версію describe-function
і прив'язати її до C-h f
.
Візьміть код ванілі та змініть лише виклик на completing-read
так, щоб він використовував той самий список історії, який M-x
( execute-extended-command
) використовує, який є extended-command-history
.
(defun my-describe-function (function)
"Display the full documentation of FUNCTION (a symbol)."
(interactive
(let ((fn (function-called-at-point))
(enable-recursive-minibuffers t)
val)
(setq val (completing-read
(if fn
(format "Describe function (default %s): " fn)
"Describe function: ")
obarray 'fboundp t nil
'extended-command-history ; <======================
(and fn (symbol-name fn))))
(list (if (equal val "") fn (intern val)))))
(if (null function)
(message "You didn't specify a function")
(help-setup-xref (list #'describe-function function)
(called-interactively-p 'interactive))
(save-excursion
(with-help-window (help-buffer)
(prin1 function)
(princ " is ")
(describe-function-1 function)
(with-current-buffer standard-output
(buffer-string))))))
(global-set-key "\C-hf" 'my-describe-function)
Як я знайшов оригінальний код? 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
іhelm-M-x
? перший - у MELPA, останній -helm
у MELPA.