mirror of
https://github.com/xmonad/xmonad-contrib.git
synced 2025-05-19 03:20:21 -07:00
X.U.ExtensibleConf: Flip arguments of once(M)
This appears to be more natural. The function will most often be fixed by the module using `XC.once` and the configuration will often be supplied by users of those modules, so it's better to partially apply the function first.
This commit is contained in:
parent
4a6f21604f
commit
eab9a3a58e
@ -90,7 +90,9 @@ instance Monoid RescreenConfig where
|
|||||||
-- Note that 'rescreenHook' is safe to use several times, 'rescreen' is still
|
-- Note that 'rescreenHook' is safe to use several times, 'rescreen' is still
|
||||||
-- done just once and hooks are invoked in sequence, also just once.
|
-- done just once and hooks are invoked in sequence, also just once.
|
||||||
rescreenHook :: RescreenConfig -> XConfig a -> XConfig a
|
rescreenHook :: RescreenConfig -> XConfig a -> XConfig a
|
||||||
rescreenHook = flip XC.once rescreenHook'
|
rescreenHook = XC.once $ \c -> c
|
||||||
|
{ startupHook = startupHook c <> rescreenStartupHook
|
||||||
|
, handleEventHook = handleEventHook c <> rescreenEventHook }
|
||||||
|
|
||||||
-- | Shortcut for 'rescreenHook'.
|
-- | Shortcut for 'rescreenHook'.
|
||||||
addAfterRescreenHook :: X () -> XConfig a -> XConfig a
|
addAfterRescreenHook :: X () -> XConfig a -> XConfig a
|
||||||
@ -100,10 +102,6 @@ addAfterRescreenHook h = rescreenHook def{ afterRescreenHook = h }
|
|||||||
addRandrChangeHook :: X () -> XConfig a -> XConfig a
|
addRandrChangeHook :: X () -> XConfig a -> XConfig a
|
||||||
addRandrChangeHook h = rescreenHook def{ randrChangeHook = h }
|
addRandrChangeHook h = rescreenHook def{ randrChangeHook = h }
|
||||||
|
|
||||||
rescreenHook' :: XConfig a -> XConfig a
|
|
||||||
rescreenHook' c = c{ startupHook = startupHook c <> rescreenStartupHook
|
|
||||||
, handleEventHook = handleEventHook c <> rescreenEventHook }
|
|
||||||
|
|
||||||
-- | Startup hook to listen for @RRScreenChangeNotify@ events.
|
-- | Startup hook to listen for @RRScreenChangeNotify@ events.
|
||||||
rescreenStartupHook :: X ()
|
rescreenStartupHook :: X ()
|
||||||
rescreenStartupHook = do
|
rescreenStartupHook = do
|
||||||
|
@ -113,16 +113,16 @@ add x = alter (<> Just x)
|
|||||||
-- This can be used to implement a composable interface for modules that must
|
-- This can be used to implement a composable interface for modules that must
|
||||||
-- only hook into xmonad core once.
|
-- only hook into xmonad core once.
|
||||||
once :: forall a l. (Semigroup a, Typeable a)
|
once :: forall a l. (Semigroup a, Typeable a)
|
||||||
=> a -- ^ configuration to add
|
=> (XConfig l -> XConfig l) -- ^ 'XConfig' modification done only once
|
||||||
-> (XConfig l -> XConfig l) -- ^ 'XConfig' modification done only once
|
-> a -- ^ configuration to add
|
||||||
-> XConfig l -> XConfig l
|
-> XConfig l -> XConfig l
|
||||||
once x f c = add x $ maybe f (const id) (lookup @a c) c
|
once f x c = add x $ maybe f (const id) (lookup @a c) c
|
||||||
|
|
||||||
-- | Config-time: Applicative (monadic) variant of 'once', useful if the
|
-- | Config-time: Applicative (monadic) variant of 'once', useful if the
|
||||||
-- 'XConfig' modification needs to do some 'IO' (e.g. create an
|
-- 'XConfig' modification needs to do some 'IO' (e.g. create an
|
||||||
-- 'Data.IORef.IORef').
|
-- 'Data.IORef.IORef').
|
||||||
onceM :: forall a l m. (Applicative m, Semigroup a, Typeable a)
|
onceM :: forall a l m. (Applicative m, Semigroup a, Typeable a)
|
||||||
=> a -- ^ configuration to add
|
=> (XConfig l -> m (XConfig l)) -- ^ 'XConfig' modification done only once
|
||||||
-> (XConfig l -> m (XConfig l)) -- ^ 'XConfig' modification done only once
|
-> a -- ^ configuration to add
|
||||||
-> XConfig l -> m (XConfig l)
|
-> XConfig l -> m (XConfig l)
|
||||||
onceM x f c = add x <$> maybe f (const pure) (lookup @a c) c
|
onceM f x c = add x <$> maybe f (const pure) (lookup @a c) c
|
||||||
|
@ -22,9 +22,9 @@ spec = do
|
|||||||
XC.lookup (XC.add "a" (XC.add [1 :: Int] def)) `shouldBe` (Nothing :: Maybe ())
|
XC.lookup (XC.add "a" (XC.add [1 :: Int] def)) `shouldBe` (Nothing :: Maybe ())
|
||||||
|
|
||||||
specify "once" $
|
specify "once" $
|
||||||
borderWidth (XC.once "a" incBorderWidth def) `shouldBe` succ (borderWidth def)
|
borderWidth (XC.once incBorderWidth "a" def) `shouldBe` succ (borderWidth def)
|
||||||
specify "once . once" $
|
specify "once . once" $
|
||||||
borderWidth (XC.once "b" incBorderWidth (XC.once "a" incBorderWidth def))
|
borderWidth (XC.once incBorderWidth "b" (XC.once incBorderWidth "a" def))
|
||||||
`shouldBe` succ (borderWidth def)
|
`shouldBe` succ (borderWidth def)
|
||||||
|
|
||||||
incBorderWidth :: XConfig l -> XConfig l
|
incBorderWidth :: XConfig l -> XConfig l
|
||||||
|
Loading…
x
Reference in New Issue
Block a user