Is this the wrong place for this type of test? Match and Nomatch are catchalls for the Rules of the Group they are in. To me, it seems a more logical to have 'All' in Any(All). 'All' in this case would be all possible keys within a particular hardware/operating system configuration. 'All's would cover all possible modifiers of all possible keys: Shift, Left Shift, Right Shift, Ctrl, Left Ctrl, Right Ctrl, Alt, Left Alt, Right Alt, AltGr, Caps Lock.
This may suggest other uses for types of 'All':
AllGlyphs Any possible displayable symbol.
AllCursorKeys Up, Down, Left, Right, Page Up, Page Down, Home, End.
AllTextEffectors Tab, Enter, Backspace, Delete, Insert, Caps Lock.
AllNumericPad All the keys on the numeric key pad.
AllFunctionKeys All possible function-keys.
AllSpecials Esc, Num Lock, PtrSc, SysRq, ScrLk, Pause, Break.
AllModifiers All modifiers listed above.
This also suggests the syntax 'NotAny(All…)'.
This would allow the reliable matching of whole sections of the keyboard. Allowing code like:
: |
+ [K_UP] > …
+ [K_DOWN] > … + [K_RIGHT] > … + Any(AllCursorKeys) > nul |
Meaning the Up, Down, and Right cursor keys will have a function but no other cursor movements will function.
To trap all possible modifiers of a key:
AllModifiers Could be used as
: |
+ [CTRL K_ENTER > …
+ [AllModifiers K_ENTER] > nul |
Meaning Ctrl Enter has a function but no other modified Enter will work.
Regards
Julian Griffin