Skip to content

feat: v0.1.0 - Plover 5 support, settings UI overhaul, haptic feedback, and d-pad combos - #15

Open
RAOEUS wants to merge 12 commits into
tadeokondrak:mainfrom
RAOEUS:feature/v0.1.0
Open

RAOEUS wants to merge 12 commits into
tadeokondrak:mainfrom
RAOEUS:feature/v0.1.0

Conversation

@RAOEUS

@RAOEUS RAOEUS commented Jun 7, 2026

Copy link
Copy Markdown
Contributor

Big update that adds Plover 5 (PySide6) compatibility, reworks the settings UI, and adds a bunch of new features.

Plover 5 / Qt compatibility

  • Added a Qt compatibility layer (qt_compat.py) so the plugin works with both PyQt5 (Plover 4) and PySide6 (Plover 5)
  • Updated all Qt imports to go through the compat module
  • Added plover4 and plover5 extras in setup.cfg

Settings UI

  • Extracted the settings UI into its own module (option_ui.py) with organized tabs for hardware, steno mapping, and display settings
  • Extracted the controller display widget into display.py
  • Added a color picker for the chroma key color
  • Added a toggle to show/hide the back view of the controller display
  • Added a profile system with built-in profiles for generic, Xbox, Xbox Elite, and PlayStation controllers

Haptic feedback

  • Added rumble on stroke using SDL_GameControllerRumble, with thread-safe custom SDL events
  • Configurable duration, low frequency motor intensity, and high frequency motor intensity
  • Rumble only fires when Plover output is enabled (not when disabled or steno is suppressed)
  • Toggle to disable rumble entirely

D-pad combos

  • All 15 direction combinations are now mapped (singles, pairs, triples, and all four)
  • Useful defaults: KPA (capitalize), HRO*ER (lowercase), SKWH (Emily's Symbols starter), SKP ("and"), -LTZ (Emily's Modifiers ender)
  • Added support for empty mappings so combos can exist in config without producing steno output
  • Larger combos are matched before their component singles

Tests

  • Added 135 unit tests across 4 test files covering util functions, config parsing/serialization, controller state (buttons, hats, sticks, chording), machine rumble gating, option info validation, and profile management

Other changes

  • Added keys_to_stroke() for round-tripping key tuples back to stroke strings
  • Added Mappings.serialize() for saving configs back to text
  • Added an SVG icon for the Controller Display tool in the Plover toolbar
  • Switched to the GameController API for standardized button names (a, leftshoulder, guide, etc.)
  • Updated README with d-pad mapping table, driver settings docs, and Windows 11 instructions for disabling Game Bar/Controller Bar/Share button capture

RAOEUS added 12 commits June 6, 2026 20:05
Allow the plugin to work with both Plover 4 (PyQt5) and Plover 5
(PySide6) by abstracting Qt imports behind a compatibility module.
Add keys_to_stroke() to convert key tuples back into stroke strings.
Extract STENO_ORDER and NO_HYPHEN_KEYS to module-level constants.
Fix test import to use absolute package path.
Add Mappings.serialize() for round-tripping configs to text.
Support empty right-hand-side mappings for input combos that should
be consumed without producing steno output.
Add profile management for saving/loading named mapping configurations.
Include built-in profiles for generic, Xbox, Xbox Elite, and PlayStation.
Replace single-direction d-pad placeholders with all 15 direction
combinations. Assign useful strokes: KPA (capitalize), HRO*ER
(lowercase), SKWH (symbols starter), SKP (and), -LTZ (commands ender).
Add hat alias for d-pad.
Move ControllerOption to option_ui.py with rumble feedback settings,
show/hide back view, chroma color picker, and layout mode. Extract
ControllerDisplay widget to display.py with set_show_back() support.
Add haptic feedback on stroke via SDL_GameControllerRumble using custom
SDL events for thread safety. Use GameController API for standardized
button names. Add SVG icon for the Controller Display tool.
Add plover4/plover5 extras_require for PyQt5/PySide6. Update entry
point to use extracted option_ui module. Use recursive-include for
assets.
Document all 15 d-pad direction combos with their assigned strokes.
Link Emily's Symbols and Emily's Modifiers dictionaries. Add Advanced
Driver Settings section. Add Windows 11 instructions for disabling
Game Bar, Controller Bar, and Share button capture.
Override set_suppression() to track the engine's output state and
gate rumble on it. Prevents haptic feedback when Plover is disabled.
Cover util functions, config parsing/serialization, controller state
(buttons, hats, sticks, chording), machine rumble gating, option info
validation, and profile management.
All built-in profiles were missing the d-pad combo mappings that prevent
accidental multi-press strokes. Also adds triggers to the generic profile
and stores the last-used profile name so it stays selected in the UI.
@RAOEUS

RAOEUS commented Jun 7, 2026

Copy link
Copy Markdown
Contributor Author

Chroma-keyable Controller Display

The controller display supports chroma key backgrounds, making it easy to capture, key out, and overlay in streaming or recording software.

Chroma-keyable controller display


Display Settings

The display settings allow you to enable the controller’s back view and change the chroma key color.

Settings for adding the back side to the display and changing the chroma key color


Back View Support for Paddles

The controller display can show a rear view for paddle inputs. You can also use a different chroma key color depending on your capture setup.

Controller display with back view for paddles and a different chroma key color


Vertical Layout

A vertical layout is available for setups that need a taller, more compact controller display.

Vertical controller display layout


Improved Configuration GUI

The updated configuration GUI makes it easier to change options without editing raw configuration values manually.

Improved GUI for updating configuration options


Rumble Settings

Rumble settings can be adjusted directly from the GUI.

Rumble settings


Controller Profiles

Controller profiles allow you to save and switch between different controller configurations.

Controller profiles


Advanced Configuration

Advanced mapping controls are still available in the Raw Editor for users who need direct access to the underlying configuration.

Raw Editor option

Advanced mapping controls in the Raw Editor

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant