Comment désactiver l'enregistrement automatique dans emacs uniquement pour les fichiers ouverts en tant que root

8

Je veux utiliser la fonction d'enregistrement automatique emacs avec tramp, mais uniquement pour les fichiers que je n'ouvre pas à l'aide de sudo. Ma configuration actuelle, basée sur la documentation de tramp , ressemble à ceci:

;;;;;;;; BAKUCP ;;;;;;;;
;; Backup remote files locally to stop autosave pain
(setq tramp-backup-directory "~/.emacs-backup")
(unless (file-directory-p tramp-backup-directory)
  (make-directory tramp-backup-directory))
(if (file-accessible-directory-p tramp-backup-directory)
    (setq tramp-auto-save-directory tramp-backup-directory)
  (error "Cannot write to ~/.emacs-backup"))
;; Don't backup su and sudo files
(setq backup-enable-predicate
      (lambda (name)
        (and (normal-backup-enable-predicate name)
             (not
              (let ((method (file-remote-p name 'method)))
                (when (stringp method)
                  (member method '("su" "sudo"))))))))

Il est interdit de créer des sauvegardes à distance de fichiers modifiés en tant que superutilisateur, mais les fichiers enregistrés automatiquement sont toujours créés sur ma machine locale. Existe-t-il un moyen de désactiver cela sans désactiver la sauvegarde automatique?

radieux
la source

Réponses:

2

La sauvegarde et la sauvegarde automatique sont des opérations différentes, contrôlées par différentes variables.

Si vous souhaitez supprimer l'enregistrement automatique pour les fichiers ouverts en tant que root, vous pouvez modifier la variable tampon locale auto-save-file-name-transforms. Quelque chose comme ça (non testé):

(add-hook
 'find-file-hook
 (lambda ()
   (when (and (stringp buffer-file-name)
          (string-equal (file-remote-p buffer-file-name 'user) "root"))
     (setq buffer-auto-save-file-name nil))))
Michael Albinus
la source
Si vous mettez ceci dans le .emacsfichier des utilisateurs , il ne sera pas lu si emacs est ouvert avec sudobien que correct? Alors, quand ce code serait-il en vigueur?
Startec
Je ne comprends pas ta question. Tout dans ~ / .emacs est évalué au démarrage d'Emacs, sauf si vous démarrez Emacs avec l'option -Q ou similaire.
Michael Albinus
Désolé, je voulais dire que l'ouverture emacsavec sudo emacsne lirait pas le fichier de configuration dans le répertoire personnel des utilisateurs. Je me rends compte maintenant que c'est probablement une bonne réponse lorsque quelque chose est ouvert en tant que sudo à partir d'une instance d'emacs ouverte en tant qu'utilisateur.
Startec
Quelle variable vérifierait si le fichier a été ouvert en tant que root? (c'est-à-dire ouvert avec la /sudo::/méthode du clochard)?
Startec
default-directoryest une variable tampon locale, qui vous indique le répertoire actuel de ce tampon. (file-remote-p default-directory)renvoie non nul, lorsque vous êtes distant. (file-remote-p default-directory 'user)vous donne le nom d'utilisateur distant, "root"par exemple.
Michael Albinus