在 tmux.conf 中,如果 window_index 为 0,则设置不同的选项?

在 tmux.conf 中,如果 window_index 为 0,则设置不同的选项?

以下是 中选项的默认设置~/.tmux.conf

set -gw window-status-format " #I:#W#{?window_flags,#{window_flags}, } "

我遇到的问题是,当第一个窗口不处于活动状态时,值开头的空格字符不会应用于第一个窗口的名称(在状态栏的窗口列表中),这与所有其他窗口不同,它是独立应用的。因此,每当我切换到第一个窗口(由于随后添加了空格字符)时,窗口列表中就会出现这种移动,我觉得这很分散注意力。这不应该发生。

所以我想要的是,我想设置window-status-format为:

  • "#I:#W#{?window_flags,#{window_flags}, } "ifwindow_index0(即目标第一个窗口名称)。
  • " #I:#W#{?window_flags,#{window_flags}, } "如果window_index还有别的什么。

它看起来像这样:

set -gw window-status-format "#{?window_index=0,"#I:#W#{?window_flags,#{window_flags}, } "," #I:#W#{?window_flags,#{window_flags}, } "}"

但这绝对不是正确的 tmux 命令(显然它不起作用),原因有多种:

  1. 当然,这不是检查是否window_index等于的正确语法0
  2. 我们可以在同一个 tmux 配置中有多个条件吗?命令?

那么,我该如何正确地做到这一点呢?

答案1

看起来可以使用特异性来完成此操作,而不是使用多个条件。我所要做的就是将其添加到我的~/.tmux.conf

set -gw window-status-format " #I:#W#{?window_flags,#{window_flags}, } "
set -w -t :0 window-status-format "#I:#W#{?window_flags,#{window_flags}, } "

如果还不是很明显的话:

  • 第一个 tmux 命令为所有窗口设置全局值,无论会话如何。 (这也是默认设置,你根本不需要这一行。)

  • 下一个命令指定目标窗口的值(同样,与会话无关)。在我们的例子中,我们是说,如果目标窗口的索引(即window_index)是0,即如果目标窗口也是会话中的第一个窗口,则应用该值。

    有趣的是,-t(target-window) 选项还针对状态栏中相应窗口的名称。如果不是这样,这个解决方案就不是一个。

笔记:

  • 如果您使用不同的基本索引,例如set -g base-index 1,以便它从而1不是开始0,那么您必须:1在上面的命令中使用。

  • 您需要一个解决方案因为当您创建新会话时您会看到错误,但是当然,您可以像我在那里描述的那样解决它。

答案2

我找到了另一个解决方案:

is_first="#([ $(tmux display-message -p '#I') = $(tmux show-options -gqv base-index) ] && echo true)"
set -gw window-status-format "#{?$is_first,First is active,}"

相关内容