aboutsummaryrefslogtreecommitdiff
path: root/src/Rahm/Desktop/XMobarLog
diff options
context:
space:
mode:
authorJosh Rahm <joshuarahm@gmail.com>2022-11-21 22:14:50 -0700
committerJosh Rahm <joshuarahm@gmail.com>2022-11-21 22:14:50 -0700
commit80057a6ed33f07f3a91a7a1d3552b222804b5d9e (patch)
tree249b2cda2074991adead57843d77db9d475bb514 /src/Rahm/Desktop/XMobarLog
parent8888a83ef06d16d4bdd3c06bef721fff43f04175 (diff)
downloadrde-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.hs53
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