Wie kann ich den * Kompilierungspuffer * anheften, um niemals einen einzelnen Frame / Fenster zu verlassen?

7

Ich würde es vorziehen, wenn der *compilation*Puffer immer in seinem eigenen Rahmen bleibt. Wenn ich derzeit jedoch M-x compilevon einem anderen Frame / Fenster aus laufe , wird der Puffer dort auch in einem neuen Fenster angezeigt. Wie kann ich bewirken, dass Emacs stattdessen nur den vorhandenen Frame anheben, in dem der *compilation*Puffer angezeigt wird?

ajp
quelle
Ich glaube, dies ist die Antwort auf Ihre Frage, die ich vor 3 Jahren zu Beginn meiner Emacs-Suche geschrieben habe: stackoverflow.com/a/19415289/2112489 Die zutreffenden Codeabschnitte in compile.elhaben sich möglicherweise geändert, und ich habe seitdem viele erstellt Änderungen / Verbesserungen an meinen benutzerdefinierten Funktionen, die auf bestimmte Frames für die Pufferanzeige abzielen : stackoverflow.com/questions/18346785/… Sehen Sie nach, ob der erste Link ungefähr dem entspricht, was Sie suchen - wer weiß, er funktioniert möglicherweise sogar noch ohne Änderungen machen.
Lawlist

Antworten:

5

Normalerweise betrachtet Emacs den ausgewählten Frame als den einzigen wiederverwendbaren Frame. Mit anderen Worten, normalerweise durchsucht Emacs den aktuellen ("ausgewählten") Frame nur nach Fenstern, die bereits den anzuzeigenden Puffer enthalten ("wiederverwendbare Fenster"). Was Sie brauchen, ist, dass Emacs den Frame des Kompilierungspuffers als wiederverwendbaren Frame betrachtet:

(push '("\\*compilation\\*" . (nil (reusable-frames . t))) display-buffer-alist)

Das obige Snippet macht alle Frames wiederverwendbar, wenn display-bufferder *compilation*Puffer angezeigt wird . In der Dokumentation von display-buffer-reuse-windowerfahren Sie, welche anderen Werte reusable-framesempfangen werden können.

Dies kümmert sich jedoch nicht um die andere Richtung - das Öffnen eines Codepuffers aus dem Kompilierungsfenster. Wenn Sie beispielsweise einen Puffer durch Drücken eines Links im Kompilierungspuffer öffnen, öffnet Emacs den Puffer im selben Frame wie das Kompilierungsfenster. Das zu ändern ist eine andere Sache. Ich weiß nicht, wie das Verhalten mit der special-display-buffer-namesLösung verglichen wird.

bmag
quelle
2

Make - Pufferzusammenstellung immer ein spezielles Fenster. Eine Möglichkeit , dies zu tun , ist Option anpassen special-display-buffer-names, einschließen "*compilation*". Eine andere Möglichkeit besteht darin, die Option anzupassen special-display-regexpsund einen regulären Ausdruck einzufügen, der diesem Puffernamen entspricht. (Ich füge den regulären Ausdruck hinzu "[ ]?[*][^*]+[*]", der mit allen Puffern übereinstimmt , deren Namen lauten *...*.)

(Siehe auch Option special-display-frame-alist, mit der Sie das Verhalten und die Eigenschaften des Rahmens festlegen können, der für solche speziellen Anzeigepuffer verwendet wird.)

Emacs wird Ihnen sagen, dass diese Optionen für "Spezialanzeigepuffer" "veraltet" sind, aber Gott sei Dank werden sie weiterhin unterstützt. Sie bieten eine einfache Möglichkeit, das zu tun, was Sie wollen.

Wenn Sie leiden möchten, was Emacs jetzt bevorzugt, passen Sie display-buffer-aliststattdessen die Option an. Die Idee ist im Wesentlichen dieselbe (es ist nur eine hässlichere und kompliziertere Benutzeroption).

Drew
quelle
Möchtest du die Abstimmungen erklären? Stimmt etwas in dieser Antwort nicht?
Drew
1
Es ist wahrscheinlich für die veralteten Optionen und den Snark ("leiden").