0
私は、ウィンドウのクラス名プロパティに基づいて罫線を削除することができるようなレイアウト変更子を作成しようとしています。コードはに基づくフィルタリングを可能にするためにXモナドで実行されているロジックを除いて、主にXMonad.Layout.NoBordersに基づいています。私がこれまで持っているコードは次のとおりです。特定のクラスのウィンドウから罫線を削除する
次のようにレイアウトフックで使用することができ{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE UndecidableInstances #-}
module XMonad.Layout.ExcludeBorders where
import Control.Monad
import Data.Monoid
import XMonad
import XMonad.Layout.LayoutModifier
import XMonad.StackSet hiding (filter)
setBorders :: [Window] -> Dimension -> X()
setBorders ws bw =
withDisplay $ \d -> mapM_ (\w -> io $ setWindowBorderWidth d w bw) ws
data ExcludeBorders p a =
ExcludeBorders p
[a]
deriving (Eq, Read, Show)
excludeBorders :: p -> l a -> ModifiedLayout (ExcludeBorders p) l a
excludeBorders qs = ModifiedLayout (ExcludeBorders qs [])
instance (Show p, Read (ExcludeBorders p Window), Excludes p) =>
LayoutModifier (ExcludeBorders p) Window where
unhook (ExcludeBorders _p s) = asks (borderWidth . config) >>= setBorders s
redoLayout (ExcludeBorders p _s) _ mst wrs = do
ws <- withWindowSet (\wset -> excludes p wset mst wrs)
setBorders ws 0
return (wrs, Just $ ExcludeBorders p ws)
class Excludes p where
excludes ::
p
-> WindowSet
-> Maybe (Stack Window)
-> [(Window, Rectangle)]
-> X [Window]
data ExcludeProp =
ExcludeClassName String
deriving (Eq, Read, Show)
instance Excludes [ExcludeProp] where
excludes qs _wset mst _wrs =
flip filterM (integrate' mst) $ \w ->
fmap (getAny . mconcat) .
sequenceA . map (fmap Any . flip runQuery w . toQuery) $
qs
toQuery :: ExcludeProp -> Query Bool
toQuery (ExcludeClassName s) = className =? s
:
残念ながら、それは、所望の効果、または任意の効果を持っていないですようexcludeBorders [ExcludeClassName "Krunner", ExcludeClassName "plasmashell"]
を私は何が間違っているのかよくわからないし、恐らくredoLayout
関数がどのように動作すると誤解されているのだろうか。任意のポインタが評価されるだろう。
EDIT:いくつかのさらなるテストが、これはKDE /プラズマ窓および/または私の設定ではなく、その私のコードとは何の問題のクセかもしれ示しています。