Deaktivieren der automatischen Speicherung in Emacs nur für Dateien, die als Root geöffnet wurden

8

Ich möchte die automatische Speicherfunktion von emacs mit tramp verwenden, aber nur für Dateien, die ich nicht mit sudo öffne. Meine aktuelle Konfiguration, basierend auf der Tramp-Dokumentation , sieht folgendermaßen aus:

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

Es ist verboten, Remote-Backups von Dateien zu erstellen, die als Superuser bearbeitet wurden, aber automatisch gespeicherte Dateien werden weiterhin auf meinem lokalen Computer erstellt. Gibt es eine Möglichkeit, dies zu deaktivieren, ohne die automatische Speicherung zu deaktivieren?

radikal
quelle

Antworten:

2

Backup und Auto-Save sind verschiedene Vorgänge, die von verschiedenen Variablen gesteuert werden.

Wenn Sie die automatische Speicherung für als root geöffnete Dateien verwerfen möchten, können Sie die pufferlokale Variable ändern auto-save-file-name-transforms. So etwas (ungetestet):

(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
quelle
Wenn Sie dies in die Benutzerdatei .emacseinfügen, wird es nicht gelesen, wenn Emacs mit sudoobwohl korrekt geöffnet wird . Wann würde dieser Code in Kraft sein?
Startec
Ich verstehe deine Frage nicht. Alles in ~ / .emacs wird beim Start von Emacs ausgewertet, es sei denn, Sie starten Emacs mit der Option -Q oder einer ähnlichen Option.
Michael Albinus
Entschuldigung, ich meinte, dass beim Öffnen emacsmit sudo emacsdie Konfigurationsdatei im Home-Verzeichnis der Benutzer nicht gelesen wird. Mir ist jetzt klar, dass dies wahrscheinlich eine gute Antwort ist, wenn etwas als Sudo aus einer Instanz von Emacs geöffnet wird, die als Benutzer geöffnet wurden.
Startec
Welche Variable würde prüfen, ob die Datei als root geöffnet wurde? (dh mit der /sudo::/Tramp-Methode geöffnet )?
Startec
default-directoryist eine pufferlokale Variable, die das aktuelle Verzeichnis dieses Puffers angibt. (file-remote-p default-directory)Gibt ungleich Null zurück, wenn Sie remote sind. (file-remote-p default-directory 'user)gibt Ihnen "root"zum Beispiel den Remote-Benutzernamen .
Michael Albinus