
一つxprop
これらのウィンドウを呼び出すと、_NET_WM_STATE
プロパティに次の2つのフラグが表示されます。
WM_STATE(WM_STATE):
window state: Normal
icon window: 0x0
_NET_WM_STATE(ATOM) = _NET_WM_STATE_ABOVE, _NET_WM_STATE_STICKY
...
WM_NAME(UTF8_STRING) = "Picture in picture"
_NET_WM_NAME(UTF8_STRING) = "Picture in picture"
どのように設定したかxmonad両方のフラグを尊重しますか?
答え1
解決策は次のとおりです。
- ウィンドウを
_NET_WM_STATE_ABOVE
フローティングとして表示します。 - 表示されたウィンドウを
_NET_WM_STATE_STICKY
すべてのワークスペースにコピーします。
import Data.Maybe ( fromMaybe )
import XMonad.Actions.CopyWindow ( copyToAll )
import XMonad.Util.WindowProperties ( getProp32 )
-- Other standard xmonad imports omitted.
myManageHook =
composeAll
$ [ hasNetWMState "_NET_WM_STATE_ABOVE" --> doFloat
, hasNetWMState "_NET_WM_STATE_STICKY" --> doF copyToAll
, ...
]
where
-- | Get the `_NET_WM_STATE` property as a list of atoms.
getNetWMState :: Window -> X [Atom]
getNetWMState w = do
atom <- getAtom "_NET_WM_STATE"
map fromIntegral . fromMaybe [] <$> getProp32 atom w
hasNetWMState :: String -> Query Bool
hasNetWMState state = do
window <- ask
wmstate <- liftX $ getNetWMState window
atom <- liftX $ getAtom state
return $ elem atom wmstate