mirror of
https://github.com/xmonad/xmonad-contrib.git
synced 2025-05-19 11:30:22 -07:00
X.U.EZConfig: Force readKeySequence to consume the whole input
When users specify non-existent keys, it seems most intuitive to just abort the parse and not try to take the "longest" input that still works. For example, given the "key" `M-10` we should signal a parse error (by returning `Nothing`) instead of parsing `M-1` and ignoring the rest of the input. The old EZConfig parser accounted for this but when the module was rewritten to use X.U.Parser in [1], this was forgotten about. Fixes: https://github.com/xmonad/xmonad/issues/361 [1]: 8abeb81fd0693bd4ee914b522c0a2a2cfcfaf0dd
This commit is contained in:
parent
28d86f3a28
commit
0a6048c66d
@ -412,7 +412,7 @@ readKeymap c = mapMaybe (maybeKeys . first (readKeySequence c))
|
|||||||
-- | Parse a sequence of keys, returning Nothing if there is
|
-- | Parse a sequence of keys, returning Nothing if there is
|
||||||
-- a parse failure (no parse, or ambiguous parse).
|
-- a parse failure (no parse, or ambiguous parse).
|
||||||
readKeySequence :: XConfig l -> String -> Maybe [(KeyMask, KeySym)]
|
readKeySequence :: XConfig l -> String -> Maybe [(KeyMask, KeySym)]
|
||||||
readKeySequence c = runParser (parseKeySequence c)
|
readKeySequence c = runParser (parseKeySequence c <* eof)
|
||||||
|
|
||||||
-- | Parse a sequence of key combinations separated by spaces, e.g.
|
-- | Parse a sequence of key combinations separated by spaces, e.g.
|
||||||
-- @\"M-c x C-S-2\"@ (mod+c, x, ctrl+shift+2).
|
-- @\"M-c x C-S-2\"@ (mod+c, x, ctrl+shift+2).
|
||||||
|
@ -25,6 +25,11 @@ spec = do
|
|||||||
, mod2Mask, mod3Mask, mod4Mask, mod5Mask
|
, mod2Mask, mod3Mask, mod4Mask, mod5Mask
|
||||||
]]
|
]]
|
||||||
|
|
||||||
|
-- Checking for regressions
|
||||||
|
describe "readKeySequence" $
|
||||||
|
it "Fails on the non-existent key M-10" $
|
||||||
|
readKeySequence def "M-10" `shouldBe` Nothing
|
||||||
|
|
||||||
regularKeys :: ([String], [KeySym])
|
regularKeys :: ([String], [KeySym])
|
||||||
regularKeys = unzip . map (first (: ""))
|
regularKeys = unzip . map (first (: ""))
|
||||||
$ zip ['!' .. '~' ] [xK_exclam .. xK_asciitilde]
|
$ zip ['!' .. '~' ] [xK_exclam .. xK_asciitilde]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user