UIA: support movement by page #18190

Open
opened 2026-01-31 06:06:24 +00:00 by claunia · 5 comments
Owner

Originally created by @codeofdusk on GitHub (Aug 16, 2022).

Originally assigned to: @carlos-zamora on GitHub.

Description of the new feature/enhancement

In https://github.com/nvaccess/nvda/pull/13671#issuecomment-1138862155 @carlos-zamora thought that wt and conhost should implement movement, expansion, etc. by the UIA "page" unit. This would help NVDA to solve nvaccess/nvda#13157 and improve the UX for other UIA clients.

Proposed technical implementation details (optional)

The "page" unit should represent one visible screen of text, and behave similar to Microsoft Word's implementation. In other words:

  1. Run the "less" command, or anything else that paginates output.
  2. Jump to the end of the text. For iinstance, create a document range and "collapse" it by moving its start to its end, creating a degenerate range.
  3. Move this new degenerate range back one page. It should now be a degenerate range at the start of the currently visible screen of output.
  4. Expand to enclosing unit. The range should now span the visible output.
  5. Move to the previous page. The range should now contain the last visible screen of output.
Originally created by @codeofdusk on GitHub (Aug 16, 2022). Originally assigned to: @carlos-zamora on GitHub. <!-- 🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨 I ACKNOWLEDGE THE FOLLOWING BEFORE PROCEEDING: 1. If I delete this entire template and go my own path, the core team may close my issue without further explanation or engagement. 2. If I list multiple bugs/concerns in this one issue, the core team may close my issue without further explanation or engagement. 3. If I write an issue that has many duplicates, the core team may close my issue without further explanation or engagement (and without necessarily spending time to find the exact duplicate ID number). 4. If I leave the title incomplete when filing the issue, the core team may close my issue without further explanation or engagement. 5. If I file something completely blank in the body, the core team may close my issue without further explanation or engagement. All good? Then proceed! --> # Description of the new feature/enhancement In https://github.com/nvaccess/nvda/pull/13671#issuecomment-1138862155 @carlos-zamora thought that wt and conhost should implement movement, expansion, etc. by the UIA "page" unit. This would help NVDA to solve nvaccess/nvda#13157 and improve the UX for other UIA clients. <!-- A clear and concise description of what the problem is that the new feature would solve. Describe why and how a user would use this new functionality (if applicable). --> # Proposed technical implementation details (optional) The "page" unit should represent one visible screen of text, and behave similar to Microsoft Word's implementation. In other words: 1. Run the "less" command, or anything else that paginates output. 2. Jump to the end of the text. For iinstance, create a document range and "collapse" it by moving its start to its end, creating a degenerate range. 3. Move this new degenerate range back one page. It should now be a degenerate range at the start of the currently visible screen of output. 4. Expand to enclosing unit. The range should now span the visible output. 5. Move to the previous page. The range should now contain the last visible screen of output. <!-- A clear and concise description of what you want to happen. -->
Author
Owner

@carlos-zamora commented on GitHub (Aug 16, 2022):

This should be relatively easy. Here's a checklist of things needed:

  • UiaTextRangeBase
    • Add _moveEndpointByUnitPage() and call it in Move() and MoveEndpointByUnit()
    • Update ExpandToEnclosingUnit()
  • Testing
@carlos-zamora commented on GitHub (Aug 16, 2022): This should be relatively easy. Here's a checklist of things needed: - **UiaTextRangeBase** - [ ] Add `_moveEndpointByUnitPage()` and call it in `Move()` and `MoveEndpointByUnit()` - [ ] Update `ExpandToEnclosingUnit()` - **Testing** - [ ] Update the generated tests. See [TestTableWriter](https://github.com/microsoft/terminal/tree/main/tools/TestTableWriter) for more details
Author
Owner

@carlos-zamora commented on GitHub (Aug 16, 2022):

Also tagging this up for the Inclusion Backlog so that we get accessibility points for it

@carlos-zamora commented on GitHub (Aug 16, 2022): Also tagging this up for the Inclusion Backlog so that we get accessibility points for it
Author
Owner

@mltony commented on GitHub (Jan 20, 2024):

Is there any progress on this? Lack of page navigation support prevents screenreader users from effectively working with many unix tools with latest NVDA.

@mltony commented on GitHub (Jan 20, 2024): Is there any progress on this? Lack of page navigation support prevents screenreader users from effectively working with many unix tools with latest NVDA.
Author
Owner

@CyrilleB79 commented on GitHub (Nov 5, 2025):

It's been 3 years since this issue has been opened.
Is there a way to priorize this?
Working with NVDA in Windows Terminal remains really uncomfortable.
Thanks!

@CyrilleB79 commented on GitHub (Nov 5, 2025): It's been 3 years since this issue has been opened. Is there a way to priorize this? Working with NVDA in Windows Terminal remains really uncomfortable. Thanks!
Author
Owner

@DHowett commented on GitHub (Nov 5, 2025):

Nobody has yet documented what a "page" sized unit should be, so there is no progress.

If we make a "page" a unit the size of the screen, it only gives you a false equivalence when e.g. a pager application such as "less" is in use.

Terminal can only allow you to move forwards and backwards within its own scroll buffer.

There is no way for Terminal to navigate back "one page" inside the hosted application; that application fully controls all content written to the screen, and it is not required to emit that content into the scroll-back buffer.

And so, in a huge number of cases, navigating by "page" will not present the content you are expecting... just like scrolling up the screen buffer line by line will not present the content you are expecting.

@DHowett commented on GitHub (Nov 5, 2025): Nobody has yet documented what a "page" sized unit should be, so there is no progress. If we make a "page" a unit the size of the screen, it only gives you a false equivalence when e.g. a pager application such as "less" is in use. Terminal can only allow you to move forwards and backwards within its own scroll buffer. There is no way for _Terminal_ to navigate back "one page" inside the hosted application; that application fully controls all content written to the screen, and it is not required to emit that content into the scroll-back buffer. And so, in a huge number of cases, navigating by "page" will not present the content you are expecting... just like scrolling up the screen buffer line by line will not present the content you are expecting.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/terminal#18190