Mx और Ch f का इतिहास कैसे साझा करें?


11

यह काफी सामान्य है कि मैं एक कमांड के दस्तावेज के माध्यम से C-h fदेखूंगा, और उसके M-xतुरंत बाद कमांड को लागू करूंगा ।

अभी, मैंने "अंतिम दृश्य कमांड को लागू करने" के लिए सबसे छोटा तरीका अपना नाम कॉपी किया है (या तो मदद बफर से या इतिहास से) और इसे M-x'मिनीबफ़र प्रॉम्प्ट' में छोड़ दिया।

मैं वास्तव में क्या पसंद करूंगा, जो कमांड के नाम describe-functionके इतिहास के हिस्से के रूप में दिया गया है execute-extended-command। तो मैं बस कर सकता था M-x M-p RET

ऐसा करने का सबसे आसान तरीका क्या है?


1
उत्तर नहीं, लेकिन अपने वर्कफ़्लो में सुधार करेंगे: क्या आपने के बारे में सुना है smexऔर helm-M-x? पूर्व MELPA में है, बाद वाले को helmMELPA में शामिल किया गया है।
एहविंस

जवाबों:


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

हेल्म एमएक्स की विशेषताओं को भी देखें ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.