从this question,我可以通过查看$ TERM变量,从正在运行的程序中看出我是否在屏幕(或tmux屏幕)中。
但是如何判断屏幕是否真的可见?在tmux中,我可以有多个屏幕,在底部会显示一个标签栏,每个屏幕都有一个“标签”。其中有用的部分是,如果另一个选项卡中有活动,则在有输出时该选项卡的外观会发生变化。出于这个问题的目的,我不关心屏幕是否实际对用户可见(另一个窗口可能与它重叠),只是它是tmux中的活动和可见屏幕。
对于在其中一个选项卡中运行的程序来判断其屏幕当前是否为“活动”(可见)屏幕并使用它来调节其输出将非常有用。通过这种方式,它可以在可见时更加冗长,并且只在不可见时输出更重要的内容,以避免由于活动突出显示在选项卡上而在标签之间进行不必要的切换。显然,活动屏幕可以由用户随时切换。
在tmux屏幕上运行的应用程序如何确定它何时可见且不可见?
答案 0 :(得分:1)
您可以tmux display-message
与$TMUX_PANE
一起使用,以显示当前窗格是处于活动状态还是非活动状态:
$ 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只打印“当前窗口标志”(请参阅the tmux man page,其中包含status-left
下的字符序列列表。
AFAIK,这些值是:
*
,用于当前活动窗口
-
,用于之前选择的窗口
窗口的空字符串既不是活动的,也不是“之前的”。
您需要定期从程序内部轮询tmux以确定焦点是否已更改。