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


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.