- 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」
「FreeBSD」
わはは、思い通りじゃ。
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 キーを押しておいて。
・左ボタンを押しっぱなしにすれば、ウィンドウを移動
・中ボタンを押せば、ウィンドウが最前面へ
・右ボタンを押しっぱなしにすれば、ウィンドウをリサイズ
という操作ができます。
|