aboutsummaryrefslogtreecommitdiff
path: root/src/Rahm/Desktop/Keys/KeyFeed.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Rahm/Desktop/Keys/KeyFeed.hs')
-rw-r--r--src/Rahm/Desktop/Keys/KeyFeed.hs17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/Rahm/Desktop/Keys/KeyFeed.hs b/src/Rahm/Desktop/Keys/KeyFeed.hs
index c7b08e1..46a2520 100644
--- a/src/Rahm/Desktop/Keys/KeyFeed.hs
+++ b/src/Rahm/Desktop/Keys/KeyFeed.hs
@@ -7,6 +7,7 @@ import Control.Monad (void, when)
import Control.Monad.State (MonadTrans (lift), StateT, evalStateT, modify')
import Control.Monad.Trans.Maybe (MaybeT (MaybeT, runMaybeT))
import Data.List.Safe (head, last)
+import Linear.V (reifyDim)
import Rahm.Desktop.Common (Xish (..))
import Rahm.Desktop.Submap (mapNextStringWithKeysym)
import Rahm.Desktop.XMobarLog.PendingBuffer (addStringToPendingBuffer, pushAddPendingBuffer, pushPendingBuffer)
@@ -71,6 +72,9 @@ readNextKey fn = KeyFeed $ do
upMaybe :: Maybe a -> StateT KeyStream (MaybeT X) a
upMaybe m = lift $ MaybeT (return m)
+skipKey :: KeyFeed ()
+skipKey = KeyFeed $ modify' tail
+
-- Lifts a Maybe int o a KeyFeed.
hoistMaybe :: Maybe a -> KeyFeed a
hoistMaybe = KeyFeed . lift . MaybeT . return
@@ -104,6 +108,19 @@ pushKeys ks = KeyFeed $ modify' (map return ks ++)
pushKey :: (KeyMask, KeySym, String) -> KeyFeed ()
pushKey = pushKeys . (: [])
+-- Reads the next key, but does not consume it from the read buffer.
+peekKey :: ((KeyMask, KeySym, String) -> KeyFeed a) -> KeyFeed a
+peekKey fn = KeyFeed $ do
+ keyList <- get
+ nextKeyFn <- lift . MaybeT . return $ head keyList
+ nextKey@(_, sym, str) <- lift nextKeyFn
+ modify' ((return nextKey :) . tail)
+ let (KeyFeed r) = fn nextKey in r
+
+-- reifiedKey <- lift nextKeyFn
+-- modify' (\l -> reifiedKey : tail l)
+-- return reifiedKey
+
-- Converts a string of keys to a stream of keys.
toKeyStream :: KeyString -> KeyStream
toKeyStream = map return