Skip to content

toggleX 1.0 - NVDA 2026.1 compatible

Choose a tag to compare

@joshknnd1982 joshknnd1982 released this 10 Aug 17:26
· 2 commits to main since this release

First release under new maintainership, and the first release compatible with NVDA 2026.1.

toggleX was originally written by Tyler Spivey (tspivey@pcdesk.net) and Erion, whose last release was version 0.20121226.01. Josh Kennedy (joshknnd1982@gmail.com) has taken over the add-on and brought it up to date. The original code is preserved unmodified as the first commit in this repository.

Install

Download toggleX-1.0.nvda-addon below and open it, or install it from NVDA's Add-on Store via Install from external source.

Requires NVDA 2026.1 or later. Earlier versions of NVDA need toggleX 0.x.

Fixed for NVDA 2026.1

  • The add-on loads again. NVDA 2026.1 is an API-compatibility-breaking release and rejects add-ons whose lastTestedNVDAVersion is below 2026.1. The manifest now declares 2026.1.
  • Line indentation (i) no longer corrupts the setting. reportLineIndentation is a four-state integer in current NVDA (off, speech, tones, both), not a boolean, and toggleX was writing a boolean over it. It now writes valid values and remembers the mode you had chosen, restoring and announcing it when you switch back on.
  • Table headers (o) no longer corrupts the setting. Same problem and same fix — reportTableHeaders is a four-state integer (off, rows and columns, rows, columns).
  • Removed updateChannel from the manifest, which is not a field NVDA recognises.
  • The stand-in used by the "all text processing" toggle (z) now matches the signature of NVDA's current speech.speech.processText, including its normalize argument.

Changed

  • Saved synthesizer slots have moved to JSON, in toggleX.json in your NVDA user configuration directory. Existing slots are imported automatically the first time 1.0 runs; the old switch_synth.pickle is left in place and never read again.
  • Loading a slot applies the voice before rate, pitch and volume. Changing a voice makes NVDA reload that voice's own settings, so the previous order silently discarded a saved rate whenever the slot also changed voice.
  • Loading a slot announces the synthesizer's display name ("Windows OneCore voices") rather than its internal module name ("oneCore"), and reports a failure instead of raising if the saved synthesizer can no longer be loaded.
  • Saving a slot now confirms which slot was written.
  • Unsupported synthesizer settings are detected with NVDA's isSupported API rather than by catching NotImplementedError.
  • Messages are wrapped for translation, and NVDA+0 now appears in NVDA's Input Gestures dialog under a toggleX category with a description.
  • Both commands speak in NVDA's on-demand speech mode.
  • The plugin module was renamed from globalPlugins/toggle.py to globalPlugins/toggleX.py, since all add-ons share the globalPlugins namespace and toggle was collision-prone.
  • toggleX no longer leaves NVDA's processText patched if the add-on is unloaded while the z toggle is active.

Full notes: CHANGELOG.md