Mx ve Ch f'nin geçmişi nasıl paylaşacağı?


11

Bir komutun belgelerine bakacağım C-h fve M-xhemen ardından komutu çağıracağım oldukça yaygın .

Şu anda, “son görünüm komutunu çağırmak” için bulduğum en kısa yol, adını (yardım arabelleğinden veya geçmişten) kopyalamak ve M-xminibuffer komut istemine yönlendirmektir.

Gerçekten istediğim, verilen komut isimlerinin describe-functiontarihinin bir parçası olması execute-extended-command. Böylece yapabilirim M-x M-p RET.

Bunu yapmanın en kolay yolu nedir?


1
Yanıt değil, ancak iş akışınızı iyileştirir: duydunuz mu smexve helm-M-x? birincisi MELPA'da, ikincisi MELPA'ya dahildir helm.
Ehvince

Yanıtlar:


7

"En kolay yol" sadece kendi sürümünüzü tanımlamak describe-functionve buna bağlamaktır C-h f.

Vanilya kodunu alın ve çağrıyı yalnızca ( ) ile completing-readaynı geçmiş listesini kullanacak şekilde değiştirin .M-xexecute-extended-commandextended-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)

Orijinal kodu nasıl buldum? C-h f describe-function, C-h k M-x, C-h f execute-extended-command. İçin kodunda execute-extended-commandbunu kullanarak komut adını okur o testere read-extended-commandve bu aramaların completing-readgeçen extended-command-historyolarak HISTORYargüman.


8

Sorunuza kesin bir cevap değil, buna olan ihtiyacı ortadan kaldıran bir iş akışı ekleyebilirim.

Bunun smexyerine kullanıyorum execute-extended-command. Bir kez minibuffer'da smex:

  • RET aramalar execute-extended-command
  • C-h f aramalar smex-describe-function
  • M-. aramalar smex-find-function

Varsayılan bağlantıları sevmiyorum, bu yüzden onları özelleştirdim:

(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

Komutu Yardım arabelleğinden çağırmanın çok kolay olduğunu lütfen unutmayın. Yazdıktan sonra C-h fsadece yazın M-x M-n RET. Bu, yeni bir Yardım arabelleğinde komut adının imlecin altındaki arabelleğin üstünde M-nolması ve minibuffer'a alması nedeniyle çalışır.

Bununla birlikte, extended-command-historybelgelerini her ziyaret ettiğinizde bir komut eklemek istiyorsanız, bunu küçük bir tavsiye ile yapabilirsiniz:

(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)

veya define-advice25.0.50'de yeni eklenen makroyu kullanarak :

(define-advice describe-function (:before (function))
  "Add command name to the history."
  (when (commandp function)
    (add-to-history 'extended-command-history (symbol-name function))))

Aranan işlev değilse ne olur (interactive)?
mbork

(commandp function)yalnızca komutların eklenmesi gerektiğinden, aranan işlevin etkileşimli olup olmadığını denetler extended-command-history. Dolayısıyla, aranan işlev etkileşimli değilse, eklenmez extended-command-history.
link0ff

Ah, bunu özledim. Açıklama için teşekkürler!
mbork

1

Kullanırsanız helm-M-x, C-h fkomutların belgelerine bakmak için yazmaya gerek yoktur , sadece çalışırken C-jveya belgelerin görüntüsünü değiştirmek için kullanın . C-zhelm-M-x

Ayrıca bkz. Helm Mx'in özellikleri .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.