Ich habe zwei Fenster geöffnet und vertikal geteilt (Einzelbild):
A) enthält meine Arbeit
B) enthält entweder dired oder ibuffer.
Ich möchte in der Lage sein, zu einer Datei / einem Puffer in Bereich B zu navigieren und auf "o" zu klicken, um sie in Bereich A zu öffnen. Ist dies möglich? Im Moment erstellt emacs einen neuen Bereich im unteren Bereich von Bereich A, um die Datei zu öffnen.
Bearbeiten: Gemäß der Benutzerrechtsliste tritt das oben beschriebene Verhalten auf, wenn der Rahmen groß ist. Dies scheint bei mir der Fall zu sein, da sich Emacs jetzt, da ich zu Hause bin (nicht auf einem externen Monitor, kleinerer Rahmen), so verhalten, wie ich es mir wünsche. Jetzt stellt sich die Frage: Kann ich verhindern, dass Emacs ein neues Fenster öffnen, wenn der aktuelle Frame groß ist?
window
, um auf einen Pufferquadranten innerhalb desselben zu verweisenframe
. Aframe
wird als das ganze Kätzchen-Kaboodle betrachtet, das viele Fenster enthalten kann. Emacs können mehrere Frames generieren, wobei jeder Frame mehrere Fenster enthält.Antworten:
Hier sind vier (4) Beispiele für benutzerdefinierte
display-buffer
Funktionsfamilien, die individuell auf die speziellen Bedürfnisse eines Benutzers zugeschnitten werden können - siehe oben ; unten ; links ; rechts - und hier sind vier (4)interactive
Funktionen zum Anzeigen der Datei oder des Verzeichnisses der aktuellen Zeile einesdired-mode
Puffers. Es gibt nur drei Bedingungen: (a) Wenn bereits ein Fenster mit dem Zielpuffer vorhanden ist, wählen Sie ihn aus. (b) Wenn ein Fenster in der gewünschten Richtung verfügbar ist, verwenden Sie es. (c) Der Haken ist, ein neues Fenster in die gewünschte Richtung zu erstellen, wenn die anderen Bedingungen nicht erfüllt sind.Verwendungszweck:
M-x dired-display-above
M-x dired-display-below
M-x dired-display-left
M-x dired-display-right
Es sind so viele Tastenkombinationen bereits eingebaut
dired-mode
unddired+
, dass ich es nicht wage, meine eigenen zu erfinden. Dem Benutzer steht es frei, seine eigenen Tastaturkürzel zu wählen, was den Rahmen dieses begrenzten Beispiels sprengt.Dem Benutzer steht es frei, der Beispielfunktionsfamilie zusätzliche Bedingungen hinzuzufügen
display-buffer
, um mehr Situationen zu bewältigen - z. B. mehr Fenster als nur ein paar.BEARBEITEN: Hier ist eine etwas ausgefeiltere / unterhaltsamere Implementierung des obigen Konzepts, die dem Benutzer die Möglichkeit gibt, dieses nicht interaktiv oder interaktiv zu verwenden . zB
M-x dired-display-buffer
- wo der Benutzer aufgefordert wird, ein Verzeichnis auszuwählen, wenn er nicht mit der Maus über eine Datei fährtdired-mode
, und eine Anzeigerichtung zu wählen (links, rechts, oben, unten).quelle
dired-mode-map
, gebunden ano
und dannhjkl
für die Anzeige über / unter / links / rechts helfen ?(defhydra dired-open (dired-mode-map "O" :exit t) "dired-open" ("j" dired-display-below "below") ("k" dired-display-above "above") ("h" dired-display-left "left") ("l" dired-display-right "left"))
select-window
kann am Ende jedermy-display-buffer-...
Funktion verwendet werden. Wie Sie sehen können, ist das Ergebnis / der Wert, der am Ende der allerletzten Zeile ausgegeben wirdwindow
,. Wenn Sie das Ergebnis / den Wert nicht benötigen, um es in Verbindung mit einer anderen Funktion zu verwenden, schließen Sie daswindow
in der allerletzten Zeile einfach so ein :(select-window window)
. Tun Sie das mit allen vier (4) Funktionen - dhmy-display-buffer-below
;my-display-buffer-above
;;my-display-buffer-left
;; undmy-display-buffer-right
.Ihre Frage ist unklar und daher besteht die Gefahr, dass sie geschlossen wird. Haben Sie zwei Frames oder einen einzelnen Frame mit zwei Emacs-Fenstern? Was auch immer sie sind, wenn es zwei gibt, ist jeder von ihnen vertikal geteilt? Und was meinst du mit "vertikal teilen"? Was meinst du mit einer "Scheibe"? Was meinst du mit "es" in "in Fenster A geöffnet haben"?
Eine wilde Vermutung ist, dass Sie einen einzelnen Emacs-Frame haben, der in zwei Emacs-Fenster A und B aufgeteilt ist, wobei Fenster A über Fenster B, Fenster B ausgewählt ist und Fenster B einen Dired-Puffer anzeigt.
o
ist standardmäßig an gebundendired-find-file-other-window
. Wenn die obige wilde Vermutung richtig ist, sollteo
ein Dateiname in B in A geöffnet werden. Dies wird beim Starten von Emacs ohne Init-Datei angezeigt :emacs -Q
. Siehst du das nichtWenn dies nicht der Fall ist, beschreiben Sie bitte Schritt für Schritt klar, was Sie tun
emacs -Q
.quelle
display-buffer
Variablenfamilie wirkt sich jedoch auf andere Situationen aus, die noch nicht vorgesehen sind. Sie können das anpassendisplay-buffer-alist
, was selbst für erfahrene Emacs-Benutzer etwas verwirrend ist. Es gibt Variablen, die steuern, wann Fenster und Mindestgrößen von Fenstern aufgeteilt werden sollen, und die Liste wird fortgesetzt. Um den Ausbruch einzudämmen, könnten Siedired-find-file-other-window
eine let-gebundene Version des empfehlendisplay-buffer-alist
, aber ich werde diese Antwort einem anderen Forumsteilnehmer überlassen. Es gibt verschiedene Lösungen. :)HINWEIS : Die folgenden Variablen sind global , was bedeutet, dass sie sich auch auf andere Funktionen auswirken
dired-find-file-other-window
. Der Benutzer möchte die betreffende Funktion möglicherweise beraten , um andere Funktionen nicht global zu beeinflussen. [Dieser Autor überlässt diese Option jedoch einem anderen Forumsteilnehmer.] Alternativ gibt es eine andere Antwort, die dieser Autor veröffentlicht hat und die benutzerdefinierte Funktionen enthält, die verwendet werden können, um nichts anderes zu beeinflussen.Die Variable
split-width-threshold
hat eine Dokumentzeichenfolge, die Folgendes angibt:Wenn Sie in der
.emacs
Datei Folgendes einstellen, wird der gewünschte Effekt erzielt. Der Benutzer kann den Wert auch auf eine höhere Zahl einstellen. Der Standardwert ist 160Hier ist ein Link zum entsprechenden Abschnitt im Handbuch:
https://www.gnu.org/software/emacs/manual/html_node/emacs/Window-Choice.html
Siehe auch die zugehörige Variable
split-height-threshold
mit dem Standardwert 80Die Dokumentzeichenfolge lautet:
quelle