Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1188647
  • 博文数量: 253
  • 博客积分: 5892
  • 博客等级: 大校
  • 技术积分: 1942
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-24 14:20
文章分类

全部博文(253)

文章存档

2012年(98)

2011年(155)

分类: LINUX

2012-03-04 01:13:40

      GNU的screen工具是一个很好的工具.如果需要经常或者大量的登录服务器进行操作,screen或许还是一个不可或缺的好工具.
本文主要想探讨的主要问题是screen的配置脚本中如何自由定制状态栏的内容.也即hardstatus的内容定制.
本文所讨论的问题,对于screen工具的使用来说,基本没有什么指导作用,甚至可以认为是一个很无聊的问题,所以如果你是想找如何入门使用screen的话,那么,没有必要继续往下看了,可以参考网上很多同志的其他的介绍文档.

对于使用putty来连接服务器的同志来说,一般而言,如果需要得到多个shell的方法有三种:

  1. 最直接也是最简单的,就是多开几个putyy连接终端.这是最普遍使用的一种方法吧.
  2. 本地安装X-window服务器.一般是Xming或者是Xwin Server.使用一个putty登录系统,然后使用xterm.可以打开”无限”个终端.
  3. 使用scrren工具,在每次putty登录时,最多能同时打开10个终端.

从上面的描述来看,screen没有体现出什么优势,主要原因是没有展开来说,具体的到网上一搜一大把screen如何如何好的文章,此点不是本文探讨重点,略去.

我想说的是,在使用screen工具的时候,她象图形化界面的程序一样,在窗口的最底端,能够显示一个status 栏或者caption栏.如下图所示:

 

此status bar能够用来显示很多的东西,内容可以自己定制.本文主要讨论如何自己来定制下面的这样一个hardstatus栏或者caption栏.

首先有一点需要说明,就是为什么需要caption栏或者是hardstatus栏.没有不行么?

没有完全行.有跟没有在使用上没有什么大的区别,有这一栏的话,反而占了一点显示的面积,使得显示的区域变小了.

那么,为什么还要呢?

主要是因为用起来有方便的地方.因为我们使用putty登录的的界面,跟我们登入了screen之后的界面,如果没有这一栏的话,显示是一样的.

这样就不方便我们判断我们到底是在putty的登录界面下呢?还是其实已经是在screen的控制下了呢?

如果我们在screen下工作的时候,有一个地方提醒一下”你现在是在screen下啦,CTL+A不要随便乱用了阿”,那改多好呢?

这就是我研究hardstatus栏的写法的目的,或者说是出发点也行.

到底怎么写呢?

主要是原来我自己也不是很清楚应该怎么弄,然后中文的各种介绍就是估计只是复制粘贴了一些现成的示例,所以导致认为设置hardstatus栏很难.

但是看了英文的原文的参考资料,就发现,其实没什么的.也蛮简单的,只是稍稍有一些麻烦.

比如说网上比较流行的一个配置是这样的:

caption always “%?%F%{-b 4w}%:%{-b bb}%? %H | %l | %m-%d %c |%?%F%{-b 4w}%?%L=%-Lw%45>%{-b w4}%n%f* %t%{-}%+Lw%-0<”

上面这一行鸟东西看起来还不把人眼睛看花了?脑子看坏掉了?

但是一般网上的介绍也就到此为止,往下继续讲的中文的帖子基本上就没有了.这也难怪,中国人的习惯是实用主义的,这个东西用处有限,有人已经整理好了,拿来用就行了,干嘛还要研究呢?

搜了搜英文的介绍,发现有不少介绍caption或者hardstatus的写法的.主要的依据还是screen自己的文档.现把文档中关于”string escape”部分的内容总结如下,这部分的内容主要就是解释如何写的语法的.

一般来说,参考下面的这两个表,什么样的hardstatus栏或者caption栏都能够写出来了,也不会被别人的语句给吓到了.:

%转义字符标记本身,所有的有特殊含义的标记都是以此%开始的.
a字符”am”或者”pm”
A字符”AM”或者”PM”
C当前的时间HH:MM(24小时制)
C当前的时间HH:MM(12小时制)
d日期数字
D星期数字
FFlags of the windows(未知其意)
F表示当此窗口拥有焦点的时候,%?表达式值为真
h当前窗口的Hardstatus状态
H系统名,也就是hostname
l当前的系统负载
M月份数字
M月份名字(Jan?)
N窗口的编号(从0开始),如果是%3n这样的表达式表示窗口编号占3位
S时间表示中的秒数字
S秒名字
U在当前窗口上的所有的其他的用户
W所有的窗口的编号以及窗口的名字,如果是-w,则表示从0窗口到当前窗口之前的所有窗口,如果是+w表示当前窗口的下一个窗口到最后的所有窗口
W所有的窗口的编号以及名字,除了当前的窗口
y年份数字的最后的两位
Y年份的全称
?条件判断一般的表达式是%?xxxxx%?:yyyyy.如果xxxxx不是空字串的话,则显示xxxxx,否则显示yyyyy
=%=表示填充之前的字符串hardstatus栏的最右端,如果是%50=这种表达方式的话,则表示填充到hardstatus栏的50%处.注意填充的字符是空格.

 

也可以使用%+20=以及%-30=这样的表达式,这两个表达式分别表示从上一个填充的结束位置开始填充20%的空格,

然后显示之后的字串(如果之前不存在填充的话,则跟%20=没有任何的区别),以及填充空格到距离右边30%的地方.

关于这个,特别需要注意的地方就是,象”%n:%t%5=%H”这个表达式,很明显%n:%t的输出应该大于hardstatus栏长度的%5,

但是填充到%5,后面的%H就从栏长度的%5开始写起,所以会引起前面的内容被后面的内容所覆盖的情况.也就是所谓的截断

<这个转义符一般用在hardstatus的string的最后,起的作用主要跟下面的%>一样,

 

是用来进行滚动的,所起的作用是,如果显示的内容超过了hardstatus栏本身的长度,那么会将整个显示的内容往前滚动,确保最后的内容能够被显示,

很显然,这样的话,显示内容的最前面的一部分就被滚动到显示区域之外而不能显示了.

一般而言,不需要仔细的琢磨这个转义符的意义,它主要和下面的%>配合使用的.而且当和%>一起使用的时候,滚动的特性就 变掉了,

不再是单纯的%<那样的让最末尾总是能够显示,而是变成了%>式的,让特定的部分滚动到特定的比例处.

那为什么不只用%>而是要和%<结合起来用呢?主要是%>的定义是,

如果存在滚动的话,则改变滚动的属性为将特定的部分滚动到特定的比例处,但是如果不存在滚动,则%>不起作用,而%<的作用,就是提供了滚动属性.

>这个是一个很有用的功能,举个例子来说,有一个非常好的配置是这样的:

 

hardstatus string “%-w%{= BW}%50>%n %t%{-}%+w%<”

其中有一个%50>,前面是%-w表示的是从0到当前窗口之前的窗口number加title.
在%-w显示完了之后再添加一个%n %t.也就是说把本窗口的number和title也显示出来.
但是在中间就插了一个这样的%50>.这表示什么呢?
因为,我们可能创建了很多的window,以至于光%-w的显示已经超出了整个hardstatus的范围,
那么,当我们再显示%n %t的时候,就超出了整个bar的显示范围,
也就需要进行截断了.%50>所起的作用其实是一个滚动hardsatus栏的作用.
想象一下就能够明白了,当hardstatus栏已经被%-w填满了,
但是还要再继续显示%n %t,那么%n %t就已经在显示范围之外了,看不见了.
这时候,我们应用%50>将%-w滚动到hardstatus栏50%的地方.
显然,%-w的最前面的部分有一部分被截掉了.但是从%50开始显示%n %t.
明白了吧,这个符号的作用,文字很难描述,但是视觉上,很容易懂的.就是滚动harstatus栏的作用.就是滚动而已.
可以使用如%50L>这样的表达式,这表示,
如果存在滚动,则如果有内容因为滚动而未被显示,那么以…来表示有内容未显示.左边右边均有可能有此显示

{xx}大括号中的内容是设置属性或者配置颜色之类的.具体的内容参见下面的一个新表

下面的一个表是关于属性的设置的,其实也就是文字的颜色相关的一些设置

{+}增加此属性
{-}减少此属性,单独用时,表示回复到上次属性改变之前的设置值
{!}反转现在的属性
{=}改变当前属性,应用此处指定的属性
d昏暗效果
u下划线
b黑体
r反转
s突出显示
B闪烁效果
k黑色
r红色
g绿色
y黄色
b蓝色
m品红
c蓝绿
w白色
d默认颜色
.不改变颜色
 注意,颜色的设置有前景色和背景色之分,也就是字体的颜色和背景的颜色.

 

%{= bm},这样的表达式表达的是背景色被改为b,前景色被改为m.(就是这样的顺序),如果只指定一个颜色而非两个颜色的话,那么改变的是前景色,如果使用了!,那么改变的将是背景色.也可以使用’.’来表示不改变颜色,如%{= b.}表示改变背景色而不改变前景色

 几个例子:
 %{+b r}表示设置背景色为黑体的红色.就是加重的红色
 %{= yd}表示设置背景色为黄色,前景色为默认色
 %{= y.}背景色设置为黄色,前景色不变
  

上面的两个表应该已经很详细了,对于绝大多数的设置应该都没有问题了.

最后,有个示例.

我觉得比较好的一个就是:

hardstatus string “%-w%{= BW}%50>%n %t%{-}%+w%<”

上面的这个很简单,也很实用,没有多少什么系统负载信息之类的东东,只显示了系统中所有的窗口名并且高亮当前的窗口名.但我觉得这个是很好的了,简洁而实用.

效果图如下所示:

参考文档:

阅读(1807) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~