X.Prompt: Execute keypress when it has an action associated to it

It might be that the keypress does not have a valid stroke associated to
it, but is still bound to an action (e.g., xK_Left an friends). In this
case, we still want to execute it.

Closes: https://github.com/xmonad/xmonad-contrib/issues/845
This commit is contained in:
Tony Zorman 2023-12-16 14:42:30 +01:00
parent 5c30cadaf6
commit 00993d46fa

View File

@ -708,25 +708,28 @@ handleMain stroke@(keysym, keystr) = \case
getCurrentCompletions >>= handleCompletionMain Next
| (keymask, keysym) == prevCompKey ->
getCurrentCompletions >>= handleCompletionMain Prev
| otherwise -> unless (isModifier stroke) $ do
setCurrentCompletions Nothing
if keysym == modeKey
then modify setNextMode >> updateWindows
else handleInput keymask
| otherwise -> do
keymap <- gets (promptKeymap . config)
let mbAction = M.lookup (keymask, keysym) keymap
-- Either run when we can insert a valid character, or the
-- pressed key has an action associated to it.
unless (isModifier stroke && isNothing mbAction) $ do
setCurrentCompletions Nothing
if keysym == modeKey
then modify setNextMode >> updateWindows
else handleInput keymask mbAction
event -> handleOther stroke event
where
-- Prompt input handler for the main loop.
handleInput :: KeyMask -> XP ()
handleInput keymask = do
keymap <- gets (promptKeymap . config)
case M.lookup (keymask,keysym) keymap of
Just action -> action >> updateWindows
Nothing -> when (keymask .&. controlMask == 0) $ do
insertString $ utf8Decode keystr
updateWindows
updateHighlightedCompl
complete <- tryAutoComplete
when complete acceptSelection
handleInput :: KeyMask -> Maybe (XP ()) -> XP ()
handleInput keymask = \case
Just action -> action >> updateWindows
Nothing -> when (keymask .&. controlMask == 0) $ do
insertString $ utf8Decode keystr
updateWindows
updateHighlightedCompl
complete <- tryAutoComplete
when complete acceptSelection
-- There are two options to store the completion list during the main loop:
-- * Use the State monad, with 'Nothing' as the initial state.