diff options
| author | Josh Rahm <joshuarahm@gmail.com> | 2022-11-21 22:14:50 -0700 |
|---|---|---|
| committer | Josh Rahm <joshuarahm@gmail.com> | 2022-11-21 22:14:50 -0700 |
| commit | 80057a6ed33f07f3a91a7a1d3552b222804b5d9e (patch) | |
| tree | 249b2cda2074991adead57843d77db9d475bb514 /src/Rahm/Desktop/XMobarLog | |
| parent | 8888a83ef06d16d4bdd3c06bef721fff43f04175 (diff) | |
| download | rde-80057a6ed33f07f3a91a7a1d3552b222804b5d9e.tar.gz rde-80057a6ed33f07f3a91a7a1d3552b222804b5d9e.tar.bz2 rde-80057a6ed33f07f3a91a7a1d3552b222804b5d9e.zip | |
Rudimentary pending buffer shown in Xmobar.
Diffstat (limited to 'src/Rahm/Desktop/XMobarLog')
| -rw-r--r-- | src/Rahm/Desktop/XMobarLog/PendingBuffer.hs | 53 |
1 files changed, 53 insertions, 0 deletions
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 |