LoginSignup
0
0

【XMonad】ManageHookに指定するWM_CLASSの調べ方とない場合の指定方法

Posted at

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の調べ方と、取得できなかった場合の指定方法を紹介しました。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0