「XMonad」

xmonad,动态平铺X11window管理器。使用Haskell编写和配置。在普通window管理器中,需要花费很多时间对齐和搜索window,而xmonad会使用自动布局算法进行管理,可以动态重新配置,以最大限度地利用屏幕。window管理器的所有功能都可以从键盘访问:鼠标是完全可选的。在Haskell中配置了xmonad,用户可以在配置文件中实现自定义布局算法。 xmonad的原则是可预测性:用户应该事先知道将由任何动作产生的window排列。

默认情况下,xmonad提供了三种布局算法:tall、wide、fullscreen。在tall、wide模式下,窗户被平铺并布置成防止重叠并最大化屏幕使用。一组window在虚拟屏幕上分组在一起,每个屏幕都有自己的布局,可以动态重新配置。通过Xinerama支持多个物理显示器,允许同时显示多个屏幕。

通过利用具有丰富的静态类型系统的现代函数式语言的表现力,xmonad提供了一个完整的,特色的window管理器,不超过1200行代码,重点在于正确性和稳定性。使用类型系统提供的静态保证和基于类型的自动化测试的组合来检查window管理器的内部属性。这样做的好处是代码很容易理解,易于修改。

xmonad将每个window放入“workspace”。每个workspace可以有任意数量的window,可以通过mod-j和mod-k进行循环。 Windows也可以全屏显示,水平平铺或垂直平铺。您可以使用mod-space切换布局模式,这将通过可用的模式进行循环。

当使用多个显示器(Xinerama)运行时,每个屏幕上只有一个workspace可见。 mod-{w,e,r}在屏幕之间切换焦点,而shift-mod-{w,e,r}将当前window移动到该屏幕。当xmonad启动时,工作区1在屏幕1上,工作区2在屏幕2等上。当将workspace切换到已经可见的工作区时,将交换当前和可见的workspace。

截图

下面的这几张图都是盗的:

默认的快捷键

mod指的是键盘上的`Alt’键。

mod-shift-return
启动终端。

mod-shift-c
关闭获得焦点的Window

mod-space
通过可用的布局算法,轮流处理。

mod-shift-space
将当前workspace的布局重置为默认的布局。

mod-n
将window调整到正确的大小。

mod-tab
将焦点切换到下一个window

mod-shift-tab
将焦点切换到上一个window

mod-j
将焦点切换到下一个窗口

mod-k
将焦点切换到上一个窗口

mod-m
将焦点切换到主窗口

mod-return
交换获得焦点的Window和主Window

mod-shift-j
用下一个Window交换获得焦点的Window

mod-shift-k
使用上一个Window交换获得焦点的Window

mod-h
收缩主区域

mod-l
扩展主区域

mod-t
将窗口放回平铺中

mod-comma
增加主区域中的窗口数。comma是逗号。

mod-period
减少主区域中的窗口数。period是句号。

mod-shift-slash
显示快捷键提示列表。刚开始的时候记不住所有的快捷键,使用的时候可以查看,这个功能很好用。

mod-[1..9]
切换workspace。例如,要切换到工作区5,可以按下mod-5。

mod-shift-[1..9]
将窗口移动到某个workspace

工具启动

mod-p
启动dmenu

mod-shift-p
启动gmrun

多显示器下的操作

mod-{w,e,r}
切换到某个物理显示器。一般用在多显示器中。

mod-shift-{w,e,r}
将Client移动到某个显示器。

window的拖拽与重置

mod-button1
将window设置为浮动模式,并通过拖动来移动窗口。

mod-button2
将window调整到stack的顶部

mod-button3
将窗口这只为浮动模式,并通过拖动来调整大小。

退出与重启

mod-shift-q
退出xmonad

mod-q
重启xmonad

与XMONAD一起使用的工具

dmenu, 程序启动器
dzen, 可扩展的状态栏
xmobar, 也是一个可扩展的状态栏
rxvt-unicode, 终端
vimperator, 用于Friefox的VIM UI

配置XMONAD

从xmonad-0.9开始,任何额外的Haskell模块都可以放置在~/.xmonad/lib/,它在GHC的搜索路径中。并且支持分层模块:例如,文件~/.xmonad/lib/XMonad/Stack/MyAdditions.hs可以包含如下内容:

module XMonad.Stack.MyAdditions (function1) where
    function1 = error "function1: Not implemented yet!"

然后在xmonad.hs中直接引入该模块就可以了,就好像是xmonad或xmonad-contrib中的模块。

参考文献

xmonad Homepage
xmonad Download Page
xmonad building and installation
xmonad manpage