To define a new machine called
Example Machine, add the name as an entry
point to your
[options.entry_points] plover.machine = Example Machine = plover_my_plugin.machine:ExampleMachine
Machines are implemented as classes that inherit from one of a few machine
classes. The example shown uses the
as it is the most common use case, but you can build machine plugins off of the
SerialStenotypeBase, or other
classes depending on your needs.
# plover_my_plugin/machine.py from plover.machine.base import ThreadedStenotypeBase class ExampleMachine(ThreadedStenotypeBase): KEYS_LAYOUT: str = '0 1 2 3 4 5 6 7 8 9 10' def __init__(self, params): super().__init__() self._params = params def run(self): self._ready() while not self.finished.wait(1): self._notify(self.keymap.keys_to_actions(['1'])) def start_capture(self): super().start_capture() def stop_capture(self): super().stop_capture() @classmethod def get_option_info(cls): pass
_notify method should be called whenever a stroke is received. It takes
a set of key names in the current system (it’s possible to convert from machine
key names to system key names (or “actions”) with
Keymap.keys_to_actions) and then tells the steno engine the key input that just occurred.
There are 3 ways to configure the keymap:
Add an entry for the machine in a system plugin’s default bindings definition (
The user can manually set the keymap in the Machine section in the configuration, along with any other additional configuration if a machine_option plugin is available for the machine type
Define a class variable
KEYMAP_MACHINE_TYPE, which means that the default configuration is the same as the default configuration of the specified machine.
See plover.machine – Steno machine protocols for more information.
If your machine requires additional configuration options, add a machine options entry point:
[options.entry_points] plover.gui_qt.machine_options = plover_my_plugin.machine:ExampleMachine = plover_my_plugin.machine:ExampleMachineOption
Machine options plugins are implemented as Qt widget classes:
# plover_my_plugin/machine.py from PyQt5.QtWidgets import QWidget class ExampleMachineOption(QWidget): def setValue(self, value): pass
The process for developing these is similar to that for GUI tools. See Machine Options for more information.