'Y' টাইপ না করে আমি কীভাবে তত্ক্ষণাত এডিফ ছাড়তে পারি


13

আমি যখন এডিফ ছাড়ি তখন আমাকে qজিজ্ঞাসা করা হয় আমি সত্যিই প্রস্থান করতে চাই কিনা if আমি বরং এটি তাত্ক্ষণিকভাবে ছেড়ে দিতে চাই। কাস্টমাইজেশনের অধীনে সুস্পষ্ট কিছুই নেই । এখানে একটি সমাধান রয়েছে যা মনে হয় qকীটি পুনরায় সংজ্ঞায়িত করে কাজ করবে তবে আমি কীভাবে ফাংশনটি কাজ করে তার বিশদ সম্পর্কে নিশ্চিত নই। সত্যিকার অর্থে প্রস্থান করার সহজ উপায় কি?

উত্তর:


13

আপনি পরামর্শ দিতে ediff-quitপারেন যাতে এটি কার্যকরভাবে y-or-n-pকোনও ফাংশনে ফেরত দেয় যা ফিরে আসে t

(defun disable-y-or-n-p (orig-fun &rest args)
  (cl-letf (((symbol-function 'y-or-n-p) (lambda (prompt) t)))
    (apply orig-fun args)))

(advice-add 'ediff-quit :around #'disable-y-or-n-p)

এটি পুনরায় সংজ্ঞায়নের চেয়ে প্রবাহের পরিবর্তনগুলিতে আরও দৃust় ediff-quit


যদি এটি সূচিত হয় যে যদি কোনও ভিন্ন ভিন্ন বাফার পরিবর্তন হয় তবে এটি সঠিক।
কোডিচান

5

দুর্ভাগ্যবশত আমি মনে করি আপনাকে হয় কিউ রিবাইন্ড করতে হবে বা এর উত্স সামঞ্জস্য করতে হবে ediff-quitediff-quitপ্রম্পটের উত্স হিসাবে স্পষ্ট হয় সর্বদা ঘটে।

(defun ediff-quit (reverse-default-keep-variants)
  "Finish an Ediff session and exit Ediff.
Unselects the selected difference, if any, restores the read-only and modified
flags of the compared file buffers, kills Ediff buffers for this session
\(but not buffers A, B, C\).

If `ediff-keep-variants' is nil, the user will be asked whether the buffers
containing the variants should be removed \(if they haven't been modified\).
If it is t, they will be preserved unconditionally.  A prefix argument,
temporarily reverses the meaning of this variable."
  (interactive "P")
  (ediff-barf-if-not-control-buffer)
  (let ((ctl-buf (current-buffer))
    (ctl-frm (selected-frame))
    (minibuffer-auto-raise t))
    (if (y-or-n-p (format "Quit this Ediff session%s? "
              (if (ediff-buffer-live-p ediff-meta-buffer)
                  " & show containing session group" "")))
    (progn
      (message "")
      (set-buffer ctl-buf)
      (ediff-really-quit reverse-default-keep-variants))
      (select-frame ctl-frm)
      (raise-frame ctl-frm)
      (message ""))))

আমি ediff-quitআপনার নতুন সংজ্ঞা .emacsদেওয়ার এবং উত্সটিতে একটি প্যাচ জমা দেওয়ার জন্য একটি কাস্টমাইজেশন ভেরিয়েবল যুক্ত করার পরামর্শ দেব ।

মনে রাখবেন যে ইমাসে বাস্তবায়ন উত্স সর্বদা কয়েক কীস্ট্রোক দূরে থাকে। অনুমান করে যে এলিস্প উত্স ইনস্টল করা আছে, টাইপ করুন C-h f, ফাংশনটির নাম লিখুন এবং এটি সংজ্ঞায়িত হয়েছে যেখানে লিঙ্কটি অনুসরণ করুন।


1

আমি নীচে রিফাইন্ডটি এডিমে ব্যবহার করি। যদি কোনও বাফার সংশোধিত হয় তবে সেগুলি সেভ করতে হবে কিনা তা জিজ্ঞাসা করে, তবে এটি কেবল প্রস্থান করে। যদি কোনও বাফার সংশোধিত না হয় তবে এটি কেবল প্রস্থান করে।

(add-hook 'ediff-startup-hook
          (lambda ()
            (local-set-key (kbd"q") 'my-ediff-quit)))

(defun my-ediff-quit ()
  "If any of the ediff buffers have been modified, ask if changes
should be saved. Then quit ediff normally, without asking for
confirmation"
  (interactive)
  (ediff-barf-if-not-control-buffer)
  (let* ((buf-a ediff-buffer-A)
         (buf-b ediff-buffer-B)
         (buf-c ediff-buffer-C)
         (ctl-buf (current-buffer))
         (modified (remove-if-not 'buffer-modified-p
                                  (list buf-a buf-b buf-c))))
    (let ((save (if modified (yes-or-no-p "Save changes?")nil)))
      (loop for buf in modified do
            (progn
              (set-buffer buf)
              (if save
                  (save-buffer)
                (set-buffer-modified-p nil))))
      (set-buffer ctl-buf)
      (ediff-really-quit nil))))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.