Der save-some-buffers
Befehl fordert Sie auf, jede geänderte Datei zu speichern oder zu ignorieren, und bietet außerdem die Möglichkeit, die geänderte Datei von der besuchten Datei zu unterscheiden.
Ich möchte das gleiche Verhalten von kill-buffer
oder kill-this-buffer
. Wenn der Puffer geändert wird, gibt es bereits eine Ja / Nein-Eingabeaufforderung, aber ich möchte auch die Option, die Unterschiede anzuzeigen.
Gibt es eine integrierte Möglichkeit, dies zu tun, oder einen geeigneten Erweiterungspunkt? Oder sollte ich einfach meinen eigenen Kill-Buffer-Befehl binden?
buffers
kill-buffer
Glucas
quelle
quelle
defadvice
. Auf diese Weise können Sie die integrierte Funktion problemlos erweiternkill-buffer
.buffer-modified-p
das Original festlegen und aufrufen,kill-buffer
um fortzufahren töten ohne eine weitere Aufforderung. Ich frage mich, ob es einen besseren Weg gibt, aber ich könnte es versuchen.save-some-buffers
seit einigen Jahren und wusste nie, dass es einediff
Funktion hat ... Danke!Antworten:
Die große Frage ist, ob Sie dieses Verhalten für sich
kill-buffer
selbst möchten , dh nicht nur, wenn Sie es interaktiv aufrufen, sondern für jede Verwendung in vorhandenem Lisp-Code, oder ob Sie es nur für die interaktive Verwendung möchten.Letzteres nehme ich an. Lassen Sie in diesem Fall in
kill-buffer
Ruhe, definieren Sie Ihren eigenen Befehl, der das tut, was Sie wollen, und ordnen Sie die Schlüssel neu zu, die normalerweise ankill-buffer
Ihren Befehl gebunden sind :my-kill-buffer
Überprüfen Sie für Ihren Befehl einfach zu Beginn, ob der Puffer geändert wurde, und startenediff
Sie ihn dann, wenn dies der Fall ist .Verwenden Sie, um zu überprüfen, ob es geändert wurde
buffer-modified-p
.Um
ediff
Sie wollen vermutlich die Datei packen (dh der Puffer als gespeichert) und diff es gegen den Strom, modifizierte Puffer. Möglicherweise müssen Sie ein wenig herumfummeln, um das zu tun - ich kenne keinen vorhandenenediff
Befehl, der das tut.Aber vielleicht ist alles, was Sie wirklich brauchen, so etwas wie
highlight-changes-mode
. Siehe das Emacs-Handbuch, KnotenHighlight Interactively
. Mit anderen Worten, möglicherweise müssen Sie nur aufrufen,highlight-changes-mode
wenn der Puffer geändert wurde.quelle
diff-buffer-with-file
Punkte : Ich kann sie verwenden , um die Unterschiede zu erzeugen. Sieht auch so aus, als müsste ich anrufen,set-buffer-modified-p
wenn ich fortfahren und beenden möchte, ohne erneut von der nativen Implementierung aufgefordert zu werden.Basierend auf den anderen Antworten und Kommentaren finden Sie hier einen benutzerdefinierten Kill-Befehl, der die Option bietet, einen geänderten Puffer von der Datei zu unterscheiden, die er besucht. Ich habe dies zugeordnet,
C-x C-k
könnte es aber auch neu zuordnen,kill-buffer
wie in @ Drews Antwort vorgeschlagen.Mit der gleichen Grundimplementierung können Sie auch beraten
kill-buffer
. Mit diesem Ansatz haben Sie die Möglichkeit, Unterschiede überall dort anzuzeigen, wo siekill-buffer
aufgerufen werden - beispielsweise beim Löschen markierter Puffer von Ibuffer.quelle