"वास्तव में बफर को संपादित करें", क्या Emacs ने ediff-current-file को स्वचालित रूप से चलाया है?


12

प्रसंग

जब एमएसीएस पता लगाता है कि संपादन बफर के बाहर एक फ़ाइल बदल गई थी।

देखे गए

एमएसीएस पूछेगा:

somefilename डिस्क में बदल गया; क्या वास्तव में बफर संपादित करें? (y, n, r या Ch)

(संयोग से, कभी-कभी ऐसा भी होता है जब कोई वास्तविक परिवर्तन नहीं होता है, जैसे कि बहाव वाली घड़ी वाले सर्वर पर दूरस्थ फ़ाइल, लेकिन प्रश्न सभी मामलों में दिलचस्प है।)

कामना

emacs पूछना होगा:

somefilename डिस्क में बदल गया; क्या वास्तव में बफर संपादित करें? (y, n, r, d या Ch)

दबाने से dसंस्करणों के बीच का अंतर दिखाई देगा, उदाहरण के लिए, जो अंतरों ediff-current-fileको अंतरिम रूप से चलने देता है।

अतिरिक्त जानकारी

यह उसी तरह होगा जैसा कि डेबियन पैकेज प्रबंधन करता है जब यह पता लगाता है कि स्थानीय रूप से अनुकूलित एक कॉन्फ़िगर फ़ाइल अपने ही पैकेज के नए संस्करण द्वारा अपडेट की जाती है। उदाहरण के लिए देखें कॉन्फ़िगरेशन फ़ाइल / etc / default / grub का एक नया संस्करण उपलब्ध है, लेकिन वर्तमान में इंस्टॉल किया गया संस्करण स्थानीय रूप से संशोधित किया गया है - Unix और Linux Stack Exchange

पूछने से पहले खोजें

मैं आमतौर पर समाधान के लिए अपना रास्ता ढूंढता हूं (उदाहरण के लिए emacsclient - एक बाहरी स्क्रिप्ट से, फ़ाइल खोलें और कुछ सरल अभिव्यक्ति चलाएं कि क्या emacs पहले से चल रहा है या नहीं - Emacs Stack Exchange ) लेकिन इस पर खोज करने के बाद मुझे कोई पूर्व-मौजूदा समाधान नहीं मिला।

मैं इसे स्वयं समायोजित करने पर विचार करूंगा लेकिन एमएसीएस-लिस्प और एमएसीएस इंटर्नल में पर्याप्त कुशल नहीं हूं।

समाधान का स्केच

  • दबाने C-gफिर 'एमएक्स ediff-वर्तमान-file` कुछ कीस्ट्रोक्स की कीमत पर काम करता है,।
  • यहां लक्ष्य ediff-current-fileउपरोक्त संकेत पर एक कुंजीपट पर चलना होगा ।


@ गिल्स धन्यवाद। हाँ, संबंधित और अलग। आप लिंक फ़ाइल खोलने के समय के बारे में है। यहां यह फाइल सेविंग टाइम के बारे में है।
स्टीफन गौरिचोन

जवाबों:


2

मैं वास्तव ask-user-about-supersession-threatमें फ़ाइल में पाया emacs स्रोत में "बफर को वास्तव में संपादित करें" के लिए greppinguserlock.el

dकॉलिंग के लिए एक विकल्प जोड़ना सीधा लगता है ediff-current-file। मैंने इसे बड़े पैमाने पर परीक्षण नहीं किया है, हालांकि ( ;;-टिप्पणियों के साथ चिह्नित )।

(defun ask-user-about-supersession-threat (fn)
  "Ask a user who is about to modify an obsolete buffer what to do.
This function has two choices: it can return, in which case the modification
of the buffer will proceed, or it can (signal 'file-supersession (file)),
in which case the proposed buffer modification will not be made.

You can rewrite this to use any criterion you like to choose which one to do.
The buffer in question is current when this function is called."
  (discard-input)
  (save-window-excursion
    (let ((prompt
       (format "%s changed on disk; \
really edit the buffer? (y, n, r, d or C-h) " ;;- changed
           (file-name-nondirectory fn)))
      (choices '(?y ?n ?r ?d ?? ?\C-h))       ;;- changed
      answer)
      (while (null answer)
    (setq answer (read-char-choice prompt choices))
    (cond ((memq answer '(?? ?\C-h))
           (ask-user-about-supersession-help)
           (setq answer nil))
          ((eq answer ?r)
           ;; Ask for confirmation if buffer modified
           (revert-buffer nil (not (buffer-modified-p)))
           (signal 'file-supersession
               (list "File reverted" fn)))
          ((eq answer ?d)                     ;;- added
           (ediff-current-file))              ;;- added
          ((eq answer ?n)
           (signal 'file-supersession
               (list "File changed on disk" fn)))))
      (message
       "File on disk now will become a backup file if you save these changes.")
      (setq buffer-backed-up nil))))

Ubuntu 16.04 पर emacs 46.1 पर अच्छी तरह से काम करने लगता है। धन्यवाद!
स्टीफन गौरिचोन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.