Definieren des Fensters, auf das "anderes Fenster" zeigt

10

In Emacs habe ich öfter als ich möchte 4 Fenster oder mehr.

Ich werde dieses Beispiel verwenden:

+--------|-----------+
|        |           |
|   1    |   2       |
|        |           |
+--------+-----------+
|    3   |     4     |
|        +-----------+
|        |     5     |
+--------+-----------+

Viele Funktionen können Aktionen ausführen other-window(normalerweise dasselbe Fenster, auf das gezeigt wird C-x o). Besonders nützlich sind scroll-other-window. Wenn jedoch 4 oder mehr Fenster geöffnet werden, other windowist es unwahrscheinlich, dass dies das gewünschte ist.

Gibt es eine einfache Möglichkeit, das Set zu verwalten, other-windowohne das Fenster- / Pufferlayout zu ändern? Natürlich ist es mit ein paar C-x 4 bund machbar, C-baber ich möchte das Layout nicht ändern. Zum Beispiel:

  • Wenn Sie in Fenster 4 im obigen Bild bearbeiten , gibt es eine einfache Möglichkeit, das Bild 1C-M-v zu scrollen ?
  • Oder nehmen wir einfach an, dass der Fokus auf Fenster 3 liegt , wie man other-windowauf Fenster 2 zeigt ?
Lompik
quelle

Antworten:

7

Wenn ich Ihre Frage richtig gelesen habe, sind Sie hauptsächlich daran interessiert, Puffer, die in anderen Fenstern angezeigt werden, schnell zu bearbeiten (unter Beibehaltung des aktuellen Fensterlayouts).

Das Ändern des Fensters, auf das other-windowverweist, ist eine Möglichkeit, dies zu erreichen. Ich möchte jedoch einen alternativen Workflow vorschlagen:

Im Gegensatz zu other-window, den ace-windowSie schnell zu einem Sprung bestimmten Fenster : Wenn Sie anrufen ace-window, ist es in jedem Fenster eine eindeutige Nummer zeigt. Um zu einem bestimmten Fenster zu springen, geben Sie einfach die entsprechende Nummer ein. Wenn Sie nur zwei Fenster haben, wird ein Punkt in das andere Fenster eingefügt, ohne dass Sie aufgefordert werden, eine Zahl einzugeben. Dieser Screencast zeigt, wie Sie zu einem anderen Fenster wechseln, einen Bildlauf durchführen und zum ursprünglichen Fenster zurückkehren:

Demonstration des Ass-Fensters

Wenn Sie an binden ace-window, C-x omüssen Sie sich keine zusätzliche Schlüsselbindung merken, und es fühlt sich an, als würden Sie eine aufgeladene Version von verwenden other-window.

Wenn Sie tippen und / oder Ihre Finger nicht zu weit von der Startzeile entfernen möchten, können Sie außerdem anweisen ace-window, Fenster mit Buchstaben anstelle von Zahlen zu "nummerieren" (siehe unten).

ace-windowist in MELPA verfügbar . Nach der Installation über M-x package-install RET ace-window RETkönnen Sie Folgendes in Ihre Init-Datei einfügen, um es wie oben beschrieben einzurichten:

(global-set-key (kbd "C-x o") 'ace-window)
(setq aw-keys '(?a ?b ?c ?d ?e ?f ?g ?h ?i))
itsjeyd
quelle
Vielen Dank für die Demo, ich habe dieses Paket auf anderen Websites gesehen und mich gefragt, wie es funktioniert. Ich kann das Fenster tatsächlich einfach wechseln, da ich M-1 M-2 ..Fenster Nummer 1, 2 mit dem window-numberPaket
auswählen muss
1

Aus einer kurzen Überprüfung der Quelle other-windowgeht hervor, dass sie tatsächlich von dem von next-windowc zurückgegebenen Fenster abhängt , das in c definiert ist. Leider scroll-other-windowist auch in c definiert und ruft vermutlich das nächste Fenster von dort auf. Ich denke nicht, dass es einfach ist, das zu überschreiben.

Es switch-to-buffer-other-windowscheint jedoch zu verwenden pop-to-buffer, so dass Sie dort möglicherweise etwas Glück haben.

dgtized
quelle
1

Es gibt keine einfache Möglichkeit, die Fensterliste zu bearbeiten, daher ist das von zurückgegebene Ergebnis other-windowmehr oder weniger fest. Dies ist an sich keine schlechte Sache, da es Konsistenz beim Navigieren in Fenstern ermöglicht. In Bezug auf die beiden von Ihnen beschriebenen Szenarien können Sie mit einigen Elisp oder Makros Ihren Workflow anpassen.

Gibt es beim Bearbeiten in Fenster 4 im obigen Bild eine einfache Möglichkeit, CMv so einzustellen, dass das Fenster 1 gescrollt wird?

Sie können ein einfaches Snippet wie das folgende verwenden, um other-windowdie entsprechende Anzahl von Malen zu verwenden, nach unten zu scrollen und zum ursprünglichen Fenster zurückzukehren.

 (defun my-scroll-down-other-window (&optional arg)
 "Like `scroll-other-window' but takes a prefix argument 
 that indicates which window to scroll."
  (interactive "p")
  (save-selected-window
    (other-window arg)
    (scroll-down)))

Sie können ein Präfixargument übergeben, um anzugeben, durch welches Fenster gescrollt werden soll. Wie Sie schließen können, wird der eingebaute Mechanismus verwendet other-window, um die argAnzahl der Fenster vor dem Scrollen zu überspringen . Das save-selected-windowsorgt Fokus kehrt zum ursprünglichen Fenster. In der Dokumentation von other-windowfinden Sie weitere Informationen zum Ändern dieses Snippets an Ihr Verhalten.

Oder nehmen wir einfach an, dass der Fokus auf Fenster 3 liegt, wie man other-windowauf Fenster 2 zeigt?

Verwenden Sie beim Anrufen erneut ein prefix-argwie in . Die tatsächlich anzugebende Anzahl hängt von der Reihenfolge ab, in der Sie sie aufteilen, und ändert sich nicht, solange Sie keine neuen Fenster erstellen. Alternativ können Sie Convenience-Pakete wie oder von MELPA verwenden, um ausgewählte Fenster schnell zu wechseln.C-3 C-x oother-windowwindow-numberace-window

Vamsi
quelle
Richtig, keine einfache Möglichkeit, die Fensterliste zu manipulieren. Es fällt mir schwer, Präfixe zu verwenden. Es fühlt sich an, als würde es einen weiteren nicht erreichbaren Schlüssel hinzufügen und die Sache verlangsamen
Lompik
Dafür sind Tastaturmakros / Tastenkombinationen gedacht. Wenn dies ein regulärer Teil Ihres Arbeitsablaufs ist, können Sie einfach eine auf Präfixzuordnungen basierende Tastenkombination definieren, z. B. <f7> num durch das n-te Fenster zu scrollen. Erstellen Sie temporäre Ein-Tasten-Bindungen mit Tastaturmakros.
Vamsi