User guide for Terminal Access, an NVDA add-on that adds keyboard-driven navigation, search, bookmarks, and audio cues to 30 Windows terminal applications.
- Download the latest
.nvda-addonfile from the GitHub Releases page. - Press Enter on the downloaded file.
- Confirm installation when NVDA prompts.
- Restart NVDA.
Open any supported terminal (Windows Terminal, PowerShell, Command Prompt, WSL, or others). You will hear:
"Terminal Access support active. Press NVDA+shift+f1 for help."
Press NVDA+apostrophe to enter the command layer. You will hear "Terminal commands" and a high tone. Every command becomes a single key press. No modifier combos are needed.
Try these keys first:
| Key | Action |
|---|---|
| I | Read current line |
| O | Read next line |
| U | Read previous line |
| K | Read current word |
| A | Read continuously |
| Escape | Exit the layer |
Press Escape or NVDA+apostrophe again to leave the command layer.
Terminal Access has two input modes. The command layer activates with NVDA+apostrophe and turns every command into a single key press. Direct gestures use NVDA+key combos and work without entering the layer.
Terminal Access gestures only activate inside terminal windows. Outside terminals, all NVDA commands work normally.
Enter with NVDA+apostrophe. Exit with Escape.
| Key | Action |
|---|---|
| U / I / O | Previous / current / next line |
| J / K / L | Previous / current / next word |
| M / , / . | Previous / current / next character |
| Home / End | Start / end of line |
| PageUp / PageDown | Top / bottom of buffer |
| Shift+Left | Read to start of line |
| Shift+Right | Read to end of line |
| Shift+Up | Read to top of buffer |
| Shift+Down | Read to bottom of buffer |
| Key | Action |
|---|---|
| A | Continuous reading (say all) |
| ; | Announce position (row, column) |
| Shift+A | Read text attributes and colors |
| I (twice) | Announce line indentation |
| , (twice) | Phonetic character reading |
| , (three times) | Character code (decimal and hex) |
| K (twice) | Spell current word |
| Key | Action |
|---|---|
| F | Search terminal output |
| F3 | Next search match |
| Shift+F3 | Previous search match |
| E | List URLs found in terminal output |
| Key | Action |
|---|---|
| 0-9 | Jump to bookmark |
| Shift+0-9 | Set bookmark at current line |
| B | Open bookmark list dialog |
| Key | Action |
|---|---|
| R | Toggle mark (start/end) |
| C | Copy linear selection |
| X | Clear marks |
| V | Enter copy mode (L=line, S=screen, Esc=cancel) |
| Key | Action |
|---|---|
| Q | Toggle quiet mode |
| - / = | Decrease / increase punctuation level |
| D | Toggle indentation announcement |
| P | Announce active profile. Press twice to select. |
| Y | Cycle cursor tracking mode |
| Key | Action |
|---|---|
| T | Create new tab |
| Shift+T | List tabs |
| W | Read window content |
| Shift+W | Set window boundaries |
| Ctrl+W | Clear window |
| Key | Action |
|---|---|
| F1 | Open this user guide |
| S | Open Terminal Access settings |
| Escape | Exit command layer |
These work without entering the command layer.
| Gesture | Action |
|---|---|
| NVDA+apostrophe | Enter or exit command layer |
| NVDA+U / I / O | Previous / current / next line |
| NVDA+J / K / L | Previous / current / next word |
| NVDA+M / , / . | Previous / current / next character |
| NVDA+Shift+Home / End | Start / end of line |
| NVDA+F4 / F6 | Top / bottom of buffer |
| Gesture | Action |
|---|---|
| NVDA+A | Continuous reading (say all) |
| NVDA+; | Announce position (row, column) |
| NVDA+I (twice) | Announce line indentation |
| NVDA+, (twice) | Phonetic character reading |
| NVDA+, (three times) | Character code (decimal and hex) |
| NVDA+K (twice) | Spell current word |
| NVDA+Shift+A | Read text attributes and colors |
| Gesture | Action |
|---|---|
| NVDA+Shift+Left | Read to start of line |
| NVDA+Shift+Right | Read to end of line |
| NVDA+Shift+Up | Read to top of buffer |
| NVDA+Shift+Down | Read to bottom of buffer |
| Gesture | Action |
|---|---|
| NVDA+F | Search terminal output |
| NVDA+F3 | Next search match |
| NVDA+Shift+F3 | Previous search match |
| NVDA+Alt+U | List URLs in terminal output |
| Gesture | Action |
|---|---|
| Alt+0-9 | Jump to bookmark |
| NVDA+Alt+0-9 | Set bookmark at current line |
| NVDA+Shift+B | Open bookmark list dialog |
| Gesture | Action |
|---|---|
| NVDA+R | Toggle mark |
| NVDA+C | Copy linear selection |
| NVDA+X | Clear marks |
| NVDA+V | Enter copy mode |
| Gesture | Action |
|---|---|
| NVDA+minus / equals | Decrease / increase punctuation level |
| NVDA+Alt+Y | Cycle cursor tracking mode |
| NVDA+Shift+Q | Toggle quiet mode |
| NVDA+F5 | Toggle indentation announcement |
| NVDA+F10 | Announce active profile. Press twice to select a profile. |
| Gesture | Action |
|---|---|
| NVDA+Shift+T | Create new tab |
| NVDA+W | List tabs |
| NVDA+Alt+F2 | Set screen window (press twice: start, end) |
| NVDA+Alt+F3 | Clear screen window |
| NVDA+Alt+Plus | Read window content |
| Gesture | Action |
|---|---|
| NVDA+Shift+F1 | Open this user guide |
All gestures can be remapped in NVDA's Input Gestures dialog under the "Terminal Access" category.
Move through terminal output by line, word, or character. Jump to the start or end of a line, or to the top or bottom of the buffer. Read continuously with say all. Read in any direction from the current position.
Example: press NVDA+O three times to move down three lines. Press NVDA+K to hear the word at the cursor. Press NVDA+K twice to spell it letter by letter.
Press NVDA+F (or F in the command layer) to search terminal output. Type your search term and press Enter. If matches are found, a results dialog opens showing the match number, line number, and line content for each hit. Select a match and press Enter to jump there. Press F3 or Shift+F3 to move between matches after closing the dialog. If nothing is found, you hear a low tone and a message with the search term.
Example: run pip install requests, then press NVDA+F, type "error", and press Enter. If the install failed, the results dialog lists every error line. Select one and press Enter to review it.
Set up to 10 bookmarks (0 through 9) at any line. The full line text is captured as a label so you can identify it later. Press B in the command layer (or NVDA+Shift+B) to open the bookmark list dialog. The dialog shows two columns: bookmark number and line content. Press Enter to jump to a bookmark. Press Delete to remove one. Bookmarks are isolated per tab in Windows Terminal.
Example: while reading a long build log, navigate to an important error line and press Shift+1 in the command layer to set bookmark 1. Continue reading. Later press 1 to jump back to that error. Press B to see all your bookmarks in a list.
Terminal Access plays audio cues when you navigate to lines that contain errors or warnings.
| Tone | Frequency | Meaning |
|---|---|---|
| Low tone | 220 Hz | Error (compilation failure, exception, crash) |
| Mid tone | 440 Hz | Warning (deprecation, caution) |
The detector uses word-boundary matching to recognize structured patterns from compilers, linters, and shells. It matches output from GCC, Clang, MSVC, Rust, Python, TypeScript, ESLint, Go, Java, Maven, Git, Docker, Make, and CMake, among others.
Examples of lines that trigger the error tone:
main.c:5:12: error: expected ';' before 'int'Traceback (most recent call last):FAILED tests/test_main.py::test_loginfatal: 'origin' does not appear to be a git repositorynpm ERR! 404 Not Foundbash: foo: command not found
Examples of lines that trigger the warning tone:
main.c:5:12: warning: unused variable 'x'DeprecationWarning: old API is deprecated[WARNING] Using platform encoding
Normal text like "mirror", "forewarning", or help text containing "cannot" does not trigger false positives. The detector checks for structured delimiters (colons, brackets, specific phrases) rather than bare substrings.
You can disable audio cues in Terminal Settings by unchecking "Error and Warning Audio Cues".
When quiet mode is active, Terminal Access suppresses speech but can still play error and warning tones on caret events. Enable "Error Audio Cues in Quiet Mode" in settings to hear a beep when an error line scrolls past during fast output, even though speech is off.
Example: you run cargo build with quiet mode on. The build produces hundreds of lines of output silently. If a compilation error appears, you hear a low 220 Hz tone. You can then exit quiet mode (NVDA+Shift+Q) and review the output to find the error.
Enable "Output Activity Tones" in settings to hear two ascending tones (600 Hz then 800 Hz) whenever new program output appears on screen. This tells you "something is happening" without reading every line.
The tones play only for program output, not for characters you type. After the tones play, they are suppressed for a configurable interval (default: 1 second) so rapid output does not produce continuous beeping. Adjust the debounce interval in settings under "Output Activity Debounce" (100 to 10000 milliseconds).
Example: you run apt update and switch to another window. When you return to the terminal, the ascending tones tell you that output appeared while you were away. A longer debounce (5000ms) means you hear the tone once every 5 seconds during sustained output, giving you a periodic "heartbeat" that the command is still running.
Terminal Access adjusts settings automatically based on the running application.
| Profile | Settings |
|---|---|
| Vim/Neovim | Punctuation MOST, silent status line |
| tmux | Silent status bar |
| htop | Separate regions for header and process list |
| less/more | Quiet mode, key echo disabled |
| Git | Punctuation MOST for diffs |
| GNU nano | Silent shortcut bar |
| irssi | Chat-optimized punctuation |
| WSL | Punctuation MOST for Linux paths |
Press P in the command layer (or NVDA+F10) to check which profile is active. Press NVDA+F10 twice to open the profile selection dialog, which lists all profiles. Press Enter on a profile to activate it. You can create, export, and import custom profiles through the settings panel.
Press E in the command layer (or NVDA+Alt+U) to scan the terminal buffer for URLs. A dialog opens with a filter box, a list of URLs with line numbers and context, and buttons for opening, copying, or navigating. Supports HTTP, HTTPS, FTP, www-prefixed links, and OSC 8 hyperlinks. File URLs are listed but blocked from opening for security.
Example: after running git remote -v, press E to list the repository URLs. Select one and press Alt+C to copy it, or Alt+O to open it in your browser.
Terminal Access tracks Windows Terminal tabs. Bookmarks, searches, and settings stay isolated per tab. Use T or Shift+T in the command layer (or NVDA+Shift+T and NVDA+W) to create and list tabs. Tab switches are detected automatically.
Press Shift+A in the command layer (or NVDA+Shift+A) to hear colors and formatting at the cursor. The ANSI parser supports 8 standard colors, bright colors, 256-color palette, RGB/TrueColor, bold, dim, italic, underline, blink, inverse, and strikethrough.
Example: in a diff output, navigate to a changed line and press Shift+A. You might hear "green foreground, bold" indicating an added line.
Set a start mark with NVDA+R, navigate to the end, press NVDA+R again to set the end mark, then NVDA+C to copy. Press NVDA+X to clear marks. Copy mode (V in the command layer or NVDA+V) offers quick copy by line or by screen.
Example: navigate to the first line of a stack trace. Press NVDA+R to mark the start. Navigate to the last line and press NVDA+R again. Press NVDA+C to copy the entire stack trace to the clipboard.
Press NVDA+Shift+Q (or Q in the command layer) to toggle quiet mode. Quiet mode suppresses cursor tracking and key echo so fast-scrolling output does not overwhelm the speech synthesizer. Navigation commands (NVDA+U/I/O) still work and still speak.
Example: you run a long make build. Press NVDA+Shift+Q to silence the output. If "Error Audio Cues in Quiet Mode" is enabled, you hear a beep if the build fails. Press NVDA+Shift+Q again to re-enable speech and review the output.
Open settings from the NVDA menu: Preferences, Settings, Terminal Settings. The panel has three sections: Speech and Tracking, NVDA Gesture Conflicts, and Application Profiles.
| Setting | Description |
|---|---|
| Cursor Tracking | Announces the character at the cursor when it moves. |
| Key Echo | Announces each character as you type. |
| Quiet Mode | Suppresses cursor tracking and key echo. Toggle with NVDA+Shift+Q. |
| Punctuation Level | Controls how many symbols are announced. Adjust with NVDA+minus and NVDA+equals. |
| Level | Symbols Announced |
|---|---|
| 0 (None) | No punctuation |
| 1 (Some) | Period, comma, question mark, exclamation, semicolon, colon |
| 2 (Most) | Most symbols including at, hash, dollar, brackets, braces, operators |
| 3 (All) | Every symbol |
| Setting | Description |
|---|---|
| Cursor Tracking Mode | Off, Standard (default), or Window (only within defined screen regions). |
| Cursor Delay | Milliseconds (0 to 1000) before announcing cursor moves. Default: 20ms. |
| Indentation on Line Read | Announces indentation depth after each line. Toggle with NVDA+F5. |
| Condense Repeated Symbols | Announces "3 equals" instead of "equals equals equals". |
| Repeated Symbols | Which symbols to condense. Default: hyphen, underscore, equals, exclamation. |
| Default Profile | Profile to use when no app-specific profile is detected. |
| Setting | Default | Description |
|---|---|---|
| Error and Warning Audio Cues | On | Play tones on error/warning lines during line navigation. |
| Error Audio Cues in Quiet Mode | Off | Play error/warning tones on caret events while quiet mode is active. Lets you hear errors during fast output without speech. |
| Output Activity Tones | Off | Play two ascending tones when new program output appears. Does not play during typing. Works in both normal and quiet mode. |
| Output Activity Debounce | 1000ms | Milliseconds between activity tone repeats (100 to 10000). Higher values mean fewer tones during sustained output. |
Some Terminal Access gestures override NVDA's default global commands inside terminal windows. For example, NVDA+F normally reports text formatting, but Terminal Access uses it for search.
The NVDA Gesture Conflicts section lists only these overlapping gestures. Uncheck any gesture to restore its NVDA default behavior inside terminals. Unchecked gestures remain available through the command layer (NVDA+').
To customize gestures that do not conflict with NVDA defaults, use NVDA's Input Gestures dialog (Preferences, Input Gestures) and look under the Terminal Access category.
If you need the full list of all Terminal Access gestures in this settings panel, open an issue on GitHub.
Windows Terminal, Windows PowerShell, PowerShell Core (pwsh), Command Prompt (cmd.exe), Console Host (conhost.exe).
WSL1 and WSL2, all distributions. Detected automatically with an optimized profile.
Cmder, ConEmu (32-bit and 64-bit), mintty (Git Bash, Cygwin), PuTTY, KiTTY, Terminus, Hyper, Alacritty, WezTerm, Tabby, FluentTerminal, Ghostty, Rio, Wave Terminal, Contour, Cool Retro Term, MobaXterm, SecureCRT, Tera Term, mRemoteNG, Royal TS.
Total: 30 supported terminals including WSL.
Confirm you are in a supported terminal. Check that the add-on is enabled under NVDA, Tools, Manage Add-ons. Restart NVDA.
Terminal Access gestures only activate inside terminal windows. Outside terminals, NVDA's own commands work normally. If a gesture conflicts with NVDA's defaults inside a terminal, open Terminal Access settings and uncheck it in the NVDA Gesture Conflicts section. The command will still be available through the command layer (NVDA+'). For conflicts with other add-ons, use NVDA's Input Gestures dialog to reassign the gesture.
Check that cursor tracking is not set to Off. Press NVDA+Alt+Y to cycle tracking modes. Make sure quiet mode is not active (toggle with NVDA+Shift+Q). Try setting cursor delay to 0ms in settings.
Increase the punctuation level with NVDA+equals. Level 0 suppresses all punctuation. Level 2 works well for code. Level 3 announces every symbol.
Press NVDA+F10 to see which profile is active. Open the NVDA Python Console (NVDA+Control+Z) and type api.getForegroundObject().appModule.appName to verify the application name matches the profile.
Open an issue on GitHub with the exact line text that triggered a false positive. You can disable error tones entirely in Terminal Settings by unchecking "Error and Warning Audio Cues".
These features still work but will be removed in version 2.
| Feature | Gestures | Reason |
|---|---|---|
| Command History | NVDA+H/G, NVDA+Shift+H, NVDA+Shift+L | Shells have built-in history navigation. |
| Highlight tracking | Cycle with NVDA+Alt+Y | Modern terminals strip ANSI from UIA. |
| Rectangular selection | NVDA+Shift+C | Linear copy covers most needs. |
If you rely on any of these, open an issue on GitHub before they are removed.
- Windows 10 or Windows 11
- NVDA 2025.1 or later
Terminal Access is inspired by TDSR by Tyler Spivey and Speakup, the Linux kernel screen reader.
Copyright (C) 2024 Pratik Patel. Licensed under the GNU General Public License v3.0 or later. See the LICENSE file for details.