Decide whether a key binding is allowed in a context based on its filter config.
Rules (matching the existing context manager behavior):
If blockedKeys contains the canonical binding key, the binding is rejected.
If allowedKeys contains neither the base key nor canonical binding key,
the binding is rejected.
Otherwise the key is allowed.
blockedKeys always wins over allowedKeys when both are present and
both list the key (defense in depth).
Bare blocked keys do not reject modified bindings on the same key. This lets
a context block bare ArrowUp for fly-control passthrough while still owning
Shift+ArrowUp. Bare allowlist entries continue to admit every modifier
variant so fly-control bindings such as Shift+W remain reachable.
Decide whether a key binding is allowed in a context based on its filter config.
Rules (matching the existing context manager behavior):
blockedKeyscontains the canonical binding key, the binding is rejected.allowedKeyscontains neither the base key nor canonical binding key, the binding is rejected.blockedKeysalways wins overallowedKeyswhen both are present and both list the key (defense in depth).Bare blocked keys do not reject modified bindings on the same key. This lets a context block bare ArrowUp for fly-control passthrough while still owning Shift+ArrowUp. Bare allowlist entries continue to admit every modifier variant so fly-control bindings such as Shift+W remain reachable.