xmonad - 共通事項 - フローティングウィンドウ

クラウディア 
1. 概要
2. 準備
3. 設定
4. 位置やサイズを指定する
5. 表示
6. わたしの定義
7. 操作

1. 概要

 基本的には、新規プログラムを起動すると、最初は前画面、以降は等分割と、まぁ、タイル型特有の表示をしますが、設定を行うことで、フローティング表示ができます。  本項は、「xmonad で狙った位置にフロートウィンドウを表示する - あじーん-0.0.2-SNAPSHOT」あたりを参考にさせていただきました。

2. 準備


~/.xmonad/xmonad.hs
 に最低限

import XMonad.Hooks.ManageHelpers(doFullFloat, doCenterFloat, isFullscreen, isDialog)
 あたりは、記述しておきます。

3. 設定

 「gimp」を例題としましょう。  「FreeBSD」では、このあたり

-- To match on the WM_NAME, you can use 'title' in the same way that
-- 'className' and 'resource' are used below.
--
myManageHook = composeAll
    [ className =? "MPlayer"        --> doFloat
    , className =? "Gimp"           --> doFloat
    , resource  =? "desktop_window" --> doIgnore
    , resource  =? "kdesktop"       --> doIgnore ]
 「gimp」は、既に定義されちゃっています。  「ArcoLinux」では、このあたり。

-- window manipulations
myManageHook = composeAll . concat $
    [ [isDialog --> doCenterFloat]
    , [className =? c --> doCenterFloat | c <- myCFloats]
    , [title =? t --> doFloat | t <- myTFloats]
    , [resource =? r --> doFloat | r <- myRFloats]
    , [resource =? i --> doIgnore | i <- myIgnores]
    -- , [(className =? x <||> title =? x <||> resource =? x) --> doShiftAndGo "\61612" | x <- my1Shifts]
    -- , [(className =? x <||> title =? x <||> resource =? x) --> doShiftAndGo "\61899" | x <- my2Shifts]
    -- , [(className =? x <||> title =? x <||> resource =? x) --> doShiftAndGo "\61947" | x <- my3Shifts]
    -- , [(className =? x <||> title =? x <||> resource =? x) --> doShiftAndGo "\61635" | x <- my4Shifts]
    -- , [(className =? x <||> title =? x <||> resource =? x) --> doShiftAndGo "\61502" | x <- my5Shifts]
    -- , [(className =? x <||> title =? x <||> resource =? x) --> doShiftAndGo "\61501" | x <- my6Shifts]
    -- , [(className =? x <||> title =? x <||> resource =? x) --> doShiftAndGo "\61705" | x <- my7Shifts]
    -- , [(className =? x <||> title =? x <||> resource =? x) --> doShiftAndGo "\61564" | x <- my8Shifts]
    -- , [(className =? x <||> title =? x <||> resource =? x) --> doShiftAndGo "\62150" | x <- my9Shifts]
    -- , [(className =? x <||> title =? x <||> resource =? x) --> doShiftAndGo "\61872" | x <- my10Shifts]
    ]
    where
    -- doShiftAndGo = doF . liftM2 (.) W.greedyView W.shift
    myCFloats = ["Arandr", "Arcolinux-tweak-tool.py", "Arcolinux-welcome-app.py", "Galculator", "feh", "mpv", "Xfce4-terminal"]
    myTFloats = ["Downloads", "Save As..."]
    myRFloats = []
    myIgnores = ["desktop_window"]
    -- my1Shifts = ["Chromium", "Vivaldi-stable", "Firefox"]
    -- my2Shifts = []
    -- my3Shifts = ["Inkscape"]
    -- my4Shifts = []
    -- my5Shifts = ["Gimp", "feh"]
    -- my6Shifts = ["vlc", "mpv"]
    -- my7Shifts = ["Virtualbox"]
    -- my8Shifts = ["Thunar"]
    -- my9Shifts = []
    -- my10Shifts = ["discord"]
 「FreeBSD」と同様の書き方をするのであれば、85、86行の間に、下記のように記述します。

    , [className =? "Gimp" --> doFloat ]

4. 位置やサイズを指定する

 ここは、正に参考サイトを熟読して、やっとできたのですが・・・。  まず、必要なモジュールをインポート。

~/.xmonad/xmonad.hs
 参考サイトでは、以下の3行を追加せよと書いてあるのですが。

import XMonad.StackSet as W
import XMonad.ManageHook
import XMonad.Util.NamedScratchpad
 先頭の1行は、「ArcoLinux」も「FreeBSD」もコンパイルエラーが発生しますので、下の2行のみを追加します。  次に、例題として、「xfce4-appfinder」を使いますが、「myManageHook」を定義している行の前に。

myXfce4Float = customFloating $ W.RationalRect (10/1366) (10/768) (400/1366) (500/768)
 てな行をいれます。

てけとうな名前 = customFloating $ W.RationalRect (x位置) (y位置) (幅) (高さ)
 という定義になります。  名前はともかく、位置や幅・高さは、画面サイズに対する比で記述するので、参考サイトでは、少しわかりにくかったです。  おそらく、参考サイトさんは、汎用的に記述することを心掛けているのかと思われますが、わたしの場合、使っている画面に合わせて決め打ち。  すなわち、「1366x768」なので、それを分母にとれば、分子は正にピクセル値で記述することができます。  「xfce4-appfinder」の記述は、「myManageHook」の記述欄に。  「ArcoLinux」であれば。

    , [ className =? "Xfce4-appfinder" --> myXfce4Float]
 「FreeBSD」であれば。

    , className =? "Xfce4-appfinder"    --> myXfce4Float
 と書いてやれば思い通りになります。

5. 表示

 実際に、どう表示されるかみてみます。  「ArcoLinux」
「AcroLinux 19.12.15 xmonad」-「xfce4-appfinder」「位置・サイズを指定して表示」

 「FreeBSD」

「xmonad FreeBSD 12.1」-「xfce4-appfinder」「位置・サイズを指定して表示」

 わはは、思い通りじゃ。

6. わたしの定義

 フローティングウィンドウで表示させたいものは決まっているので、わたしは、下記のようにカスタマイズしています。

myXfce4Float = customFloating $ W.RationalRect (40/1366) (40/786) (400/1366) (500/786)
myFcitxFloat = customFloating $ W.RationalRect (50/1366) (50/786) (700/1366) (500/786)

myManageHook = composeAll
    [
      className =? "MPlayer"            --> doFloat
    , className =? "Conky"              --> doFloat
    , className =? "Atril"              --> doFloat
    , className =? "Clamtk"             --> doFloat
    , className =? "Claws-mail"         --> doFloat
    , className =? "Eclipse"            --> doFloat
    , className =? "octopkg"            --> doFloat
    , className =? "Gimp"               --> doFloat
    , className =? "smplayer"           --> doFloat
    , className =? "XTerm"              --> doFloat
    , className =? "Lxappearance"       --> doFloat
    , className =? "octopkg"            --> doFloat

    , className =? "Xfce4-appfinder"    --> myXfce4Float
    , className =? "Fcitx-config-gtk"   --> myFcitxFloat
    , resource  =? "desktop_window"     --> doIgnore
    , resource  =? "kdesktop"           --> doIgnore
    ]
 「ArcoLinux」では

-- window manipulations
myManageHook = composeAll . concat $
    [ [isDialog --> doCenterFloat]
    , [className =? c --> doCenterFloat | c <- myCFloats]
    , [title =? t --> doFloat | t <- myTFloats]
    , [resource =? r --> doFloat | r <- myRFloats]
    , [resource =? i --> doIgnore | i <- myIgnores]
    -- , [(className =? x <||> title =? x <||> resource =? x) --> doShiftAndGo "\61612" | x <- my1Shifts]
    -- , [(className =? x <||> title =? x <||> resource =? x) --> doShiftAndGo "\61899" | x <- my2Shifts]
    -- , [(className =? x <||> title =? x <||> resource =? x) --> doShiftAndGo "\61947" | x <- my3Shifts]
    -- , [(className =? x <||> title =? x <||> resource =? x) --> doShiftAndGo "\61635" | x <- my4Shifts]
    -- , [(className =? x <||> title =? x <||> resource =? x) --> doShiftAndGo "\61502" | x <- my5Shifts]
    -- , [(className =? x <||> title =? x <||> resource =? x) --> doShiftAndGo "\61501" | x <- my6Shifts]
    -- , [(className =? x <||> title =? x <||> resource =? x) --> doShiftAndGo "\61705" | x <- my7Shifts]
    -- , [(className =? x <||> title =? x <||> resource =? x) --> doShiftAndGo "\61564" | x <- my8Shifts]
    -- , [(className =? x <||> title =? x <||> resource =? x) --> doShiftAndGo "\62150" | x <- my9Shifts]
    -- , [(className =? x <||> title =? x <||> resource =? x) --> doShiftAndGo "\61872" | x <- my10Shifts]
    ]
 75行と 76行の間に、下記をぶっこみます。

    ,[
          className =? "Alacritty"               --> doFloat
        , className =? "Atril"                   --> doFloat
        , className =? "Brasero"                 --> doFloat
        , className =? "Chromium-browser"        --> doFloat
        , className =? "Clamtk"                  --> doFloat
        , className =? "Claws-mail"              --> doFloat
        , className =? "Code"                    --> doFloat
        , className =? "Eclipse"                 --> doFloat
        , className =? "Epdfview"                --> doFloat
        , className =? "Evince"                  --> doFloat
        , className =? "fcitx5-config-qt"        --> doFloat
        , className =? "Fcitx-config-gtk"        --> doFloat
        , className =? "Fcitx-config-gtk3"       --> doFloat
        , className =? "firefox"                 --> doFloat
        , className =? "Gimp-2.10"               --> doFloat
        , className =? "libreoffice-startcenter" --> doFloat
        , className =? "Lxappearance"            --> doFloat
        , className =? "Nautilus"                --> doFloat
        , className =? "Nitrogen"                --> doFloat
        , className =? "mpv"                     --> doFloat
        , className =? "octopkg"                 --> doFloat
        , className =? "pamac-manager"           --> doFloat
        , className =? "Pamac-manager"           --> doFloat
        , className =? "Pcmanfm"                 --> doFloat
        , className =? "qpdfview"                --> doFloat
        , className =? "Roxterm"                 --> doFloat
        , className =? "smplayer"                --> doFloat
        , className =? "Synaptic"                --> doFloat
        , className =? "Termite"                 --> doFloat
        , className =? "Thunar"                  --> doFloat
        , className =? "Thunderbird"             --> doFloat
        , className =? "Tilix"                   --> doFloat
        , className =? "URxvt"                   --> doFloat
        , className =? "UXTerm"                  --> doFloat
        , className =? "Vivaldi-stable"          --> doFloat
        , className =? "Xfce4-appfinder"         --> doFloat
        , className =? "XTerm"                   --> doFloat
    ]

7. 操作

 補足になります。  フローティング表示しているウィンドウ上にフォーカスが当たっていて、mod+t で、タイル表示になります。  ウィンドウにフォーカスを当てている状態で、mod キーを押しておいて。 ・左ボタンを押しっぱなしにすれば、ウィンドウを移動 ・中ボタンを押せば、ウィンドウが最前面へ ・右ボタンを押しっぱなしにすれば、ウィンドウをリサイズ  という操作ができます。
ハイスピードプラン【usus ウズウズ】ネットオークションの相場、統計、価格比較といえばオークファン