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.

Gilead
quelle

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>
Thor
quelle
+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