আমি কীভাবে দ্রুত একই প্রধান মোডযুক্ত ফাইল এবং একটি স্ক্র্যাচ * বাফারের মধ্যে টগল করতে পারি?


24

কোনও কোডে কাজ করার সময়, সেই কোড ফাইল থেকে একটি স্নিপেট পেস্ট করার জন্য খুব দ্রুত * স্ক্র্যাচ * বাফারটি খোলার পক্ষে দরকারী।

আমি যদি পার্ল স্ক্রিপ্টে কাজ করছি, আমি দ্রুত একটি স্ক্র্যাচ * বাফারটি ইন-এর সাথে খুলতে চাই cperl-mode। আমি মূলত যে কোডে বাফারটিতে কাজ করছিলাম সেটিতে দ্রুত ফিরে যেতে খুব ভাল লাগবে।

উত্তর:


26

নীচের ফাংশনটি আপনার পছন্দের কী বাঁধাই করা সুবিধাজনক হবে। আপনি বর্তমানে একটি উপর কাজ করেন, তাহলে FILEবাফার, কলিং ফাংশন নিচে মধ্যে টগল হবে FILE'প্রধান-মোড নির্দিষ্ট * আঁচড়ের দাগ * নামক বাফার গুলি *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)))

আমি কীভাবে এই ফাংশনের জন্য ডায়ার্ড মোড, টার্ম মোড এবং অন্যান্য অ সম্পাদনীয় মোডকে বাদ দিতে পারি?
Godblessfq

@godblessfq আমি সম্প্রতি আমার কনফিগারেশনে এটি ঠিক করেছিলাম । আপাতত আপনি সেখান থেকে সেই সংস্করণটি পেতে পারেন। আমি একটি কম্পিউটারে এলে আমি এই উত্তরটি আপডেট করব update
দক্ষ মোদী

@godblessfq আমি উত্তর আপডেট করেছি। এটি ব্যবহার করে দেখুন এবং দেখুন এটি আপনার পক্ষে কাজ করে কিনা।
कौशल মোদী

একটি যাদুমন্ত্র মত কাজ করে!
Godblessfq
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.