답변:
"가장 쉬운 방법"은 자신의 버전을 정의 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
대신에 사용 합니다 execute-extended-command
. 미니 버퍼에 일단 smex
:
execute-extended-command
smex-describe-function
smex-find-function
기본 바인딩이 마음에 들지 않으므로 사용자 정의했습니다.
(eval-after-load 'smex
`(defun smex-prepare-ido-bindings ()
(define-key ido-completion-map (kbd "TAB") 'minibuffer-complete)
(define-key ido-completion-map (kbd "C-,") 'smex-describe-function)
(define-key ido-completion-map (kbd "C-w") 'smex-where-is)
(define-key ido-completion-map (kbd "C-.") 'smex-find-function)
(define-key ido-completion-map (kbd "C-a") 'move-beginning-of-line)
(define-key ido-completion-map "\C-i" 'smex-helm)))
도움말 버퍼에서 명령을 매우 쉽게 호출 할 수 있습니다. 입력 C-h f
후을 입력하십시오 M-x M-n RET
. 이것은 새로운 도움말 버퍼에서 명령 이름이 커서 아래의 버퍼 상단에 M-n
있고 미니 버퍼로 검색하기 때문에 작동합니다.
그러나 extended-command-history
설명서를 방문 할 때마다 명령을 추가하려는 경우 다음과 같은 작은 조언으로이를 수행 할 수 있습니다.
(defun describe-function-extended-command-history (function)
"Add command name to the history."
(when (commandp function)
(add-to-history 'extended-command-history (symbol-name function))))
(advice-add 'describe-function :before #'describe-function-extended-command-history)
또는 define-advice
25.0.50에 방금 추가 된 새로운 매크로를 사용하는 경우 :
(define-advice describe-function (:before (function))
"Add command name to the history."
(when (commandp function)
(add-to-history 'extended-command-history (symbol-name function))))
(interactive)
합니까?
(commandp function)
명령 만 추가해야하므로 조회 기능이 대화식인지 확인합니다 extended-command-history
. 조회 기능이 대화식이 아닌 경우에는 추가되지 않습니다 extended-command-history
.
를 사용하는 경우 명령 설명서를 조회하기 helm-M-x
위해 입력 C-h f
할 필요가 없습니다. C-j
또는 설명서를 표시하기 위해 C-z
실행 helm-M-x
하는 동안 또는를 사용하십시오.
Helm Mx의 기능 도 참조하십시오 .
smex
및helm-M-x
? 전자는 MELPA에 있고 후자는 MELPA에 포함되어helm
있습니다.