xmonad で狙った位置にフロートウィンドウを表示する

すごく簡単そうなのになかなかやり方が (日本語で) 見つからなかったので
備忘録的にメモ。

使うもの

XMonad.Util.NamedScratchpad
http://xmonad.org/xmonad-docs/xmonad-contrib/XMonad-Util-NamedScratchpad.html

設定

まずはインポートになければ追加。

import XMonad.StackSet as W
import XMonad.ManageHook
import XMonad.Util.NamedScratchpad

今回は試しに Thunderbird のメッセージ作成ウィンドウを
画面の右端に高さは上下 (ほぼ) 最大、
幅は 70 文字程度を確保する設定です。

customFloating に表示位置や長さを渡してやるので

doXXXFloat = customFloating $ W.RationalRect (表示 X 位置) (表示 Y 位置) (幅) (高さ)

とつくっていくので、

myManageHook = composeAll
    [ className =? "Thunderbird" <&&> resource =? "Msgcompose" --> doRightFloat
    , resource  =? "kdesktop"       --> doIgnore ]
    where
      doRightFloat = customFloating $ W.RationalRect (4.5/6) (0.1/6) (1/4) (4.9/5)  -- 左上から x y 幅 高

のように

  • X
    ほぼ最大にして一番右へ。ウィンドウサイズ分加減。
  • Y
    一番上からでいいのでほぼ 0。 xmobar のサイズ分加減。

  • 70 文字程度がちょうど 1/4。
  • 高さ
    画面上から下まで最大で使いたいのでほぼ 1。xmobar サイズ分加減。

して使いました。

位置やサイズを変えてやれば
画面下に表示したり、中央に表示したりできますね。