2012-01-13 13 views

Respuesta

12

auto-save-mode funciona realmente con búferes que no son de archivo. Simplemente no se habilita por defecto, lo que generalmente ocurre en (after-find-file).

Así: Mxauto-save-modeRET

Por defecto, el archivo de guardado automático se escribirá en el default-directory de la memoria intermedia (o /var/tmp o ~/, dependiendo de los permisos de escritura; ver Chvbuffer-auto-save-file-nameRET) que puede ser un poco incomodo para descubrir después de un choque, por lo que establecer eso en algo estándar es probablemente una buena idea.

A continuación se aseguraría de que estos archivos de guardado automático se escriben en el directorio de inicio (o M-xcustomize-variableRET RETmy-non-file-buffer-auto-save-dir), si auto-save-mode se invoca de forma interactiva. Es de esperar que evite esto en conflicto con cualquier otro uso de auto-save-mode con búferes que no sean archivos (el código menciona el modo de correo, por ejemplo).

(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

gran información. Auto-save-mode ha sido un poco misterioso, ya que es muy discreto (lo cual es algo bueno). En lugar del defadvice, utilicé make-auto-save-file-name para controlar dónde se guardan los buffers. –

5

phils' answer aclarado las cosas para mí, pero terminé usando un enfoque algo diferente. Lo estoy publicando como una respuesta separada por el bien de la documentación. Aquí está mi copia de seguridad automática estrofa:

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

Creación de un directorio independiente para los tampones no visitado de archivos es opcional en este contexto; también podrían ir a la ubicación centralizada (en este caso, autosave-dir). Tenga en cuenta también que tengo que hacer una limpieza básica del nombre de archivo en caso de que el nombre del buffer temporal sea algo así como "* foo/bar *" (con estrellas y/o barras diagonales).

Por último, se puede activar automáticamente copia de seguridad automática en memorias intermedias temporales determinados modos utilizando algo así como

(add-hook 'org2blog/wp-mode-hook '(lambda() (auto-save-mode t))) 
Cuestiones relacionadas