XMonadをインストールしただけの状態ではパッケージのコメントが確認できず、何をどうやって指定すれば良いか分からなくなってしまうことが多々あるのでまとめます。
はじめに
この記事では、XMonad.ManageHookに指定するWM_CLASSの調べ方と、取得できなかった場合の指定方法を紹介します。
myManageHook :: ManageHook
myManageHook = composeAll
[
-- ここに指定する文字列の調べ方
className =? "zoom" --> doFloat
]
環境
- XMonad: xmonad 0.18.0
対象読者
- WM_CLASSの調べ方が分からない方
- Haskellの環境構築をしておらずclassNameなどのコメントが確認できない方
この記事の内容について
この記事ではHaskellの環境構築を行いません。
この記事を読むとできるようになること
- WM_CLASSの取得
- WM_CLASSがない場合の指定方法
- ManageHookに指定する値について
WM_CLASSの調べ方
xpropコマンドを実行し、取得したいアプリケーションのウィンドウをクリックすることで取得できます。
$ xprop | grep WM_CLASS
# アプリケーションをクリック
WM_CLASS(STRING) = "Navigator", "firefox"
"Navigator"と"firefox"という2つの文字列が表示されました。
classNameを使う場合は、2番目の"firefox"を指定します。
myManageHook :: ManageHook
myManageHook = composeAll
[
className =? "zoom" --> doFloat,
className =? "firefox" --> doFloat
]
WM_CLASSがない場合の指定方法
例えばBraveのピクチャインピクチャモードなどはWM_CLASSが存在しません。
そのような場合は、WM_NAMEをtitleとマッチさせます。
$ xprop | grep WM_CLASS
$ xprop | grep WM_NAME
WM_NAME(UTF8_STRING) = "ピクチャー イン ピクチャー"
_NET_WM_NAME(UTF8_STRING) = "ピクチャー イン ピクチャー"
-- Brave-browser Picture in Picture
title =? "ピクチャー イン ピクチャー" --> doFloat
ManageHookに指定する値について
(それぞれのコメントを確認すれば済む話ですが、わたしはXMonadのみをインストールして開発環境を構築していないため)
XMonad.ManageHookのドキュメントに解説が載っています。
className
className :: Query String
Return the resource class; i.e., the second string returned by WM_CLASS.https://hackage.haskell.org/package/xmonad-0.18.0/docs/XMonad-ManageHook.html#v:className
classNameはWM_CLASSの2番目の値を返します。
そして=?
と-->
はそれぞれ、結果が等しい場合はTrueを返す、Trueを返したらManageHookを実行する、という意味です。
そのため、className =? "xxx"
には結果が等しくなるようにWM_CLASSの2番目の値を指定すれば良いことになります。
appName
appName :: Query String
Return the application name; i.e., the first string returned by WM_CLASS.https://hackage.haskell.org/package/xmonad-0.18.0/docs/XMonad-ManageHook.html#v:appName
appNameはWM_CLASSの1番目の値を返します。
例えば前のセクションでWM_CLASSを確認したfirefoxの例では、
appName =? "Navigator" --> doFloat
となります。
WM_CLASSを調べた数はそう多くありませんが、現時点ではWM_CLASSが一つしかないアプリケーションには遭遇していません。
また、resourceというappNameの下位互換エイリアスも存在します。
title
title :: Query String
Return the window title.https://hackage.haskell.org/package/xmonad-0.18.0/docs/XMonad-ManageHook.html#v:title
titleはウィンドウのタイトルを返します。
確かにBraveのピクチャインピクチャモードのタイトルを確認してみると、「ピクチャー イン ピクチャー」と表示されています。
WM_NAMEはウィンドウのタイトルと一致するようなので、WM_CLASSがない場合はtitleを使うことでフロート表示などをすることができます。
まとめ
今回の記事では、XMonad.ManageHookに指定するWM_CLASSの調べ方と、取得できなかった場合の指定方法を紹介しました。
参考