分类: LINUX
2008-09-19 15:06:18
本文针对软件用户接口,主要针对窗口管理器(window managers,or WM's)的用户接口。很多软件拥有可怜的用户接口功能是软件作者的主意。因此,使一个软件拥有好的用户接口能力需要我们不断的调优。
因此,本文的目的是描述一个优秀的窗口管理器的接口。读者可以用更少的时间得到一个窗口管理器的接口使用经验。当你把定制后的窗口管理器界面同它的默认界面相比较就能得到动力了。
本文写给那些没有怎么想过定制它们的软件使用环境的人们。可是,软件作者的愿望是高级用户发现某些高级用法。
人们使用计算机时通常明白自己想做什么,而不是目前怎么样去做。例如,当你想切换到一个正在运行的程序时,你可能移动鼠标到任务栏并点击这个程序,或者使用 Alt-tab
键切换到程序。从来没有想过你有更好的方式可以做到这一点。
首先,如果你不懂敲击键盘(touch-typing),本文或许对你没有什么用处。如果你现在确实还不会敲键盘,首先去学会敲键盘,然后再回来阅读本文。
很明显,相对于键盘,使用鼠标点击非常慢。时常依赖鼠标的软件使用好的键盘绑定按键有可能工作的更好。泛泛而言,为过度使用鼠标和鼠标设备开发一个健康的空间也不会怎么样。
本节描述怎样改变实际按键的行为。也许你不想这样做,因为改变按键行为有可能会是你的键盘使用起来和别人的不一样。这或许是一个问题,依赖于你使用其他未定制键盘按键计算机的频率。
我们将会设置键盘的辅助键。辅助键一般指仅仅在其他键按下时需要一起按下的键。例如,C-c和C-v通常绑定在“复制”和“粘贴”命令上。请注意,使用辅助键比仅仅使用大多数按键要慢。如果仅仅按一个键就可以使一个软件工作,你应该更喜欢不用辅助键。一些笨拙的键除外,例如, Home
和 End
,这些键比较难按(离手指太远),所以从来不用。我们使用标准的emacs绑定。
下面会介绍两种辅助键布局。第一种是我在使用的一种,第二种可能你会喜欢。
首先,我们要设置 Control
和 Alt
键为仅仅在 Space-bar
左边的两个键,在Space-bar
右边的两个键设置为 Super
和 Hyper
键。
现在实际的布局类似如这样:
[ Contrfol_L ]
[Alt_L]
[ Space ]
[ Super_R ]
[ Hyper_R ]
如你所见,我们关心的就是 Space-bar
一边的两个键。如果你从来没有这样想过,你分别用左右大拇指按 Alt_L
和 Super_R
键。
我们这样做的原因是想得到一些辅助键,使得我们可以很容易的按下它们去控制某些动作。 Control
和 Alt(meta)
一般被特定软件使用。 Supper
大多数时候操纵窗口和窗口管理器。 Hyper
通常启动我们的程序。我发现我可以使用这四个辅助键做我所需要做的一切。如果你发现自己还需要一个辅助键做某些事情,右边的 Shift
是一个好主意。
好了,你需要修改 ~/.Xmodmap
文件以适应 XFree86(Xorg同样,译者注)
。你也许还要用 xkeycaps 工具。因为我不知道你的当前键盘布局是什么,我会给你一些可以工作得很好的步骤。
打开一个终端,输入命令 xev
。现在按下左边的 Contrl
键(我们想设置成Contrl_L
的键)。写下“键码”(keycode)。同样的步骤得到左边 Alt
键、右边Conrol
、右边 Alt
键的键码。现在你有四个键码了。
将 ~/.Xmodmap
文件做一个备份,用文字编辑器打开这个文件。输入下面类容:
keycode a = Control_L keycode b = Alt_L Keycode c = Super_R keycode d = Hyper_R clear control add control = Control_L clear mod1 add mod1 = Alt_L clear mod3 add mod3 = Super_R clear mod4 add mod4 = Hyper_R
将上面的 a,b,c,d 分别替换成你刚才用
xev
命令得到的“键码”值。
下面,我们替换 Escape
和 Caps Lock
键,因为 Escape
更常用,这样我们可以方便的按下 Escape
键。如果你使用 vi-style
的编辑器,这会是一个非常优秀的改进。假设你使用一个标准的美国键盘。只要添加下面内容到你的~/.Xmodmap
文件即可:
keycode 66 = Escapekeycode 9 = Caps_Lock
最后,我们需要确保系统启动 XFree86
的时候加载 ~/.Xmodmap
文件。最简单的方法是重启 X
。然后打开一个终端云行 xmodmap
命令。你应该能看见改变了。如果不是,你需要手动是 xmodmap
加载 ~/.Xmodmap
文件,如果你使用~/.xinitrc
或 ~/.xsession
文件,你可以在你的 WM
启动命令前加入一行:xmodmap ~/.Xmodmap
。如果使用一个图形登录,你需要在它的启动文件里面增加一条上面同样的命令。
我推荐使用 sawfish
。其他的 WM's 也可以工作,倒是我将要举的例子中不知道它们的所有特性。你也可以将 sawfish
和 gnome
一起使用(我就是这样,译者:我不喜欢gnome,所以只使用sawfish),这样可以得到 gnome
环境的一些特性。当然...
大部分的窗口管理器的工作是为你启动程序。另外一个重叠的任务是切换正在运行的程序。我们将集合这两种任务到同一个“绑定键”上。这对于同时运行的不止一次的程序不能正确工作。你的终端通常就是这样。
好了,例如,我们想绑定编辑器到 Hyper-e
键,当编辑器没有运行的时候按下H-e
键就可以运行了,如果编辑器已经在运行可以聚焦到它(将编辑器调到当前桌面)。
这是一个非常强大的功能,可以让你切换程序的时候不去关心这个程序是否在运行。我们使用 sawfish
的一个扩张 jump-or-exec
实现这个功能。(作者的链接已经失效,可以google里面搜索到)
我们准备使用 Hyper
键启动所有程序。对于每一个程序你需要像下面的例子一样使用 jump-ro-exec
:
(bind-keys global-keymap "H-e" `(jump-or-exec "GVIM" ,(lambda () (system "gvim &")) ,(lambda (wind) (display-window wind))))
一共有三个主要部分。 "H-e"
是我们绑定的键。 "GVIM"
是程序窗口标题的全部或部分。 "gvim &"
是当一个窗口匹配 "GVIM" 没有发现的时候启动的命令。注意末尾的 "&"
号,如果没有这个符号,程序会出问题。
对于需要运行很多个实例的程序,你可以使用 sawfish 的 keybinding editor。使用"Run shell command"函数。
你选定什么样的绑定不重要,一般使用程序名字的第一个字母,如果这样的字母不容许使用,可以换一个。
Sawfish
有很太多的可绑定性。我相信你会重新审视它们,这样可以使你的工作更快。
(很多链接现在失效,可以google到sawfish的源码,找到里面的doc看看。
这里详细步骤是这样,在终端输入“xev”命令,然后按下想知道它 keycode的按键。仔细观察终端窗口的输出,可以看见keycode字样,它后面的数字就是你刚才按下按键的“键码(keycode)”了。