Was sind die Vorteile der Verwendung von indirekten Puffern ? Unter welchen Umständen sind sie nützlich?
Was sind die Vorteile der Verwendung von indirekten Puffern ? Unter welchen Umständen sind sie nützlich?
Antworten:
Anzeigen und Bearbeiten mehrerer Positionen desselben Puffers. Sie müssen also nicht in einem langen Puffer scrollen, sondern müssen nur das Fenster auf den sichtbaren Bereich umschalten. Jeder geklonte Puffer hat auch einen anderen Markierungsring, eine andere Verengung und andere Puffereigenschaften. Wenn Sie keinen indirekten Puffer verwenden, sondern ein anderes Fenster desselben Puffers erstellen, wird alles gemeinsam genutzt, und Sie können keine weiteren erweiterten Funktionen ausführen, die über das Anzeigen und Bearbeiten verschiedener Speicherorte hinausgehen. Mit einem indirekten Puffer können Sie beispielsweise den gesamten Codeblock falten und effektiv einen "Tag-Baum" erstellen, ohne den ursprünglichen Puffer zu beeinträchtigen. Bei Verwendung eines Fensters werden beide Puffer in beiden Fenstern gefaltet, da beide Puffer gleich sind.
In der Summe ist der indirekte Puffer ein völlig anderer Puffer, der denselben Text und dieselbe Datei in Ihrem ursprünglichen Puffer enthält. Wenn Sie also den geklonten Puffer speichern, wird auch Ihre ursprüngliche Datei gespeichert.
Ein Anwendungsfall ist die Verwendung eines anderen Hauptmodus für einen Teil einer Datei.
Ich habe zum Beispiel einmal mit XML-Dokumenten mit Code in bestimmten Elementen gearbeitet. Ich wollte in der Lage sein, das gesamte Dokument so zu bearbeiten, als ob es XML wäre, aber dennoch alle wichtigen Modusfunktionen für die Programmiersprache in bestimmten Elementen eingebettet haben. Deshalb habe ich mich auf die Gesamtheit dieser Elemente in einem indirekten Puffer beschränkt, in dem das ausgeführt wird geeigneter Hauptmodus.
Hier ist eine Funktion aus meiner Konfiguration, mit der ich das mache:
(defun indirect-region (start end)
"Edit the current region in another indirect buffer.
Prompt for a major mode to activate."
(interactive "r")
(let ((buffer-name (generate-new-buffer-name "*indirect*"))
(mode (intern
(completing-read
"Mode: "
(mapcar (lambda (e)
(list (symbol-name e)))
(apropos-internal "-mode$" 'commandp))
nil t))))
(pop-to-buffer (make-indirect-buffer (current-buffer) buffer-name))
(funcall mode)
(narrow-to-region start end)
(goto-char (point-min))
(shrink-window-if-larger-than-buffer)))
Hinweis: Dies ist nicht perfekt, Dinge wie die Schriftsperre erfordern besondere zusätzliche Arbeit für die Verwendung in diesem Szenario.
Indirekte Puffer geben Ihnen mehrere Ansichten desselben Puffers, insbesondere mehrere Verengungen, von denen jede in vielerlei Hinsicht wie ein separater Puffer wirkt.
Wie der Kommentar für die Bibliothek narrow-indirect.el
sagt:
Sie können indirekte Puffer für mehr als Sie vielleicht denken. Sie können Klone verwenden, die aus Teilen von Dired-Puffern entnommen wurden, um beispielsweise nützliche (aktive) Ansichten in einer Verzeichnisliste anzuzeigen. Es gibt nur wenige Tasten / Befehle (z. B.
g
zum Aktualisieren der Liste), die nicht funktionieren, da sie von der Ansicht des gesamten Dired-Puffers abhängen. Experimentieren Sie, und Sie werden ohne Zweifel interessante neue Verwendungen für indirekte Puffer finden.