Emacs automatische Speicherung auf Wechselpuffer
Frage
Rufen Sie mich lahm, aber ich bin müde von meinem Unter C-x C-s
nervösen Zucken. Ich schalte Puffer oft genug und ich denke, ich mag einen gewissen Puffer speichern, sobald ich zu einem anderen wechseln. Ich habe nicht die Zeit noch hatte Emacs-Lisp Grundlagen zu erlernen.
Für Hinweise, wie dies zu tun, oder bessere Lösungen?
(über einen entsprechenden Hinweis, fand ich eine automatisch gespeicherte Abhilfe das kann den aktuellen Puffer speichern als sobald sie eine bestimmte Zeit untätig sind.)
Lösung
Um sich zu erweitern Seth 's Antwort , würde ich dies tun:
(defadvice switch-to-buffer (before save-buffer-now activate)
(when buffer-file-name (save-buffer)))
(defadvice other-window (before other-window-now activate)
(when buffer-file-name (save-buffer)))
(defadvice other-frame (before other-frame-now activate)
(when buffer-file-name (save-buffer)))
Die Prüfung auf buffer-file-name
vermeidet Puffer w / out-Dateien zu speichern. Sie müssen alle Einstiegspunkte, um herauszufinden, Sie zum Schalten Puffer verwenden, die Ihnen wichtig sind (ich auch other-window
raten würde).
Andere Tipps
Ich bin ein bisschen neu in Emacs Lisp selbst, aber das funktioniert in meinem Test:
(defadvice switch-to-buffer (before save-buffer-now)
(save-buffer))
(ad-activate 'switch-to-buffer)
Es ist ein bisschen ärgerlich, aber, weil es nach jedem Puffer aufgerufen wird (wie Kratzer ). Also, halten dies für einen Hinweis beantworten.
Wenn Sie es deaktivieren möchten, werden Sie rufen müssen:
(ad-disable-advice 'switch-to-buffer 'before 'save-buffer-now)
(ad-activate 'switch-to-buffer)
Ein paar Ideen.
Erstens, wenn Sie sich den Aufruf einen Befehl wie speichern mit einer ausreichend hohen Frequenz finden, können Sie eine kürzere Schlüssel Bindung für den Befehl betrachten. Zum Beispiel fand ich mich auch gleich mit „zucken“, so jetzt verwende ich f2
statt C-x C-s
für Änderungen zu speichern.
Die Funktion, die ich f2
binden speichert alle nicht gespeicherten Puffer bedingungslos. Es kann auch sehr nützlich:
(defun force-save-all ()
"Unconditionally saves all unsaved buffers."
(interactive)
(save-some-buffers t))
(global-set-key [f2] 'force-save-all)
Nun, auf das Hauptproblem. Man könnte so etwas wie dies versuchen (man beachte, dass force-save-all
genannt wird):
(defun my-switch-to-buffer (buffer)
(interactive (list (read-buffer "Switch to buffer: " (cadr buffer-name-history) nil)))
(force-save-all)
(switch-to-buffer buffer))
(global-set-key "\C-xb" 'my-switch-to-buffer)
Natürlich können Sie auch die Schalter Puffer Funktionalität auf einem anderen Schlüssel binden, wie eine Funktionstaste, so dass es sich um einen Pressvorgang ist.
Ich dachte, dass @seth tolle Ideen hatte Tipps zum Thema, aber ich bemerkte, dass das elisp Handbuch, dass schon sagt < a href = "http://www.gnu.org/software/emacs/manual/html_mono/elisp.html.gz#Advising-Functions" rel = "nofollow noreferrer"> Beratung nicht für Tastenbelegungen verwendet werden . Ich bin mir nicht ganz sicher, warum dies der Fall ist, aber das ist, was das Handbuch schlägt vor, FYI.