plover.machine.keymap
– Machine key bindings#
This module handles keymaps, mappings between keys on a physical machine and actions that produce steno strokes for a certain steno system. Keymaps exist for each combination of machine and system.
Keymaps are bidirectional, so we make a distinction between bindings and mappings: a key is bound to an action, i.e. when a key is pressed Plover performs the corresponding action, and an action is mapped to one or more keys. Each action should be mapped to at least one key, and each key to an action; otherwise, the behavior when stroking is undefined.
- class plover.machine.keymap.Keymap(keys, actions)#
- keys: List[str]#
A list of possible keys on the physical machine. For a serial steno protocol like TX Bolt, this would be the steno keys themselves (
S-
,T-
, etc.); for the keyboard, this would be keyboard keys (q
,w
, etc.).
- actions: List[str]#
A list of possible actions in the steno system.
In addition to the steno keys in the current system (see
system.KEYS
for more information), the actions may includeno-op
, a special action that does nothing, andarpeggiate
, a special action for arpeggiate mode that is only available if the current machine is a keyboard.
- get_keys() List[str] #
Returns the list of possible keys.
- get_actions() List[str] #
Returns the list of possible actions.
- get_bindings() Dict[str, str] #
Returns the dictionary of bindings from keys to actions.
- get_mappings() Dict[str, List[str]] #
Returns the dictionary of mappings from actions to keys.
- get_action(key: str[, default=None]) str | None #
Given
key
, returns the action that would be performed by pressing the machine key, ordefault
if the key is not bound to an action.
- __getitem__(key: str) List[str] #
Returns the list of keys that are bound to the action
key
. (Confusing, I know.)
- __setitem__(action: str, key_list: List[str])#
Maps
action
to all the keys inkey_list
. Also unbinds each key inkey_list
if already bound.
- set_bindings(bindings: Dict[str, str])#
Use
bindings
as the new keymap.bindings
is a dictionary mapping keys to actions. This also calculates the mappings and callsset_mappings()
.
- set_mappings(mappings: Dict[str, str | List[str]])#
Use
mappings
as the new keymap.mappings
is a dictionary mapping actions to either a single key or a list of keys that are bound to that action. This also calculates the bindings and calls :meth:set_bindings
.Where
mappings
contains some consistency issues, such as keys bound multiple times or nonexistent keys or actions, this shows a warning and the keymap behavior is undefined.