2010-02-17 13 views

उत्तर

16

Emacs वास्तव में यहां आपकी सहायता करने की कोशिश कर रहा है। Protection against Simultaneous Editing पर जानकारी पृष्ठ पढ़ें।

लेकिन, आप अभी भी उस संदेश/शीघ्र, तुम समारोह है कि क्या कर रहा है फिर से परिभाषित कर सकते हैं से बचने के लिए चाहते हैं, तो उत्साह:

(defun ask-user-about-supersession-threat (fn) 
    "blatantly ignore files that changed on disk" 
) 
(defun ask-user-about-lock (file opponent) 
    "always grab lock" 
    t) 

दूसरा समारोह वहाँ जब दो लोग Emacs उपयोग कर रहे हैं संपादित करने के लिए के लिए है एक ही फाइल, और एक समान संकेत प्रदान करेगी (लेकिन वह नहीं जिसे आप प्रश्न में संदर्भित करते थे)।

मैं दो दिनचर्या को ओवरराइड करने के खिलाफ सलाह दूंगा, लेकिन अगर आप चाहें तो वहां है।


ऑफ मौके पर global-auto-revert-mode चालू है, तो आप इसे अक्षम कर सकते हैं। यह आपके .emacs में जोड़ें:

(global-auto-revert-mode -1) 

अगर मोड एक ही नाम के चर को देखकर पर है आप बता सकते हैं:

C-h v global-auto-revert-mode RET 

यदि मान, t है तो मोड पर है , अन्यथा यह बंद है।

+4

एक बहुत ऊपर आता है जब/MNT/hgfs में VMWare में Emacs और editting फ़ाइलों चल (लिंक्स मशीन फ़ोल्डर होस्ट करने के लिए)। वीएमवेयर की घड़ी मेजबान के साथ सिंक हो जाती है - मौलिक रूप से, आप टाइम सिस्टम कॉल का परिणाम भी समय पर पीछे कूद सकते हैं। तो, ... क्या किसी विशिष्ट निर्देशिका में फ़ाइलों को संपादित करते समय केवल चेक को अक्षम करना संभव है? (उदा।/mnt/hgfs?) – user48956

+1

देशी/होस्ट ओएसएक्स पर फ़ाइलों को संशोधित करने के लिए ओएसएक्स पर समांतरों के माध्यम से विंडोज़ पर Emacs का उपयोग करते समय यह वर्कअराउंड भी आवश्यक है। 'Ask-user-about-suppression-danger' को संशोधित करने के अलावा, मैंने' defalas' के साथ 'मूल-बचत-बफर' भी संशोधित किया और एक नया फ़ंक्शन जो छोड़ा/हटा देता है: '(या (सत्यापित-देखी गई-फ़ाइल- मोडटाइम (वर्तमान-बफर)) (नहीं (फ़ाइल-अस्तित्व-पी बफर-फ़ाइल-नाम)) (हाँ-या-नो-पी (प्रारूप "% s विज़िट या सहेजे जाने के बाद बदल गया है। वैसे भी सहेजें?" (फ़ाइल-नाम -nondirectory बफर-फ़ाइल-नाम))) (उपयोगकर्ता-त्रुटि "पुष्टि नहीं की पुष्टि करें")) '। – lawlist

+0

Emacs वास्तव में जांच करनी चाहिए कि फ़ाइल की सामग्री बदल गई है और न केवल टाइमस्टैम्प। हर बार जब मैं गिट शाखाओं को अस्थायी रूप से स्विच करता हूं और वापस स्विच करता हूं (या गिट स्टैश सेव/पॉप) तो यह मेरे सभी बफर पर होता है। * संपादित करें * ने अभी @doublep के उत्तर की खोज की है – EoghanM

9

मुझे इससे परेशान था क्योंकि हर बार जब मैंने गिट में शाखाएं बदल दीं, तो एमएक्स ने सोचा कि मेरी सभी फाइलें बदली गई हैं।

Revbuffs आपको इसके लक्षणों का सामना करने में मदद करता है। यह आपको अपने सभी बफर को फिर से लोड करने की अनुमति देता है।

आप (global-auto-revert-mode) भी कोशिश कर सकते हैं जो आपकी फ़ाइलों को डिस्क पर जो भी स्वचालित रूप से वापस कर देगा।

8

मेरे पास .emacs में निम्न है। यह Emacs केवल वास्तव में बदली गई फ़ाइलों के बारे में पूछता है। यदि एक फ़ाइल वैसे ही बनी हुई है, तो बस इसका टाइमस्टैम्प अपडेट किया जाता है, जैसा कि अक्सर होता है जब आप वीसीएस में शाखाएं स्विच करते हैं, तो यह "परिवर्तन" Emacs द्वारा अनदेखा किया जाता है।

;; Ignore modification-time-only changes in files, i.e. ones that 
;; don't really change the contents. This happens often with 
;; switching between different VC buffers. 

(defun update-buffer-modtime-if-byte-identical() 
    (let* ((size  (buffer-size)) 
     (byte-size (position-bytes size)) 
     (filename buffer-file-name)) 
    (when (and byte-size (<= size 1000000)) 
     (let* ((attributes (file-attributes filename)) 
      (file-size (nth 7 attributes))) 
     (when (and file-size 
        (= file-size byte-size) 
        (string= (buffer-substring-no-properties 1 (1+ size)) 
          (with-temp-buffer 
           (insert-file-contents filename) 
           (buffer-string)))) 
      (set-visited-file-modtime (nth 5 attributes)) 
      t))))) 

(defun verify-visited-file-modtime--ignore-byte-identical (original &optional buffer) 
    (or (funcall original buffer) 
     (with-current-buffer buffer 
     (update-buffer-modtime-if-byte-identical)))) 
(advice-add 'verify-visited-file-modtime :around #'verify-visited-file-modtime--ignore-byte-identical) 

(defun ask-user-about-supersession-threat--ignore-byte-identical (original &rest arguments) 
    (unless (update-buffer-modtime-if-byte-identical) 
    (apply original arguments))) 
(advice-add 'ask-user-about-supersession-threat :around #'ask-user-about-supersession-threat--ignore-byte-identical) 
+0

+1 यह मेरे विचार के समान ही है, लेकिन यह केवल तभी काम करेगा जब बफर में सहेजे गए परिवर्तन नहीं हैं। मैं सोच रहा था कि मैं बफर SHA1s (या MD5 या जो भी फ्लाई पर गणना करने के लिए पर्याप्त सस्ता है और संघर्ष के खिलाफ पर्याप्त मजबूत है) की एक assoc सरणी बनाए रखेगा और जब भी कोई नई फ़ाइल देखी जाती है या जब भी मैं फ़ाइल सहेजता हूं उसे अपडेट करता हूं। फिर यदि अद्यतन टाइमस्टैम्प वाली फ़ाइल में एक ही हैश है, तो अलर्ट अनावश्यक है। – tripleee

+0

हां, जैसा आपने वर्णन किया है वैसा ही है और उस अनचाहे मामले में है। लेकिन यह मेरे लिए पर्याप्त है, क्योंकि मेरे पास अक्सर बफर को बचाने की आदत है। – doublep

+0

@doublep आप मेरे नायक हैं! – EoghanM

3

मेरे मामले में मैं चाहता था:

(setq revert-without-query '(".*")) 

revert-without-query के लिए प्रलेखन:

Specify which files should be reverted without query. 
The value is a list of regular expressions. 
If the file name matches one of these regular expressions, 
then ‘revert-buffer’ reverts the file without querying 
if the file has changed on disk and you have not edited the buffer. 
संबंधित मुद्दे