From 8ffa52cbcf12d4061853d855e0675f2a700dbadf Mon Sep 17 00:00:00 2001 From: meganrogge Date: Thu, 5 Oct 2023 14:54:01 -0700 Subject: [PATCH] fix #194547 --- src/vs/platform/terminal/common/terminal.ts | 1 + .../accessibility/browser/accessibleView.ts | 17 ++++++++++++----- .../terminal/common/terminalConfiguration.ts | 5 +++++ 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/vs/platform/terminal/common/terminal.ts b/src/vs/platform/terminal/common/terminal.ts index 066d1078bc0..2465abe9ad6 100644 --- a/src/vs/platform/terminal/common/terminal.ts +++ b/src/vs/platform/terminal/common/terminal.ts @@ -116,6 +116,7 @@ export const enum TerminalSettingId { SmoothScrolling = 'terminal.integrated.smoothScrolling', IgnoreBracketedPasteMode = 'terminal.integrated.ignoreBracketedPasteMode', FocusAfterRun = 'terminal.integrated.focusAfterRun', + AccessibleViewPreserveCursorPosition = 'terminal.integrated.accessibleViewPreserveCursorPosition', // Debug settings that are hidden from user diff --git a/src/vs/workbench/contrib/accessibility/browser/accessibleView.ts b/src/vs/workbench/contrib/accessibility/browser/accessibleView.ts index 57019a47e65..95848abd6aa 100644 --- a/src/vs/workbench/contrib/accessibility/browser/accessibleView.ts +++ b/src/vs/workbench/contrib/accessibility/browser/accessibleView.ts @@ -38,6 +38,7 @@ import { ILayoutService } from 'vs/platform/layout/browser/layoutService'; import { IOpenerService } from 'vs/platform/opener/common/opener'; import { IPickerQuickAccessItem } from 'vs/platform/quickinput/browser/pickerQuickAccess'; import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput'; +import { TerminalSettingId } from 'vs/platform/terminal/common/terminal'; import { AccessibilityVerbositySettingId, AccessibleViewProviderId, accessibilityHelpIsShown, accessibleViewCurrentProviderId, accessibleViewGoToSymbolSupported, accessibleViewIsShown, accessibleViewOnLastLine, accessibleViewSupportsNavigation, accessibleViewVerbosityEnabled } from 'vs/workbench/contrib/accessibility/browser/accessibilityConfiguration'; import { AccessibilityCommandId } from 'vs/workbench/contrib/accessibility/common/accessibilityCommands'; import { getSimpleEditorOptions } from 'vs/workbench/contrib/codeEditor/browser/simpleEditorOptions'; @@ -463,11 +464,17 @@ export class AccessibleView extends Disposable { this._editorWidget.updateOptions({ ariaLabel }); this._editorWidget.focus(); if (this._currentProvider?.options.positionBottom) { - const lastLine = this.editorWidget.getModel()?.getLineCount(); - const position = lastLine !== undefined && lastLine > 0 ? new Position(lastLine, 1) : undefined; - if (position) { - this._editorWidget.setPosition(position); - this._editorWidget.revealLine(position.lineNumber); + const currentPosition = this.editorWidget.getPosition(); + const defaultPosition = currentPosition && currentPosition?.lineNumber === 1 && currentPosition?.column === 1; + if (currentPosition && this._configurationService.getValue(TerminalSettingId.AccessibleViewPreserveCursorPosition) && !defaultPosition) { + this._editorWidget.setPosition(currentPosition); + } else { + const lastLine = this.editorWidget.getModel()?.getLineCount(); + const position = lastLine !== undefined && lastLine > 0 ? new Position(lastLine, 1) : undefined; + if (position) { + this._editorWidget.setPosition(position); + this._editorWidget.revealLine(position.lineNumber); + } } } }); diff --git a/src/vs/workbench/contrib/terminal/common/terminalConfiguration.ts b/src/vs/workbench/contrib/terminal/common/terminalConfiguration.ts index 41d07a65710..a12b0440283 100644 --- a/src/vs/workbench/contrib/terminal/common/terminalConfiguration.ts +++ b/src/vs/workbench/contrib/terminal/common/terminalConfiguration.ts @@ -614,6 +614,11 @@ const terminalConfiguration: IConfigurationNode = { localize('terminal.integrated.focusAfterRun.accessible-buffer', "Always focus the accessible buffer."), localize('terminal.integrated.focusAfterRun.none', "Do nothing."), ] + }, + [TerminalSettingId.AccessibleViewPreserveCursorPosition]: { + markdownDescription: localize('terminal.integrated.accessibleViewPreserveCursorPosition', "Preserve the cursor position on reopen of the terminal's accessible view rather than setting it to the bottom of the buffer."), + type: 'boolean', + default: false } } };