2012-01-13 6 views

risposta

12

auto-save-mode funziona in realtà con buffer non file. Semplicemente non viene abilitato di default - che di solito accade in (after-find-file).

Quindi: Mxauto-save-modeRET

Per impostazione predefinita il file di salvataggio automatico verrà scritto il default-directory del buffer (o /var/tmp o ~/, a seconda delle autorizzazioni di scrittura; vedere Chvbuffer-auto-save-file-nameRET), che potrebbe essere un po 'difficile da capire dopo un incidente, quindi impostarlo su qualcosa di standard è probabilmente una buona idea.

Di seguito garantirebbe che questi file di salvataggio automatico vengono scritti vostra home directory (o M-xcustomize-variableRETmy-non-file-buffer-auto-save-dirRET), se auto-save-mode viene richiamato in modo interattivo. Speriamo di evitare questo conflitto con altri usi di auto-save-mode con buffer non file (il codice menziona la modalità Mail, per esempio).

(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

Grande informazioni. La modalità di salvataggio automatico è stata un po 'misteriosa, dal momento che è così discreta (che è una buona cosa). Invece di defadvice, ho usato make-auto-save-file-name per controllare dove sono salvati i buffer. –

5

phils' answer chiarito le cose per me, ma ho finito per usare un approccio un po 'diverso. Sto postandolo come una risposta separata per motivi di documentazione. Ecco la mia stanza di salvataggio automatico:

;; 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)) "#")))) 

Creazione di una directory separata per i buffer di file non visitati è facoltativa in questo contesto; potevano anche andare nella posizione centralizzata (in questo caso, autosave-dir). Nota anche che devo fare una pulizia di base del nome del file nel caso in cui il nome del buffer temporaneo sia qualcosa come "* foo/bar *" (con stelle e/o barre).

Infine, si può accendere automaticamente il salvataggio automatico in buffer temporanei certe modalita con qualcosa di simile

(add-hook 'org2blog/wp-mode-hook '(lambda() (auto-save-mode t))) 
Problemi correlati