From 80057a6ed33f07f3a91a7a1d3552b222804b5d9e Mon Sep 17 00:00:00 2001 From: Josh Rahm Date: Mon, 21 Nov 2022 22:14:50 -0700 Subject: Rudimentary pending buffer shown in Xmobar. --- src/Rahm/Desktop/XMobarLog/PendingBuffer.hs | 53 +++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 src/Rahm/Desktop/XMobarLog/PendingBuffer.hs (limited to 'src/Rahm/Desktop/XMobarLog') diff --git a/src/Rahm/Desktop/XMobarLog/PendingBuffer.hs b/src/Rahm/Desktop/XMobarLog/PendingBuffer.hs new file mode 100644 index 0000000..0c00649 --- /dev/null +++ b/src/Rahm/Desktop/XMobarLog/PendingBuffer.hs @@ -0,0 +1,53 @@ +module Rahm.Desktop.XMobarLog.PendingBuffer where + +import Control.Monad (forM_, join) +import Data.Default +import Data.List (sortOn, (\\)) +import Data.Map (Map) +import qualified Data.Map as Map +import Data.Maybe +import Data.Proxy +import Data.Typeable +import Rahm.Desktop.Logger +import XMonad (X) +import qualified XMonad as X +import qualified XMonad.StackSet as W +import qualified XMonad.Util.ExtensibleState as XS + +-- The pending buffer keeps track of pending characters. This is useful for when +-- inputing Wml language constructs. Helps to keep the user from being too lost +-- wheen it comes to keeping track of keystrokes. + +newtype PendingBuffer = PendingBuffer {unPendingBuffer :: [Char]} + +instance Default PendingBuffer where + def = PendingBuffer [] + +instance X.ExtensionClass PendingBuffer where + initialValue = def + +addStringToPendingBuffer :: [Char] -> X () +addStringToPendingBuffer str = do + XS.modify $ \(PendingBuffer cs) -> + PendingBuffer (cs ++ str) + + X.logHook . X.config =<< X.ask + +setPendingBuffer :: [Char] -> X () +setPendingBuffer cs = do + XS.put $ PendingBuffer cs + X.logHook . X.config =<< X.ask + +clearPendingBuffer :: X () +clearPendingBuffer = do + XS.put (def :: PendingBuffer) + X.logHook . X.config =<< X.ask + +getPendingBuffer :: X [Char] +getPendingBuffer = unPendingBuffer <$> XS.get + +withPendingBuffer :: X () -> X () +withPendingBuffer fn = do + clearPendingBuffer + fn + clearPendingBuffer -- cgit