Telegram Desktop Accessibility is an NVDA add-on for Telegram Desktop on Windows. It adds direct navigation and call commands, reads replies the way Unigram does, and fills missing accessible names on known Telegram controls.
Alt+1moves focus to the selected chat in the chat list, or to the first chat when no chat is selected.Alt+Mopens Telegram's main menu.Ctrl+Enteron a message opens its link, or lists them when the message has several. Only web, e-mail and Telegram links are offered; file paths in a message are never opened. Elsewhere, such as in the message composer,Ctrl+Enterreaches Telegram unchanged.- Replies are read the way Unigram reads them: who the message replies to, then the reply itself. Telegram's line "In reply to Bob: " followed by the whole quoted message becomes "In reply to Bob".
Left Arrowon a reply reads the quoted message, as in UnigramPlus. Telegram's own wording is kept, so this follows Telegram's display language. It can be turned off in NVDA's settings. Alt+Y,Alt+N,Alt+AandAlt+Vanswer a call, decline or end it, mute or unmute the microphone, and turn the camera on or off. Each of them reports the action in Telegram's own wording, so it follows Telegram's display language.- Every command is listed in NVDA's Input Gestures dialog under "Telegram Desktop Accessibility", so any default shortcut can be reassigned or removed. Outside Telegram the assigned keystroke reaches the application unchanged.
- Structural main-menu controls such as Profile and Accounts, unnamed composer controls, and the top-bar suggestion receive useful accessible labels. A real name supplied by Telegram is always preserved.
- A foreground-aware fallback keeps the shortcuts and labels available when UnigramPlus or another installed add-on claims Telegram's shared app-module slot. It does not bind the shortcuts outside Telegram.
- Chat and call controls are detected through Telegram's stable UIA class information rather than a translated control name, so the commands do not depend on Telegram's interface language.
- Controls that expose only Telegram's internal C++ class path no longer announce that path. Other names from Telegram are not replaced.
Install the add-on, restart NVDA when prompted, and use the add-on shortcuts from the main Telegram window. No configuration is required.
To hear the quoted message in full whenever a reply is read, open NVDA menu > Preferences > Settings, choose the "Telegram Desktop Accessibility" category, and clear "Read replies without the quoted message". Left Arrow is then left to Telegram as well. Pressing Left Arrow on a message that is not a reply reports that it is not a reply. Everywhere else, such as in the message composer, Left Arrow works as usual.
If Alt+1 cannot find a chat list or the list is empty, NVDA reports that condition. If Alt+M is unavailable on the current Telegram screen, NVDA reports that the main menu is not available. The call commands report that there is no incoming call, or that you are not in a call, when the matching control is not on screen. A call runs in a window of its own, so the call commands also work while the main Telegram window is in front.
To use different keys, open NVDA menu > Preferences > Input Gestures, expand the "Telegram Desktop Accessibility" category, and add or remove a gesture for any command.
In the "Provided by" column,
Add-onidentifies shortcuts provided by this add-on andTelegram Desktopidentifies shortcuts built into Telegram Desktop.Tip: you can customize the add-on shortcuts from NVDA menu > Preferences > Input Gestures.
| Shortcut | Provided by | Function |
|---|---|---|
| Alt+1 | Add-on | Move focus to the chat list |
| Ctrl+Enter | Add-on | Open the link in the focused message, or choose one of its links |
| Left Arrow | Add-on | Read the quoted message of the focused reply |
| Up / Down / Page Up / Page Down | Telegram Desktop | Navigate within a chat |
| Shift+Scroll | Telegram Desktop | Speed up in-chat navigation |
| Up / Left / Right / Down | Telegram Desktop | Navigate suggested stickers |
| Left / Right | Telegram Desktop | Navigate suggested emoji |
| Ctrl+Tab / Ctrl+Page Down / Alt+Down | Telegram Desktop | Move to the chat below |
| Ctrl+Shift+Tab / Ctrl+Page Up / Alt+Up | Telegram Desktop | Move to the chat above |
| Esc | Telegram Desktop | Exit, go back, or cancel the current action |
| Ctrl+O | Telegram Desktop | Send a file |
| Shortcut | Provided by | Function |
|---|---|---|
| Alt+Y | Add-on | Answer the incoming call |
| Alt+N | Add-on | Decline the incoming call, or end the call in progress |
| Alt+A | Add-on | Mute or unmute the microphone during a call |
| Alt+V | Add-on | Turn the camera on or off during a call |
| Shortcut | Provided by | Function |
|---|---|---|
| Ctrl+Shift+Down | Telegram Desktop | Move to the folder below |
| Ctrl+Shift+Up | Telegram Desktop | Move to the folder above |
| Ctrl+1 through Ctrl+7 | Telegram Desktop | Jump directly to a folder |
| Ctrl+8 | Telegram Desktop | Jump to the last folder |
| Shortcut | Provided by | Function |
|---|---|---|
| Ctrl+Up / Ctrl+Down | Telegram Desktop | Reply to a message |
| Ctrl+Down / Esc | Telegram Desktop | Cancel a reply |
| Up | Telegram Desktop | Edit the last message sent |
| Delete | Telegram Desktop | Delete the currently selected message |
| Ctrl+Numpad Plus / Ctrl+Numpad Minus | Telegram Desktop | Zoom an image or video in or out |
| Ctrl+Click the name | Telegram Desktop | Open a bot profile from an inline message |
| Shortcut | Provided by | Function |
|---|---|---|
| Ctrl+F | Telegram Desktop | Search the selected chat |
| Esc | Telegram Desktop | Exit search |
| Ctrl+J | Telegram Desktop | Search for a contact |
| Shortcut | Provided by | Function |
|---|---|---|
| Up / Down | Telegram Desktop | Navigate the panel |
| Enter | Telegram Desktop | Select a chat |
| Backspace / Delete | Telegram Desktop | Remove a chat |
| Ctrl+Enter | Telegram Desktop | Send the message |
| Shortcut | Provided by | Function |
|---|---|---|
| Alt+Enter | Telegram Desktop | Jump to the bottom of the chat or scroll the chat list to the top |
| Ctrl+0 | Telegram Desktop | Open Saved Messages |
| Ctrl+1 through Ctrl+5 | Telegram Desktop | Jump directly to a pinned chat when there are no folders |
| Ctrl+9 | Telegram Desktop | Open Archived Chats |
| Shortcut | Provided by | Function |
|---|---|---|
| Alt+M | Add-on | Open the main menu |
| Ctrl+W / Alt+F4 | Telegram Desktop | Minimize to the system tray |
| Ctrl+Q | Telegram Desktop | Quit Telegram |
| Ctrl+L | Telegram Desktop | Lock Telegram |
| Ctrl+M | Telegram Desktop | Minimize Telegram |
| Shortcut | Provided by | Function |
|---|---|---|
| Ctrl+B | Telegram Desktop | Bold |
| Ctrl+I | Telegram Desktop | Italic |
| Ctrl+K | Telegram Desktop | Create a link |
| Ctrl+U | Telegram Desktop | Underline |
| Ctrl+Shift+M | Telegram Desktop | Monospace |
| Ctrl+Shift+N | Telegram Desktop | Remove formatting / plain text |
| Ctrl+Shift+P | Telegram Desktop | Spoiler |
| Ctrl+Shift+X | Telegram Desktop | Strikethrough |
| Ctrl+Shift+Period | Telegram Desktop | Quote |
| Shortcut | Provided by | Function |
|---|---|---|
| Double-click a message | Telegram Desktop | Reply |
| Drag outside the messages | Telegram Desktop | Select messages |
| Hover over the timestamp | Telegram Desktop | Show message information |
| Hover over a poll percentage | Telegram Desktop | Show the number of votes |
| Drag a message to a chat in the list | Telegram Desktop | Forward the message to that chat |
| Back | Telegram Desktop | Exit Archived Chats |
| Upload a picture and click its preview | Telegram Desktop | Edit media |
| Right-click the Send button | Telegram Desktop | Send silently or schedule a message |
Telegram Desktop's patched Qt accessibility provider exposes RTTI-based UIA class names. The add-on identifies the chat list as Dialogs::InnerWidget, allowing it to work independently of the localized accessible name. The main menu command finds Telegram's native button by UIA point hit-testing near the top-left corner, supporting both Dialogs::Widget and folder-sidebar layouts, then falls back to the existing provider-side subtree query.
Telegram's call panel builds every control as a Ui::CallButton, laid out as screen sharing, camera, cancel or decline, answer or hang up, microphone, add people. Only the camera and the microphone carry a device-selection corner button, so the add-on recognizes those two by that corner button and the remaining commands by their place in the row. No translated name is read to find a control; a name is only read back to report the action, because each button is named after what pressing it does.
Telegram describes each message twice: as one name, a line for each part of the message, and as a row of cells, one per part, always in the same order: read state, sender, inline bot, the message replied to, forward source, media, text, delivery state, time. The reply line is the cell whose value is one of the opening lines of the name, comes after the sender or read state, and names someone before a colon, as Telegram's "In reply to {name}: {text}" does. No translated word is matched, so replies are found in any display language whose translation keeps that colon; where one does not, the reply is read in full as before. The message's own text is recognised as the cell just before the delivery state, and a link preview or location by a later cell that repeats it, so a colon in the message itself is not taken for a reply. A colon in a name can still mislead it, because the line alone does not show where such a name ends: a reply to someone whose name has a colon is read with the name cut at that colon, and a forwarded message whose source has a colon in its name can be read as a reply. Left Arrow always reads the whole line.
A global plug-in owns every command and resolves this add-on's app module by its qualified owner, avoiding the shared appModules/telegram.py lookup when another add-on wins it. Defining the commands once, in a plug-in that is always running, is what keeps a single reassignable entry per command in NVDA's Input Gestures dialog; each command checks the foreground itself and passes its gesture on when Telegram is not in front.
- Official Telegram channel: tdesktopnvda
- Telegram user group: tdesktopnvda_group
- Source code and issue tracking: keyang556/tdesktopnvda
- Developer contact: Ken Chang lindsay714322@gmail.com
- Telegram Desktop for Windows 7.0.1 or later.
- NVDA 2024.1 or later.
From this repository:
uv run sconsThe generated .nvda-addon package can be installed through NVDA's Add-on Store.