1.目的
2.Mindset
3."老鼠"太慢
4.键映射
5.选择窗口管理器
5.1 配置窗口管理器
5.2 启动程序
5.3 通常的绑定
5.4 其他的绑定
5.5 程序控制相关的键翻译
6. 结论
7. 链接

1.目的

本文针对软件用户接口,主要针对窗口管理器(window managers,or WM's) 的用户接口。很多软件拥有可怜的用户接口功能是软件作者的主意。因此,使 一个软件拥有好的用户接口能力需要我们不断的调优。

因此,本文的目的是描述一个优秀的窗口管理器的接口。读者可以用更少的时间 得到一个窗口管理器的接口使用经验。当你把定制后的窗口管理器界面同它的默 认界面相比较就能得到动力了。

本文写给那些没有怎么想过定制它们的软件使用环境的人们。可是,软件作者的 愿望是高级用户发现某些高级用法。

2.Mindset

人们使用计算机时通常明白自己想做什么,而不是目前怎么样去做。例如,当你 想切换到一个正在运行的程序时,你可能移动鼠标到任务栏并点击这个程序,或 者使用 Alt-tab 键切换到程序。从来没有想过你有更好的方式可以做到这一点。

3."老鼠"太慢

首先,如果你不懂敲击键盘(touch-typing),本文或许对你没有什么用处。如 果你现在确实还不会敲键盘,首先去学会敲键盘,然后再回来阅读本文。

很明显,相对于键盘,使用鼠标点击非常慢。时常依赖鼠标的软件使用好的键盘绑 定按键有可能工作的更好。泛泛而言,为过度使用鼠标和鼠标设备开发一个健康 的空间也不会怎么样。

4.键映射

本节描述怎样改变实际按键的行为。也许你不想这样做,因为改变按键行为有可 能会是你的键盘使用起来和别人的不一样。这或许是一个问题,依赖于你使用其 他未定制键盘按键计算机的频率。

我们将会设置键盘的辅助键。辅助键一般指仅仅在其他键按下时需要一起按下的 键。例如,C-c和C-v通常绑定在“复制”和“粘贴”命令上。请注意,使用辅助键比 仅仅使用大多数按键要慢。如果仅仅按一个键就可以使一个软件工作,你应该更 喜欢不用辅助键。一些笨拙的键除外,例如, HomeEnd ,这些键比较难按 (离手指太远),所以从来不用。我们使用标准的emacs绑定。

下面会介绍两种辅助键布局。第一种是我在使用的一种,第二种可能你会喜欢。

首先,我们要设置 ControlAlt 键为仅仅在 Space-bar 左边的两个键,在 Space-bar 右边的两个键设置为 SuperHyper 键。

现在实际的布局类似如这样:

[ Contrfol_L ] [Alt_L] [ Space ] [ Super_R ] [ Hyper_R ]

如你所见,我们关心的就是 Space-bar 一边的两个键。如果你从来没有这样想 过,你分别用左右大拇指按 Alt_LSuper_R 键。

我们这样做的原因是想得到一些辅助键,使得我们可以很容易的按下它们去控制 某些动作。 ControlAlt(meta) 一般被特定软件使用。 Supper 大多数时候 操纵窗口和窗口管理器。 Hyper 通常启动我们的程序。我发现我可以使用这四个 辅助键做我所需要做的一切。如果你发现自己还需要一个辅助键做某些事情,右 边的 Shift 是一个好主意。

好了,你需要修改 ~/.Xmodmap 文件以适应 XFree86(Xorg同样,译者注)。你也 许还要用 xkeycaps 工具。因为我不知道你的当前键盘布局是什么,我会给你一 些可以工作得很好的步骤。

  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 命令得到的“键码”值。

下面,我们替换 EscapeCaps Lock 键,因为 Escape 更常用,这样我们可以 方便的按下 Escape 键。如果你使用 vi-style 的编辑器,这会是一个非常优秀 的改进。假设你使用一个标准的美国键盘。只要添加下面内容到你的 ~/.Xmodmap 文件即可:

keycode 66 = Escape
keycode 9 = Caps_Lock

最后,我们需要确保系统启动 XFree86 的时候加载 ~/.Xmodmap 文件。最简单的 方法是重启 X 。然后打开一个终端云行 xmodmap 命令。你应该能看见改变了。 如果不是,你需要手动是 xmodmap 加载 ~/.Xmodmap 文件,如果你使用 ~/.xinitrc~/.xsession 文件,你可以在你的 WM 启动命令前加入一行: xmodmap ~/.Xmodmap。如果使用一个图形登录,你需要在它的启动文件里面增加 一条上面同样的命令。

5.选择窗口管理器

我推荐使用 sawfish。其他的 WM's 也可以工作,倒是我将要举的例子中不知道 它们的所有特性。你也可以将 sawfishgnome 一起使用(我就是这样,译 者:我不喜欢gnome,所以只使用sawfish),这样可以得到 gnome 环境的一些特 性。当然...

5.1 配置窗口管理器

5.2 启动程序

大部分的窗口管理器的工作是为你启动程序。另外一个重叠的任务是切换正在运 行的程序。我们将集合这两种任务到同一个“绑定键”上。这对于同时运行的不止 一次的程序不能正确工作。你的终端通常就是这样。

好了,例如,我们想绑定编辑器到 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"函数。

你选定什么样的绑定不重要,一般使用程序名字的第一个字母,如果这样的字母 不容许使用,可以换一个。

5.3 通常的绑定

5.4 其他的绑定

5.5 程序控制相关的键翻译

6. 结论

Sawfish 有很太多的可绑定性。我相信你会重新审视它们,这样可以使你的工作 更快。

7. 链接

(很多链接现在失效,可以google到sawfish的源码,找到里面的doc看看。


1. 这里详细步骤是这样,在终端输入“xev”命令,然后按下想知道它 keycode 的按键。仔细观察终端窗口的输出,可以看见keycode字样,它后面的数字 就是你刚才按下按键的“键码(keycode)”了。