<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: wiscer</title>
    <description>The latest articles on DEV Community by wiscer (@wiscer).</description>
    <link>https://dev.to/wiscer</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F920132%2F947a98f7-175d-43dd-9def-ced068926b51.png</url>
      <title>DEV Community: wiscer</title>
      <link>https://dev.to/wiscer</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/wiscer"/>
    <language>en</language>
    <item>
      <title>ChatGPT Manual Screen Reader Audit</title>
      <dc:creator>wiscer</dc:creator>
      <pubDate>Wed, 01 Jul 2026 13:16:41 +0000</pubDate>
      <link>https://dev.to/wiscer/chatgpt-manual-screen-reader-audit-1d1f</link>
      <guid>https://dev.to/wiscer/chatgpt-manual-screen-reader-audit-1d1f</guid>
      <description>&lt;h2&gt;
  
  
  About
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Target URL:&lt;/strong&gt; &lt;a href="https://chatgpt.com" rel="noopener noreferrer"&gt;https://chatgpt.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This document records the findings of an ongoing manual screen reader audit&lt;br&gt;
conducted on &lt;a href="https://chatgpt.com" rel="noopener noreferrer"&gt;ChatGPT&lt;/a&gt;. Issues are identified through&lt;br&gt;
direct interaction using screen reader assistive technology.&lt;/p&gt;




&lt;h2&gt;
  
  
  Test Environment
&lt;/h2&gt;

&lt;p&gt;All testing sessions are conducted manually using the following environment.&lt;br&gt;
Versions reflect the latest available at the time of each audit session date.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Details&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Screen Reader&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;NVDA (latest version as of audit date)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Browser&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Google Chrome (latest version as of audit date)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Operating System&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Windows 11 (latest version as of audit date)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Issue Classification
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Classification&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Blocker / Critical&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Task is completely impossible for screen reader users. Immediate attention required.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Barrier / High&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Task is severely impaired. Significant effort or workaround required to proceed. Users may not perceive that something has happened or that a task is available.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Barrier / Medium&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Task is degraded but completable. Causes meaningful confusion or extra steps. Users may be uncertain about the current state or outcome of an interaction.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Friction / Low&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Task is completable with minor inconvenience. Cosmetic or edge case impact.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Audit Findings
&lt;/h2&gt;

&lt;h3&gt;
  
  
  2026-06-29
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Unaccessible Command Palette Options
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Classification:&lt;/strong&gt; Blocker / Critical&lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; After typing / in the prompt input, a command palette appears
containing a list of available commands. Users can navigate the command list
using the Up and Down Arrow keys.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Issue:&lt;/strong&gt; When moving focus between command -options, the screen reader does
not announce the currently focused option.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recommendation:&lt;/strong&gt; Describe the fix or remediation approach.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Missing 'Current Key Sequence' Text in the Keyboard Shortcut Dialog
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Classification:&lt;/strong&gt; Blocker / Critical&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; The Keyboard Shortcut dialog, opened with &lt;code&gt;Ctrl&lt;/code&gt; + &lt;code&gt;/&lt;/code&gt;, shows
a table of shortcuts in three columns. The third column is intended to display
the currently assigned key sequence for each action.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Issue:&lt;/strong&gt; When navigating to the current key sequence column, only a 'Change
key sequence' button is exposed. There is no information about the actual key
combination assigned to the shortcut.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Suggestion:&lt;/strong&gt; Display the active shortcut text in each row, for example
'Open New Chat — &lt;code&gt;Ctrl + Shift + O&lt;/code&gt;', so users can hear or read the current
key sequence.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Missing Reading of Received New Response
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Classification:&lt;/strong&gt; Barrier / High&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; After submitting a prompt, ChatGPT may take some time to
finish generating the response. The app announces when the response is
complete, which is helpful, but users still cannot immediately review the full
response.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Issue:&lt;/strong&gt; Screen reader users must switch into browse or virtual cursor mode
and use a key sequence to read the completed response, then manually return to
the chat input before continuing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recommendation:&lt;/strong&gt; Expose the full response to assistive technology via a
screen-reader-only element with &lt;code&gt;aria-live&lt;/code&gt;, or ensure the response area is
automatically announced when generation ends.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Missing Announcement of the Focused Chat Title in the Search Chats Dialog
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Classification:&lt;/strong&gt; Friction / Low&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; The Search Chats dialog opens with &lt;code&gt;Ctrl&lt;/code&gt; + &lt;code&gt;/&lt;/code&gt;, and focus is
placed in the search input at the top. Below it, a list of chats is displayed,
showing either all chats or the results of the current search. While focus
remains in the search field, users can move through the list with the Up and
Down Arrow keys to select a chat without moving focus away.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Issue:&lt;/strong&gt; As the highlighted chat changes, the screen reader announces the
contents of the search input rather than the currently highlighted chat title.
This makes it harder for users to confirm which chat is selected before
opening it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recommendation:&lt;/strong&gt; Announce the highlighted chat title when the selection
changes, for example by temporarily exposing it in an element with an
&lt;code&gt;aria-live&lt;/code&gt; region.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Missing Notification When a Dialog Closes
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Classification:&lt;/strong&gt; Friction / Low&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Dialogs such as the Search Chats and Keyboard Shortcuts
dialogs can be closed by pressing the &lt;code&gt;Escape&lt;/code&gt; key.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Issue:&lt;/strong&gt; Some users may not be aware that the dialog has closed, which can
make the interaction feel abrupt or confusing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Suggestion:&lt;/strong&gt; Announce the dialog closing in a live region, for example with
a screen-reader-only element using &lt;code&gt;aria-live&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Missing Hint to Close Menu in Pop Up Menus
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Classification:&lt;/strong&gt; Friction / Low&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; There few pop up menus that open from related button, like
'Profile Menu', 'Organize Chats Menu', and 'Model Selector Menu'. The menus
appears as a modal-like dialog with focus trap behavior, which is a good
pattern for this interaction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Issue:&lt;/strong&gt; Users may not realize how to close the menu because there is no
spoken or visible hint that Escape will dismiss it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Suggestion:&lt;/strong&gt; Add hidden screen-reader text or visible instructions in the
menu that clearly states 'Press Escape to close'.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Resolution via PageLive
&lt;/h2&gt;

&lt;p&gt;Some of the issues identified in this audit are not straightforward to resolve&lt;br&gt;
at the source — either because they require changes to the target application&lt;br&gt;
itself, or because a native fix is unlikely to be prioritised. For those cases,&lt;br&gt;
potential workaround approaches are explored in&lt;br&gt;
&lt;a href="https://wiscer.org/pagelive/chatgpt/" rel="noopener noreferrer"&gt;PageLive for ChatGPT&lt;/a&gt; articles, and&lt;br&gt;
implementations are shipped as part of the&lt;br&gt;
&lt;strong&gt;&lt;a href="https://wiscer.org/pagelive" rel="noopener noreferrer"&gt;PageLive Chrome extension&lt;/a&gt;&lt;/strong&gt;, which bridges&lt;br&gt;
missing accessibility features for screen reader users in selected web&lt;br&gt;
applications.&lt;/p&gt;

</description>
      <category>a11y</category>
      <category>nvda</category>
      <category>pagelive</category>
    </item>
    <item>
      <title>Screen Reader Mitigation Analysis on Gemini</title>
      <dc:creator>wiscer</dc:creator>
      <pubDate>Sat, 07 Mar 2026 13:35:14 +0000</pubDate>
      <link>https://dev.to/wiscer/screen-reader-experience-mitigation-on-gemini-2all</link>
      <guid>https://dev.to/wiscer/screen-reader-experience-mitigation-on-gemini-2all</guid>
      <description>&lt;p&gt;&lt;em&gt;7 March 2026&lt;/em&gt; — &lt;strong&gt;PageLive Project&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;This article describes how PageLive addresses the barriers identified in the companion &lt;a href="https://dev.to/wiscer/screen-reader-experience-analysis-on-gemini-ac9"&gt;Screen Reader Experience Analysis on Gemini&lt;/a&gt;. PageLive is a Chrome extension that operates at the browser layer, compensating for accessibility gaps without modifying the Gemini application itself. Not all barriers are fully resolved; where PageLive provides only partial mitigation, this is noted explicitly.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Scope
&lt;/h2&gt;

&lt;p&gt;This article corresponds directly to the findings in the Screen Reader Experience Analysis on Gemini. Findings are referenced by their original numbering. Mitigations were tested using NVDA on Chrome on a Windows desktop.&lt;/p&gt;

&lt;p&gt;PageLive can be installed for free on the &lt;a href="https://chromewebstore.google.com/detail/pagelive/kachdjbdcmofjmaoklcfofbcnlakfnbb" rel="noopener noreferrer"&gt;PageLive chrome webstore page&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Mitigations
&lt;/h2&gt;

&lt;h3&gt;
  
  
  2.1 Response Completion Is Not Announced
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Analysis Severity: Barrier&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Mitigation Status: Addressed&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;PageLive monitors the page for new assistant responses and announces their availability to the screen reader. The user is notified when generation has completed and new content is ready to read, without needing to navigate to the chat area or guess whether output is still in progress.&lt;/p&gt;

&lt;p&gt;For cases where the user wishes to retrieve a response on demand, pressing &lt;code&gt;Ctrl + Shift + Enter&lt;/code&gt; reads the most recent Gemini response without changing navigation context. This is useful when the user has moved focus elsewhere and does not wish to traverse back to the chat area manually.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.2 Formulas and Symbols Are Not Read by the Screen Reader
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Analysis Severity: Blocker&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Mitigation Status: Addressed&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;PageLive processes formula and symbol content within Gemini responses and exposes it in a form that the screen reader can read. Without PageLive, these elements are absent from the accessibility tree and produce no output. With PageLive, the user receives the content of formulas and symbols as part of normal response reading.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.3 Dialog Appearance Is Not Announced
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Analysis Severity: Barrier&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Mitigation Status: Addressed&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;PageLive announces when dialogs open or close within Gemini, providing event-driven status feedback. The user is informed that a dialog has appeared without needing to navigate to discover it.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.4 No Means of Reviewing Chat Flow in Long Conversations
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Analysis Severity: Barrier&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Mitigation Status: Addressed&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;PageLive introduces ContentMap, opened with &lt;code&gt;Ctrl + M&lt;/code&gt;, which presents a structured summary of the prompts and responses in the current conversation. The user can navigate the list of items and press &lt;code&gt;Enter&lt;/code&gt; on any entry to jump directly to that position in the chat history.&lt;/p&gt;

&lt;p&gt;This provides an orientation mechanism equivalent in function to what sighted users derive from scanning the visual layout of the conversation, without requiring sequential traversal of the entire chat.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.5 Missing Keyboard Shortcuts for Frequently Used Actions
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Analysis Severity: Friction&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Mitigation Status: Addressed&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;PageLive introduces keyboard shortcuts for the actions identified as missing in the analysis:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Shortcut&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Jump to chat input&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Shift + Esc&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Start a new chat&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Ctrl + Alt + O&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Delete the current chat&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Ctrl + Shift + Backspace&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Announce the last response&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Ctrl + Shift + Enter&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Open Page Info for chat navigation context&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Alt + /&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The delete shortcut opens a confirmation dialog, allowing the user to confirm or cancel before the action is completed. The Page Info dialog, opened with &lt;code&gt;Alt + /&lt;/code&gt;, provides active chat metadata and a means of moving focus directly to the current chat in the sidebar list by pressing &lt;code&gt;Enter&lt;/code&gt; on the chat title control.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Summary of Mitigations
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Finding&lt;/th&gt;
&lt;th&gt;Analysis Severity&lt;/th&gt;
&lt;th&gt;Mitigation Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2.1&lt;/td&gt;
&lt;td&gt;Response completion not announced&lt;/td&gt;
&lt;td&gt;Barrier&lt;/td&gt;
&lt;td&gt;Addressed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2.2&lt;/td&gt;
&lt;td&gt;Formulas and symbols not read by screen reader&lt;/td&gt;
&lt;td&gt;Blocker&lt;/td&gt;
&lt;td&gt;Addressed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2.3&lt;/td&gt;
&lt;td&gt;Dialog appearance not announced&lt;/td&gt;
&lt;td&gt;Barrier&lt;/td&gt;
&lt;td&gt;Addressed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2.4&lt;/td&gt;
&lt;td&gt;No means of reviewing chat flow in long conversations&lt;/td&gt;
&lt;td&gt;Barrier&lt;/td&gt;
&lt;td&gt;Addressed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2.5&lt;/td&gt;
&lt;td&gt;Missing keyboard shortcuts for common actions&lt;/td&gt;
&lt;td&gt;Friction&lt;/td&gt;
&lt;td&gt;Addressed&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  4. Further Reading
&lt;/h2&gt;

&lt;p&gt;This article is part of the PageLive project's documentation for Gemini. The findings referenced throughout this article are documented in full in the companion &lt;a href="https://dev.to/wiscer/screen-reader-experience-analysis-on-gemini-ac9"&gt;Screen Reader Experience Analysis on Gemini&lt;/a&gt;. For a full list of keyboard shortcuts and features PageLive provides for Gemini, see the &lt;a href="https://wiscer.org/pagelive/gemini" rel="noopener noreferrer"&gt;PageLive for Gemini documentation&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;— End of Article —&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Disclaimers
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;This article was produced as part of the PageLive project, which develops keyboard shortcut and screen reader support for AI chat interfaces. The author develops PageLive, the extension described in this document.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;PageLive can be installed for free on the &lt;a href="https://chromewebstore.google.com/detail/pagelive/kachdjbdcmofjmaoklcfofbcnlakfnbb" rel="noopener noreferrer"&gt;PageLive chrome webstore page&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The findings, severity classifications, and testing observations referenced in this article are the author's own, based on manual testing with NVDA on Chrome. AI assistance was used solely to shape the writing style of this document.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>pagelive</category>
      <category>a11y</category>
      <category>gemini</category>
      <category>screenreader</category>
    </item>
    <item>
      <title>Screen Reader Experience Analysis on Gemini</title>
      <dc:creator>wiscer</dc:creator>
      <pubDate>Sat, 07 Mar 2026 13:29:21 +0000</pubDate>
      <link>https://dev.to/wiscer/screen-reader-experience-analysis-on-gemini-ac9</link>
      <guid>https://dev.to/wiscer/screen-reader-experience-analysis-on-gemini-ac9</guid>
      <description>&lt;p&gt;&lt;em&gt;7 March 2026&lt;/em&gt; — &lt;strong&gt;PageLive Project&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;This report documents the difficulties a screen reader user encounters when using Gemini. Testing was conducted using NVDA on Chrome on a Windows desktop. While the findings are based on NVDA, the barriers described are expected to affect users of other screen readers, including JAWS, in similar ways. While Gemini is usable with a screen reader, several interactions require significant extra effort or guesswork that sighted users do not face.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Scope and Testing Environment
&lt;/h2&gt;

&lt;p&gt;This analysis evaluates the screen reader experience on Gemini as encountered during manual testing. The scope is limited to interactions that are part of routine use: composing and reading conversations, navigating between chats, and accessing application controls.&lt;/p&gt;

&lt;p&gt;Findings are not evaluated against WCAG criteria. The focus is on the practical experience of a screen reader user during everyday tasks.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Screen Reader&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;NVDA 2025.3.3.54605&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Browser&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Chrome 145.0.7632.117&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Platform&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Windows Desktop&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Interface Tested&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;gemini.google.com web application&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Findings are classified by their impact on task completion:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Blocker&lt;/strong&gt; — The task cannot be completed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Barrier&lt;/strong&gt; — The task can be completed, but requires significant additional effort, guesswork, or repeated keystrokes that are not required of sighted users.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Friction&lt;/strong&gt; — The task works as expected, but the experience is degraded in a way that compounds over extended use.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Findings
&lt;/h2&gt;

&lt;h3&gt;
  
  
  2.1 Response Completion Is Not Announced
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Severity: Barrier&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When Gemini finishes generating a response, no announcement is made to the screen reader. The response content is not placed in a live region, so the screen reader does not notify the user that new content is available or that generation has completed.&lt;/p&gt;

&lt;p&gt;As a result, the user has no reliable way to know when it is appropriate to begin reading. The user must manually navigate to the chat area, attempt to locate the new response, and determine through repeated keystrokes whether generation has finished or is still in progress. This interaction occurs on every single exchange, making it the most consequential barrier in routine use.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.2 Formulas and Symbols Are Not Read by the Screen Reader
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Severity: Blocker&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When a Gemini response contains mathematical formulas or symbolic notation, the screen reader does not read these elements. They are invisible in the accessibility tree, meaning the user receives no indication that content is present at those positions in the response.&lt;/p&gt;

&lt;p&gt;A user relying on a screen reader cannot access any part of a response that contains formulas or symbols. For conversations involving mathematics, science, or other notation-heavy topics, this renders significant portions of Gemini's output completely inaccessible.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.3 Dialog Appearance Is Not Announced
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Severity: Barrier&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When dialogs open within Gemini, the screen reader does not announce their appearance and focus is not moved into them. The user receives no indication that anything has changed on screen and must discover through navigation that a dialog has appeared.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.4 No Means of Reviewing Chat Flow and Navigation Within Long Conversations
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Severity: Barrier&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Gemini does not provide a structured means for a screen reader user to review the flow of a conversation or navigate directly to a specific prompt or response within a long chat. The user must traverse the entire chat history sequentially to locate a previous exchange, with no mechanism to jump to a known position.&lt;/p&gt;

&lt;p&gt;For sighted users, the visual layout of the conversation provides immediate orientation. For screen reader users, long conversations require a proportionally greater traversal effort with no compensating navigational aid.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.5 Missing Keyboard Shortcuts for Frequently Used Actions
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Severity: Friction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The following actions do not have keyboard shortcuts in Gemini:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Jump to the chat input field&lt;/li&gt;
&lt;li&gt;Start a new chat&lt;/li&gt;
&lt;li&gt;Delete the current chat&lt;/li&gt;
&lt;li&gt;Announce the last response&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each of these actions is available through the interface but requires the user to locate the relevant control through navigation. For a sighted user, these controls are immediately visible. For a screen reader user, the location of a button is not always remembered between sessions, and finding it requires traversal through surrounding content.&lt;/p&gt;

&lt;p&gt;The absence of shortcuts does not prevent these actions. However, the cumulative effect of repeated traversal meaningfully degrades the experience of extended use.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Summary of Findings
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Finding&lt;/th&gt;
&lt;th&gt;Severity&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2.1&lt;/td&gt;
&lt;td&gt;Response completion not announced&lt;/td&gt;
&lt;td&gt;Barrier&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2.2&lt;/td&gt;
&lt;td&gt;Formulas and symbols not read by screen reader&lt;/td&gt;
&lt;td&gt;Blocker&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2.3&lt;/td&gt;
&lt;td&gt;Dialog appearance not announced&lt;/td&gt;
&lt;td&gt;Barrier&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2.4&lt;/td&gt;
&lt;td&gt;No means of reviewing chat flow in long conversations&lt;/td&gt;
&lt;td&gt;Barrier&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2.5&lt;/td&gt;
&lt;td&gt;Missing keyboard shortcuts for common actions&lt;/td&gt;
&lt;td&gt;Friction&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  4. Further Reading
&lt;/h2&gt;

&lt;p&gt;This article is part of the PageLive project's documentation for Gemini. A companion article, &lt;a href="https://dev.to/wiscer/screen-reader-experience-mitigation-on-gemini-2all"&gt;Screen Reader Experience Mitigation on Gemini&lt;/a&gt;, describes how PageLive addresses the barriers identified above. For a full list of keyboard shortcuts and features PageLive provides for Gemini, see the &lt;a href="https://wiscer.org/pagelive/gemini" rel="noopener noreferrer"&gt;PageLive for Gemini documentation&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;— End of Article —&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Disclaimers
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;This analysis was conducted as part of the PageLive project, which develops keyboard shortcut and screen reader support for AI chat interfaces. The author develops PageLive, a Chrome extension that addresses several of the barriers described in this report. A companion Screen Reader Experience Mitigation documents the approaches PageLive applies to each finding.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;PageLive can be installed for free on the &lt;a href="https://chromewebstore.google.com/detail/pagelive/kachdjbdcmofjmaoklcfofbcnlakfnbb" rel="noopener noreferrer"&gt;PageLive chrome webstore page&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The findings, severity classifications, and testing observations in this report are the author's own, based on manual testing with NVDA on Chrome. AI assistance was used solely to shape the writing style of this document.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>pagelive</category>
      <category>a11y</category>
      <category>gemini</category>
      <category>screenreader</category>
    </item>
    <item>
      <title>Screen Reader Mitigation Analysis on Grok</title>
      <dc:creator>wiscer</dc:creator>
      <pubDate>Sat, 07 Mar 2026 12:52:38 +0000</pubDate>
      <link>https://dev.to/wiscer/screen-reader-experience-mitigation-on-grok-35j4</link>
      <guid>https://dev.to/wiscer/screen-reader-experience-mitigation-on-grok-35j4</guid>
      <description>&lt;p&gt;&lt;em&gt;7 March 2026&lt;/em&gt; — &lt;strong&gt;PageLive Project&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;This article describes how PageLive addresses the barriers identified in the companion &lt;a href="https://dev.to/wiscer/screen-reader-experience-analysis-on-grok-3iag"&gt;Screen Reader Experience Analysis on Grok&lt;/a&gt;. PageLive is a Chrome extension that operates at the browser layer, compensating for accessibility gaps without modifying the Grok application itself. Not all barriers are fully resolved; where PageLive provides only partial mitigation, this is noted explicitly.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Scope
&lt;/h2&gt;

&lt;p&gt;This article corresponds directly to the findings in the Screen Reader Experience Analysis on Grok. Findings are referenced by their original numbering. Mitigations were tested using NVDA on Chrome on a Windows desktop.&lt;/p&gt;

&lt;p&gt;PageLive can be installed for free on the &lt;a href="https://chromewebstore.google.com/detail/pagelive/kachdjbdcmofjmaoklcfofbcnlakfnbb" rel="noopener noreferrer"&gt;PageLive chrome webstore page&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Mitigations
&lt;/h2&gt;

&lt;h3&gt;
  
  
  2.1 Response Completion Is Not Announced
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Analysis Severity: Barrier&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Mitigation Status: Addressed&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;PageLive monitors the page for new assistant responses and announces their availability to the screen reader. The user is notified when generation has completed and new content is ready to read, without needing to navigate to the chat area or guess whether output is still in progress.&lt;/p&gt;

&lt;p&gt;For cases where the user wishes to retrieve a response on demand, pressing &lt;code&gt;Ctrl + Shift + Enter&lt;/code&gt; reads the most recent Grok response without changing navigation context. This is useful when the user has moved focus elsewhere and does not wish to traverse back to the chat area manually.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.2 The "Show All" Button in the All Chats Dialog Is Not Accessible
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Analysis Severity: Blocker&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Mitigation Status: Not Addressed&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The inaccessibility of the "Show All" button is a limitation of the Grok application itself. PageLive operates at the browser layer and does not reconstruct or replace the All Chats dialog. The actions revealed by this button — including Switch Theme and Change Language — remain inaccessible to screen reader users.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.3 Missing Keyboard Shortcuts for Frequently Used Actions
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Analysis Severity: Friction&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Mitigation Status: Addressed&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;PageLive introduces keyboard shortcuts for the actions identified as missing in the analysis:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Shortcut&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Jump to chat input&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Shift + Esc&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Start a new chat&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Ctrl + Alt + O&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Delete the current chat&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Ctrl + Shift + Backspace&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Announce the last response&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Ctrl + Shift + Enter&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Open Page Info for chat navigation context&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Alt + /&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The delete shortcut opens a confirmation dialog, allowing the user to confirm or cancel before the action is completed. The Page Info dialog, opened with &lt;code&gt;Alt + /&lt;/code&gt;, provides active chat metadata and a means of moving focus directly to the current chat in the sidebar list by pressing &lt;code&gt;Enter&lt;/code&gt; on the chat title control.&lt;/p&gt;

&lt;p&gt;Toggle sidebar and open chat list shortcuts are not currently provided by PageLive. Navigation to other chats still requires traversal from the point where focus lands in the sidebar.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Summary of Mitigations
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Finding&lt;/th&gt;
&lt;th&gt;Analysis Severity&lt;/th&gt;
&lt;th&gt;Mitigation Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2.1&lt;/td&gt;
&lt;td&gt;Response completion not announced&lt;/td&gt;
&lt;td&gt;Barrier&lt;/td&gt;
&lt;td&gt;Addressed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2.2&lt;/td&gt;
&lt;td&gt;"Show All" button in All Chats dialog not accessible&lt;/td&gt;
&lt;td&gt;Blocker&lt;/td&gt;
&lt;td&gt;Not Addressed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2.3&lt;/td&gt;
&lt;td&gt;Missing keyboard shortcuts for common actions&lt;/td&gt;
&lt;td&gt;Friction&lt;/td&gt;
&lt;td&gt;Partially Addressed&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  4. Further Reading
&lt;/h2&gt;

&lt;p&gt;This article is part of the PageLive project's documentation for Grok. The findings referenced throughout this article are documented in full in the companion &lt;a href="https://dev.to/wiscer/screen-reader-experience-analysis-on-grok-3iag"&gt;Screen Reader Experience Analysis on Grok&lt;/a&gt;. For a full list of keyboard shortcuts and features PageLive provides for Grok, see the &lt;a href="https://wiscer.org/pagelive/grok" rel="noopener noreferrer"&gt;PageLive for Grok documentation&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;— End of Article —&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Disclaimers
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;This article was produced as part of the PageLive project, which develops keyboard shortcut and screen reader support for AI chat interfaces. The author develops PageLive, the extension described in this document.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;PageLive can be installed for free on the &lt;a href="https://chromewebstore.google.com/detail/pagelive/kachdjbdcmofjmaoklcfofbcnlakfnbb" rel="noopener noreferrer"&gt;PageLive chrome webstore page&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The findings, severity classifications, and testing observations referenced in this article are the author's own, based on manual testing with NVDA on Chrome. AI assistance was used solely to shape the writing style of this document.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>pagelive</category>
      <category>a11y</category>
      <category>grok</category>
      <category>screenreader</category>
    </item>
    <item>
      <title>Screen Reader Experience Analysis on Grok</title>
      <dc:creator>wiscer</dc:creator>
      <pubDate>Sat, 07 Mar 2026 12:36:49 +0000</pubDate>
      <link>https://dev.to/wiscer/screen-reader-experience-analysis-on-grok-3iag</link>
      <guid>https://dev.to/wiscer/screen-reader-experience-analysis-on-grok-3iag</guid>
      <description>&lt;p&gt;&lt;em&gt;7 March 2026&lt;/em&gt; — &lt;strong&gt;PageLive Project&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;This report documents the difficulties a screen reader user encounters when using Grok. Testing was conducted using NVDA on Chrome on a Windows desktop. While the findings are based on NVDA, the barriers described are expected to affect users of other screen readers, including JAWS, in similar ways. While Grok is usable with a screen reader, several interactions require significant extra effort or guesswork that sighted users do not face.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Scope and Testing Environment
&lt;/h2&gt;

&lt;p&gt;This analysis evaluates the screen reader experience on Grok as encountered during manual testing. The scope is limited to interactions that are part of routine use: composing and reading conversations, navigating between chats, and accessing application controls.&lt;/p&gt;

&lt;p&gt;Findings are not evaluated against WCAG criteria. The focus is on the practical experience of a screen reader user during everyday tasks.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Screen Reader&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;NVDA 2025.3.3.54605&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Browser&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Chrome 145.0.7632.117&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Platform&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Windows Desktop&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Interface Tested&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;grok.com web application&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Findings are classified by their impact on task completion:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Blocker&lt;/strong&gt; — The task cannot be completed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Barrier&lt;/strong&gt; — The task can be completed, but requires significant additional effort, guesswork, or repeated keystrokes that are not required of sighted users.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Friction&lt;/strong&gt; — The task works as expected, but the experience is degraded in a way that compounds over extended use.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Findings
&lt;/h2&gt;

&lt;h3&gt;
  
  
  2.1 Response Completion Is Not Announced
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Severity: Barrier&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When Grok finishes generating a response, no announcement is made to the screen reader. The response content is not placed in a live region, so the screen reader does not notify the user that new content is available or that generation has completed.&lt;/p&gt;

&lt;p&gt;As a result, the user has no reliable way to know when it is appropriate to begin reading. The user must manually navigate to the chat area, attempt to locate the new response, and determine through repeated keystrokes whether generation has finished or is still in progress. This interaction occurs on every single exchange, making it the most consequential barrier in routine use.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.2 The "Show All" Button in the All Chats Dialog Is Not Accessible
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Severity: Blocker&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The All Chats dialog in Grok contains a "Show All" button that reveals additional application actions beyond the default view. By default, only the "Create New Chat" action is visible. Activating "Show All" exposes further actions including Switch Theme, Change Language, and others.&lt;/p&gt;

&lt;p&gt;The "Show All" button is neither perceivable nor operable by a screen reader. The button is not exposed in the accessibility tree, meaning the screen reader does not announce its presence and the user has no means of activating it through keyboard navigation.&lt;/p&gt;

&lt;p&gt;As a result, the actions revealed by this button — Switch Theme, Change Language, and any others — are permanently inaccessible to screen reader users. The task of discovering and using these actions cannot be completed.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.3 Missing Keyboard Shortcuts for Frequently Used Actions
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Severity: Friction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The following actions do not have keyboard shortcuts in Grok:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Delete the current chat&lt;/li&gt;
&lt;li&gt;Toggle the sidebar&lt;/li&gt;
&lt;li&gt;Open the chat list to allow chat switching&lt;/li&gt;
&lt;li&gt;Start a new chat&lt;/li&gt;
&lt;li&gt;Announce the last response&lt;/li&gt;
&lt;li&gt;Jump to the chat input field&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each of these actions is available through the interface but requires the user to locate the relevant control through navigation. For a sighted user, these controls are immediately visible. For a screen reader user, the location of a button is not always remembered between sessions, and finding it requires traversal through surrounding content.&lt;/p&gt;

&lt;p&gt;The absence of shortcuts does not prevent these actions. However, the cumulative effect of repeated traversal meaningfully degrades the experience of extended use, particularly given the number of actions affected.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Summary of Findings
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Finding&lt;/th&gt;
&lt;th&gt;Severity&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2.1&lt;/td&gt;
&lt;td&gt;Response completion not announced&lt;/td&gt;
&lt;td&gt;Barrier&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2.2&lt;/td&gt;
&lt;td&gt;"Show All" button in All Chats dialog not accessible&lt;/td&gt;
&lt;td&gt;Blocker&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2.3&lt;/td&gt;
&lt;td&gt;Missing keyboard shortcuts for common actions&lt;/td&gt;
&lt;td&gt;Friction&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  4. Further Reading
&lt;/h2&gt;

&lt;p&gt;This article is part of the PageLive project's documentation for Grok. A companion article, &lt;a href="https://dev.to/wiscer/screen-reader-experience-mitigation-on-grok-35j4"&gt;Screen Reader Experience Mitigation on Grok&lt;/a&gt;, describes how PageLive addresses the barriers identified above. For a full list of keyboard shortcuts and features PageLive provides for Grok, see the &lt;a href="https://wiscer.org/pagelive/grok" rel="noopener noreferrer"&gt;PageLive for Grok documentation&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;— End of Article —&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Disclaimers
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;This analysis was conducted as part of the PageLive project, which develops keyboard shortcut and screen reader support for AI chat interfaces. The author develops PageLive, a Chrome extension that addresses several of the barriers described in this report. A companion Screen Reader Experience Mitigation documents the approaches PageLive applies to each finding.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;PageLive can be installed for free on the &lt;a href="https://chromewebstore.google.com/detail/pagelive/kachdjbdcmofjmaoklcfofbcnlakfnbb" rel="noopener noreferrer"&gt;PageLive chrome webstore page&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The findings, severity classifications, and testing observations in this report are the author's own, based on manual testing with NVDA on Chrome. AI assistance was used solely to shape the writing style of this document.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>pagelive</category>
      <category>a11y</category>
      <category>grok</category>
      <category>screenreader</category>
    </item>
    <item>
      <title>Screen Reader Experience Mitigation on claude.ai</title>
      <dc:creator>wiscer</dc:creator>
      <pubDate>Thu, 05 Mar 2026 13:03:30 +0000</pubDate>
      <link>https://dev.to/wiscer/screen-reader-experience-mitigation-on-claudeai-4khl</link>
      <guid>https://dev.to/wiscer/screen-reader-experience-mitigation-on-claudeai-4khl</guid>
      <description>&lt;p&gt;&lt;em&gt;3 March 2026&lt;/em&gt; — &lt;strong&gt;PageLive Project&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;This article describes how PageLive addresses the barriers identified in the companion Screen Reader Experience Analysis on claude.ai. PageLive is a Chrome extension that operates at the browser layer, compensating for accessibility gaps without modifying the claude.ai application itself. Not all barriers are fully resolved; where PageLive provides only partial mitigation, this is noted explicitly.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Scope
&lt;/h2&gt;

&lt;p&gt;This article corresponds directly to the findings in the Screen Reader Experience Analysis on claude.ai. Findings are referenced by their original numbering. Mitigations were tested using NVDA on Chrome on a Windows desktop.&lt;/p&gt;

&lt;p&gt;PageLive can be installed for free on the &lt;a href="https://chromewebstore.google.com/detail/pagelive/kachdjbdcmofjmaoklcfofbcnlakfnbb" rel="noopener noreferrer"&gt;PageLive chrome webstore page&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Mitigations
&lt;/h2&gt;

&lt;h3&gt;
  
  
  2.1 Response Completion Is Not Announced
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Analysis Severity: Barrier&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Mitigation Status: Addressed&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;PageLive monitors the page for new assistant responses and announces their availability to the screen reader. The user is notified when generation has completed and new content is ready to read, without needing to navigate to the chat area or guess whether output is still in progress.&lt;/p&gt;

&lt;p&gt;For cases where the user wishes to retrieve a response on demand, pressing &lt;code&gt;Ctrl + Shift + Enter&lt;/code&gt; reads the most recent response without changing navigation context. This is useful when the user has moved focus elsewhere and does not wish to traverse back to the chat area manually.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.2 The "Keyboard Shortcuts" Dialog Is Not Accessible
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Analysis Severity: Blocker&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Mitigation Status: Partially Addressed&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.2.1 Dialog appearance not announced — Addressed.&lt;/strong&gt; PageLive announces when the Keyboard Shortcuts dialog opens and closes, providing event-driven status feedback. The user is informed that the dialog has appeared without needing to navigate to discover it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.2.2 Dialog content not reachable — Not Addressed.&lt;/strong&gt; The underlying inaccessibility of the dialog's content is a limitation of the claude.ai application itself. PageLive operates at the browser layer and does not reconstruct or replace the dialog. The list of keyboard shortcuts within the dialog remains unreachable through the virtual cursor.&lt;/p&gt;

&lt;p&gt;Users who require this information are directed to the &lt;a href="https://wiscer.org/pagelive/claude/" rel="noopener noreferrer"&gt;PageLive for Claude documentation page&lt;/a&gt;, which lists all available shortcuts in an accessible format.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.3 The "More Options" Menu Does Not Announce Its Appearance
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Analysis Severity: Barrier&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Mitigation Status: Not Addressed&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;PageLive does not currently intercept the "More Options" popup menu in the chat list sidebar. The menu appearance remains unannounced, and the user still has no confirmation that a menu has appeared after pressing the button.&lt;/p&gt;

&lt;p&gt;This remains an open barrier for screen reader users who need to access per-chat actions such as Star and Rename.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.4 The Sidebar Lacks Sufficient Landmarks for Direct Navigation
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Analysis Severity: Barrier&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Mitigation Status: Partially Addressed&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;PageLive provides the Page Info dialog, opened with &lt;code&gt;Alt + /&lt;/code&gt;, which surfaces active chat metadata and quick navigation context. From within the Page Info dialog, pressing &lt;code&gt;Enter&lt;/code&gt; on the chat title control moves focus directly to the current chat in the sidebar list. This provides a reliable, repeatable path to the chat list without requiring the user to traverse the sidebar from the top.&lt;/p&gt;

&lt;p&gt;This mitigation applies specifically to navigating to the currently active chat. Navigating to other chats in the list still requires traversal from the point where focus lands.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.5 Missing Keyboard Shortcuts for Frequently Used Actions
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Analysis Severity: Friction&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Mitigation Status: Addressed&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;PageLive introduces keyboard shortcuts for the three actions identified as missing in the analysis:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Shortcut&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Jump to chat input&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Shift + Esc&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Start a new chat&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Ctrl + Alt + O&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Delete the current chat&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Ctrl + Shift + Backspace&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The delete shortcut opens a confirmation dialog, allowing the user to confirm or cancel before the action is completed.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.6 Chat List Items Do Not Expose Metadata
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Analysis Severity: Friction&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Mitigation Status: Partially Addressed&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Page Info dialog, opened with &lt;code&gt;Alt + /&lt;/code&gt;, provides metadata for the currently active chat. This reduces the reliance on the chat title alone when assessing a conversation. Metadata exposure for all items in the chat list, rather than only the active chat, is not currently provided.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Summary of Mitigations
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Finding&lt;/th&gt;
&lt;th&gt;Analysis Severity&lt;/th&gt;
&lt;th&gt;Mitigation Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2.1&lt;/td&gt;
&lt;td&gt;Response completion not announced&lt;/td&gt;
&lt;td&gt;Barrier&lt;/td&gt;
&lt;td&gt;Addressed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2.2&lt;/td&gt;
&lt;td&gt;Keyboard Shortcuts dialog not accessible&lt;/td&gt;
&lt;td&gt;Blocker&lt;/td&gt;
&lt;td&gt;Partially Addressed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2.3&lt;/td&gt;
&lt;td&gt;"More Options" menu appearance not announced&lt;/td&gt;
&lt;td&gt;Barrier&lt;/td&gt;
&lt;td&gt;Not Addressed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2.4&lt;/td&gt;
&lt;td&gt;Sidebar lacks landmarks for chat list navigation&lt;/td&gt;
&lt;td&gt;Barrier&lt;/td&gt;
&lt;td&gt;Partially Addressed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2.5&lt;/td&gt;
&lt;td&gt;Missing keyboard shortcuts for common actions&lt;/td&gt;
&lt;td&gt;Friction&lt;/td&gt;
&lt;td&gt;Addressed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2.6&lt;/td&gt;
&lt;td&gt;Chat list items lack metadata&lt;/td&gt;
&lt;td&gt;Friction&lt;/td&gt;
&lt;td&gt;Partially Addressed&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  4. Further Reading
&lt;/h2&gt;

&lt;p&gt;This article is part of the PageLive project's documentation for claude.ai. The findings referenced throughout this article are documented in full in the companion &lt;a href="https://dev.to/wiscer/screen-reader-experience-analysis-on-claudeai-433a"&gt;Screen Reader Experience Analysis on claude.ai&lt;/a&gt;. For a full list of keyboard shortcuts and features PageLive provides for claude.ai, see the &lt;a href="https://wiscer.org/pagelive/claude" rel="noopener noreferrer"&gt;PageLive for Claude documentation&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;— End of Article —&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Disclaimers
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;This article was produced as part of the PageLive project, which develops keyboard shortcut and screen reader support for AI chat interfaces. The author develops PageLive, the extension described in this document.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;PageLive can be installed for free on the &lt;a href="https://chromewebstore.google.com/detail/pagelive/kachdjbdcmofjmaoklcfofbcnlakfnbb" rel="noopener noreferrer"&gt;PageLive chrome webstore page&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The findings, severity classifications, and testing observations referenced in this article are the author's own, based on manual testing with NVDA on Chrome. AI assistance was used solely to shape the writing style of this document.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>pagelive</category>
      <category>a11y</category>
      <category>claude</category>
      <category>screenreader</category>
    </item>
    <item>
      <title>Screen Reader Experience Analysis on claude.ai</title>
      <dc:creator>wiscer</dc:creator>
      <pubDate>Wed, 04 Mar 2026 07:37:34 +0000</pubDate>
      <link>https://dev.to/wiscer/screen-reader-experience-analysis-on-claudeai-433a</link>
      <guid>https://dev.to/wiscer/screen-reader-experience-analysis-on-claudeai-433a</guid>
      <description>&lt;p&gt;&lt;em&gt;3 March 2026&lt;/em&gt; — &lt;strong&gt;PageLive Project&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;This report documents the difficulties a screen reader user encounters when using claude.ai. Testing was conducted using NVDA on Chrome on a Windows desktop. While the findings are based on NVDA, the barriers described are expected to affect users of other screen readers, including JAWS, in similar ways. While claude.ai is usable with a screen reader, several interactions require significant extra effort or guesswork that sighted users do not face.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Scope and Testing Environment
&lt;/h2&gt;

&lt;p&gt;This analysis evaluates the screen reader experience on claude.ai as encountered during manual testing. The scope is limited to interactions that are part of routine use: composing and reading conversations, navigating between chats, and accessing application controls.&lt;/p&gt;

&lt;p&gt;Findings are not evaluated against WCAG criteria. The focus is on the practical experience of a screen reader user during everyday tasks.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Screen Reader&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;NVDA 2025.3.3.54605&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Browser&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Chrome 145.0.7632.117&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Platform&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Windows Desktop&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Interface Tested&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;claude.ai web application&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Findings are classified by their impact on task completion:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Blocker&lt;/strong&gt; — The task cannot be completed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Barrier&lt;/strong&gt; — The task can be completed, but requires significant additional effort, guesswork, or repeated keystrokes that are not required of sighted users.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Friction&lt;/strong&gt; — The task works as expected, but the experience is degraded in a way that compounds over extended use.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Findings
&lt;/h2&gt;

&lt;h3&gt;
  
  
  2.1 Response Completion Is Not Announced
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Severity: Barrier&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When claude.ai finishes generating a response, no announcement is made to the screen reader. The response content is not placed in a live region, so the screen reader does not notify the user that new content is available or that generation has completed.&lt;/p&gt;

&lt;p&gt;As a result, the user has no reliable way to know when it is appropriate to begin reading. The user must manually navigate to the chat area, attempt to locate the new response, and determine through repeated keystrokes whether generation has finished or is still in progress. This interaction occurs on every single exchange, making it the most consequential barrier in routine use.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.2 The "Keyboard Shortcuts" Dialog Is Not Accessible
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Severity: Blocker&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The "Keyboard Shortcuts" dialog in claude.ai presents two separate barriers when accessed with a screen reader.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.2.1 Dialog appearance is not announced.&lt;/strong&gt; When the dialog is opened, the screen reader does not announce that a dialog has appeared, and focus is not moved into the dialog. The user receives no indication that anything has changed on screen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.2.2 Dialog content is not reachable.&lt;/strong&gt; When the user navigates to the bottom of the page using the virtual cursor, the screen reader reads only the dialog's heading — "Keyboard Shortcuts" — and does not expose the list of shortcuts contained within. The content of the dialog is effectively inaccessible.&lt;/p&gt;

&lt;p&gt;These two barriers combine to make the Keyboard Shortcuts dialog non-functional for screen reader users. The meaningful task — reading the available keyboard shortcuts — cannot be completed. A feature that is specifically intended to support keyboard navigation cannot itself be navigated by keyboard users relying on a screen reader.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.3 The "More Options" Menu in the Chat List Does Not Announce Its Appearance
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Severity: Barrier&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Each item in the chat list sidebar contains a "More Options" button. When activated, a popup menu appears containing actions such as Star, Rename, and others. The menu implements a focus trap, meaning keyboard focus is correctly contained within it once the user is inside. However, the appearance of the menu is not announced by the screen reader, and the user is not informed of how to close it.&lt;/p&gt;

&lt;p&gt;The result is that after pressing the button, the user receives no confirmation that anything has occurred. The user must discover — through navigation — that a menu has appeared, learn its contents, and determine independently that pressing Escape will close it. A sighted user receives immediate visual confirmation of all three.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.4 The Sidebar Lacks Sufficient Landmarks for Direct Navigation
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Severity: Barrier&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Navigation between chats requires access to the chat list in the sidebar. The sidebar contains a landmark that allows the user to jump to its top, but no landmark or heading structure is provided to allow direct navigation to the chat list itself.&lt;/p&gt;

&lt;p&gt;Available landmarks during testing were limited to a jump to the top of the sidebar, a banner landmark in the chat section, and a notifications landmark. None of these allow the user to navigate directly to the chat list. A user who wishes to switch chats must traverse through the sidebar from the top, passing over controls unrelated to the chat list on each visit.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.5 Missing Keyboard Shortcuts for Frequently Used Actions
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Severity: Friction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The following actions do not have keyboard shortcuts in claude.ai:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Jump to the chat input field&lt;/li&gt;
&lt;li&gt;Start a new chat&lt;/li&gt;
&lt;li&gt;Delete the current chat&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each of these actions is available through the interface but requires the user to locate the relevant control through navigation. For a sighted user, these controls are immediately visible. For a screen reader user, the location of a button is not always remembered between sessions, and finding it requires traversal through surrounding content.&lt;/p&gt;

&lt;p&gt;The absence of shortcuts does not prevent these actions. However, the cumulative effect of repeated traversal — compounded with the other barriers documented above — meaningfully degrades the experience of extended use.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.6 Chat List Items Do Not Expose Metadata
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Severity: Friction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Chat list items correctly expose the title of each chat to the screen reader. No additional metadata — such as the number of responses in a conversation, the date of the last message, or the model used — is provided.&lt;/p&gt;

&lt;p&gt;A user who cannot visually scan the chat list must rely on the title alone to identify and select the correct conversation. Additional metadata would reduce the effort required to distinguish between similarly named chats and to assess whether a conversation is worth reopening.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Summary of Findings
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Finding&lt;/th&gt;
&lt;th&gt;Severity&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2.1&lt;/td&gt;
&lt;td&gt;Response completion not announced&lt;/td&gt;
&lt;td&gt;Barrier&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2.2&lt;/td&gt;
&lt;td&gt;Keyboard Shortcuts dialog not accessible&lt;/td&gt;
&lt;td&gt;Blocker&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2.3&lt;/td&gt;
&lt;td&gt;"More Options" menu appearance not announced&lt;/td&gt;
&lt;td&gt;Barrier&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2.4&lt;/td&gt;
&lt;td&gt;Sidebar lacks landmarks for chat list navigation&lt;/td&gt;
&lt;td&gt;Barrier&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2.5&lt;/td&gt;
&lt;td&gt;Missing keyboard shortcuts for common actions&lt;/td&gt;
&lt;td&gt;Friction&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2.6&lt;/td&gt;
&lt;td&gt;Chat list items lack metadata&lt;/td&gt;
&lt;td&gt;Friction&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  4. Further Reading
&lt;/h2&gt;

&lt;p&gt;This article is part of the PageLive project's documentation for claude.ai. A companion article, &lt;a href="https://dev.to/wiscer/screen-reader-experience-mitigation-on-claudeai-4khl"&gt;Screen Reader Experience Mitigation on claude.ai&lt;/a&gt;, describes how PageLive addresses the barriers identified above. For a full list of keyboard shortcuts and features PageLive provides for claude.ai, see the &lt;a href="https://wiscer.org/pagelive/claude" rel="noopener noreferrer"&gt;PageLive for Claude documentation&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;— End of Article —&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Disclaimers
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;This analysis was conducted as part of the PageLive project, which develops keyboard shortcut and screen reader support for AI chat interfaces. The author develops PageLive, a Chrome extension that addresses several of the barriers described in this report. A companion Screen Reader Experience Mitigation documents the approaches PageLive applies to each finding.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;PageLive can be installed for free on the &lt;a href="https://chromewebstore.google.com/detail/pagelive/kachdjbdcmofjmaoklcfofbcnlakfnbb" rel="noopener noreferrer"&gt;PageLive chrome webstore page&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The findings, severity classifications, and testing observations in this report are the author's own, based on manual testing with NVDA on Chrome. AI assistance was used solely to shape the writing style of this document.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>pagelive</category>
      <category>a11y</category>
      <category>claude</category>
      <category>screenreader</category>
    </item>
    <item>
      <title>Auto Hot Key to automate Keystrokes in Windsurf IDE</title>
      <dc:creator>wiscer</dc:creator>
      <pubDate>Fri, 29 Nov 2024 12:40:25 +0000</pubDate>
      <link>https://dev.to/wiscer/auto-hot-key-to-automate-keystrokes-in-windsurf-ide-2agk</link>
      <guid>https://dev.to/wiscer/auto-hot-key-to-automate-keystrokes-in-windsurf-ide-2agk</guid>
      <description>&lt;h1&gt;
  
  
  Using Keyboard Shortcuts to Enhance Productivity in Windsurf IDE
&lt;/h1&gt;

&lt;p&gt;As a non-visual developer (screen reader user), I rely heavily on keyboard shortcuts and keybindings. This article provides a workaround for inputting keystrokes in the Windsurf IDE.&lt;/p&gt;

&lt;h2&gt;
  
  
  Breadcrumbs in VSCode IDE
&lt;/h2&gt;

&lt;p&gt;I primarily use VSCode IDE because it is highly accessible for screen reader users. One of the shortcuts I use most frequently is &lt;strong&gt;&lt;code&gt;Breadcrumbs Focus&lt;/code&gt;&lt;/strong&gt;.  &lt;/p&gt;

&lt;dl&gt;
  &lt;dt&gt;Shortcut&lt;/dt&gt;
  &lt;dd&gt;
Ctrl + Shift + .
&lt;/dd&gt;
  &lt;dt&gt;Description&lt;/dt&gt;
  &lt;dd&gt;Focus and select breadcrumbs&lt;/dd&gt;
  &lt;dd&gt;&lt;code&gt;breadcrumbs.focusAndSelect&lt;/code&gt;&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;&lt;/p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fwiscer-org%2Fdevto-sinedied%2Frefs%2Fheads%2Fmain%2Fassets%2Fimages%2Fvscode-breadcrumbs.png" class="article-body-image-wrapper"&gt;&lt;img alt="Breadcrumbs in VSCode" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fwiscer-org%2Fdevto-sinedied%2Frefs%2Fheads%2Fmain%2Fassets%2Fimages%2Fvscode-breadcrumbs.png" width="800" height="500"&gt;&lt;/a&gt;Screenshot of creadcrumbs in VSCode&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Breadcrumbs are located at the upper part of the text editor. I use this shortcut every 5–10 minutes because:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It provides a quick snapshot of the code hierarchy, whether within a class or an HTML tree.
&lt;/li&gt;
&lt;li&gt;It helps navigate between methods within the file efficiently.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Windsurf IDE
&lt;/h2&gt;

&lt;p&gt;Windsurf IDE is an accessible, AI-powered IDE built on top of VSCode, inheriting many of its shortcuts. However, the shortcut for &lt;strong&gt;&lt;code&gt;breadcrumbs.focusAndSelect&lt;/code&gt;&lt;/strong&gt; does not work in Windsurf.  &lt;/p&gt;

&lt;h2&gt;
  
  
  The &lt;code&gt;breadcrumbs.focus&lt;/code&gt; Shortcut
&lt;/h2&gt;

&lt;p&gt;In Windsurf, I discovered an alternative shortcut:  &lt;/p&gt;

&lt;dl&gt;
  &lt;dt&gt;Shortcut&lt;/dt&gt;
  &lt;dd&gt;
Ctrl + Shift + ;
&lt;/dd&gt;
  &lt;dt&gt;Description&lt;/dt&gt;
  &lt;dd&gt;Focus on breadcrumbs&lt;/dd&gt;
  &lt;dd&gt;&lt;code&gt;breadcrumbs.focus&lt;/code&gt;&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;However, in Windsurf, this shortcut does not automatically focus on the original breadcrumbs. Instead, it defaults to a new visual element on the right side of the breadcrumbs containing "Explain," "Refactor," and "Add Docstring" links.  &lt;/p&gt;

&lt;p&gt;To replicate the functionality of &lt;code&gt;breadcrumbs.focusAndSelect&lt;/code&gt;, I have to:  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Press &lt;code&gt;Ctrl + Shift + ;&lt;/code&gt; to focus on the new links.
&lt;/li&gt;
&lt;li&gt;Use the left arrow to move focus to the original breadcrumbs.
&lt;/li&gt;
&lt;li&gt;Press the down arrow to select and display the code tree.
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;/p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fwiscer-org%2Fdevto-sinedied%2Frefs%2Fheads%2Fmain%2Fassets%2Fimages%2Fwindsurf-breadcrumbs.png" class="article-body-image-wrapper"&gt;&lt;img alt="Breadcrumbs in Windsurf" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fwiscer-org%2Fdevto-sinedied%2Frefs%2Fheads%2Fmain%2Fassets%2Fimages%2Fwindsurf-breadcrumbs.png" width="800" height="500"&gt;&lt;/a&gt;Screenshot of creadcrumbs in VSCode&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Since I frequently use this functionality, automating these steps into a single keystroke would save a lot of hassle.  &lt;/p&gt;

&lt;h2&gt;
  
  
  AutoHotkey: A Solution
&lt;/h2&gt;

&lt;p&gt;To streamline the process, I use &lt;strong&gt;AutoHotkey&lt;/strong&gt;, a free tool for customizing keyboard shortcuts.  &lt;/p&gt;

&lt;p&gt;I mapped the sequence to &lt;code&gt;NumpadIns&lt;/code&gt; followed by the right arrow, as they are conveniently close on my keyboard.  &lt;/p&gt;

&lt;h3&gt;
  
  
  AutoHotkey Script
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;; Map NumpadIns + Right Arrow 
; to simulate breadcrumbs.focusAndSelect in Windsurf
NumpadIns &amp;amp; Right::
Send ^+;  ; Send Ctrl+Shift+;
Sleep 100  ; Pause for 100 milliseconds
Send {Left}  
Sleep 100  
Send {Down}  
return
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Complete Setup
&lt;/h2&gt;

&lt;p&gt;Follow these steps to set up the shortcut:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Download AutoHotkey: &lt;a href="https://www.autohotkey.com/" rel="noopener noreferrer"&gt;Download AHK&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Create a Script File:

&lt;ul&gt;
&lt;li&gt;Open a text editor, such as Notepad.&lt;/li&gt;
&lt;li&gt;Paste the script above.&lt;/li&gt;
&lt;li&gt;Save the file with a &lt;code&gt;.ahk&lt;/code&gt; extension (e.g., &lt;code&gt;breadcrumbs.ahk&lt;/code&gt;). Ensure there is no hidden &lt;code&gt;.txt&lt;/code&gt; suffix.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Run the Script: Double-click the .ahk file to activate the script.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For a detailed guide, refer to the AutoHotkey Tutorial.&lt;/p&gt;

&lt;p&gt;This solution significantly simplifies navigating breadcrumbs in Windsurf IDE and enhances accessibility for screen reader users.&lt;/p&gt;

&lt;h2&gt;
  
  
  Update on Key Conflict
&lt;/h2&gt;

&lt;p&gt;The assignment of NumPadIns in the AutoHotKey script conflicted with its role as the NVDA modifier key. As a result, when the script runs, NVDA can no longer respond to the NumPadIns key. This happens because AutoHotKey intercepts the NumPadIns key press, preventing NVDA from processing it.&lt;br&gt;
To resolve this issue, I replaced NumPadIns with the NumPadAdd key in the script. Here is the updated script&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;; Map NumpadAdd + Right Arrow 
; to simulate breadcrumbs.focusAndSelect in Windsurf
NumpadAdd &amp;amp; Right::
Send ^+;  ; Send Ctrl+Shift+;
Sleep 100  ; Pause for 100 milliseconds
Send {Left}  
Sleep 100  
Send {Down}  
return
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>vscode</category>
      <category>windsurf</category>
      <category>breadcrumbs</category>
      <category>screenreader</category>
    </item>
    <item>
      <title>VSCode shortcuts / keybinding for Non Visual Users</title>
      <dc:creator>wiscer</dc:creator>
      <pubDate>Fri, 06 Sep 2024 11:27:27 +0000</pubDate>
      <link>https://dev.to/wiscer/vscode-shortcuts-keybinding-for-non-visual-users-3e08</link>
      <guid>https://dev.to/wiscer/vscode-shortcuts-keybinding-for-non-visual-users-3e08</guid>
      <description>&lt;p&gt;In this article, I’ll be sharing a selection of VSCode shortcuts and keybindings that I frequently use and find&lt;br&gt;
particularly useful as a screen reader (non-visual) developer. &lt;/p&gt;

&lt;p&gt;While memorizing every keybinding available in VSCode can&lt;br&gt;
be overwhelming, focusing on a core set of shortcuts can greatly enhance efficiency and ease of use. To make this guide practical, I’ve highlighted keybindings that are most likely to be beneficial for screen reader users. The list below will have marks on shortcuts which I think essential. &lt;/p&gt;

&lt;p&gt;The default keybindings are sourced from the official VSCode documentation as of September 3, 2024. I hope this resource will help you streamline your workflow by focusing on the most useful and frequently used shortcuts.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;NOTE: The essential shortcuts will ended by 👍&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;General&lt;/h2&gt;

&lt;dl&gt;
    &lt;dt&gt;Ctrl+Shift+P, F1&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Show Command Palette&lt;/dd&gt;
    &lt;dt&gt;Ctrl+P&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Quick Open, Go to File…&lt;/dd&gt;
    &lt;dt&gt;Ctrl+Shift+N&lt;/dt&gt;
    &lt;dd&gt;New window/instance&lt;/dd&gt;
    &lt;dt&gt;Ctrl+Shift+W&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Close window/instance&lt;/dd&gt;
    &lt;dt&gt;Ctrl+,&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;User Settings&lt;/dd&gt;
    &lt;dt&gt;Ctrl+K Ctrl+S
    &lt;/dt&gt;
&lt;dd&gt;Keyboard Shortcuts&lt;/dd&gt;
&lt;/dl&gt;

&lt;h2&gt;Basic editing&lt;/h2&gt;

&lt;dl&gt;
    &lt;dt&gt;Ctrl+X&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Cut line (empty selection)&lt;/dd&gt;
    &lt;dt&gt;Ctrl+C&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Copy line (empty selection)&lt;/dd&gt;
    &lt;dt&gt;Alt+ ↑/↓&lt;/dt&gt;&lt;dt&gt;
    &lt;/dt&gt;

&lt;dd&gt;Move line up/down&lt;/dd&gt;
    &lt;dt&gt;Shift+Alt+ ↑/↓&lt;/dt&gt;&lt;dt&gt;
    &lt;/dt&gt;

&lt;dd&gt;Copy line up/down&lt;/dd&gt;
    &lt;dt&gt;Ctrl+Shift+K&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Delete line&lt;/dd&gt;
    &lt;dt&gt;Ctrl+Enter&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Insert line below&lt;/dd&gt;
    &lt;dt&gt;Ctrl+Shift+Enter&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Insert line above&lt;/dd&gt;
    &lt;dt&gt;Ctrl+Shift+\&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Jump to matching bracket&lt;/dd&gt;
    &lt;dt&gt;Ctrl+ ]/[&lt;/dt&gt;
    &lt;dd&gt;Indent/outdent line. This is useful when I want to make sure there is no whitespaces at start.&lt;/dd&gt;
    &lt;dt&gt;Home/End&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Go to beginning / end of line&lt;/dd&gt;
    &lt;dt&gt;Ctrl+Home&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Go to beginning of file&lt;/dd&gt;
    &lt;dt&gt;Ctrl+End&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Go to end of file&lt;/dd&gt;
    &lt;dt&gt;Ctrl+ ↑/↓ &lt;/dt&gt;
    &lt;dd&gt;Scroll line up/down&lt;/dd&gt;
    &lt;dt&gt;Alt+ PgUp/PgDn&lt;/dt&gt;
    &lt;dd&gt;Scroll page up/down&lt;/dd&gt;
    &lt;dt&gt;Ctrl+Shift+[&lt;/dt&gt;
    &lt;dd&gt;Fold (collapse) region&lt;/dd&gt;
    &lt;dt&gt;Ctrl+Shift+]&lt;/dt&gt;
    &lt;dd&gt;Unfold (uncollapse) region&lt;/dd&gt;
    &lt;dt&gt;Ctrl+K&lt;/dt&gt;
    &lt;dd&gt;Ctrl+[ Fold (collapse) all subregions&lt;/dd&gt;
    &lt;dt&gt;Ctrl+K&lt;/dt&gt;
    &lt;dd&gt;Ctrl+] Unfold (uncollapse) all subregions&lt;/dd&gt;
    &lt;dt&gt;Ctrl+K Ctrl+0&lt;/dt&gt;
&lt;dd&gt;Fold (collapse) all regions&lt;/dd&gt;
    &lt;dt&gt;Ctrl+K Ctrl+J&lt;/dt&gt;
&lt;dd&gt;Unfold (uncollapse) all regions&lt;/dd&gt;
    &lt;dt&gt;Ctrl+K Ctrl+C&lt;/dt&gt;
&lt;dd&gt;Add line comment&lt;/dd&gt;
    &lt;dt&gt;Ctrl+K Ctrl+U&lt;/dt&gt;
&lt;dd&gt;Remove line comment&lt;/dd&gt;
    &lt;dt&gt;Ctrl+/&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Toggle line comment&lt;/dd&gt;
    &lt;dt&gt;Shift+Alt+A&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Toggle block comment&lt;/dd&gt;
    &lt;dt&gt;Alt+Z&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Toggle word wrap&lt;/dd&gt;
&lt;/dl&gt;

&lt;h2&gt;Navigation&lt;/h2&gt;

&lt;dl&gt;
    &lt;dt&gt;Ctrl+T&lt;/dt&gt;
    &lt;dd&gt;Show all Symbols&lt;/dd&gt;
    &lt;dt&gt;Ctrl+G&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Go to Line...&lt;/dd&gt;
    &lt;dt&gt;Ctrl+P&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Go to File...&lt;/dd&gt;
    &lt;dt&gt;Ctrl+Shift+O&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Go to Symbol...&lt;/dd&gt;
    &lt;dt&gt;Ctrl+Shift+M&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Show Problems panel&lt;/dd&gt;
    &lt;dt&gt;F8&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Go to next error or warning&lt;/dd&gt;
    &lt;dt&gt;Shift+F8&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Go to previous error or warning&lt;/dd&gt;
    &lt;dt&gt;Ctrl+Shift+Tab&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Navigate editor group history&lt;/dd&gt;
    &lt;dt&gt;Alt+ ←/→&lt;/dt&gt;&lt;dt&gt;
    &lt;/dt&gt;

&lt;dd&gt;Go back / forward&lt;/dd&gt;
    &lt;dt&gt;Ctrl+M&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Toggle Tab moves focus&lt;/dd&gt;
&lt;/dl&gt;

&lt;h2&gt;Search and replace&lt;/h2&gt;

&lt;dl&gt;
    &lt;dt&gt;Ctrl+F&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Find&lt;/dd&gt;
    &lt;dt&gt;Ctrl+H&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Replace&lt;/dd&gt;
    &lt;dt&gt;F3 / Shift+F3&lt;/dt&gt;&lt;dt&gt;
    &lt;/dt&gt;

&lt;dd&gt;Find next/previous&lt;/dd&gt;
    &lt;dt&gt;Alt+Enter&lt;/dt&gt;
    &lt;dd&gt;Select all occurences of Find match&lt;/dd&gt;
    &lt;dt&gt;Ctrl+D&lt;/dt&gt;
    &lt;dd&gt;Add selection to next Find match&lt;/dd&gt;
    &lt;dt&gt;Ctrl+K Ctrl+D&lt;/dt&gt;
    &lt;dd&gt;Move last selection to next Find match&lt;/dd&gt;
    &lt;dt&gt;Alt+ C/R/W&lt;/dt&gt;&lt;dt&gt;
    &lt;/dt&gt;

&lt;dd&gt;Toggle case-sensitive / regex / whole word&lt;/dd&gt;
&lt;/dl&gt;

&lt;h2&gt;Multi-cursor and selection&lt;/h2&gt;

&lt;dl&gt;
    &lt;dt&gt;Alt+Click&lt;/dt&gt;
    &lt;dd&gt;Insert cursor&lt;/dd&gt;
    &lt;dt&gt;Ctrl+Alt+ ↑/↓&lt;/dt&gt;
    &lt;dd&gt;Insert cursor above / below&lt;/dd&gt;
    &lt;dt&gt;Ctrl+U&lt;/dt&gt;
    &lt;dd&gt;Undo last cursor operation&lt;/dd&gt;
    &lt;dt&gt;Shift+Alt+I&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Insert cursor at end of each line selected&lt;/dd&gt;
    &lt;dt&gt;Ctrl+L&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Select current line&lt;/dd&gt;
    &lt;dt&gt;Ctrl+Shift+L&lt;/dt&gt;
    &lt;dd&gt;Select all occurrences of current selection&lt;/dd&gt;
    &lt;dt&gt;Ctrl+F2&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Select all occurrences of current word&lt;/dd&gt;
    &lt;dt&gt;Shift+Alt+→&lt;/dt&gt;
    &lt;dd&gt;Expand selection&lt;/dd&gt;
    &lt;dt&gt;Shift+Alt+←&lt;/dt&gt;
    &lt;dd&gt;Shrink selection&lt;/dd&gt;
    &lt;dt&gt;Shift+Alt + (drag mouse)&lt;/dt&gt;
    &lt;dd&gt;Column (box) selection&lt;/dd&gt;
    &lt;dt&gt;Ctrl+Shift+Alt+ (arrow key)&lt;/dt&gt;
    &lt;dd&gt;Column (box) selection&lt;/dd&gt;
    &lt;dt&gt;Ctrl+Shift+Alt+ PgUp/PgDn&lt;/dt&gt;
    &lt;dd&gt;Column (box) selection page up/down&lt;/dd&gt;
&lt;/dl&gt;

&lt;h2&gt;Rich languages editing&lt;/h2&gt;

&lt;dl&gt;
    &lt;dt&gt;Ctrl+Space, Ctrl+I&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Trigger suggestion&lt;/dd&gt;
    &lt;dt&gt;Ctrl+Shift+Space&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Trigger parameter hints&lt;/dd&gt;
    &lt;dt&gt;Shift+Alt+F&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Format document&lt;/dd&gt;
    &lt;dt&gt;Ctrl+K Ctrl+F&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Format selection&lt;/dd&gt;
    &lt;dt&gt;F12&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Go to Definition&lt;/dd&gt;
    &lt;dt&gt;Alt+F12&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Peek Definition&lt;/dd&gt;
    &lt;dt&gt;Ctrl+K F12&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Open Definition to the side&lt;/dd&gt;
    &lt;dt&gt;Ctrl+.&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Quick Fix&lt;/dd&gt;
    &lt;dt&gt;Shift+F12&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Show References&lt;/dd&gt;
    &lt;dt&gt;F2&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Rename Symbol&lt;/dd&gt;
    &lt;dt&gt;Ctrl+K Ctrl+X&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
&lt;dd&gt;Trim trailing whitespace&lt;/dd&gt;
    &lt;dt&gt;Ctrl+K M&lt;/dt&gt;
    &lt;dd&gt;Change file language&lt;/dd&gt;
&lt;dl&gt;

&lt;h2&gt;Editor management&lt;/h2&gt;
&lt;dl&gt;
    &lt;dt&gt;Ctrl+F4, Ctrl+W&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Close editor&lt;/dd&gt;
    &lt;dt&gt;Ctrl+K F&lt;/dt&gt;
    &lt;dd&gt;Close folder&lt;/dd&gt;
    &lt;dt&gt;Ctrl+\&lt;/dt&gt;
    &lt;dd&gt;Split editor&lt;/dd&gt;
    &lt;dt&gt;Ctrl+ 1/2/3&lt;/dt&gt;&lt;dt&gt;
    &lt;/dt&gt;

&lt;dd&gt;Focus into 1st, 2nd or 3rd editor group. This is most useful for me when I repeatedly jump between specific locations in file/files.&lt;/dd&gt;
    &lt;dt&gt;Ctrl+K Ctrl+ ←/→&lt;/dt&gt;&lt;dt&gt;
    &lt;/dt&gt;

&lt;dd&gt;Focus into previous/next editor group&lt;/dd&gt;
    &lt;dt&gt;Ctrl+Shift+ PgUp/PgDn&lt;/dt&gt;&lt;dt&gt;
    &lt;/dt&gt;

&lt;dd&gt;Move editor left/right&lt;/dd&gt;
    &lt;dt&gt;Ctrl+K ←/→&lt;/dt&gt;&lt;dt&gt;
    &lt;/dt&gt;

&lt;dd&gt;Move active editor group&lt;/dd&gt;
&lt;dl&gt;

&lt;h2&gt;File management&lt;/h2&gt;
&lt;dl&gt;
    &lt;dt&gt;Ctrl+N&lt;/dt&gt;
    &lt;dd&gt;New File&lt;/dd&gt;
    &lt;dt&gt;Ctrl+O&lt;/dt&gt;
    &lt;dd&gt;Open File...&lt;/dd&gt;
    &lt;dt&gt;Ctrl+S&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Save&lt;/dd&gt;
    &lt;dt&gt;Ctrl+Shift+S&lt;/dt&gt;
    &lt;dd&gt;Save As...&lt;/dd&gt;
    &lt;dt&gt;Ctrl+K S&lt;/dt&gt;
    &lt;dd&gt;Save All&lt;/dd&gt;
    &lt;dt&gt;Ctrl+F4&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Close&lt;/dd&gt;
    &lt;dt&gt;Ctrl+K Ctrl+W&lt;/dt&gt;
    &lt;dd&gt;Close All&lt;/dd&gt;
    &lt;dt&gt;Ctrl+Shift+T&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Reopen closed editor&lt;/dd&gt;
    &lt;dt&gt;Ctrl+K&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Enter Keep preview mode editor open&lt;/dd&gt;
    &lt;dt&gt;Ctrl+Tab&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Open next&lt;/dd&gt;
    &lt;dt&gt;Ctrl+Shift+Tab&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Open previous&lt;/dd&gt;
    &lt;dt&gt;Ctrl+K P&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Copy path of active file&lt;/dd&gt;
    &lt;dt&gt;Ctrl+K R&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt; 
    &lt;dd&gt;Reveal active file in Explorer&lt;/dd&gt;
    &lt;dt&gt;Ctrl+K O&lt;/dt&gt;
    &lt;dd&gt;Show active file in new window/instance&lt;/dd&gt;
&lt;/dl&gt;

&lt;h2&gt;Display&lt;/h2&gt;

&lt;dl&gt;
    &lt;dt&gt;F11&lt;/dt&gt;
    &lt;dd&gt;Toggle full screen&lt;/dd&gt;
    &lt;dt&gt;Shift+Alt+0&lt;/dt&gt;
    &lt;dd&gt;Toggle editor layout (horizontal/vertical)&lt;/dd&gt;
    &lt;dt&gt;Ctrl+ =/-&lt;/dt&gt;&lt;dt&gt;
    &lt;/dt&gt;

&lt;dd&gt;Zoom in/out&lt;/dd&gt;
    &lt;dt&gt;Ctrl+B&lt;/dt&gt;
    &lt;dd&gt;Toggle Sidebar visibility&lt;/dd&gt;
    &lt;dt&gt;Ctrl+Shift+E&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Show Explorer / Toggle focus&lt;/dd&gt;
    &lt;dt&gt;Ctrl+Shift+F&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Show Search&lt;/dd&gt;
    &lt;dt&gt;Ctrl+Shift+G&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Show Source Control&lt;/dd&gt;
    &lt;dt&gt;Ctrl+Shift+D&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Show Debug&lt;/dd&gt;
    &lt;dt&gt;Ctrl+Shift+X&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Show Extensions&lt;/dd&gt;
    &lt;dt&gt;Ctrl+Shift+H&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Replace in files&lt;/dd&gt;
    &lt;dt&gt;Ctrl+Shift+J&lt;/dt&gt;
    &lt;dd&gt;Toggle Search details&lt;/dd&gt;
    &lt;dt&gt;Ctrl+Shift+U&lt;/dt&gt;
    &lt;dd&gt;Show Output panel&lt;/dd&gt;
    &lt;dt&gt;Ctrl+Shift+V&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Open Markdown preview&lt;/dd&gt;
    &lt;dt&gt;Ctrl+K V&lt;/dt&gt;
    &lt;dd&gt;Open Markdown preview to the side&lt;/dd&gt;
    &lt;dt&gt;Ctrl+K Z&lt;/dt&gt;
    &lt;dd&gt;Zen Mode (Esc Esc to exit)&lt;/dd&gt;
&lt;/dl&gt;

&lt;h2&gt;Debug&lt;/h2&gt;

&lt;dl&gt;
&lt;dt&gt;F9&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
&lt;dd&gt;Toggle breakpoint&lt;/dd&gt;
&lt;dt&gt;F5&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
&lt;dd&gt;Start/Continue&lt;/dd&gt;
&lt;dt&gt;Shift+F5&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
&lt;dd&gt;Stop&lt;/dd&gt;
&lt;dt&gt;F11 / Shift+F11&lt;/dt&gt;&lt;dt&gt;
&lt;/dt&gt;

&lt;dd&gt;Step into/out&lt;/dd&gt;
&lt;dt&gt;F10&lt;/dt&gt;
&lt;dd&gt;Step over&lt;/dd&gt;
&lt;dt&gt;Ctrl+K Ctrl+I&lt;/dt&gt;
&lt;dd&gt;Show hover&lt;/dd&gt;
&lt;dl&gt;

&lt;h2&gt;Integrated terminal&lt;/h2&gt;
&lt;dl&gt;
    &lt;dt&gt;Ctrl+`&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Show integrated terminal&lt;/dd&gt;
    &lt;dt&gt;Ctrl+Shift+`&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Create new terminal&lt;/dd&gt;
    &lt;dt&gt;Ctrl+C&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Copy selection&lt;/dd&gt;
    &lt;dt&gt;Ctrl+V&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Paste into active terminal&lt;/dd&gt;
    &lt;dt&gt;Ctrl+ ↑/↓ &lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Scroll up/down&lt;/dd&gt;
    &lt;dt&gt;Shift+ PgUp/PgDn&lt;span&gt; 👍&lt;/span&gt;
&lt;/dt&gt;
    &lt;dd&gt;Scroll page up/down&lt;/dd&gt;
    &lt;dt&gt;Ctrl+ Home/End&lt;/dt&gt;&lt;dt&gt;
    &lt;/dt&gt;

&lt;dd&gt;Scroll to top/bottom&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;Other operating systems’ keyboard shortcuts and additional unassigned shortcuts available at &lt;a href="//aka.ms/vscodekeybindings"&gt;aka.ms/vscodekeybindings&lt;/a&gt;&lt;/p&gt;


&lt;/dl&gt;
&lt;br&gt;
&lt;/dl&gt;
&lt;br&gt;
&lt;/dl&gt;
&lt;br&gt;
&lt;/dl&gt;
&lt;br&gt;
&lt;/dl&gt;
&lt;br&gt;
&lt;/dl&gt;

</description>
      <category>vscode</category>
      <category>keybindings</category>
      <category>withscreenreader</category>
    </item>
    <item>
      <title>Windows Terminal with Screen Reader</title>
      <dc:creator>wiscer</dc:creator>
      <pubDate>Mon, 08 Jul 2024 04:53:25 +0000</pubDate>
      <link>https://dev.to/wiscer/windows-terminal-with-screen-reader-49fp</link>
      <guid>https://dev.to/wiscer/windows-terminal-with-screen-reader-49fp</guid>
      <description>&lt;p&gt;When I first started using a screen reader, one of the biggest challenges I faced was operating terminal applications like Powershell. It took me quite some time to become comfortable navigating and using these terminal apps.&lt;/p&gt;

&lt;p&gt;This article shares tips on operating Powershell and other terminal applications using the NVDA screen reader (Desktop keyboard layout), based on my personal experience. It is a work-in-progress article that will be updated over time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reading Text in the Terminal
&lt;/h2&gt;

&lt;p&gt;In the terminal, the cursor is always at the bottom. To read text, use the Navigator Object. For example, to read the previous line use &lt;code&gt;Numpad 7&lt;/code&gt;for Desktop Layout. Full description about the Navigator Object navigation can be found in &lt;a href="https://www.nvaccess.org/files/nvdaTracAttachments/455/keycommands%20with%20laptop%20keyboard%20layout.html" rel="noopener noreferrer"&gt;NVDA Command Key Quick Reference&lt;/a&gt; page.&lt;/p&gt;

&lt;h2&gt;
  
  
  Copying Text
&lt;/h2&gt;

&lt;p&gt;To copy a range of text in the terminal, follow these steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Mark the start of the text to be copied: 

&lt;ul&gt;
&lt;li&gt;Use the Navigator Object to move to the starting point of the text you want to copy. &lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;Caps Lock&lt;/code&gt; + &lt;code&gt;F9&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Mark the end of the text:

&lt;ul&gt;
&lt;li&gt;Use the Navigator Object to move to the endpoint of the text selection.&lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;Caps Lock&lt;/code&gt; + &lt;code&gt;F10&lt;/code&gt; twice. (Hold the &lt;code&gt;Caps Lock&lt;/code&gt; and then quickly press &lt;code&gt;F10&lt;/code&gt; twice.)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After completing these steps, the selected text will be copied to the clipboard.&lt;/p&gt;

</description>
      <category>terminal</category>
      <category>powershell</category>
      <category>nvda</category>
      <category>screenreader</category>
    </item>
    <item>
      <title>How to Use VSCode Logpoint with Keyboard Shortcuts</title>
      <dc:creator>wiscer</dc:creator>
      <pubDate>Tue, 02 Jul 2024 01:47:50 +0000</pubDate>
      <link>https://dev.to/wiscer/how-to-use-vscode-logpoint-with-keyboard-shortcuts-4gmc</link>
      <guid>https://dev.to/wiscer/how-to-use-vscode-logpoint-with-keyboard-shortcuts-4gmc</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;This article demonstrates how to efficiently utilize VSCode Logpoints using only keyboard shortcuts. This method is particularly beneficial for users who rely on screen readers or prefer keyboard-centric workflows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding VSCode Logpoint
&lt;/h2&gt;

&lt;p&gt;VSCode Logpoints allow developers to dynamically insert logging messages into their code without modifying the source code itself. This feature is invaluable for debugging and understanding code execution flow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting Up Custom Shortcut for Logpoints
&lt;/h2&gt;

&lt;p&gt;Since there is no default shortcut or menu item for adding Logpoints, follow these steps to define a custom shortcut:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open the keybinding editor with &lt;code&gt;Ctrl + K Ctrl + S&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Type &lt;code&gt;Logpoint&lt;/code&gt; into the search box and press &lt;code&gt;Tab&lt;/code&gt; to navigate to the &lt;code&gt;Debug:Add Logpoint&lt;/code&gt; result. Press &lt;code&gt;Enter&lt;/code&gt; to activate.&lt;/li&gt;
&lt;li&gt;Enter your desired keyboard shortcut, for example, &lt;code&gt;Ctrl + L Ctrl + P&lt;/code&gt;, and confirm by pressing &lt;code&gt;Enter&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Example File
&lt;/h2&gt;

&lt;p&gt;To illustrate the usage of Logpoints, consider the following JavaScript file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;plus_4&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;plus_9&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;End of file&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;plus_4&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;plus 4&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;                               
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;plus_9&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Plus 9&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Adding Logpoints to Replace &lt;code&gt;console.log&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Replacing repetitive &lt;code&gt;console.log&lt;/code&gt; statements with Logpoints enhances debugging efficiency:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Navigate to the line containing &lt;code&gt;console.log&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Use the custom shortcut (&lt;code&gt;Ctrl + L Ctrl + P&lt;/code&gt;) to add a Logpoint. Enter a descriptive message when prompted, e.g., "Reached end of file", and press &lt;code&gt;Enter&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Repeat these steps for each &lt;code&gt;console.log&lt;/code&gt; statement in your code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Running in Debug Environment
&lt;/h2&gt;

&lt;p&gt;To execute the JavaScript file with Logpoints:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open the debug panel with &lt;code&gt;Ctrl + Shift + D&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Navigate to &lt;code&gt;Javascript Debug Terminal&lt;/code&gt; using &lt;code&gt;Tab&lt;/code&gt; and activate it.&lt;/li&gt;
&lt;li&gt;Run the script using:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  node index.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Logpoint messages will be displayed in the terminal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note for screen reader users:&lt;/strong&gt; Switch to screen reader compatibility mode with &lt;code&gt;F2&lt;/code&gt; to read the terminal output. Use arrow keys to navigate through lines and press &lt;code&gt;F1&lt;/code&gt; to return to normal mode.&lt;/p&gt;

&lt;p&gt;Using Logpoints eliminates the need for repetitive &lt;code&gt;console.log&lt;/code&gt; cleanup during debugging sessions, streamlining your workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Removing Logpoints
&lt;/h2&gt;

&lt;p&gt;To remove a Logpoint, position the cursor on the relevant line and press &lt;code&gt;F9&lt;/code&gt;, similar to removing breakpoints.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Using VSCode Logpoints significantly improves debugging efficiency compared to traditional &lt;code&gt;console.log&lt;/code&gt; methods. It saves time by reducing code clutter and repetitive cleanup tasks, making debugging more focused and productive.&lt;/p&gt;

&lt;p&gt;We hope this article helps streamline your development process with VSCode Logpoints. Happy coding!&lt;/p&gt;

&lt;p&gt;Thanks for reading.&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>logpoint</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Linux WSL for Development Environment</title>
      <dc:creator>wiscer</dc:creator>
      <pubDate>Fri, 11 Nov 2022 04:00:00 +0000</pubDate>
      <link>https://dev.to/wiscer/linux-wsl-for-development-environment-1ad2</link>
      <guid>https://dev.to/wiscer/linux-wsl-for-development-environment-1ad2</guid>
      <description>&lt;h2&gt;
  
  
  Linux WSL for Development Environment
&lt;/h2&gt;

&lt;p&gt;WSL, stands for &lt;strong&gt;Windows Subsystem for Linux&lt;/strong&gt;, is a sub system within Windows OS allowing users to install one or many Linux distributions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Environment Used in this Article
&lt;/h2&gt;

&lt;p&gt;In this article the following environment / applications are used : &lt;br&gt;
Windows 11, WSL2, Ubuntu 20.04 LTS, Windows Terminal, NVM, and Node.js. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This article and all of the videos are made with NVDA screen reader.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Flexibility
&lt;/h2&gt;

&lt;p&gt;Since I became a screen reader user, due to eye problems, I moved to Windows from Linux Ubuntu. &lt;br&gt;
I am now depend on Windows based NVDA screen reader to use the computer.&lt;br&gt;
Developing on Windows machines means that there will be different environment between development and deployment machines (mostly Linux).&lt;/p&gt;

&lt;p&gt;WSL allows me to have a more 'screen reader friendly' environment (Windows desktop)&lt;br&gt;
while having the same environment with the deployment machines (Linux server).&lt;/p&gt;
&lt;h2&gt;
  
  
  Clean Installation
&lt;/h2&gt;

&lt;p&gt;The next benefit of using WSL is that we will have clean installation since all development tools / modules will be on LinuxWSL.&lt;br&gt;
We will have a much more 'clean' Windows installation. &lt;/p&gt;

&lt;p&gt;We can install more than one Linux distributions on one Windows machine.&lt;br&gt;
We can also reset each installed Linux, meaning we can easily have fresh Linux installation on our Windows machine. &lt;br&gt;
To demonstrate 'clean installation' we will install Node.js on Ubuntu and will reset the Ubuntu as below.&lt;/p&gt;
&lt;h3&gt;
  
  
  Install Ubuntu WSL
&lt;/h3&gt;

&lt;p&gt;To show available Linux distros online, open Windows Terminal / Powershell and run :&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;wsl --list --online &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To install Ubuntu 20.04 use &lt;code&gt;-d &amp;lt;NAME&amp;gt;&lt;/code&gt; as below :&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;wsl --install -d Ubuntu-20.04&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;After executing the command above, wait and follow instructions on screen.&lt;br&gt;
Upon completion we need to search for &lt;code&gt;Ubuntu&lt;/code&gt; in the Windows Start menu and execute the installed Ubuntu.&lt;br&gt;
This will start Ubuntu initialization, and then we will be asked to supply username and password.&lt;br&gt;
Up until this point the Ubuntu installation process has been completed.&lt;/p&gt;

&lt;p&gt;To display available wsl commands and options, run command below:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;wsl --help&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you are interested on watching realtime demonstration videos on how to install Ubuntu WSL on Windows 11,&lt;br&gt;
you can listen / watch it on 2 videos below.&lt;/p&gt;

&lt;p&gt;&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/PD1FeVtIpLs"&gt;
&lt;/iframe&gt;
&lt;/p&gt;
Video 1: How to install Ubuntu WSL on Windows 11 (using NVDA). 





&lt;p&gt;&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/fGFPUlSPA34"&gt;
&lt;/iframe&gt;
&lt;/p&gt;
Video 2: How to install Ubuntu WSL on Windows 11 (using NVDA). 





&lt;h3&gt;
  
  
  Ubuntu Terminal in Windows Terminal
&lt;/h3&gt;

&lt;p&gt;Follow steps below to run Ubuntu Terminal:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Run &lt;code&gt;Windows Terminal&lt;/code&gt;. By default, &lt;code&gt;Windows Terminal&lt;/code&gt; will run &lt;code&gt;Powershell&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;Ctrl&lt;/code&gt; + &lt;code&gt;Shift&lt;/code&gt; +&lt;code&gt;Space&lt;/code&gt; to show list of available CLI applications.&lt;/li&gt;
&lt;li&gt;Use up and down arrow to focus on 'Ubuntu'. Then press &lt;code&gt;Enter&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Ubuntu terminal should be opened right now. To test, run &lt;code&gt;lsb_release -a&lt;/code&gt; to display the Ubuntu version.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/3d5C2w0NFXk"&gt;
&lt;/iframe&gt;
&lt;/p&gt;
Video: Start Ubuntu WSL Terminal in Windows Terminal (using NVDA)





&lt;h3&gt;
  
  
  Install NVM
&lt;/h3&gt;

&lt;p&gt;NVM, stands for Node Version Manager, is a tool to manage Node.js versions in a machine.&lt;br&gt;
NVM can be used to install, remove, and set which version of the currently installed Node.js in a computer.&lt;/p&gt;

&lt;p&gt;To install NVM, open Ubuntu Terminal and execute command below.&lt;br&gt;
Command below will pipe the &lt;code&gt;stdout&lt;/code&gt; from &lt;code&gt;curl&lt;/code&gt; to &lt;code&gt;bash&lt;/code&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;curl -o- &lt;a href="https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh"&gt;https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh&lt;/a&gt; | bash&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Visit &lt;a href="https://github.com/nvm-sh/nvm"&gt;NVM Github page&lt;/a&gt; for more detail info.&lt;br&gt;
Demonstration video, about how to install NVM, is available below.&lt;/p&gt;
&lt;h3&gt;
  
  
  Install Node.js
&lt;/h3&gt;

&lt;p&gt;To test if &lt;code&gt;nvm&lt;/code&gt; is already installed, run &lt;code&gt;nvm --version&lt;/code&gt; on your Ubuntu Terminal.&lt;br&gt;
If &lt;code&gt;nvm&lt;/code&gt; is not recognized by Ubuntu, close the Terminal and try again in a new Terminal.&lt;/p&gt;

&lt;p&gt;To install the latest node version, run below command on Ubuntu Terminal.&lt;br&gt;
&lt;code&gt;node&lt;/code&gt; is an alias for 'node latest version'.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;nvm install node&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To install node with a specific version, put he version like below:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;nvm install 14.7.0 &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To display list of available downable version of node.js, run:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;nvm ls-remote&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I mostly install LTS versions for have a more stable Node.js. To display only LTS versions run :&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;nvm ls-remote --lts&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To install the latest LTS:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;nvm install 'lts/*'&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To install the latest version of a specific codename LTS:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;nvm install lts/hydrogen&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The following command can be used to install LTS version:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;nvm install --lts &lt;br&gt;
nvm install --lts=argon &lt;br&gt;
nvm install 'lts/*' &lt;br&gt;
nvm install lts/hydrogen &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To select version of node.js to be used, use the command &lt;code&gt;use&lt;/code&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;nvm use 20.04&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Up until this point we already have Node.js installed on our Ubuntu WSL. That means we can develop apps in Linux environment on our Windows machine. If you are using VSCode as IDE, you can install extension to access WSL system file.&lt;/p&gt;

&lt;p&gt;This is only a demo of using Linux WSL as our development environment. &lt;br&gt;
We can also install other tools for other programming languages.&lt;/p&gt;

&lt;p&gt;&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/uYkNbdxf1Co"&gt;
&lt;/iframe&gt;
&lt;/p&gt;
Video: How to Install NVm (Node Version Manager) and Node.js in Windows 11





&lt;h3&gt;
  
  
  Reset Ubuntu
&lt;/h3&gt;

&lt;p&gt;Once we feel to have a clean dev environment, we can reset the Ubuntu from start. After reset the Ubuntu we will be prompted to input username and password again before start using Ubuntu.&lt;/p&gt;

&lt;p&gt;Follow steps below to reset Ubuntu:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;On Windows, search and open &lt;code&gt;Settings&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;On the navigation (left side) use up/down arrow to select &lt;code&gt;Apps&lt;/code&gt; and then press &lt;code&gt;Enter&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;Tab&lt;/code&gt; to move focus to selected &lt;code&gt;Apps&lt;/code&gt; section.&lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;Tab&lt;/code&gt; to move focus to &lt;code&gt;Apps and Features&lt;/code&gt; then press &lt;code&gt;Enter&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;Tab&lt;/code&gt; several times until find &lt;code&gt;Apps list&lt;/code&gt;, which contains list of applications. Prior to the Apps list there is a search box to filter the apps.&lt;/li&gt;
&lt;li&gt;Use up / down arrow to look for 'Ubuntu' app.&lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;Tab&lt;/code&gt; once to focus on the overflow button.&lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;Enter&lt;/code&gt; on the &lt;code&gt;Advanced Options&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;Tab&lt;/code&gt; multiple times to move focus to &lt;code&gt;Reset grouping&lt;/code&gt;. Afterward press &lt;code&gt;Tab&lt;/code&gt; 2 more times to focus on the &lt;code&gt;Reset&lt;/code&gt; button, then press &lt;code&gt;Enter&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;After Ubuntu app has been reset, go to &lt;code&gt;Windows Start Menu&lt;/code&gt; to search and run the Ubuntu app.&lt;/li&gt;
&lt;li&gt;Run the Ubuntu app then provide the prompted username and password. Ubuntu is now ready to be used again from the fresh start. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/elf4y2MdKb8"&gt;
&lt;/iframe&gt;
&lt;/p&gt;
Video: Reset Ubuntu WSL in Windows 11 using NVDA





&lt;h2&gt;
  
  
  Conclusion and Docker
&lt;/h2&gt;

&lt;p&gt;WSL, Windows Subsystem for Linux, is a breakthrough technology for developers to have multiple and different ecosystem in one machine.&lt;br&gt;
This option is much practical for software developers compare to use technology such as virtual machine,&lt;br&gt;
since developers mostly only want separation  down to OS layer and no separation required onn physical layers (memory allocation).&lt;/p&gt;

&lt;p&gt;Next, we are going to install Docker wich offers more portability and modularity.&lt;br&gt;
Docker natively runs on Linux. That is why we need to install WSL prior to installing Docker in Windows.&lt;/p&gt;

&lt;p&gt;Hope this post useful. Cheers!&lt;/p&gt;

</description>
      <category>wsl</category>
      <category>ubuntu</category>
      <category>node</category>
      <category>windows11</category>
    </item>
  </channel>
</rss>
