Mx와 Ch f가 역사를 공유하는 방법?


11

를 사용하여 명령 설명서를 살펴본 후 즉시 C-h f명령을 호출하는 것이 일반적입니다 M-x.

지금 "마지막 뷰 명령을 호출"하는 가장 짧은 방법은 이름을 (도움말 버퍼 또는 기록에서) 복사하여 M-x미니 버퍼 프롬프트에 넣는 것 입니다.

내가 정말로 원하는 것은 주어진 명령 이름 describe-function이의 역사의 일부가되도록하는 것입니다 execute-extended-command. 그래서 나는 단지 할 수 있었다 M-x M-p RET.

가장 쉬운 방법은 무엇입니까?


1
대답은 아니지만 워크 플로를 개선 할 수 있습니다. smexhelm-M-x? 전자는 MELPA에 있고 후자는 MELPA에 포함되어 helm있습니다.
Ehvince

답변:


7

"가장 쉬운 방법"은 자신의 버전을 정의 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-historyHISTORY


8

귀하의 질문에 정확한 답변을 추가 할 수는 없지만 그에 대한 필요성을 제거하는 워크 플로를 추가 할 수 있습니다.

smex대신에 사용 합니다 execute-extended-command. 미니 버퍼에 일단 smex:

  • RET 전화 execute-extended-command
  • C-h f 전화 smex-describe-function
  • M-. 전화 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)))

6

도움말 버퍼에서 명령을 매우 쉽게 호출 할 수 있습니다. 입력 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-advice25.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)합니까?
mbork

(commandp function)명령 만 추가해야하므로 조회 기능이 대화식인지 확인합니다 extended-command-history. 조회 기능이 대화식이 아닌 경우에는 추가되지 않습니다 extended-command-history.
link0ff

아, 나는 그것을 놓쳤다. 설명 주셔서 감사합니다!
mbork

1

를 사용하는 경우 명령 설명서를 조회하기 helm-M-x위해 입력 C-h f할 필요가 없습니다. C-j또는 설명서를 표시하기 위해 C-z실행 helm-M-x하는 동안 또는를 사용하십시오.

Helm Mx의 기능 도 참조하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.