Xmonadの設定方法について3回に分けて紹介してゆきます。
まず1回目となる今回は、設定の基本とキーバインド変更等をとりあげます。
あまり細かく書かないので軽く読み飛ばしてください。
Xmonadの設定方法
Xmonadの設定は「~/.xmonad/xmonad.hs」で行います。以下の場所にデフォルト設定のサンプルファイルが存在するので、まずはこれをコピーして参考にするとよいでしょう。
/usr/share/doc/libghc6-xmonad-doc/examples/xmonad.hs.gz
設定ファイルを書き換えたら次のコマンドでXmonadの最コンパイルを行います。構文がチェックされ、エラーがあれば詳細が表示されます。(コンパイルは殆ど一瞬で終わります)
$ xmonad --recompile
なお、明示的に上記コマンドを実行せずとも、Xmonadの再起動時に設定変更がある場合自動的に再コンパイルされます。(つまりmod-qだけで反映することも可能)
再起動時に設定ファイルにエラーがあるとエラーメッセージが表示され、正常にコンパイルされた最後の設定が使われます。
Haskellの文法を知る
Xmonadの設定ファイルはHaskellで記述します。
Haskellの文法はやや特殊のため、Xmonadの設定ファイルを編集するにあたり予め基礎知識をつけておくことが必要です。
日本語の解説書が何冊か出ていますが、個人的には以下の2冊をお勧めします。
ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門
最も平易で理解しやすいHaskellの解説書と思います。Haskellの概要と基本的な文法を理解するだけであればこの本の前半部分だけでも充分です。
Real World Haskell—実戦で学ぶ関数型言語プログラミング
分厚い訳書で一見敷居が高そうに見えますが、中身は意外と分かりやすくまとまっています。まだ冒頭少ししか読んでいませんが、Haskellについて一歩踏み込んで学ぶにはこれがよさそうです。
キーバインド設定
キーバインドの設定はXMonad.Util.EZConfigモジュールのadditionalKeys関数もしくはadditionalKeysP関数で行います。両者はキー指定の書式が異なるだけで機能は同じです。
additionalKeysPの方が、EmacsやVimで馴染みのあるシンプルな指定方法なのでお勧めです。
import XMonad.Util.Run (spawnPipe)
import XMonad.Util.EZConfig
main = xmonad $ defaultConfig { terminal = "gnome-terminal" }
`additionalKeysP`
[ ("C-M-l", spawn "gnome-screensaver-command -a")
, ("M-r", refresh)
]
ウィンドウ種別毎の起動設定
manageHooksではアプリケーション(ウィンドウプロパティ)ごとに起動時の表示先ワークスペースやフローティング状態を指定することができます。
import Control.Monad (liftM2)
import qualified XMonad.StackSet as W
-- ウィンドウ作成時のデフォルトワークスペースを指定
myManageHookShift = composeAll
[ className =? "Firefox" --> viewShift "1"
, className =? "Gvim" --> viewShift "2"
, className =? "Gnome-terminal" --> viewShift "2"
]
where viewShift = doF . liftM2 (.) W.view W.shift
-- ウィンドウ作成時のフローティングを指定
myManageHookFloat = composeAll
[ className =? "MPlayer" --> doFloat
, className =? "Gimp" --> doFloat
]
main = xmonad $ defaultConfig
{ manageHook = myManageHookShift <+> myManageHookFloat
}
ウィンドウクラスは以下のコマンドを実行して対象のウィンドウをクリックすれば調べられます。
$ xprop | grep CLASS
WM_CLASS(STRING) = "resource(appName)", "className"
2番目の文字列の内容がclassNameになっています。
おわりに
設定変更の度にコンパイルが必要と聞くと、面倒そうな印象を持たれるかもしれません。
しかし実際の所、Xmonadの再コンパイルは実行時間の短さと再起動時の自動実行のおかげで利用者にとって殆ど負担になることはありません。
「xmonad –recompile」は「再コンパイル」というよりは本当に「構文チェック」のためのコマンドとして捉えた方がイメージ的に自然です。
参考ページ
Xmonad/General xmonad.hs config tips - HaskellWiki
設定小技いろいろ。
Comments»
mod-qのタイポでしょうか。mod-shift-qは終了のはずです。
ltakeshiさんご指摘ありがとうございます。書き間違いだったので早速修正しておきました。助かります。よくみたら日本語FAQの人ですね。私は英語苦手なので参考にさせてもらいました。