मैं 'y' टाइप किए बिना तुरंत एडिफ़ कैसे छोड़ सकता हूं


13

जब मैंने एडिफ़ छोड़ दिया qतो मैंने पूछा कि क्या मैं वास्तव में छोड़ना चाहता हूं। मैं इसे तुरंत छोड़ देना चाहते थे। अनुकूलन के तहत कुछ भी स्पष्ट नहीं है । यहाँ एक समाधान है जो 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)

यह पुनर्परिवर्तन की तुलना में अपस्ट्रीम परिवर्तनों के लिए अधिक मजबूत है ediff-quit


यदि यह सूचित करता है कि यदि कोई अलग-अलग बफर बदल गया, तो यह सही होगा।
कोडिचन

5

दुर्भाग्य से मुझे लगता है कि आपको या तो क्यू को रिबंड करना होगा या स्रोत को समायोजित करना होगा ediff-quit। जैसा ediff-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और एक अनुकूलन चर जोड़ने वाले स्रोत को एक पैच जमा करना।

याद रखें कि emacs में कार्यान्वयन स्रोत हमेशा कुछ कीस्ट्रोक्स से दूर होता है। यह मानते हुए कि अपरिहार्य स्रोत स्थापित किए गए हैं, टाइप C-h fकरें, फ़ंक्शन नाम दर्ज करें और उस लिंक का अनुसरण करें जहां इसे परिभाषित किया गया है।


1

मैं ediff में q के निम्नलिखित विद्रोह का उपयोग करता हूं। यदि बफ़र्स में से किसी को संशोधित किया जाता है, तो यह पूछता है कि क्या उन्हें बचाया जाना है, तो यह बस समाप्त हो जाता है। यदि कोई बफ़र्स को संशोधित नहीं किया जाता है, तो यह केवल क्विट करता है।

(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))))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.