2012-01-13 3 views
6

मान लीजिए कि मैं एक बफर में टेक्स्ट का एक गुच्छा दर्ज कर रहा हूं जो फ़ाइल पर नहीं जा रहा है (यह एक नया org2blog पोस्ट हो सकता है, या सिर्फ कुछ स्क्रैच बफर हो सकता है)। यदि आपदा हमलों और इमाक्स की मृत्यु हो जाती है तो क्या इसे कहीं से बाहर करना संभव है?क्या अस्थायी बफर को स्वत: सहेजना संभव है जो फ़ाइल पर नहीं जा रहे हैं?

उत्तर

12

auto-save-mode वास्तव में गैर-फ़ाइल बफर के साथ काम करता है। यह डिफ़ॉल्ट रूप से सक्षम नहीं होता है - जो आमतौर पर (after-find-file) में होता है।

तो: एमएक्सauto-save-modeआरईटी

डिफ़ॉल्ट रूप से ऑटो को बचाने फ़ाइल बफर के default-directory (या /var/tmp या ~/ को लिखा जाएगा, लिखने की अनुमति पर निर्भर करता है; देख चौधरीvbuffer-auto-save-file-nameआरईटी) जो किसी दुर्घटना के बाद पता लगाने के लिए थोड़ा अजीब हो सकता है, इसलिए कुछ मानक को स्थापित करना शायद एक अच्छा विचार है।

निम्नलिखित यह सुनिश्चित करना होगा कि इन ऑटो को बचाने फ़ाइलों आपकी होम निर्देशिका के लिए लिखा जाता है (या एम एक्सcustomize-variableआरईटीmy-non-file-buffer-auto-save-dirआरईटी), अगर auto-save-mode सहभागी शुरू हो जाती है। उम्मीद है कि गैर-फाइल बफर के साथ auto-save-mode के किसी भी अन्य उपयोग के साथ इस विवाद से बचें (कोड उदाहरण के लिए मेल मोड का उल्लेख करता है)।

(defcustom my-non-file-buffer-auto-save-dir (expand-file-name "~/") 
    "Directory in which to store auto-save files for non-file buffers, 
when `auto-save-mode' is invoked manually.") 

(defadvice auto-save-mode (around use-my-non-file-buffer-auto-save-dir) 
    "Use a standard location for auto-save files for non-file buffers" 
    (if (and (not buffer-file-name) 
      (called-interactively-p 'any)) 
     (let ((default-directory my-non-file-buffer-auto-save-dir)) 
     ad-do-it) 
    ad-do-it)) 
(ad-activate 'auto-save-mode) 
+0

महान जानकारी निश्चित मोड 'अस्थायी कुछ का उपयोग कर बफ़र्स में स्वतः सहेजना चालू कर सकते हैं। ऑटो-सेव-मोड थोड़ा रहस्यमय रहा है, क्योंकि यह इतना अविभाज्य है (जो एक अच्छी बात है)। डिफैडवाइस के बजाय, मैंने बफर सहेजे जाने वाले नियंत्रण को नियंत्रित करने के लिए मेक-ऑटो-सेव-फ़ाइल-नाम का उपयोग किया। –

5

phils' answer अप को मंजूरी दे दी बातें मेरे लिए, लेकिन मैं कुछ अलग दृष्टिकोण का उपयोग कर समाप्त हो गया। मैं इसे दस्तावेज़ीकरण के लिए एक अलग उत्तर के रूप में पोस्ट कर रहा हूं। यहाँ मेरी स्वतः सहेजना छंद है:

;; Put autosave files (ie #foo#) in one place 
(defvar autosave-dir (concat "~/.emacs.d/autosave.1")) 
(defvar autosave-dir-nonfile (concat "~/.emacs.d/autosave.nonfile")) 
(make-directory autosave-dir t) 
(make-directory autosave-dir-nonfile t) 
(defun auto-save-file-name-p (filename) (string-match "^#.*#$" (file-name-nondirectory filename))) 
(defun make-auto-save-file-name() 
    (if buffer-file-name (concat autosave-dir "/" "#" (file-name-nondirectory buffer-file-name) "#") 
    (expand-file-name (concat autosave-dir-nonfile "/" "#%" 
           (replace-regexp-in-string "[*]\\|/" "" (buffer-name)) "#")))) 

गैर दौरा फ़ाइल बफ़र्स के लिए एक अलग निर्देशिका बनाना इस संदर्भ में वैकल्पिक है; वे केंद्रीकृत स्थान पर भी जा सकते हैं (इस मामले में, autosave-dir)। ध्यान दें कि अस्थायी बफर नाम "* foo/bar *" (सितारों और/या स्लेश के साथ) जैसा कुछ है, तो मुझे कुछ मूल फ़ाइल नाम क्लीनअप करना होगा।

अंत में, एक स्वचालित रूप से की तरह

(add-hook 'org2blog/wp-mode-hook '(lambda() (auto-save-mode t))) 
संबंधित मुद्दे