Wie sende ich die Taste, um den Bildlaufmodus in tmux zu verlassen?


7

Ich habe eine Schlüsselzuordnung in VIM, die so aussieht:

map <F5> :silent !tmux send-keys -t 0:0 C-m "python %" C-m<cr>

Wenn ich F5 drücke, führt vim mein aktuelles Python-Skript in tmux-Sitzung 0, Fenster 0 aus. Befindet sich Fenster 0 derzeit jedoch in einem Bildlaufstatus (dh Shift-PgUp oder Maus-Bildlauf), führt tmux den Befehl aus, scrollt jedoch nicht weiter neue Ausgabe.

Wie sende ich einen Schlüssel an das tmux-Fenster, der den Bildlaufmodus beendet? (Ich möchte, dass es bei der Ausgabe gescrollt wird)

Hinweis : Normalerweise verlasse ich den Bildlaufmodus durch Drücken von Esc, konnte jedoch nicht herausfinden, wie eine Escape-Taste mit gesendet werden soll tmux send-keys. Ich habe versucht zu senden, C-[aber das hat nicht funktioniert.

Antworten:


3

Sie können ein wörtliches Escape (und eine neue Zeile) mit ANSI-C-Anführungszeichen senden (dazu gibt es hier mehr ), z. B. um ein Escape zu senden an 0:0:

tmux send-keys -t 0:0 $'\e'

Wenn ich es richtig verstehe, können Sie für Ihr Mapping Folgendes tun:

map  <F5> :silent !tmux send-keys -t 0:0 $'\e'"python"$'\n'<CR>

Beachten Sie, dass die Escape-Datei immer gesendet wird. Um das Problem zu umgehen, dass die Shell die Escape-Funktion empfängt, können Sie eine zusätzliche neue Zeile senden:

map  <F5> :silent !tmux send-keys -t 0:0 $'\e'$'\n'"python"$'\n'<CR>

+1. Vielen Dank für den ANSI-Zitat-Tipp! (Ich habe so etwas gesucht). Leider hat das Senden des Esc-Codes nicht funktioniert. Ich frage mich, ob es daran liegt, dass ich tmux in einem Terminalfenster ausführe und die Scrollback-Funktionalität eher vom Terminalemulator als von tmux bereitgestellt wird. In meinen Augen ist ein Esc-Code ein Esc-Code, aber es scheint, dass entweder das Terminal oder tmux ihn nicht akzeptieren.
— Gilead

Sie können überprüfen, ob der Regler tatsächlich tmux erreicht. Führen Sie: cat | od -t x2in tmux aus und führen Sie: tmux send-keys $'\e\n\004'von einem anderen Ort aus ( dh ESC, NL, Cd). Sie sollten sehen 0a1boder 1b0aabhängig von Ihrer Architektur Endianess.
— Thor

Um dies scrollTtyOutputzu erreichen, müssen Sie Ihr Terminal aktivieren , das vom Terminal abhängig ist.
— Thor

1
Ich dachte, Sie wollten aus der tmuxSchriftrolle ausbrechen, lesen Sie einfach Ihre Frage noch einmal und sehen Sie, dass ich falsch lag. Löscht diese Antwort in Kürze.
— Thor

Es scheint, dass es mit der scrollTtyOutputOption für das Terminal nicht ausreicht . Wenn der Befehl ausgeführt wird tmux, wird er nicht als Terminalausgabe registriert. Ich habe eine wirklich hässliche Arbeit dafür, ich werde es posten, wenn nichts anderes vorgeschlagen wird.
— Thor
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.