मैं स्पष्ट दृष्टिकोण लगता है कि एक समारोह जो वर्तमान बफर सामग्री को मारता होगा, और फिर फ़ाइल से वर्तमान सामग्री में पढ़ने के लिए insert-file
पर कॉल करें।
यदि फ़ाइल में किए गए परिवर्तनों में वर्ण एन्कोडिंग में परिवर्तन शामिल हैं, तो समस्या हो सकती है? मैंने इसका परीक्षण नहीं किया है।
मेरा वर्तमान प्रयास यहां है। यह थोड़ा बालों वाला आईएमओ है, लेकिन यह ठीक काम करता है।
;; Allow buffer reverts to be undone
(defun my-revert-buffer (&optional ignore-auto noconfirm preserve-modes)
"Revert buffer from file in an undo-able manner."
(interactive)
(when (buffer-file-name)
;; Based upon `delphi-save-state':
;; Ensure that any buffer modifications do not have any side
;; effects beyond the actual content changes.
(let ((buffer-read-only nil)
(inhibit-read-only t)
(before-change-functions nil)
(after-change-functions nil))
(unwind-protect
(progn
;; Prevent triggering `ask-user-about-supersession-threat'
(set-visited-file-modtime)
;; Kill buffer contents and insert from associated file.
(widen)
(kill-region (point-min) (point-max))
(insert-file-contents (buffer-file-name))
;; Mark buffer as unmodified.
(set-buffer-modified-p nil))))))
(defadvice ask-user-about-supersession-threat
(around my-supersession-revert-buffer)
"Use my-revert-buffer in place of revert-buffer."
(let ((real-revert-buffer (symbol-function 'revert-buffer)))
(fset 'revert-buffer 'my-revert-buffer)
;; Note that `ask-user-about-supersession-threat' calls
;; (signal 'file-supersession ...), so we need to handle
;; the error in order to restore revert-buffer.
(unwind-protect
ad-do-it
(fset 'revert-buffer real-revert-buffer))))
(ad-activate 'ask-user-about-supersession-threat)
Annoyingly, मैं केवल अभी revert-buffer
डॉक्स में सभी प्रासंगिक दिखने जानकारी देखा है, इसलिए वहाँ शायद एक ज्यादा सरल यह करने के लिए रास्ता नहीं है।
तो revert-buffer-function
का मूल्य गैर नहीं के बराबर है, यह को कहा जाता है इस आदेश के लिए सब काम करते हैं। अन्यथा, हुक before-revert-hook
और after-revert-hook
शुरुआत और अंत में चल रहे हैं, और यदि revert-buffer-insert-file-contents-function
गैर-शून्य है, तो इसे देखी गई फ़ाइल सामग्री को फिर से पढ़ने के बजाय कहा जाता है।
मुझे लगता है कि यह एक बहुत अच्छा दृष्टिकोण है। मैं खुद को tweaking पर जाने के लिए जा रहा हूँ। धन्यवाद! – Sarah
आपका स्वागत है। मैंने उस कोड के साथ कुछ समस्याओं के समाधान का पता लगाया है, और जवाब अपडेट किया है: अब यह अद्यतन बफर को अनमोडिफाइड के रूप में सेट करता है, और मैंने पाया कि '(सेट-विज़िट-फाइल-मोडटाइम)' इसे रोकने से रोकने का तरीका था मुसीबत। इसका अर्थ यह है कि यदि आप रिवर्ट को पूर्ववत करते हैं, तो यह अब आपको फिर से सवाल नहीं पूछता है यदि आप फ़ाइल को दोबारा संशोधित करने का प्रयास करते हैं, जो मूल कार्यक्षमता को ध्यान में रखते हुए निश्चित रूप से अधिक है। यदि आप एक बेहतर समाधान के साथ आते हैं, तो कृपया यहां एक नया उत्तर पोस्ट करें। – phils