Skip to content

関数型ウィンドウマネージャ「XMonad」を使いこなそう

はじめまして。pi8027 です。今回は XMonad というウィンドウマネージャを紹介します。

XMonad とは

XMonad とは、純粋関数型プログラミング言語 Haskell によって実装された拡張性の高い X11 用ウィンドウマネージャライブラリの実装と、そのライブラリによる最低限のタイル型ウィンドウマネージャ実装の事です。

ライブラリとして実装されているので、ユーザは他のウィンドウマネージャ以上に自由に XMonad を拡張する事ができます。

XMonad はウィンドウマネージャの枠組みをとても上手く抽象化しており、ユーザは自分が欲しい機能を XMonad に簡単に追加する事ができます。 また、xmonad-contrib というライブラリを使う事で、既存の良くできた XMonad 拡張を簡単に利用する事ができます。

XMonad のインストール

ここでは、一番問題の起きづらい XMonad のインストール方法を紹介します。

  1. まず、Haskell Platform という Haskell プログラミング環境をインストールします。これは、多くの UNIX 系環境ではパッケージ管理システムを使って入れる事ができます。 もしパッケージが無ければ、まず GHC (Glasgow Haskell Compiler) をインストールして、Haskell Platform をソースコードからインストールしてください。
  2. 次に、cabal という Haskell で書かれたソフトウェアを管理するためのツールを使い、XMonad をインストールします。 cabal update と cabal install xmonad xmonad-contrib を順番に実行してください。

この手順で、$HOME/.cabal/bin/xmonad に XMonad がインストールされます。

最低限の設定

XMonad の設定は、 ~/.xmonad/xmonad.hs に記述します。このファイルは Haskell で記述されたプログラムであり、XMonad はこれをコンパイルし、実行しようとします。

xmonad パッケージの man/xmonad.hs に設定例があるので、まずはこのファイルをコピーして使ってみましょう。 なお、この設定ファイルを使うためには xterm, dmenu, gmrun が入っている必要があります。

XMonad を使ってみる

ここまでの手順を踏んだ上で、XMonad をウィンドウマネージャとして X11 を使ってみましょう。

まず、Alt+Shift+Return でターミナル(xterm)を起動します。Alt キーはさっき保存した設定で、XMonad のメタキーとして設定されています。

次に、Alt+P でランチャ(dmenu)を起動します。パスの通った実行ファイル名を入力して実行する事ができます。何か好きな物を実行してみましょう。

2のウィンドウが作られると、それが画面を2分割したように配置されると思います。もう少し増やすと、右側の領域がウィンドウの数の分だけ分割されて配置されるはずです。 このように画面を分割し、重なり合わないようにウィンドウを配置するウィンドウマネージャを、タイル型ウィンドウマネージャと言います。 このように XMonad は標準ではタイル型ウィンドウマネージャですが、そうでないレイアウトを実現する事もできます。

次に、Alt+J を入力してみてください。フォーカスが順番に移っていくはずです。Alt+K で逆向きに動けます。

Alt+Space によってレイアウトを切り替える事ができます。タイル型のレイアウト2つと全画面レイアウトの合計3つのレイアウトが順番に切り替わります。

以上が基本的な操作です。xmonad.hs の68行目以降を参照すると、キーバインド設定が一通りコメント付きで書いてあります。

設定を書いてみる

次に、XMonad の設定を書き換えてみましょう。

まず、35行目に XMonad のメタキーの設定があります。元々 mod1Mask となっていますが、これは左 Alt キーの事です。 Alt キーがウィンドウマネージャに使われるのはあまり便利ではないので、mod4Mask などにしておきましょう。これは Windows キーや Command キーに相当する物です。

次に、キーバインドを追加してみましょう。71行目から下に続いているのがキーバインドの設定です。 例えば、 , ((modm , xK_d), spawn “emacs”) のような行を追加してやると Mod+D で Emacs が起動するようになります。

より実践的な XMonad の使い方

筆者の XMonad 環境

XMonad をよりしっかりと拡張してやると、どのような事ができるのか。その例を幾つか紹介します。

GridSelect

GridSelect

XMonad.Action.GridSelect モジュールを使う事で、ユーザに幾つかの選択肢を提示するメニューを作る事ができます。 GridSelect の特長は、中心から一番遠い選択肢への距離が最小になるように要素を配置してくれる事と、同じグループに対して同じ色を割り当てるような表示ができる所です。

Magnifier

Magnifier

多くのウィンドウを同時に開くと、どうしても1つのウィンドウが小さくなってしまいます。

XMonad.Layout.Magnifier モジュールを使う事で、フォーカスの当たっているウィンドウだけを自動で大きくする事ができます。

Prompt

Prompt

XMonad.Prompt モジュールを使う事で、XMonad にプロンプト機能を追加できます。補完機能付きのシェルプロンプトなども作れます。

AngleFocus

元々 XMonad には方向指定の移動(上下左右の移動など)の機能が無かったため、この機能を作ってみました。

実体は角度の範囲を指定して移動できるような物になっているため、斜め移動するためのキーバインドを作る事もできます。

最後に

XMonad は Haskell の抽象化機能をとても上手く使ったウィンドウマネージャ実装となっています。

Haskell を学ぶ事で XMonad の実装を理解し拡張する事ができる一方、XMonad の実装を読む事で Haskell における良い抽象化手法が学べるようになっています。 また、ここから学べる抽象化手法は他の事にも応用できるでしょう。

これをきっかけとして、Haskell を使ってみるのはいかがでしょうか。

このエントリーをはてなブックマークに追加
はてなブックマーク - 関数型ウィンドウマネージャ「XMonad」を使いこなそう
Post to Google Buzz
Share on GREE

No related posts.

Facebook comments:

Post a Comment

Your email is never published nor shared. Required fields are marked *
*
*