Hello all
I am glad to share with you my add-on NVDA Dev & Test Toolbox.
The documentation is under my signature.
Direct download link: https://github.com/CyrilleB79/NVDA-Dev-Test-Toolbox/releases/download/V2.0/nvdaDevTestToolbox-2.0.nvda-addon
The add-on is not totally new but I had never advertised so much about it. If you find some issue or want to make feedback, do not hesitate, replying to this message or on the GitHub repo.
I plan to submit it for the community website if it interests people. As the name indicates, the audience target for this add-on are people developing or testing NVDA or its add-ons.
Let me know what you think.
Cheers,
Cyrille
NVDA Dev & Test Toolbox #addonrequestreview
Cyrille
NVDA Dev & Test Toolbox
This add-on gathers various features for NVDA debugging and testing. Features
Enhanced restart dialogThe NVDA+shift+Q command opens a dialog to specify some extra options before restarting NVDA. The options that can be specified correspond to the command line options that can be used with Play a sound for logged errorsThe "Play a sound for logged errors" setting has been introduced in NVDA 2021.3 and allows to specify if NVDA will play an error sound in case an error is logged. This add-on provides an additional command (NVDA+control+alt+E) to toggle this setting. You can choose:
For NVDA prior to 2021.3, this add-on provides the backport of this feature and the possibility to control it with the keyboard command. The checkbox in the Advanced settings panel is not backported however. Object property explorerThis feature allows to report some properties of the current navigator object without opening the log viewer. To list the properties of an object, move the navigator object to it and use the following commands:
The list of the supported properties is the following: name, role, state, value, windowClassName, windowControlID, windowHandle, location, Python class, Python class mro. This feature is an improvement of NVDA developer guide example 3 If you have installed Speech history review and copying add-on from Tyler Spivey and James Scholes, you may use it to copy and paste the announced property to review it. Review via copy/paste is especially useful for pythonClassMRO since it may be long. Extended script description modeWhen the Extended script description mode is active, the input help mode (NVDA+1) is modified as follows. If a script has no description, the script's name and class are reported. If a script has a description, its description is reported as usual. The gesture to activate or deactivate this feature is NVDA+control+alt+D. Executing a gesture bound to a script without description in input help mode also create an entry for this script in the gesture management dialog. This entry is located in a dedicated category called "Scripts without description (modify at your own risk!)". This allow to easily add, delete or change the native NVDA gestures for these script. Be aware however that it is often intended that such script do not have any description to prevent the user to modify the associated gesture. Indeed, the gesture may be defined to match an application shortcut key. For example the script script_toggleItalic on NVDAObjects.window.winword.WordDocument is bound to control+I and this should not be modified since the gesture is passed to the application to actually execute the shortcut key. Usage exampleControl+shift+I also toggle italic in Word, even if it is not natively reported by NVDA. To have the control+shift+I result reported by NVDA as control+I, you should perform the following steps:
Known bug: A script added for a specific class is visible even if gesture manager is opened in another context. Log reading and analyzing commandsA log reader mode provides commands to ease log reading and analyzing. In the log viewer window the log reader is enabled by default, thus log reading commands are available immediately. In another text reading area such as an editor (e.g. Notepad++) or a webpage (e.g. GitHub issue), you need to press NVDA+control+alt+L to enable log reader mode and use its commands. When you are done with log reading and analyzing tasks, you can disable again NVDA+control+alt+L to disable the log reader mode. The commands available in log reader mode are described hereafter. Quick navigation commandsSingle letter command similar to browse mode quick navigation keys allow to move to various type of log messages:
Pressing the single letter moves to the next occurrence of this message. Combining the letter with the shift key moves to the previous occurrence of this message. Opening a file in your editorWhen looking at a traceback, you may want to open one of the source files to understand the cause and the context of the issue. Press C to open the source code file corresponding to the current line of the traceback. For this feature to work, you need to have configured your favorite editor's command. If you are not running NVDA from source, the location of NVDA source code also should have been configured. For more details regarding the configuration, please see the paragraph NVDA Debug & Test Tools configuration. Python console extensionIn the console, you can call the following function to view the source code that defines the variable For this feature to work, you need to have configured your favorite editor's command. If you are not running NVDA from source, the location of NVDA source code also should have been configured. For more details regarding the configuration, please see the paragraph NVDA Debug & Test Tools configuration. The Below are examples of call in NVDA's code:
Log the stack trace of the speech functionSometimes, you may want to see which part of the code is responsible for speaking something. For this, you can enable the stack trace logging of the speech function pressing NVDA+control+alt+S. Each time NVDA speaks, a corresponding stack trace will be logged in the log. Note: You may modify the script's file directly to patch another function. See all instructions in the file for details on usage. NVDA Debug & Test Tools configurationThe log reader commands and the python console extension feature may require a specific configuration. To use functions that allow to view source code in your editor, you should first configure your editor's command line. If NVDA's file need to be viewed and if you are not running from source, you also need to configure NVDA's source code path. Editor's command line configurationTo use the 'open source code' command or the NVDA source code path configurationWhen a file belonging to NVDA's core is listed in the traceback, the line is of the following form: If you are not running NVDA from source, you may specify an alternate location where the source file will be found, e.g. the place where you have cloned NVDA source files. In this case, you have to configure the path where you have NVDA source files located. For this, open the NVDA console (NVDA+control+Z) and type the following line and then Enter: Be sure however that the version of your source file (e.g. GIT commit) is the same as the one of the running instance of NVDA. Change logVersion 2.0
Version 1.0
|
|
Noelia Ruiz
Hi Cyrille:
toggle quoted messageShow quoted text
I"ll look at this add-on and, if needed, I"ll open issues on GitHub. PS: for any reason, your message appears with a lot of hashtags, maybe due to autocompletion tools or something. I"ll try to edit the subject since it"s anoying to read them. Cheers Enviado desde mi iPhone
El 18 jun 2022, a las 0:12, Cyrille via groups.io <cyrille.bougot2@...> escribió:
|
|
Travis Roth
Hashtags? Cyrille’s message with the documentation is in excellent condition for me with nice formatting even.
From: nvda-addons@nvda-addons.groups.io <nvda-addons@nvda-addons.groups.io> On Behalf Of Noelia Ruiz
Sent: Friday, June 17, 2022 6:38 PM To: nvda-addons@nvda-addons.groups.io Subject: Re: [nvda-addons] NVDA Dev & Test Toolbox #addon #add-on #addonregistration #addonrelase #addonrelease #addonrelesae #addonrelese #addonrequest #addonrequestreview #addonreview #addon-review #addonreviewrequest #addons #addonsgithuborganization #addontest
Hi Cyrille:
I"ll look at this add-on and, if needed, I"ll open issues on GitHub. PS: for any reason, your message appears with a lot of hashtags, maybe due to autocompletion tools or something. I"ll try to edit the subject since it"s anoying to read them. Cheers Enviado desde mi iPhone
|
|
Luke Davis
Travis Roth wrote:
Hashtags?The subject line has 15 hashtags, including two misspellings of #addonrelease. Luke
|
|
Cyrille
Hi Noelia
toggle quoted messageShow quoted text
According to people's feedback, i.e. if people think that this add-on can be useful, I will open a PR myself against addonFiles to request its integration in the community website. Regarding the hashtags, I had only planned to put one of them. It seems that you have succeeded in removing them. Thanks! Cheers, Cyrille
On Fri, Jun 17, 2022 at 04:37 PM, Noelia Ruiz wrote:
Hi Cyrille:
|
|
Noelia Ruiz
Thanks Cyrille: About opening issues on GitHub, I wanted to mean on your GitHub repo, so you can track reviews there. Cheers
toggle quoted messageShow quoted text
Enviado desde mi iPhone
El 18 jun 2022, a las 7:59, Cyrille via groups.io <cyrille.bougot2@...> escribió:
|
|
Akash Kakkar
Really a fantastic addon. Kudos for this to you bro, really amazing. Will be very useful for me
On 6/18/2022 3:42 AM, Cyrille via
groups.io wrote:
|
|
Brian's Mail list account
and I never saw any of them!
toggle quoted messageShow quoted text
Guess it depends on settings in the reader. Brian -- bglists@... Sent via blueyonder.(Virgin media) Please address personal E-mail to:- briang1@..., putting 'Brian Gaff' in the display name field.
----- Original Message -----
From: "Travis Roth" <travis@...> To: <nvda-addons@nvda-addons.groups.io> Sent: Saturday, June 18, 2022 2:29 AM Subject: Re: [nvda-addons] NVDA Dev & Test Toolbox #addon #add-on #addonregistration #addonrelase #addonrelease #addonrelesae #addonrelese #addonrequest #addonrequestreview #addonreview #addon-review #addonreviewrequest #addons #addonsgithuborganization #addontest Hashtags? Cyrille’s message with the documentation is in excellent condition for me with nice formatting even. From: nvda-addons@nvda-addons.groups.io <nvda-addons@nvda-addons.groups.io> On Behalf Of Noelia Ruiz Sent: Friday, June 17, 2022 6:38 PM To: nvda-addons@nvda-addons.groups.io Subject: Re: [nvda-addons] NVDA Dev & Test Toolbox #addon #add-on #addonregistration #addonrelase #addonrelease #addonrelesae #addonrelese #addonrequest #addonrequestreview #addonreview #addon-review #addonreviewrequest #addons #addonsgithuborganization #addontest Hi Cyrille: I"ll look at this add-on and, if needed, I"ll open issues on GitHub. PS: for any reason, your message appears with a lot of hashtags, maybe due to autocompletion tools or something. I"ll try to edit the subject since it"s anoying to read them. Cheers Enviado desde mi iPhone El 18 jun 2022, a las 0:12, Cyrille via groups.io <cyrille.bougot2@... <mailto:cyrille.bougot2@...> > escribió: Hello all I am glad to share with you my add-on NVDA Dev & Test Toolbox. The documentation is under my signature. Direct download link: https://github.com/CyrilleB79/NVDA-Dev-Test-Toolbox/releases/download/V2.0/nvdaDevTestToolbox-2.0.nvda-addon The add-on is not totally new but I had never advertised so much about it. If you find some issue or want to make feedback, do not hesitate, replying to this message or on the GitHub repo <https://github.com/CyrilleB79/NVDA-Dev-Test-Toolbox> . I plan to submit it for the community website if it interests people. As the name indicates, the audience target for this add-on are people developing or testing NVDA or its add-ons. Let me know what you think. Cheers, Cyrille NVDA Dev & Test Toolbox * Author: Cyrille Bougot * NVDA compatibility: 2019.2 and beyond * Download stable version <https://addons.nvda-project.org/files/get.php?file=ndtt> This add-on gathers various features for NVDA debugging and testing. Features * An enhanced restart dialog to specify some extra options when restarting NVDA. * A toggle script and a backport of NVDA's "Play a sound for logged errors" feature. * An object property explorer. * An extended script description mode: when enabled input help mode report information on scripts that have no description. * Commands to help log reading and analyzing. * In the Python console workspace, a function to open the source code of an object. * A command to log the stack trace of the speech.speak function. Enhanced restart dialog The NVDA+shift+Q command opens a dialog to specify some extra options before restarting NVDA. The options that can be specified correspond to the command line options <https://www.nvaccess.org/files/nvda/documentation/userGuide.html#CommandLineOptions> that can be used with nvda.exe, e.g. -c for config path, --disable-addons to disable add-ons, etc. Play a sound for logged errors The <https://www.nvaccess.org/files/nvda/documentation/userGuide.html#PlayErrorSound> "Play a sound for logged errors" setting has been introduced in NVDA 2021.3 and allows to specify if NVDA will play an error sound in case an error is logged. This add-on provides an additional command (NVDA+control+alt+E) to toggle this setting. You can choose: * "Only in test versions" (default) to make NVDA play error sounds only if the current NVDA version is a test version (alpha, beta or run from source). * "Yes" to enable error sounds whatever your current NVDA version is. For NVDA prior to 2021.3, this add-on provides the backport of this feature and the possibility to control it with the keyboard command. The checkbox in the Advanced settings panel is not backported however. Object property explorer This feature allows to report some properties of the current navigator object without opening the log viewer. To list the properties of an object, move the navigator object to it and use the following commands: * NVDA+Shift+LeftArrow or NVDA+Shift+RightArrow: select previous or next property and announce it for the navigator object. * NVDA+LeftArrow : Announce the navigator object's currently selected property. The list of the supported properties is the following: name, role, state, value, windowClassName, windowControlID, windowHandle, location, Python class, Python class mro. This feature is an improvement of NVDA developer guide <https://www.nvaccess.org/files/nvda/documentation/userGuide.html#CommandLineOptions> example 3 If you have installed Speech history review and copying <https://addons.nvda-project.org/addons/speech_history.en.html> add-on from Tyler Spivey and James Scholes, you may use it to copy and paste the announced property to review it. Review via copy/paste is especially useful for pythonClassMRO since it may be long. Extended script description mode When the Extended script description mode is active, the input help mode (NVDA+1) is modified as follows. If a script has no description, the script's name and class are reported. If a script has a description, its description is reported as usual. The gesture to activate or deactivate this feature is NVDA+control+alt+D. Executing a gesture bound to a script without description in input help mode also create an entry for this script in the gesture management dialog. This entry is located in a dedicated category called "Scripts without description (modify at your own risk!)". This allow to easily add, delete or change the native NVDA gestures for these script. Be aware however that it is often intended that such script do not have any description to prevent the user to modify the associated gesture. Indeed, the gesture may be defined to match an application shortcut key. For example the script script_toggleItalic on NVDAObjects.window.winword.WordDocument is bound to control+I and this should not be modified since the gesture is passed to the application to actually execute the shortcut key. Usage example Control+shift+I also toggle italic in Word, even if it is not natively reported by NVDA. To have the control+shift+I result reported by NVDA as control+I, you should perform the following steps: * Open a Word document. * Enable the extended script description mode with NVDA+control+alt+D. * Enter input help mode with NVDA+1. * Press control+I to report the italic script and have it added in the gesture dialog. * Exit input help mode with NVDA+1. * Open the input gestures dialog. * In the category "Scripts without description (modify at your own risk!)", select the command "toggleItalic on NVDAObjects.window.winword.WordDocument". * Add the control+shift+I shortcut and validate. * If you want, exit the extended script description mode with NVDA+control+alt+D. Known bug: A script added for a specific class is visible even if gesture manager is opened in another context. Log reading and analyzing commands A log reader mode provides commands to ease log reading and analyzing. In the log viewer window the log reader is enabled by default, thus log reading commands are available immediately. In another text reading area such as an editor (e.g. Notepad++) or a webpage (e.g. GitHub issue), you need to press NVDA+control+alt+L to enable log reader mode and use its commands. When you are done with log reading and analyzing tasks, you can disable again NVDA+control+alt+L to disable the log reader mode. The commands available in log reader mode are described hereafter. Quick navigation commands Single letter command similar to browse mode quick navigation keys allow to move to various type of log messages: * m: any message * e: ERROR * i: IO * d: DEBUG * f: INFO * g: DEBUGWARNING * w: WARNING Pressing the single letter moves to the next occurrence of this message. Combining the letter with the shift key moves to the previous occurrence of this message. Opening a file in your editor When looking at a traceback, you may want to open one of the source files to understand the cause and the context of the issue. Press C to open the source code file corresponding to the current line of the traceback. For this feature to work, you need to have configured your favorite editor's command. If you are not running NVDA from source, the location of NVDA source code also should have been configured. For more details regarding the configuration, please see the paragraph NVDA Debug & Test Tools configuration. Python console extension In the console, you can call the following function to view the source code that defines the variable myVar: openCodeFile(myVar) For this feature to work, you need to have configured your favorite editor's command. If you are not running NVDA from source, the location of NVDA source code also should have been configured. For more details regarding the configuration, please see the paragraph NVDA Debug & Test Tools configuration. The openCodeFile functions can be called on objects defined in NVDA's code or on objects defined by add-ons. It cannot be called on objects whose source code is not available such as python builtins. Below are examples of call in NVDA's code: * View the definition of the function speech.speech.speak: openCodeFile(speech.speech.speak) * View the definition of the class TextInfo: openCodeFile(textInfos.TextInfo) * View the definition of the method copyToClipboard of the class TextInfo: openCodeFile(textInfos.TextInfo.copyToClipboard) * View the class definition of the focused object: openCodeFile(focus) * Open the file api.py defining the module api: openCodeFile(api) Log the stack trace of the speech function Sometimes, you may want to see which part of the code is responsible for speaking something. For this, you can enable the stack trace logging of the speech function pressing NVDA+control+alt+S. Each time NVDA speaks, a corresponding stack trace will be logged in the log. Note: You may modify the script's file directly to patch another function. See all instructions in the file for details on usage. NVDA Debug & Test Tools configuration The log reader commands and the python console extension feature may require a specific configuration. To use functions that allow to view source code in your editor, you should first configure your editor's command line. If NVDA's file need to be viewed and if you are not running from source, you also need to configure NVDA's source code path. Editor's command line configuration To use the 'open source code' command or the openCodeFile console command, you need first to configure the command that will be called to open the file in your favorite editor. For this, open the NVDA console (NVDA+control+Z) and type the following line and then Enter: config.conf['ndtt']['sourceFileOpener'] = r'"C:\path\to\my\editor\editor.exe" "{path}":{line}' You should of course modify this line according to the real name and location of your editor and the syntax used by it to open files. {path} will be replaced by the full path of the file to open and {line} by the line number where you want the cursor to be set. For Notepad++ for example the command to type in the console would be: config.conf['ndtt']['sourceFileOpener'] = r'"C:\Program Files\Notepad++\notepad++.exe" {path} -n{line}' NVDA source code path configuration When a file belonging to NVDA's core is listed in the traceback, the line is of the following form: File "config\profileUpgrader.pyc", line 30, in upgrade If you are not running NVDA from source, you may specify an alternate location where the source file will be found, e.g. the place where you have cloned NVDA source files. In this case, you have to configure the path where you have NVDA source files located. For this, open the NVDA console (NVDA+control+Z) and type the following line and then Enter: config.conf['ndtt']['nvdaSourcePath'] = r'C:\pathExample\GIT\nvda\source' Of course, replace the path of NVDA source with the correct one. Be sure however that the version of your source file (e.g. GIT commit) is the same as the one of the running instance of NVDA. Change log Version 2.0 * New feature: Enhanced restart dialog to specify some extra options when restarting NVDA. * New feature: extended description mode. * Play error sound feature harmonized between pre and post 2021.3 versions of NVDA. * New feature: Log reader commands are now available in the log viewer and also optionally in edit fields or webpages. * New feature: In the Python console, an openCodeFile function is available to view the source code of an object. * Some features are now disabled in secure mode for security reasons. * The add-on's compatibility range has been extended (from 2019.2 to 2021.1). * Releases are now performed with GitHub action instead of appVeyor. Version 1.0 * Initial release. *
|
|
Luke Davis
Cyrille via groups.io wrote:
According to people's feedback, i.e. if people think that this add-on can be useful, I will open a PR myself against addonFiles to request its integrationPlease do. I have not installed it yet, but based on its description I will be definitely installing it soon. I have an add-on called Debug Helper, then renamed to Dev Helper, for which I had some similar plans, but not nearly so extensive. I got off on other projects, and never developed it to where I wanted. I had decided that I would probably discontinue that one rather than work on it further, and seeing this one of yours has confirmed that decision. I look forward to using Dev & Test Toolbox, and hope you do decide to submit to the community site. Luke
|
|
Lukasz Golonka
Cyrille,
Many thanks for making this very useful add-on more official than it was! While I'm using some parts of it pretty regularly I never had time to look at the code, or to familiarize myself with all its features. Some review points below: - In the beepError file you may consider using globalVars.appDir if it is defined when creating path to the error sound. That would allow people on never versions of NVDA who are using Ivona SAPI voices (they tent to change CWD when loading them for the first time) to have the sound played. - in the myHandle function there is unnecessary import of api - in the fileOpener when retrieving path to the nVDA source, and when user is running a source build you're setting the path to globalVars.appDir even for versions of NVDA where it is not yet implemented. An alternative approach which would handle the case where CWD has been changed to something silly would be to return __main__.__file__ in such case. - In the logReader classes such as LogMessageHeader and LogMessage don't inherit from object - this causes them to be old style classes under Python 2. While I cannot point out any real issues due to this in code which targets both Python 2 and 3 it is better to inherit from object explicitly. - In the makeFromTextInfo method you're raising NotImplemented instead of NotImplementedError - this is a common Python gotcha NotImplemented cannot be raised it is a singleton returned when the given class does not support a particular arithmetic operation on the provided argument. - Not an error as such but when checking if the given window is the log viewer you can avoid comparing window names by checking if the window handle equals gui.logViewer.logViewer.GetHandle() (don't forget to handle the case where log viewer is not yet initialized or closed). - It is unclear to me why you're setting directory to None in the restartWithOptions for Python 2 versions of NVDA, so a comment in code here would be nice to have. - The design of the restartWithOptions is... shall we say, suboptimal: - The OPTION-LIST would greatly benefit from usages of named tuples, so that you do not need to remember what indexes for the given suboptions are - Since each option has a type of allowed values you may avoid these extended isinstance checks, implement a method called createControls or similar for each of the classes such as FolderStr, and use polymorphism to create the control for each of the options. - If the default value is neither FolderStr nor FileStr you're using a bare raise statement effectively throwing whatever exception would be returned by sys.exc_info at this point - that is almost certainly not what you want to do - when I've done this for testing I got exception from the touchHandler as my machine is not touch capable. - In the script_toggleStackTraceLog _originalFunction does not need to be defined as global - While certainly not something to implement for this version it would be interesting to introduce a gui for specifying what function should be patched for stack tracing. - I have some reservations about the way in which compatibility for controlTypes is handled. Essentially it is never a good idea to modify the original module with the new code unless you have to monkey patch it. Additionally more and more add-ons seems to add their own implementation of controlTypes.Role and controlTypes.State and it is only a matter of time when, depending on the order in which add-ons are loaded some implementation becomes incompatible with whatever the next add-on decided to implement causing no end of troubles. For an alternative, much safer, implementation, you can take a look at my add-on for Becky! in particular class ControlTypesCompatWrapper. It does not support output reasons, but adding them should be trivial. -- Regards Lukasz
|
|
Cyrille
Hi all
Thanks for the feedback. Since the add-on seems to interest at least a few people, I will definitely ask its inclusion on the community website. Beforehand, I have to take into account some of the remarks; special thanks to Lukasz for all these points with details. Some other points will be included later, e.g. the GUI to choose the function to patch that I had already in mind. Cheers, Cyrille
|
|
Noelia Ruiz
Hi Cyrille, thanks for including this add-on on the website.
toggle quoted messageShow quoted text
In case you don't receive GitHub notifications for issues, I inform you here: I've created three issues on your GitHub repo. Cheers 2022-06-18 23:30 GMT+02:00, Cyrille via groups.io <cyrille.bougot2@...>:
Hi all
|
|
Cyrille
Hi all
The release 2.1 of NVDA Debug & Test Toolbox add-on is out. Thanks to all for the review, the suggestions and the contributions. Direct download link: https://github.com/CyrilleB79/NVDA-Dev-Test-Toolbox/releases/download/V2.1/nvdaDevTestToolbox-2.1.nvda-addon Change log: • Various bugfixes and code refactoring/cleaning to address all use cases: all supported versions, installed vs. run from source, etc. (contribution from Łukasz Golonka) • Rewriting of the compa module (contribution from Łukasz Golonka) • The restart dialog can now be opened only once. • The object explorer shortcuts are now unassigned by default and need to be mapped by the user. • With the object explorer, a double-press to call the script to report the current object's property now displays the reported information in a browseable message. If no issue is found, I in this version, I will submit it for the community website. Note that some suggestions made during this review have not yet been implemented and are logged as issues in the add-on's repository. Cheers, Cyrille
|
|
Ângelo Abrantes
HI, Do you think you prepare this work to be translated? Thanks Ângelo Abrantes, NVDA portuguese team. Às 15:42 de 17-07-2022, Cyrille via
groups.io escreveu:
Hi all -- Cordiais Cumprimentos Ângelo Abrantes, Equipa <Portuguesa do NVDA
|
|
Cyrille
Hi Ângelo
toggle quoted messageShow quoted text
Thanks of your interest. In any case, I first need to release this on the community website. But I should admit that I had not planned to have it translated in the first time, since this add-on mainly target developers and testers; and I expect this public to understand English, at least roughly. However I remain opened to any suggestion. If you (or other people) think that this add-on should be translated, please let me know and elaborate why. Many thanks. Cheers, Cyrille
On Sun, Jul 17, 2022 at 10:10 PM, Ângelo Abrantes wrote:
|
|