Console Toolkit
Console Toolkit is NVDA add-on, that provides accessibility improvements for Windows console, also known as Command prompt. It also works well in Windows PowerShell. Some of the features may work in alternative terminals, such as Cygwin, PuTTY and Windows Terminal, however, the add-on has only been carefully tested with the default Windows Console. SSH users might find this add-on especially handy.
Some of the features were previously part of Tony's enhancements add-on.
Downloads
Install from add-on store.
Jump to the first visible line
Console toolkit overrides shift+numpad7
command in UIA consoles: instead
of reading the first line in the entire buffer it now reads the first
visible line at the top of the window. Press shift+numpad7
twice to revert
to the old behavior and read the first line of the buffer.
Real-time console speech
This option makes NVDA to speak new lines immediately as they appear in console output, instead of queueing new speech utterances. For example, if NVDA is busy speaking a line that appeared on the screen 1 minute ago, and now a new line appears, this option will cancel speaking the old line and start speaking the new line right away, thus providing a more real-time feedback on what's happening in console window.
Beep on console updates
Beep a low pitch impulse every time console text is updated.
Enforce Control+V in consoles
This option makes Control+V shortcut to work inside ssh
sessions.
Experimental: command prompt editing
Note: this feature is experimental. Please read this section carefully and make sure you understand how it works before reporting issues.
Press NVDA+E
to identify current prompt in console window and edit it in
an accessible "Edit prompt" window. After editing you can either press
Escape
to update current command line, or Enter
to update and
immediately execute command. Alternatively you can press Alt+F4
to close
edit prompt window without updating command line.
This feature has been tested in Windows command prompt cmd.exe
as well as
in bash shell over ssh connections, as well as in WSL and cygwin. It might
also work in alternative Unix shells, however it hasn't been tested.
Here is how add-on extracts current command.
- It presses
End
key and then sends a control character, that is a rare Unicodecharacter not likely to be used anywhere. - Then it presses
home
key and sends another control character. - Then it waits for control characters to appear on the screen, which might take some time on slow SSH connections.
- Command is what appears between two control characters.
- When "Use UI Automation to access the Windows Console when available" option is enabled in NVDA settings, it sends one more control character in the beginning of the string. This is needed to parse multiline commands correctly: UIA implementation trims whitespaces in the end of each line, so in order to deduce whether there is a space between two lines, we need to shift them by one character. Please note, however, that this way we don't preserve the number of spaces between words, we only guarantee to preserve the presence of spaces.
- Before editing add-on makes sure to remove control characters by placing
cursor in the beginning and end and simulating
Delete
andBackspace
key presses. - It presents command in "Edit prompt" window for user to view or edit.
After user presses
Enter
orEscape
,it first erases current line in the console. This is achieved via one of four methods, the choice of the method is configurable. Currently four methods are supported:Control+C
: works in bothcmd.exe
andbash
, but leaves previous prompt visible on the screen; doesn't work in emacs; sometimes unreliable on slow SSH connectionsEscape
: works only incmd.exe
"),Control+A Control+K
: works inbash
andemacs
; doesn't work incmd.exe
Backspace
(recommended): works in all environments; however slower and may cause corruption if the length of the line has changed
Then add-on simulates keystrokes to type the updated command and optionally simulates
Enter
key press.
Troubleshooting:
- Verify that 'Home', 'End', 'Delete' and 'Backspace' keys work as expected in your console.
- Verify that your console supports Unicode characters. Some ssh connections don't support Unicode.
- Verify that selected deleting method works in your console.
Experimental: capturing command output
Note: this feature is experimental. Please read this section carefully and make sure you understand how it works before reporting issues.
While in command line or in "Edit prompt" window, press Control+Enter
to
capture command output. This add-on is capable of capturing large output
that spans multiple screens, although when output is larger than 10 screens
capturing process takes significant time to complete. Add-on will play a
long chime sound, and it will last as long as the add-on is capturing the
output of currently running command, or until timeout has been
reached. Alternatively, press NVDA+E
to interrupt capturing.
When "Use UI Automation to access the Windows Console when available" feature is enabled in NVDA settings, you can switch to other windows while capturing is going on. However, if this option is disabled, then NVDA is using a legacy console code, that only works when consoel is focused, and therefore switching to any other window will pause capturing.
Command capturing works by redirecting command output to less
command. Default suffix that is appended to commands is:
|less -c 2>&1
Please only change it if you know what you're doing. This add-on knows how
to interact with the output of less
command to retrieve output page by
page.
On Windows less.exe
tool needs to be installed separately. You can install
it via cygwin, or download a windows binary elsewhere.
If you are using tmux
or screen
in Linux, please make sure that no
status line is displayed in the bottom. In tmux
run
tmux set status off
to get rid of status line, or modify your tmux.conf
file.
Troubleshooting:
- After a failed output capturing attempt, press
UpArrow
in the console to check what command has actually been executed. - Revert back to default capturing suffix, mentioned above.
- Try troubleshooting steps from "command prompt editing" section.