在GNU屏幕标题或hardstatusline中正确alignment文本

我有这个在我的.screenrc

caption always "%{= Kw} [%0c] %-Lw%{= KW}[%50>%n%f* %t]%{= Kw}%+Lw%=| %l | ${FULLHOST}" 

它通常显示如下所示:

 [01:06] 0$ vim 1$ top 2-$ tail [3$* ~] | 0.26 0.54 0.36 | machine.domain.com 

但是,当我打开很多窗口时,右侧的数据被推下并截断:

 [01:07] 0$ vim 1$ top 2$ tail 3$ ~ 4$ ~ 5$ ~ 6-$ ~ [7$* ~] | 0.21 0.46 0.34 | mac 

我怎样才能改变标题命令,所以它会截断窗口列表如果必要的,而不是从边缘推入正确的信息? 如果活动窗口始终显示,则为奖励积分。

另一个解决scheme,我目前正在使用。 而不是原始行中的“%=”,或者是“%-30 =”(与-30%(又名70%)标记alignment),我使用'%-043 ='到-43个字符)。 但是,当然这和bender的问题一样,我需要为每个服务器抵消变化。 解决scheme是编辑.screenrc每个服务器,像这样的命令:

 sed -i "s/043/0$(( 19 + $#FULLHOST ))/" ~/.screenrc 

(19是负载显示和间距使用的字符数)

由于我的.rcrc文件是由我的shell的.rc文件生成的,如果它不在那里,我可以立即运行这个命令,并最终为每个服务器正确的偏移alignment。 不优雅,但它的作品!

剩下的问题,我真的不在意足以解决:

  • 窗口列表(以及包括时间在内的左边的任何内容)现在都被推下左边。 我通过删除时钟解决了这个问题。
  • 如果机器的主机名发生变化,我需要重新生成.screenrc,这涉及到删除它,然后启动一个新的shell。

我用:

 caption always "%-Lw%{= Yk}%50>%n%f*%t%{-}%+Lw%<%-12= %?%F%?%{b}%c %m/%d%?" 

这显示如下所示:

 0*bender@armitage 1 bender@rikki 2 bender@gibson 15:11 05/30 

随着窗口列表大小的增长,这将保持状态行上的时间和date以及列表中的活动窗口。 你所缺less的魔术比特是你想要保留在右边的部分的一个定义的宽度。 这是我的caption命令中的“%-12 =”width指令。

尝试像这样:

 caption always "%{= Kw} [%0c] %-Lw%{= KW}[%50>%n%f* %t]%{= Kw}%+Lw%-30=| %l | ${FULLHOST}" 

您需要使用宽度(%-30 =以上)来显示完整的主机名。