twm 窗口管理器

twm 窗口管理器  

xlib-tutorial.tar.gz使用例子
libX11-1.3.2.tar.gz库

2012-02-18 21:29:22|  分类: Linux |  标签:linux  twm  |字号 订阅

twm 
twm是Tab Window Manager for the X Window System的简称,它是一个窗口管理器,初次发布于1988年4月,是个非常容易上手的Window Manager。不像其他的X程序,它没有基于任何GUI组件,而是直接使用的XLib,这样带来的好处就是:小、更方便的配置。所谓窗口管理器,它是一个特殊的程序,它用来给X程序提供诸如:标题的绘制、窗口阴影、窗口图标化、用户自定义宏、鼠标点击、键盘焦点、缩放等功能。

它和GNOME、KDE不同,不是一个桌面环境(Desktop Enviroment,DE)。那些所谓的桌面环境都会有一个窗口管理器,比如CentOS的GNOME用的就是MetaCity,这些DE集成了大量的应用程序,包括一些非常便利的系统管理工具、实用小工具、游戏等,大大方便了用户。

桌面环境纵有千般好,也会有它的短处,比如:由于它的庞大,在系统启动的时候会显的很慢,可能很多应用我们都不会用到,这个时候可以选择只加载一个窗口管理器即可。而且你将会发现,几乎所有的窗口管理器都可以用rc文件来配置,你可以在允许的范围内,任意的配置。比如twm的配置文件就是.twmrc。它位于用户目录下,在twm启的时候它会首先从用户的主目录下找这个文件,如果它找不到,twm就会使用一个系统共用的配置文件,一般情况下它位于:/usr/X11R6/lib/X11/twm/system.twmrc或/etc/X11/twm/system.twmrc。

启动twm
为了要启动twm,而不是GNOME或KDE,需要在用户的目录下编辑一个.xinitrc的文件,它的内容如下:

#!/bin/sh xclock -geometry 70x70+5+5 & xterm -geometry +200+200 -fn 7x13 -fg gray -bg black & exec twm


这样,当执行startx的时候就只会启动twm了。这个脚本除了最后一行,其他的都是可选的。最后一行表示启动twm,前面的两行表示启动的其他程序,xclock是一个时钟程序,它后面的参数表示它启动后所在的位置和大小。需要注意的是,除了最后一行,其他的行要在最后加上后台运行标志“&”,否则后面的程序都没法执行了。startx后,你将会发现twm的启动非常的快,至少比GNOME或KDE快多了,当然这样比有失公平。


twm的配置
twm的配置逻辑上被分为三类概念:变量(Variables)、绑定(Bindings)和菜单(Menus)。它们都保存在用户目录下的.twmrc文件中。


变量(Variables)
变量的配置必须放在第一,它用来描述字体、颜色、指针、边框宽度、图标、窗口的位置摆放,高亮、自动获得焦点等。变量的名字和关键字是非大小写敏感的。字符串必须用引号引起来,比如:"blue", 并且字符串是大小写敏感的。

例如:

BorderColor "gray50" {         "XTerm"   "red"         "xmh"     "green" }

以上表示,所有的窗口的边框颜色为gray50,大致为灰色。括号中间表示特殊的情况,比如第一行意思是:如果窗口的名字为"XTerm",或者它的类名为"XTerm",它的边框颜色就为red。

除此之外,还可定义很多窗口元素的颜色,如菜单背景、菜单前景、标题背景、标题前景等,如:

Color {         MenuBackground     "gray50"         MenuForeground     "blue"         BorderColor        "red" { "XTerm" "yellow" }         TitleForeground    "yellow"         TitleBackground    "blue" }



绑定(Bindings)
绑定配置通常放在第二部分,主要用于描述键盘或者鼠标在窗口、图标、标题、框架上动作时,产生的影响。

例如,把F1键绑定为最小化操作,把F2绑定为更改窗口的层次,把F11绑定为最大化窗口,把Alt+F4绑定为关闭窗口,F12用来把窗口焦点移到某个窗口上:

"F1"    =       : all   : f.iconify "F2"    =       : all   : f.raiselower "F4"    =  meta : all   : f.delete "F11"   =       : all   : f.fullzoom "F12"   =       : all   : f.warpto "XTerm Icon Manager"


绑定键盘的语法为:
Button or Key = modlist : context : function

Button or Key,就是鼠标的按键或者是键盘上的某个键。modlist是一些功能键或者它们的组合,比如shift, control, lock, meta, mod1, mod2, mod3, mod4, mod5等,shift, control和lock这些键大家都知道,meta在有些系统上就是alt键。context表示上下文,所谓上下文就是指鼠标或者焦点所在的地方。比如上面的F4键的行,其中的all表示当鼠标指针点在程序的任意位置,Alt+F4都会把当前窗口关闭,上下文还包括:
root:                 根窗口
frame:                窗口的框架
title:                窗口的标题
window:               窗口的客户区,就是窗口的内部那块区域
icon:                 图标
iconmgr:              窗口管理器
all:                  就是所有

再举个例子:

Button1 = : root : f.menu "twmWindows"

表示当鼠标左键在根窗口上点击的时候,弹出twmWindows菜单,twmWindows是一个菜单的标志符,将在后面说明。

上下文可以任意组合,比如想表示鼠标在框架或者标题上的绑定,可以这样写:

"F1" = shift : t|f : f.raise

其中t为title的缩写,f为frame的缩写。其他的上下文也都有缩写。

还可以把窗口的标题上加“标题按钮”,比如要在标题上加一个关闭按钮:

LeftTitleButton  "/usr/X11R6/include/X11/bitmaps/xm_noenter16" = f.delete

LeftTitleButton表示位置,然后是按钮图标的路径,最后是按钮的动作。


菜单(Menus)
菜单用于给用户提供自定义单的机会。它们可以被分成不同组,方便管理。每个菜单都由一个名字来标识,这个名字将来用作f.menu的参数。并且,我们还可以定义菜单的背景色、前景色、菜单的项以及该项所对应的动作。例如:

menu "LeftClickMenu" { "my menu"       f.title "fcitx"         f.exec "exec fcitx &" "kill fcitx"    f.exec "exec killall fcitx &" ""                ("rgb:0/2/4":"rgb:4/b/f")  f.nop "Xterm"         f.exec "exec xterm -fn 7x13 -fg gray -bg black &" "GNOME Term"    f.exec "gnome-terminal &" "FireFox"       f.exec "exec firefox &" "Luma QQ"       f.exec "exec ~/bin/LumaQQ/lumaqq &" "Gaim"          f.exec "exec gaim &" "Time"          f.exec "exec xmessage `date +\"%F %R:%S [%u]\"` &" }


菜单的内容编辑好后,你需要设置菜单的激活条件。比如上面的菜单,我们让它在鼠标左键点击屏幕时弹出。方法是在.twmrc中加入:

Button1 = : root : f.menu "LeftClickMenu

Button1表示鼠标左键,root表示根窗口,可以说就是桌面。

上面例子中,设置了一个空菜单,它用来分割不同类别的菜单项,它的颜色和别的稍有不同,括号中的前面表示前景色,后面表是背景色。 而最后一项它的动作为f.nop表示没有任何动作。而f.exec表示执行某个程序。f.menu表示激活某个子菜单。


图标管理器
如果桌面上的图标过多,用起来比较麻烦,这个时候可以用图标管理器来简化工作。twm支持多个图标管理器,每个还可以有一列或者多列,比如你想把所有的XTerm类程序的图 标都放在一个图标管理器中管理,你可以创建一个如下的管理器:

IconManager {         "XTerm"                "=100x5-10+10" 1 }


XTerm是窗口的类名(注),后面的参数表示管理器窗口的位置在屏幕的右上角,大小为100x5,-10+10表示它在屏幕上的位置,最后的1表示它只有1列。这样,打开的所有XTerm类的程序(比如xterm)的图标都会被这个管理器管理。管理器中的图标缺省是按照窗口打开的顺序来排序的,如果愿意,也可以修改排序的方式。


一些有用的设定
RandomPlacement
twm默认情况下,在建立新窗口时,需要用户指定窗口的位置,这个“特色”实在让人头疼,不知道twm的作者当初的用意何在。还好,有参数可以关闭它,在.twmrc的最上面加入RandomPlacement即可,以后新打开的窗口就会自动的找一个位置了。

AutoRelativeResize
在.twmrc中加入AutoRelativeResize,然后你就可以拖动标题栏最右边的按钮来改变窗口大小了。在实际操作中,如果要缩小窗口,需要先向放大的方向拖动,然后再往缩小的方向拖动才可以。如果不加入这个参数,要想改变窗口大小,需要把鼠标移动到右下角才可以,不够方便。

AutoRaise
有些窗口,会经常用到它,比如XTerm类的窗口。为了方便起见,在配置中加入AutoRaise{"XTerm"},这样当鼠标移动到XTerm的窗口上,无须任何点击,窗口就会被放到最上层。



注:
XTerm类。X下有应用程序类这种说法,每个程序都属于一个类。比如:xterm是XTerm类中的一员,xclock和oclock都属于Clock类(也有可能xclock属于XClock类)。把应用程序分类的好处之一就是,对类的设置会涵盖对它成员的设置,比如对Clock配置,这将影响到所有Clock类的程序。不过UNIX有很多应用程序类都只有一个成员,如XLoad只有xload。在twm下,可以设置一个菜单的动作为f.identify,用它你可以看到每个窗口的信息,其中就有它的类信息。



附:
twm配置文件
#
# $HOME/.twmrc。
# 


NoGrabServer
RestartPreviousState
DecorateTransients
TitleFont "-adobe-helvetica-bold-r-normal--*-120-*-*-*-*-*-*"
ResizeFont "-adobe-helvetica-bold-r-normal--*-120-*-*-*-*-*-*"
MenuFont "-adobe-helvetica-bold-r-normal--*-120-*-*-*-*-*-*"
IconFont "-adobe-helvetica-bold-r-normal--*-100-*-*-*-*-*-*"
IconManagerFont "-adobe-helvetica-bold-r-normal--*-100-*-*-*"
#ClientBorderWidth

Color
{
    BorderColor "slategrey"
    DefaultBackground "rgb:2/a/9"
    DefaultForeground "gray85"
    TitleBackground "rgb:2/a/9"
    TitleForeground "gray85"
    MenuBackground "rgb:2/a/9"
    MenuForeground "gray85"
    MenuBorderColor "slategrey"
    MenuTitleBackground "gray70"
    MenuTitleForeground "rgb:2/a/9"
    IconBackground "rgb:2/a/9"
    IconForeground "gray85"
    IconBorderColor "gray85"
    IconManagerBackground "rgb:2/a/9"
    IconManagerForeground "gray85"
}

#
# Define some useful functions for motion-based actions.
#
MoveDelta 3
Function "move-or-lower" { f.move f.deltastop f.lower }
Function "move-or-raise" { f.move f.deltastop f.raise }
Function "move-or-iconify" { f.move f.deltastop f.iconify }

#
# Set some useful bindings.  Sort of uwm-ish, sort of simple-button-ish
#
Button1 = : root : f.menu "defops"

Button1 = m : window|icon : f.function "move-or-lower"
Button2 = m : window|icon : f.iconify
Button3 = m : window|icon : f.function "move-or-raise"

Button1 = : title : f.function "move-or-raise"
Button2 = : title : f.raiselower

Button1 = : icon : f.function "move-or-iconify"
Button2 = : icon : f.iconify

Button1 = : iconmgr : f.iconify
Button2 = : iconmgr : f.iconify

"F4"    =  meta : all   : f.delete 
#
# And a menus with the usual things
#
menu "defops"
{
"Twm" f.title
"Iconify" f.iconify
"Resize" f.resize
"Move"  f.move
"Raise"  f.raise
"Lower"  f.lower
""  f.nop
"Focus"  f.focus
"Unfocus" f.unfocus
"Show Iconmgr" f.showiconmgr
"Hide Iconmgr" f.hideiconmgr
""  f.nop
"Xterm"  f.exec "exec xterm &"
""  f.nop
"Kill"  f.destroy
"Delete" f.delete
""  f.nop
"Restart" f.restart
"Exit"  f.quit
}
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值