Add ^K and ^U support to XPrompt

This commit is contained in:
Eric Mertens
2007-10-02 21:08:14 +00:00
parent 222c67ab88
commit 70ef0f2d88

View File

@@ -265,9 +265,15 @@ data Direction = Prev | Next deriving (Eq,Show,Read)
keyPressHandle :: KeyMask -> KeyStroke -> XP ()
-- commands: ctrl + ... todo
keyPressHandle mask _
| mask == controlMask = eventLoop handle -- TODO
keyPressHandle _ (ks,_)
keyPressHandle mask (ks,_)
| mask == controlMask =
case () of
-- ^U
_ | ks == xK_u -> killBefore >> go
-- ^K
| ks == xK_k -> killAfter >> go
-- Unhandled control sequence
| otherwise -> eventLoop handle
-- Return: exit
| ks == xK_Return = do historyPush
return ()
@@ -295,6 +301,17 @@ keyPressHandle _ (_,s)
-- KeyPress and State
-- | Kill the portion of the command before the cursor
killBefore :: XP ()
killBefore =
modify $ \s -> s { command = drop (offset s) (command s)
, offset = 0 }
-- | Kill the portion of the command including and after the cursor
killAfter :: XP ()
killAfter =
modify $ \s -> s { command = take (offset s) (command s) }
-- | Flush the command string and reset the offest
flushString :: XP ()
flushString = do