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


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.