Wenn ich aufrufe fill-paragraph
, wird der Puffer immer als geändert markiert, auch wenn der Befehl keine Auswirkung hatte (dh wenn der Absatz bereits gefüllt war). Es wird auch eine leere rückgängig zu machende Aktion erstellt (leicht zu erkennen mit undo-tree-mode
). Andere Befehle, die möglicherweise Änderungen vornehmen können, wie z. B. die Einrückungsbefehle, markieren den Puffer nicht als geändert oder erstellen eine rückgängig zu machende Aktion, wenn nichts geändert wurde. Gibt es eine Möglichkeit, fill-paragraph
den Puffer als markiert zu markieren und nur dann eine rückgängig zu machende Aktion zu erstellen, wenn tatsächlich etwas geändert wurde?
fill-paragraph
Lily Chung
quelle
quelle
M-q
ist - markiert den Puffer nicht standardmäßig geändert, zumindest nicht aus meinen Tests. Welchen Modus verwenden Sie? Ich würde vermuten, dass der Modusfill-paragraph
in irgendeiner Weise überschreibt .Antworten:
Beachten Sie, dass dies für neuere Emacsen (ab Version 26) behoben ist.
quelle
Das Problem ist, dass
fill-paragraph
(oder besser gesagtfill-region-as-paragraph
) Zeilenumbrüche entfernt und wieder eingefügt werden, während Ihr Absatz aufgeschlüsselt wird. Der Puffer wird nicht geändert, wenn nur eine Zeile vorhanden ist. Das No-Op in der Rückgängig-Liste, die Sie sehen, ist nur dasfill-paragraph
Entfernen und erneutes Einfügen von Zeilenumbrüchen.Es ist nicht trivial, dies zu vermeiden. Das Folgende ist ein ziemlich schlechter Hack und für große Puffer sehr ineffizient, aber vielleicht funktioniert es für Sie. Der Befehl ahmt
fill-paragraph
(M-q
) mit dem gleichen Verhalten nach, außer dass er den Inhalt des Puffers vor dem Aufrufen speichert. Wenn der Inhalt gleich bleibt, stellt er anschließend den Änderungsstatus wieder her und macht die Liste vor der Änderung rückgängig. Dazu benötigt es eine Kopie (eigentlich zwei) des Pufferinhalts, was wirklich ineffizient ist. :-)Sie können das binden an
M-q
.quelle
fill-paragraph
unterscheidet zwischen verschiedenen Fällen, dh es verhält sich je nach aktivem Bereich, vorhandenen Funktionen zum Ausfüllen von Absätzen usw. unterschiedlich. Sie müssten dieses Verhalten replizieren, um herauszufinden, welche Teile des Puffers tatsächlich geändert werden. Möglich, aber schwierig. :-)Späte Antwort, aber hier ist eine einfache Version, die den Puffer nicht ändert, wenn sich der Text nicht ändert.
Es passt einige der Ideen in der Antwort von @ JorgenSchäfer an, funktioniert jedoch nur mit dem aktuellen Absatz und nur auf einfache, durch Leerzeichen getrennte Weise (siehe Kommentare zu @ JorgenSchäfers Antwort zu Komplikationen unter der Haube).
Dies ist ungefähr der einzige Anwendungsfall, der für meine eigenen Zwecke relevant ist (dh interaktive Verwendung mit "normaler" Prosa, keine aktive Region). Ich poste ihn daher, falls jemand ihn verwenden oder für kompliziertere Anwendungsfälle verbessern möchte .
quelle