Skip to content

Releases: joshknnd1982/toggleX

toggleX 1.2 - saved synthesizer slots stay saved

Choose a tag to compare

@joshknnd1982 joshknnd1982 released this 11 Aug 23:58

A bug fix release. Requires NVDA 2026.1 or later.

Saved synthesizer slots no longer go missing

A slot you had saved could come back as "Empty slot".

toggleX was asking NVDA where an installed copy would keep its configuration, rather than where the running copy actually keeps it. On a portable copy, or with NVDA started using --config-path, toggleX.json was read and written somewhere else entirely — for a portable copy, a path relative to whatever directory NVDA happened to be sitting in at the time. toggleX now uses the configuration directory NVDA is really using, the one it writes nvda.ini to.

A failed save no longer destroys the slots you already had

The slots file was emptied before the new contents had been worked out, so a synthesizer handing back a setting that could not be stored left a half-written file behind, and every saved slot with it. toggleX now prepares the whole file first and puts it into place in one step, leaving the previous slots untouched if anything goes wrong.

A save that does not reach the disk says so, instead of announcing "Saved to slot" and losing the slot at the next restart.

A slots file that cannot be read is kept rather than written over

It is renamed to toggleX.json.bad and the reason is written to the NVDA log, so the slots in it can still be recovered.

Also changed

  • The add-on is listed as ToggleX in NVDA's Add-on Store and Add-ons Manager, rather than "Settings Toggler, with Xtra features".

Install

Download toggleX-1.2.nvda-addon below and open it, or install it from NVDA's Add-on Store via Install from external source. Your saved synthesizer slots carry over from 1.1.

Full notes: CHANGELOG.md

toggleX 1.1 - settings are saved with your NVDA configuration

Choose a tag to compare

@joshknnd1982 joshknnd1982 released this 10 Aug 17:51

A bug fix release. Requires NVDA 2026.1 or later.

toggleX settings are now saved with your NVDA configuration

Pressing NVDA+control+c now saves everything toggleX changes, and it all comes back the next time NVDA starts.

The settings toggleX shares with NVDA — tables, headings, lists, links, cell coordinates, position, shortcuts, language switching and the rest — were already being saved, because they live in NVDA's own configuration. Three things were not, because NVDA has nowhere to keep them:

  • Speech dictionary processing (d) is a plain variable inside NVDA that resets to on every time NVDA starts.
  • All text processing (z) works by replacing one of NVDA's functions for the lifetime of the session, which nothing persists.
  • Which synthesizer slot is active, which decides where a saves.

toggleX now keeps these in its own section of NVDA's configuration, so NVDA saves and restores them like everything else. They also follow NVDA's configuration profiles: switching to a profile with its own toggleX settings applies them immediately.

Loading a synthesizer slot now sticks

Applying a slot only changed the running synthesizer — the configuration still held the settings that synthesizer had been loaded with. Saving your configuration therefore wrote those older settings back, and the next NVDA session started with the right synthesizer but the wrong voice, rate, pitch and volume.

toggleX now writes a loaded slot into the configuration, the same way NVDA does when you change a synthesizer setting yourself.

Also fixed

  • The mode remembered for line indentation (i) and table headers (o) is saved too, so switching one back on after a restart returns to the mode you had chosen rather than the default.
  • Unloading the add-on no longer counts as switching text processing back on; it restores NVDA's function without changing what you had saved.

Install

Download toggleX-1.1.nvda-addon below and open it, or install it from NVDA's Add-on Store via Install from external source. Your saved synthesizer slots carry over from 1.0.

Full notes: CHANGELOG.md

toggleX 1.0 - NVDA 2026.1 compatible

Choose a tag to compare

@joshknnd1982 joshknnd1982 released this 10 Aug 17:26

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