मैं एक ही प्रमुख मोड वाली फाइल और * स्क्रैच * बफर के बीच जल्दी से कैसे टॉगल कर सकता हूं?


24

किसी कोड पर काम करते समय, उस कोड फ़ाइल से स्निपेट को चिपकाने के लिए * स्क्रैच * बफर को जल्दी से खोलना उपयोगी होता है।

अगर मैं एक पर्ल स्क्रिप्ट पर काम कर रहा हूं, तो मैं जल्दी से एक * स्क्रैच * बफर के साथ खोलना चाहूंगा cperl-mode। यह भी जल्दी से कोड बफर मैं मूल रूप से काम कर रहा था पर वापस कूदना अच्छा होगा।

जवाबों:


26

अपनी पसंद के एक प्रमुख बंधन के लिए नीचे के फ़ंक्शन को बांधना सुविधाजनक होगा। यदि आप वर्तमान में एक FILEबफर पर काम कर रहे हैं , तो नीचे दिए गए फ़ंक्शन को कॉल करने से FILE's प्रमुख-मोड विशिष्ट * स्क्रैच * बफर *scratch-MAJOR-MODE*और बफर कहा जाता है FILE।

प्रश्न में उदाहरण को देखते हुए, यदि मैं एक पर्ल स्क्रिप्ट पर काम कर रहा हूं जिसे myperl.plकॉल किया जाता है , तो इस फ़ंक्शन को कॉल करने के बीच myperl.plऔर टॉगल किया जाएगा *scratch-cperl-mode*।

(defun modi/switch-to-scratch-and-back (&optional arg)
  "Toggle between *scratch-MODE* buffer and the current buffer.
If a scratch buffer does not exist, create it with the major mode set to that
of the buffer from where this function is called.

        COMMAND -> Open/switch to a scratch buffer in the current buffer's major mode
    C-0 COMMAND -> Open/switch to a scratch buffer in `fundamental-mode'
    C-u COMMAND -> Open/switch to a scratch buffer in `org-mode'
C-u C-u COMMAND -> Open/switch to a scratch buffer in `emacs-elisp-mode'

Even if the current major mode is a read-only mode (derived from `special-mode'
or `dired-mode'), we would want to be able to write in the scratch buffer. So
the scratch major mode is set to `org-mode' for such cases.

Return the scratch buffer opened."
  (interactive "p")
  (if (and (or (null arg)               ; no prefix
               (= arg 1))
           (string-match-p "\\*scratch" (buffer-name)))
      (switch-to-buffer (other-buffer))
    (let* ((mode-str (cl-case arg
                       (0  "fundamental-mode") ; C-0
                       (4  "org-mode") ; C-u
                       (16 "emacs-lisp-mode") ; C-u C-u
                       ;; If the major mode turns out to be a `special-mode'
                       ;; derived mode, a read-only mode like `help-mode', open
                       ;; an `org-mode' scratch buffer instead.
                       (t (if (or (derived-mode-p 'special-mode) ; no prefix
                                  (derived-mode-p 'dired-mode))
                              "org-mode"
                            (format "%s" major-mode)))))
           (buf (get-buffer-create (concat "*scratch-" mode-str "*"))))
      (switch-to-buffer buf)
      (funcall (intern mode-str))   ; http://stackoverflow.com/a/7539787/1219634
      buf)))

मैं इस फ़ंक्शन के लिए dired मोड, टर्म मोड और अन्य गैर संपादन योग्य मोड को कैसे छोड़ सकता हूं?
— godblessfq

@godblessfq मैंने अभी हाल ही में अपने कॉन्फिगर में तय किया था । अभी के लिए आप उस संस्करण को वहां से प्राप्त कर सकते हैं। कंप्यूटर पर मिलने पर मैं इस उत्तर को अपडेट करूंगा।
— कौशल मोदी

@godblessfq मैंने उत्तर को अपडेट कर दिया है। इसे आज़माएं और देखें कि क्या यह आपके लिए काम करता है।
— कौशल मोदी

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