2013-03-08 2 views
1

J'ai regardé dans divers endroits et est finalement arrivé à la configuration suivante pour « auto-save » mode dans Emacs:Emacs auto-save: Pourquoi les fichiers ne sont-ils pas stockés dans le bon dossier?

(defvar my-auto-save-folder (concat "~/.emacs.d/auto-save")); folder for auto-saves 
(setq auto-save-list-file-prefix "~/.emacs.d/auto-save/.saves-"); set prefix for auto-saves 
(setq auto-save-file-name-transforms `((".*", my-auto-save-folder t))); location for all auto-save files 
(setq tramp-auto-save-directory my-auto-save-folder); auto-save tramp files in local directory 

Après avoir cette configuration depuis quelques semaines, je me suis rendu ~/.emacs.d et trouvé que le dossier ~/.emacs.d/auto-save est vide, alors que ~/.emacs.d contenait deux fichiers auto-save du formulaire #!home!<myusername>!<myfolder>!<myfile>. Pourquoi les fichiers d'enregistrement automatique ne sont-ils pas stockés dans ~/.emacs.d/auto-save? [Le dossier auto-save a des droits 775, .emacs.d 700]

Répondre

5

Votre erreur est:

(defvar my-auto-save-folder (concat "~/.emacs.d/auto-save")); folder for auto-saves 

(l'appel à concat avec un seul argument est inutile, incidemment).

Si l'élément en option UNIQUIFY est non nul, le nom du fichier de sauvegarde automatique est construit en prenant la partie répertoire du nom de fichier remplacé, concaténé avec le nom du fichier tampon avec tous les séparateurs de répertoire changé en `! ' pour éviter les conflits.

Emacs identifie les noms de répertoire par un / arrière, ce qui signifie que « la partie du répertoire » du chemin que vous avez utilisé est « ~/.emacs.d/».

Vous voulez:

(defvar my-auto-save-folder "~/.emacs.d/auto-save/"); folder for auto-saves 

Le positionnement de la virgule dans ce qui suit est aussi étrange (même si apparemment cela fonctionne encore):

`((".*", my-auto-save-folder t))) 

qui devrait vraiment être:

`((".*" ,my-auto-save-folder t))) 
+0

Salut phils, merci de votre aide. Pourquoi le placement de la virgule est-il important (ou plutôt: pourquoi devrait-il être comme vous l'avez souligné)? –

+1

Marius: Lire ceci: 'C-h i g (elisp) Backquote RET'.La virgule indique d'évaluer 'my-auto-save-folder', donc il est associé à cet élément de la liste, plutôt qu'à l'élément' ". *" 'Précédent (dans quelle position il ressemble plus à une tentative accidentelle d'utilisation valeurs séparées par des virgules dans une liste de lisp!). – phils

+0

Super, merci beaucoup, phils. –

1

C'est ce que j'ai dans mes emacs, qui fonctionne bien pour moi:

(add-to-list 'auto-save-file-name-transforms 
      (list "\\(.+/\\)*\\(.*?\\)" (expand-file-name "\\2" my-auto-save-folder)) 
      t) 
+0

Ce serait bien d'avoir un peu plus de détails sur ce que fait le code. J'ai trouvé quelque chose de similaire ici (http://lists.gnu.org/archive/html/bug-gnu-emacs/2003-09/msg00022.html) mais ce n'est pas exactement la même chose. J'ai également trouvé http://stackoverflow.com/questions/2020941/emacs-newbie-how-can-i-hide-the-buffer-files-that-emacs-creates qui utilise 'expand-file-name' au lieu de' concat'. –

+0

jtahlborn: Cela semble un peu étrange. La définition de l'argument 'UNIQUIFY' (' t') signifie que seule la partie répertoire du nom remplacé est utilisée, donc il ne sert à rien de substituer le 2ème groupe à ce chemin (bien que votre second groupe soit non gourmand, je ne le fais pas pense qu'il va jamais contenir quoi que ce soit). – phils

+0

@phils - Je ne définis pas l'argument uniquify, c'est le dernier paramètre à add-to-list. et ça marche très bien. – jtahlborn

Questions connexes