अपनी पसंद के एक प्रमुख बंधन के लिए नीचे के फ़ंक्शन को बांधना सुविधाजनक होगा। यदि आप वर्तमान में एक 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)))