diff --git a/src/vs/platform/editor/common/editor.ts b/src/vs/platform/editor/common/editor.ts index bb9749eead6..05962f6e99d 100644 --- a/src/vs/platform/editor/common/editor.ts +++ b/src/vs/platform/editor/common/editor.ts @@ -198,4 +198,9 @@ export interface ITextEditorOptions extends IEditorOptions { endLineNumber?: number; endColumn?: number; }; + + /** + * Option to scroll vertically or horizontally as necessary and reveal a range centered vertically only if it lies outside the viewport. + */ + revealInCenterIfOutsideViewport?: boolean; } \ No newline at end of file diff --git a/src/vs/workbench/common/editor.ts b/src/vs/workbench/common/editor.ts index 00a6051677b..60bbf111dd6 100644 --- a/src/vs/workbench/common/editor.ts +++ b/src/vs/workbench/common/editor.ts @@ -596,6 +596,7 @@ export class TextEditorOptions extends EditorOptions { protected endLineNumber: number; protected endColumn: number; + private revealInCenterIfOutsideViewport: boolean; private editorViewState: IEditorViewState; private editorOptions: ICodeEditorOptions; @@ -631,6 +632,10 @@ export class TextEditorOptions extends EditorOptions { options.inactive = true; } + if (input.options.revealInCenterIfOutsideViewport) { + options.revealInCenterIfOutsideViewport = true; + } + if (typeof input.options.index === 'number') { options.index = input.options.index; } @@ -737,7 +742,11 @@ export class TextEditorOptions extends EditorOptions { endColumn: this.endColumn }; editor.setSelection(range); - editor.revealRangeInCenter(range); + if (this.revealInCenterIfOutsideViewport) { + editor.revealRangeInCenterIfOutsideViewport(range); + } else { + editor.revealRangeInCenter(range); + } } // Reveal @@ -747,7 +756,11 @@ export class TextEditorOptions extends EditorOptions { column: this.startColumn }; editor.setPosition(pos); - editor.revealPositionInCenter(pos); + if (this.revealInCenterIfOutsideViewport) { + editor.revealPositionInCenterIfOutsideViewport(pos); + } else { + editor.revealPositionInCenter(pos); + } } gotApplied = true; diff --git a/src/vs/workbench/parts/debug/browser/debugActions.ts b/src/vs/workbench/parts/debug/browser/debugActions.ts index 384074d49b0..8061a47920f 100644 --- a/src/vs/workbench/parts/debug/browser/debugActions.ts +++ b/src/vs/workbench/parts/debug/browser/debugActions.ts @@ -716,7 +716,8 @@ export class FocusProcessAction extends AbstractDebugAction { options: { preserveFocus: true, selection: { startLineNumber: stackFrame.lineNumber, startColumn: 1 }, - revealIfVisible: true + revealIfVisible: true, + revealInCenterIfOutsideViewport: true } }); } diff --git a/src/vs/workbench/parts/debug/electron-browser/debugService.ts b/src/vs/workbench/parts/debug/electron-browser/debugService.ts index 99468b35bd6..16063ad719c 100644 --- a/src/vs/workbench/parts/debug/electron-browser/debugService.ts +++ b/src/vs/workbench/parts/debug/electron-browser/debugService.ts @@ -278,7 +278,8 @@ export class DebugService implements debug.IDebugService { resource: stackFrameToFocus.source.uri, options: { selection: { startLineNumber: stackFrameToFocus.lineNumber, startColumn: 1 }, - revealIfVisible: true + revealIfVisible: true, + revealInCenterIfOutsideViewport: true } }); } else { diff --git a/src/vs/workbench/parts/debug/electron-browser/debugViewer.ts b/src/vs/workbench/parts/debug/electron-browser/debugViewer.ts index 488c44687be..2ec080aebc4 100644 --- a/src/vs/workbench/parts/debug/electron-browser/debugViewer.ts +++ b/src/vs/workbench/parts/debug/electron-browser/debugViewer.ts @@ -324,7 +324,8 @@ export class CallStackController extends BaseDebugController { options: { preserveFocus, selection: { startLineNumber: stackFrame.lineNumber, startColumn: 1 }, - revealIfVisible: true + revealIfVisible: true, + revealInCenterIfOutsideViewport: true }, }, sideBySide); } @@ -1367,7 +1368,8 @@ export class BreakpointsController extends BaseDebugController { options: { preserveFocus, selection: { startLineNumber: breakpoint.lineNumber, startColumn: 1 }, - revealIfVisible: true + revealIfVisible: true, + revealInCenterIfOutsideViewport: true } }, sideBySide).done(undefined, errors.onUnexpectedError); }