Machines¶
To define a new machine called Example Machine, add the name as an entry
point to your setup.py:
[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
ThreadedStenotypeBase class
as it is the most common use case, but you can build machine plugins off of the
StenotypeBase,
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
The _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 (
KEYMAPS)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.
Machine Options¶
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.