2017-03-13 38 views
1

this question,我可以通过查看$ TERM变量,从正在运行的程序中知道我是否在屏幕(或tmux屏幕)中。如何判断我的tmux屏幕是否可见?

但是我怎么知道屏幕是否真的可见?在tmux中,我可以有多个屏幕,并在底部显示一个标签栏,每个屏幕都有一个“标签”。其中有用的部分是,如果在另一个选项卡中存在活动,则该选项卡的外观会在输出时发生更改。就这个问题而言,我不在乎屏幕是否对用户实际可见(另一个窗口可能与它重叠),只要它是tmux中的活动和可见屏幕即可。

对于在其中一个选项卡中运行的程序来确定其屏幕当前是否为“活动”(可见)屏幕并使用此屏幕来缓和其输出会很有用。通过这种方式,在可见时它可能会更加冗长,并且只有在不重要时才会输出更重要的内容,从而避免由于选项卡上显示的活动高亮显示而在标签之间进行不必要的切换。显然,活动屏幕可以随时由用户切换。

在tmux屏幕中运行的应用程序如何确定它何时变得可见并且不可见?

回答

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导出的环境变量包含TMUX是对于给定的壳体内部窗格ID 。

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

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

最后,-f '#F'告诉tmux只打印“当前窗口标志”(参见the tmux man page,它具有status-left下的字符序列列表)。

AFAIK,这些值是:

*,当前活动窗口

-,对于先前选择的窗口

而对于既不是活动窗口为空字符串,也不是“以前的”。

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

+0

优秀,谢谢!我可以随时调用这个我有小数输出,如果窗口不活动,我不会打印它。 – Michael

相关问题