Wie soll ich den Dateinamen des ursprünglichen Puffers in einem indirekten geklonten Puffer erhalten?

8

Ich wollte verschiedene Teile eines Puffers in zwei verschiedenen Frames betrachten, da ich zwei Monitore mit unterschiedlichen Formen habe, über die ich nicht einfach einen einzelnen Frame überspannen kann. Einige googeln führte mich zu verwenden clone-indirect-buffer, was gut funktioniert.

Doch buffer-file-namefür den neuen Puffer ist nil. Wie kann ich den Dateinamen des ursprünglichen Puffers (von dem dieser ein Klon ist) zuverlässig bestimmen?

rneatherway
quelle
2
Was ist der Unterschied / Vorteil beim Klonen des Puffers und beim gleichzeitigen Aufrufen des Puffers in beiden Frames?
Nathanael Farley
5
Klone reagieren unabhängig voneinander auf Ereignisse wie Verengung / Verbreiterung, Code-Faltung und Konturfaltung. Wenn es in zwei Fenstern der gleiche Puffer wäre, würden diese Arten von Ereignissen in jedem Fenster gespiegelt. Klone sind hilfreich, um beispielsweise unterschiedliche Ansichten verschiedener Teile des Puffers gleichzeitig zu haben.
Dan
Ich bin mir nicht sicher, ob Sie den Puffer in zwei Frames gleichzeitig aufrufen können. Natürlich können Sie in zwei Fenstern im selben Frame, aber wenn ich versuche, in einem anderen Frame zum Puffer zu wechseln, wechselt der C-x bFokus zu dem Frame, in dem der Puffer bereits angezeigt wird.
Rneatherway
1
@NathanaelFarley Ich verwende indirekte Puffer, wenn ich das Terminal mit meinen vim-geneigten Colleges teile, die den indirekten Puffer mit so etwas wie dem bösen Modus verwenden können.
stsquad

Antworten:

12

Bei Fragen wie diesen behalte ich das Emacs-Handbuch und das Elisp-Handbuch auf Kurzwahl.

Aus dem Elisp-Handbuch zu indirekten Puffern :

Funktion: Puffer-Basis-Puffer & optionaler Puffer

Diese Funktion gibt den Basispuffer des Puffers zurück, der standardmäßig den aktuellen Puffer verwendet. Wenn der Puffer nicht indirekt ist, ist der Wert Null. Andernfalls ist der Wert ein anderer Puffer, der niemals ein indirekter Puffer ist.

Sie wollen wahrscheinlich (buffer-file-name (buffer-base-buffer))oder so etwas.

lila_Pfeile
quelle
Ja, das ist es. Ich mag meine defadviceOption trotzdem. ;)
Dan
3

Dies ist eine indirekte Antwort auf Ihre Frage. Ich bin mir nicht sicher, wie ich den Dateinamen des ursprünglichen Puffers herausfinden soll, ohne Folgendes zu tun. (BEARBEITEN: Die Antwort von @ lila_arrows füllt die Details aus: Sie können verwenden buffer-base-buffer. Bitte akzeptieren Sie diese Antwort als am korrektesten.)

Der folgende Ratschlag ordnet den Dateinamen des ursprünglichen Puffers jedem seiner indirekten Klone zu:

(defadvice clone-indirect-buffer (around associate-filename activate)
  "Associate the original filename with the cloned buffer."
  (let ((filename buffer-file-name))
    ad-do-it
    (setq buffer-file-name filename)))

Jetzt hat jeder der Klone den gleichen Dateinamen wie der ursprüngliche Puffer.

Ich verwende häufig indirekt geklonte Puffer und möchte beispielsweise die zugehörige Datei speichern können, wenn ich mit einem der Puffer und nicht mit dem Original arbeite . Dieser Ratschlag war meine Lösung für den gewünschten Workflow.

Dan
quelle