我如何判断我的 tmux 屏幕是否可见?

How can I tell if my tmux screen is the one visible?

this question 开始,我可以通过 运行 程序通过查看 $TERM 变量判断我是否在屏幕(或 tmux 屏幕)中。

但是我如何判断屏幕是否真的可见?在 tmux 中,我可以有多个屏幕,并在底部显示一个标签栏,每个屏幕都有一个 "tab"。这样做的有用部分是,如果在另一个选项卡中有 activity,如果有输出,则该选项卡的外观会发生变化。出于这个问题的目的,我不关心屏幕是否对用户实际可见(另一个 window 可能与它重叠),只要它是 tmux 中的活动和可见屏幕即可。

对于这些选项卡之一中的程序 运行 确定其屏幕当前是否为 "active"(可见)屏幕并使用它来调整其输出会很有用.这样可以在可见的时候更冗长,不可见的时候只输出更重要的内容,避免因 activity 高亮显示在选项卡上而在选项卡之间进行不必要的切换。显然,活动屏幕可以由用户随时切换。

tmux 屏幕中的应用程序 运行 如何确定它何时可见和不可见?

您可以使用 tmux display-message$TMUX_PANE 来显示当前窗格是否为 active/inactive:

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

首先,$TMUX_PANE 是 tmux 导出的环境变量,它包含给定 shell.

的 tmux 内部窗格 ID

display-message -p 命令将其输出打印到 STDOUT。

-t $TMUX_PANE 参数使用 $TMUX_PANE 变量查询特定窗格(在本例中为当前窗格)。

最后,-f '#F' 告诉 tmux 只打印 "Current window flag"(参考 the tmux man page,它在 status-left 下有一个字符序列列表)。

据我所知,这些值是:

*,对于当前活跃的 window

-,对于之前选择的window

以及 windows 的空字符串,既不活跃,也不 "previous".

您需要从程序内部定期轮询 tmux 以确定焦点是否已更改。