From 60c2248cb4cdd80df5f2c3759c641a024e6e7987 Mon Sep 17 00:00:00 2001 From: Logan Ramos Date: Tue, 2 Jul 2019 15:09:30 -0700 Subject: [PATCH 1/4] Centers scroll in viewport --- addons/xterm-addon-search/src/SearchAddon.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/addons/xterm-addon-search/src/SearchAddon.ts b/addons/xterm-addon-search/src/SearchAddon.ts index 57f115f8e..5c4e28d8e 100644 --- a/addons/xterm-addon-search/src/SearchAddon.ts +++ b/addons/xterm-addon-search/src/SearchAddon.ts @@ -4,6 +4,7 @@ */ import { Terminal, IDisposable, ITerminalAddon } from 'xterm'; +import { floor } from 'mathjs'; export interface ISearchOptions { regex?: boolean; @@ -38,7 +39,7 @@ export class SearchAddon implements ITerminalAddon { this._terminal = terminal; } - public dispose(): void {} + public dispose(): void { } /** * Find the next instance of the term, then scroll to and select it. If it @@ -234,7 +235,7 @@ export class SearchAddon implements ITerminalAddon { */ private _isWholeWord(searchIndex: number, line: string, term: string): boolean { return (((searchIndex === 0) || (NON_WORD_CHARACTERS.indexOf(line[searchIndex - 1]) !== -1)) && - (((searchIndex + term.length) === line.length) || (NON_WORD_CHARACTERS.indexOf(line[searchIndex + term.length]) !== -1))); + (((searchIndex + term.length) === line.length) || (NON_WORD_CHARACTERS.indexOf(line[searchIndex + term.length]) !== -1))); } /** @@ -373,7 +374,9 @@ export class SearchAddon implements ITerminalAddon { return false; } terminal.select(result.col, result.row, result.term.length); - terminal.scrollLines(result.row - terminal.buffer.viewportY); + let scroll = result.row - terminal.buffer.viewportY; + scroll = scroll - floor(terminal.rows / 2); + terminal.scrollLines(scroll); return true; } } From 345bf113893ec6042084647b12e5d98b1aa6ce43 Mon Sep 17 00:00:00 2001 From: Logan Ramos Date: Tue, 2 Jul 2019 15:57:23 -0700 Subject: [PATCH 2/4] Remove extra import --- addons/xterm-addon-search/src/SearchAddon.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/addons/xterm-addon-search/src/SearchAddon.ts b/addons/xterm-addon-search/src/SearchAddon.ts index 5c4e28d8e..8fcfc6908 100644 --- a/addons/xterm-addon-search/src/SearchAddon.ts +++ b/addons/xterm-addon-search/src/SearchAddon.ts @@ -4,7 +4,6 @@ */ import { Terminal, IDisposable, ITerminalAddon } from 'xterm'; -import { floor } from 'mathjs'; export interface ISearchOptions { regex?: boolean; @@ -375,7 +374,7 @@ export class SearchAddon implements ITerminalAddon { } terminal.select(result.col, result.row, result.term.length); let scroll = result.row - terminal.buffer.viewportY; - scroll = scroll - floor(terminal.rows / 2); + scroll = scroll - Math.floor(terminal.rows / 2); terminal.scrollLines(scroll); return true; } From 2a405d5f9765319475b01781250082fbccea89e2 Mon Sep 17 00:00:00 2001 From: Logan Ramos Date: Wed, 3 Jul 2019 08:37:59 -0700 Subject: [PATCH 3/4] Fix scroll bar logic --- src/browser/services/SelectionService.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/browser/services/SelectionService.ts b/src/browser/services/SelectionService.ts index 7fd821fb7..6a9498a14 100644 --- a/src/browser/services/SelectionService.ts +++ b/src/browser/services/SelectionService.ts @@ -506,7 +506,7 @@ export class SelectionService implements ISelectionService { } // Return early if the click event is not in the buffer (eg. in scroll bar) - if (line.length >= this._model.selectionStart[0]) { + if (line.length === this._model.selectionStart[0]) { return; } From 048e95e34b55307fb72ca8b816ced8a31c8a8965 Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Wed, 3 Jul 2019 10:23:53 -0700 Subject: [PATCH 4/4] Remove blankLine localized string Using a nbsp is more correct and lets the screen reader handle how it wants Fixes #2260 --- src/AccessibilityManager.ts | 6 +++++- src/browser/LocalizableStrings.ts | 1 - typings/xterm.d.ts | 5 ----- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/AccessibilityManager.ts b/src/AccessibilityManager.ts index 9124a4775..915a86d60 100644 --- a/src/AccessibilityManager.ts +++ b/src/AccessibilityManager.ts @@ -258,7 +258,11 @@ export class AccessibilityManager extends Disposable { const posInSet = (buffer.ydisp + i + 1).toString(); const element = this._rowElements[i]; if (element) { - element.textContent = lineData.length === 0 ? Strings.blankLine : lineData; + if (lineData.length === 0) { + element.innerHTML = ' '; + } else { + element.textContent = lineData; + } element.setAttribute('aria-posinset', posInSet); element.setAttribute('aria-setsize', setSize); } diff --git a/src/browser/LocalizableStrings.ts b/src/browser/LocalizableStrings.ts index 86f0ebe13..8e7823333 100644 --- a/src/browser/LocalizableStrings.ts +++ b/src/browser/LocalizableStrings.ts @@ -3,6 +3,5 @@ * @license MIT */ -export let blankLine = 'Blank line'; export let promptLabel = 'Terminal input'; export let tooMuchOutput = 'Too much output to announce, navigate to rows manually to read'; diff --git a/typings/xterm.d.ts b/typings/xterm.d.ts index be3018848..6ef10b629 100644 --- a/typings/xterm.d.ts +++ b/typings/xterm.d.ts @@ -316,11 +316,6 @@ declare module 'xterm' { * The set of localizable strings. */ export interface ILocalizableStrings { - /** - * Announcement for a blank line when `screenReaderMode` is enabled. - */ - blankLine: string; - /** * The aria label for the underlying input textarea for the terminal. */