2017-03-13 2 views
1

Von this question kann ich aus einem laufenden Programm, wenn ich in einem Bildschirm (oder tmux-Bildschirm) bin, indem Sie auf die Variable $ TERM sehen.Wie kann ich feststellen, ob mein tmux-Bildschirm sichtbar ist?

Aber wie kann ich feststellen, ob der Bildschirm tatsächlich sichtbar ist? In tmux kann ich mehrere Bildschirme haben, und unten wird eine Tab-Leiste mit einem "Tab" für jeden Bildschirm angezeigt. Der nützliche Teil davon ist, dass wenn eine Aktivität in einer anderen Registerkarte vorhanden ist, das Aussehen dieser Registerkarte sich ändert, wenn eine Ausgabe erfolgt. Für diese Frage ist es mir egal, ob der Bildschirm tatsächlich für den Benutzer sichtbar ist (ein anderes Fenster könnte ihn überlappen), nur wenn es der aktive und sichtbare Bildschirm innerhalb von tmux ist.

Es wäre nützlich für ein Programm, das auf einer dieser Registerkarten läuft, um zu bestimmen, ob sein Bildschirm gegenwärtig der "aktive" (sichtbare) Bildschirm ist, und um damit seine Ausgabe zu moderieren. Auf diese Weise kann es, wenn es sichtbar ist, ausführlicher sein und nur wichtigere Inhalte ausgeben, wenn dies nicht der Fall ist, um unnötiges Umschalten zwischen den Registerkarten zu vermeiden, da die Aktivitätsmarkierung auf der Registerkarte angezeigt wird. Der aktive Bildschirm könnte natürlich vom Benutzer jederzeit umgeschaltet werden.

Wie kann eine Anwendung, die in einem tmux-Bildschirm ausgeführt wird, feststellen, wann sie sichtbar und nicht sichtbar ist?

Antwort

1

Sie tmux display-message mit $TMUX_PANE verwenden können, um zu zeigen, ob der aktuelle Bereich aktiv/inaktiv ist:

$ TMUX_STATUS=$(tmux display-message -p -t $TMUX_PANE -F '#F') $ [[ "$TMUX_STATUS" == '*' ]] && echo "window is active" window is active

Erstens ist $TMUX_PANE eine Umgebungsvariable von tmux exportierte, die tmux interne Scheibe ID für die jeweilige Schale enthält .

Der Befehl display-message -p gibt seine Ausgabe an STDOUT aus.

Das Argument -t $TMUX_PANE verwendet die Variable $TMUX_PANE, um einen bestimmten Bereich abzufragen (in diesem Fall den aktuellen).

Schließlich teilt -f '#F' Tmux, nur das "Aktuelle Fenster Flag" zu drucken (siehe the tmux man page, die eine Liste von Zeichenfolgen unter status-left hat).

AFAIK, diese Werte sind:

*, für die gerade aktive Fenster

-, für die zuvor gewählte Fenster

Und eine leere Zeichenfolge für Fenster, die weder aktiv sind, noch „vorherige ".

Sie müssen tmux regelmäßig in Ihrem Programm abfragen, um festzustellen, ob sich der Fokus geändert hat.

+0

ausgezeichnet, danke! Ich kann dies jederzeit aufrufen, wenn ich triviale Ausgaben habe und wenn das Fenster nicht aktiv ist, drucke ich es nicht. – Michael

Verwandte Themen