Closed
Conversation
Summary of the issue: Makes uninstall information easier to find and link to by providing a heading in the user guide. Description of user facing changes: Information on uninstalling NVDA is tucked away at the bottom of the command line section. I have given this its own heading, re-ordered to describe uninstalling before the command line argument for it, and added a note that NVDA's data in %appdata% is not automatically removed on uninstalling NVDA.
Fixes nvaccess#18622 Summary of the issue: Tabs are replaced with spaces in codefences when converting markdown to html. This causes examples for characterDescriptions, gestures and symbol files to contain incorrect syntax. Description of user facing changes: Fixed example in dev guide Description of developer facing changes: - Updated markdown - added [python markdown extensions suite](https://github.com/facelessuser/pymdown-extensions) - deprecated DEFAULT_EXTENSIONS Description of development approach: - enabled preserve tabs (<https://facelessuser.github.io/pymdown-extensions/extensions/superfences/#preserve-tabs>) - made markdown extensions ordered Testing strategy: Built dev guide, ensured tabs are preserved Built developerGuide and user_docs with and without this PR, and diffed the files to ensure only correct changes were made. Known issues with pull request: None
…s its own configuration (nvaccess#18443) ### Link to issue number: Closes nvaccess#18442 Fix-up of nvaccess#16937 ### Summary of the issue: When creating a portable NVDA and asking to launch it immediately after creation, the portable copy does not use its own config, but the one of the NVDA it had been created from. In nvaccess#16937, we propagate `--disable-addons` as well as `-c` / `--config-path` for security reasons so that an administrator can update from a user account using their own config folder, without risking to use malicious add-ons in the user's configuration (see [GHSA-727q-h8j2-6p45](GHSA-727q-h8j2-6p45)). ### Description of developer facing changes: N/A ### Description of development approach: * When creating a portable copy, do not pass parameters to the new instance. In any case, there is no UAC, so no risk of privilege escalation. * Parameters are still being passed to the new instance during an update. * When installing a new copy, I have kept parameters of original NVDA. ### Testing strategy: * portable creation: uses its own configuration * portable update: uses the configuration of the previous portable, even, for example when using `-c` flag
…ling (nvaccess#18631) Fixes some issues from nvaccess#18597 Summary of the issue: - Our timeout for waiting for NVDA exit when a crash is triggered is only 3 seconds. Our timeout is 10 seconds for when testing for testing NVDA to restart normally. This is causing the test to fail regularly - Starting notepad is fragile. If notepad doesn't load before we open task switcher, then it may fail to get focus. This results in the first notepad test regularly failing. Description of user facing changes: none Description of developer facing changes: none Description of development approach: - The timeout for waiting for NVDA to exit after a crash is triggered is increased. - When starting notepad, we first wait to see if it gets focus normally. If not, we try to task switch to it. This gives ample time for notepad to load, and avoids task switching if its not necessary Testing strategy: Ran each test 50 times. results: 17 failures out of 50 runs of 4 test suites. This is around the same rate as nvaccess#18597, however there is an increase to timeout issues (likely due to reduced resources for 50x4 matrix jobs). It is likely that these timeout issues will occur with a lower frequency on normal builds. Test failures: - "Speech did not finish before timeout" - 7 - "Timed out waiting for key to be processed" - 4 - "Timed out waiting for core to sleep again" - 2 - "Unable to get chrome window" - 1 - "Unable to get notepad window" - 1 - "Unable to connect to nvdaSpyLib" - 1 - "Focus mode: report content editable with details braille Actual != Expected: Focus mode != The word hlght has cmnt cat hlght end has a comment tied to it." - 1 Note that the failures noted in nvaccess#18597 and targeted by this fix do not occur: Startup/shutdown: - 5x: Ensure NVDA restarts on crash: Old NVDA is still running. - 3x: symbolInSpeechUI :: Ensure symbols aren't substituted within NVDA. Unable to focus Notepad. Known issues with pull request: see test failures
Fixup of nvaccess#18638 nvaccess#18638 introduced an update to python-markdown, which was not captured in uv.lock. The uv environment mismatch caused pre-commit checks to fail, including the translation comment check separately. The latest pypi entry doesn't seem to capture the license correctly, so our license check filtering needed to be updated too
Closes nvaccess#18512 Summary of the issue: Since most users use their device as either follower or leader consistently, NVDA Remote Access should remember their selection. The same can also be said of the server type and port to use for self-hosted servers. Description of user facing changes: The "Connect to Another Computer" dialog persists the selection of the "Mode", "Server" and "Port" controls. Description of developer facing changes: NVDA now sets up `wx.lib.agw.persist` as follows: * persisted GUI state is saved to "guiState.ini" in the NVDA config directory. * If `NVDAState.shouldWriteToDisk` returns `False`, saving is disabled. Description of development approach: * Set up the `PersistenceManager` singleton in `gui.initialize`. Free it in `gui.terminate` out of an abundance of caution. * Add an (internal) list of controls that should be persisted to `_remoteClient.dialogs.DirectConnectDialog`. * Add (internal) methods to the same class to register and restore state, save state, and unregister these controls. * Register and restore state on init, save state on OK, and unregister on dialog destruction (used instead of window close as this is not fired on modal dialogs). Testing strategy: Connected to remote a number of times across a number of NVDA restarts and ensured mode was remembered. Manually edited the `guiState.ini` file to contain illegal values, and ran NVDA to ensure the defaults were used in this case. Ran NVDA with the `--launcher` flag and ensured that GUI state was read but not written. Known issues with pull request: None
Part of nvaccess#18591 Summary of the issue: We want to update Python to 3.13. Description of user facing changes: None Description of developer facing changes: Updates to comtypes and py2exe Description of development approach: Create a parallel build of python 3.13 comtypes needed to be updated as 1.4.8 is the minimum version for 3.13 Supporting Python 3.13 enthought/comtypes#618 py2exe needed to be updated as 0.14 is the minimum version for 3.13 github.com/ Support Python 3.13 py2exe/py2exe#215 clearing frame locals needed to be fixed - see it's no longer possible to delete items from f_locals (FrameLocalsProxy) in 3.13+ python/cpython#125590 brlapi needed tests needed to be disabled for now unit tests using deprecated asserts assertDictContainsSubset assertRegexpMatches need to be fixed unit tests for testing abstract methods needs to updated to reflect latest error message
<!--pre-commit.ci start--> updates: - [github.com/astral-sh/ruff-pre-commit: v0.12.5 → v0.12.7](astral-sh/ruff-pre-commit@v0.12.5...v0.12.7) - [github.com/astral-sh/uv-pre-commit: 0.8.3 → 0.8.4](astral-sh/uv-pre-commit@0.8.3...0.8.4) <!--pre-commit.ci end--> --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Sean Budd <sean@nvaccess.org>
Summary of the issue: As noted in nvaccess#18645, if the uv-lock pre-commit step fails, running checkPo will also fail. When checkPo fails, it's unclear why, as the warning logs are not related. Description of user facing changes: None Description of developer facing changes: PR failures are slightly more obvious when changes to uv.lock have not been committed correctly
Follow up to nvaccess#18611 Part of nvaccess#18591 Summary of the issue: Python 3.13.6 was recently released. We are now building test parallel builds of python 3.13.
Fixup from nvaccess#18592 Summary of the issue: We are installing an older version of Windows SDK for symstore. We should use the latest version 10.1. The installation of 10.0 seems to also fail occasionally nvaccess#18597 (comment)
Fixes nvaccess#18003. Summary of the issue: The default threshold values for signed integer types are incorrect, becoming twice as large, causing more parts to be trimmed than expected. Description of user facing changes: The excessive trimming will be fixed. Description of developer facing changes: None. Description of development approach: WaveFormat::defaultThreshold should use 1 / 2^10 or 0.0009765625 as the threshold value for all types. The current implementation handles floating points and unsigned integers correctly, but fails to differentiate the signedness, so signed integer types will have a threshold value that's twice as large. The solution is to replace the case-by-case implementation to a more general and correct max() / (1 << 10).
Summary of the issue:
The MINI-SEIKA braille display driver was not properly raising a RuntimeError when no display is found, causing the error condition to be silently ignored instead of properly handled.
Description of user facing changes:
When no MINI-SEIKA display is found, users will now receive proper error feedback instead of the driver silently failing. This improves error reporting and makes it clearer when the display cannot be initialized.
Description of developer facing changes:
Fixed a bug in source/brailleDisplayDrivers/seikantk.py where RuntimeError("No MINI-SEIKA display found") was not being raised properly - added missing raise keyword.
Description of development approach:
Simple one-line fix to add the missing raise keyword before the RuntimeError instantiation. This ensures the exception is actually thrown rather than just creating an unused RuntimeError object.
This pull request updates translations to languages being tracked from Crowdin. Co-authored-by: GitHub Actions <>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Summary of the issue:
When generating a syntax erro in a Python 3.13 Python console, the following is logged:
ERROR - unhandled exception (09:14:31.494) - MainThread (11952):
Traceback (most recent call last):
File "code.pyc", line 65, in runsource
File "pythonConsole.pyc", line 143, in __call__
File "codeop.pyc", line 155, in __call__
File "codeop.pyc", line 75, in _maybe_compile
File "codeop.pyc", line 118, in __call__
File "<console>", line 1
fl@
SyntaxError: invalid syntax
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "pythonConsole.pyc", line 509, in onInputChar
File "pythonConsole.pyc", line 385, in execute
File "pythonConsole.pyc", line 196, in push
File "code.pyc", line 314, in push
File "code.pyc", line 68, in runsource
TypeError: PythonConsole.showsyntaxerror() got an unexpected keyword argument 'source'
Description of user facing changes:
Python console no longer breaks on syntax errors on Python 3.13 builds.
Description of developer facing changes:
None
Description of development approach:
Python 3.13 added **kwargs to the showsyntaxerror method. Adding this shouldn't do any harm on Python 3.11. kwargs will always be empty there and it's not problematic to pass a **kwargs to a non-kwargs supporting function when kwargs is empty.
Fixes nvaccess#17967. Summary of the issue: When rate boost is enabled and the rate is fast enough, if some audio takes longer time to process, an audio gap might appear in the speech audio. Description of user facing changes: The audio gap issue should be fixed. Description of developer facing changes: None. Description of development approach: Wait for at least 50ms of audio data before sending the first chunk to the output device. This mitigates the problem when the first small chunk is immediately played, but during processing of the next chunk, there isn't enough audio to cover this duration, leaving audible gaps. Also the return value of IStream::Write is changed to S_OK instead of an error code during cancellation.
Summary of the issue: Deployment of snapshots may cancel the deployment of other snapshots Description of user facing changes: None Description of developer facing changes: Snapshots such as alpha, beta, rc or try- snapshots will only cancel each other if they are on the same branch Description of development approach: Change deployment group to include the ref name
Closes nvaccess#18105 Summary of the issue: There's currently no script to send `control+alt+delete` to the controlled end of a Remote Access connection, which means the only way to do so if from the Remote Access menu.. Description of user facing changes: Added an unassigned command to send `control+alt+delete`. Description of developer facing changes: None Description of development approach: Added a new `script_sendSAS` method to `globalCommands.GlobalCommands`. Registered this script as a local script on the `_remoteClient` singleton so that it can be executed when sending keys. Testing strategy: Ran from source. Bound the script to a gesture (`NVDA+alt+delete`). Connected as leader and connected another computer as follower. Used the gesture when controlling the local computer and the remote computer. Known issues with pull request: None
Part of nvaccess#17878 Blocked by release of 2025.2 Summary of the issue: We are migrating from AppVeyor to GitHub actions. After we migrate snapshots/PRs over, we will remove all AppVeyor related code. Description of user facing changes: None Description of developer facing changes: Remove all Appveyor related code. NVDA will only be built on GitHub actions. Description of development approach: Update documentation and remove code
Start the dev cycle for the 20XY.Z release. This will be a compatibility breaking release. Complete: - [x] New section in the change log. - [x] Update NVDA version in `master` - [x] Bump the add-on API compatibility in `master` - [x] Update [`nvdaAPIVersions.json` to include the next version](https://github.com/nvaccess/addon-datastore-transform) - Re-run the last "Transform NVDA addons to views" on [addon-datastore](https://github.com/nvaccess/addon-datastore/actions/workflows/transformDataToViews.yml) to regenerate projections (views) for the add-on datastore API. On merge: - [ ] [Update auto milestone ID](https://github.com/nvaccess/nvda/settings/variables/actions)
6 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Link to issue number:
Summary of the issue:
Description of user facing changes:
Description of developer facing changes:
Description of development approach:
Testing strategy:
Known issues with pull request:
Code Review Checklist:
@coderabbitai summary