From cbf1ef20ed2bae8ed00e73fc0b9f55e75ded423e Mon Sep 17 00:00:00 2001 From: David Weber Date: Mon, 30 Oct 2017 02:59:57 -0400 Subject: [PATCH] Add line number interval setting --- .../viewParts/lineNumbers/lineNumbers.ts | 4 +- .../common/config/commonEditorConfig.ts | 6 ++ src/vs/editor/common/config/editorOptions.ts | 13 ++++ .../viewLayout/editorLayoutProvider.test.ts | 69 +++++++++++++++++++ src/vs/monaco.d.ts | 6 ++ 5 files changed, 97 insertions(+), 1 deletion(-) diff --git a/src/vs/editor/browser/viewParts/lineNumbers/lineNumbers.ts b/src/vs/editor/browser/viewParts/lineNumbers/lineNumbers.ts index f22cabdff44..abe1440d783 100644 --- a/src/vs/editor/browser/viewParts/lineNumbers/lineNumbers.ts +++ b/src/vs/editor/browser/viewParts/lineNumbers/lineNumbers.ts @@ -27,6 +27,7 @@ export class LineNumbersOverlay extends DynamicViewOverlay { private _renderRelativeLineNumbers: boolean; private _lineNumbersLeft: number; private _lineNumbersWidth: number; + private _lineNumberInterval: number; private _lastCursorModelPosition: Position; private _renderResult: string[]; @@ -50,6 +51,7 @@ export class LineNumbersOverlay extends DynamicViewOverlay { this._renderRelativeLineNumbers = config.viewInfo.renderRelativeLineNumbers; this._lineNumbersLeft = config.layoutInfo.lineNumbersLeft; this._lineNumbersWidth = config.layoutInfo.lineNumbersWidth; + this._lineNumberInterval = config.viewInfo.lineNumberInterval; } public dispose(): void { @@ -133,7 +135,7 @@ export class LineNumbersOverlay extends DynamicViewOverlay { let lineIndex = lineNumber - visibleStartLineNumber; let renderLineNumber = this._getLineRenderLineNumber(lineNumber); - if (renderLineNumber) { + if (renderLineNumber && lineIndex % this._lineNumberInterval === 0) { output[lineIndex] = ( common + renderLineNumber diff --git a/src/vs/editor/common/config/commonEditorConfig.ts b/src/vs/editor/common/config/commonEditorConfig.ts index 76613d9b7c4..9f9d08410a8 100644 --- a/src/vs/editor/common/config/commonEditorConfig.ts +++ b/src/vs/editor/common/config/commonEditorConfig.ts @@ -207,6 +207,12 @@ const editorConfiguration: IConfigurationNode = { 'default': 'on', 'description': nls.localize('lineNumbers', "Controls the display of line numbers. Possible values are 'on', 'off', and 'relative'. 'relative' shows the line count from the current cursor position.") }, + 'editor.lineNumberInterval': { + 'type': 'number', + 'default': EDITOR_DEFAULTS.viewInfo.lineNumberInterval, + 'minimum': 1, + 'description': nls.localize('lineNumberInterval', "Controls the interval at which line numbers are shown. Should be a positive integer.") + }, 'editor.rulers': { 'type': 'array', 'items': { diff --git a/src/vs/editor/common/config/editorOptions.ts b/src/vs/editor/common/config/editorOptions.ts index ebb78f046b7..3424567e0b3 100644 --- a/src/vs/editor/common/config/editorOptions.ts +++ b/src/vs/editor/common/config/editorOptions.ts @@ -161,6 +161,11 @@ export interface IEditorOptions { * Defaults to true. */ lineNumbers?: 'on' | 'off' | 'relative' | ((lineNumber: number) => string); + /** + * Controls the interval at which line numbers are rendered. + * Defaults to 1. + */ + lineNumberInterval?: number; /** * Should the corresponding line be selected when clicking on the line number? * Defaults to true. @@ -762,6 +767,7 @@ export interface InternalEditorViewOptions { readonly renderCustomLineNumbers: (lineNumber: number) => string; readonly renderRelativeLineNumbers: boolean; readonly selectOnLineNumbers: boolean; + readonly lineNumberInterval: number; readonly glyphMargin: boolean; readonly revealHorizontalRightPadding: number; readonly roundedSelection: boolean; @@ -1031,6 +1037,7 @@ export class InternalEditorOptions { && a.renderCustomLineNumbers === b.renderCustomLineNumbers && a.renderRelativeLineNumbers === b.renderRelativeLineNumbers && a.selectOnLineNumbers === b.selectOnLineNumbers + && a.lineNumberInterval === b.lineNumberInterval && a.glyphMargin === b.glyphMargin && a.revealHorizontalRightPadding === b.revealHorizontalRightPadding && a.roundedSelection === b.roundedSelection @@ -1629,6 +1636,7 @@ export class EditorOptionsValidator { renderCustomLineNumbers: renderCustomLineNumbers, renderRelativeLineNumbers: renderRelativeLineNumbers, selectOnLineNumbers: _boolean(opts.selectOnLineNumbers, defaults.selectOnLineNumbers), + lineNumberInterval: _clampedInt(opts.lineNumberInterval, defaults.lineNumberInterval, defaults.lineNumberInterval, Constants.MAX_UINT_32), glyphMargin: _boolean(opts.glyphMargin, defaults.glyphMargin), revealHorizontalRightPadding: _clampedInt(opts.revealHorizontalRightPadding, defaults.revealHorizontalRightPadding, 0, 1000), roundedSelection: _boolean(opts.roundedSelection, defaults.roundedSelection), @@ -1732,6 +1740,7 @@ export class InternalEditorOptionsFactory { renderCustomLineNumbers: opts.viewInfo.renderCustomLineNumbers, renderRelativeLineNumbers: opts.viewInfo.renderRelativeLineNumbers, selectOnLineNumbers: opts.viewInfo.selectOnLineNumbers, + lineNumberInterval: opts.viewInfo.lineNumberInterval, glyphMargin: opts.viewInfo.glyphMargin, revealHorizontalRightPadding: opts.viewInfo.revealHorizontalRightPadding, roundedSelection: (accessibilityIsOn ? false : opts.viewInfo.roundedSelection), // DISABLED WHEN SCREEN READER IS ATTACHED @@ -1823,6 +1832,7 @@ export class InternalEditorOptionsFactory { showGlyphMargin: opts.viewInfo.glyphMargin, lineHeight: env.fontInfo.lineHeight, showLineNumbers: opts.viewInfo.renderLineNumbers, + lineNumberInterval: opts.viewInfo.lineNumberInterval, lineNumbersMinChars: opts.lineNumbersMinChars, lineNumbersDigitCount: env.lineNumbersDigitCount, lineDecorationsWidth: lineDecorationsWidth, @@ -1951,6 +1961,7 @@ export interface IEditorLayoutProviderOpts { lineHeight: number; showLineNumbers: boolean; + lineNumberInterval: number; lineNumbersMinChars: number; lineNumbersDigitCount: number; @@ -1980,6 +1991,7 @@ export class EditorLayoutProvider { const showGlyphMargin = _opts.showGlyphMargin; const lineHeight = _opts.lineHeight | 0; const showLineNumbers = _opts.showLineNumbers; + const lineNumberInterval = _opts.lineNumberInterval; const lineNumbersMinChars = _opts.lineNumbersMinChars | 0; const lineNumbersDigitCount = _opts.lineNumbersDigitCount | 0; const lineDecorationsWidth = _opts.lineDecorationsWidth | 0; @@ -2156,6 +2168,7 @@ export const EDITOR_DEFAULTS: IValidatedEditorOptions = { renderCustomLineNumbers: null, renderRelativeLineNumbers: false, selectOnLineNumbers: true, + lineNumberInterval: 1, glyphMargin: true, revealHorizontalRightPadding: 30, roundedSelection: true, diff --git a/src/vs/editor/test/common/viewLayout/editorLayoutProvider.test.ts b/src/vs/editor/test/common/viewLayout/editorLayoutProvider.test.ts index 53ac8d481a6..3ce60685cdc 100644 --- a/src/vs/editor/test/common/viewLayout/editorLayoutProvider.test.ts +++ b/src/vs/editor/test/common/viewLayout/editorLayoutProvider.test.ts @@ -21,6 +21,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { showGlyphMargin: false, lineHeight: 16, showLineNumbers: false, + lineNumberInterval: 1, lineNumbersMinChars: 0, lineNumbersDigitCount: 1, lineDecorationsWidth: 10, @@ -77,6 +78,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { showGlyphMargin: false, lineHeight: 16, showLineNumbers: false, + lineNumberInterval: 1, lineNumbersMinChars: 0, lineNumbersDigitCount: 1, lineDecorationsWidth: 10, @@ -133,6 +135,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { showGlyphMargin: false, lineHeight: 16, showLineNumbers: false, + lineNumberInterval: 1, lineNumbersMinChars: 0, lineNumbersDigitCount: 1, lineDecorationsWidth: 10, @@ -189,6 +192,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { showGlyphMargin: false, lineHeight: 16, showLineNumbers: false, + lineNumberInterval: 1, lineNumbersMinChars: 0, lineNumbersDigitCount: 1, lineDecorationsWidth: 10, @@ -245,6 +249,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { showGlyphMargin: false, lineHeight: 16, showLineNumbers: false, + lineNumberInterval: 1, lineNumbersMinChars: 5, lineNumbersDigitCount: 1, lineDecorationsWidth: 10, @@ -301,6 +306,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { showGlyphMargin: false, lineHeight: 16, showLineNumbers: true, + lineNumberInterval: 1, lineNumbersMinChars: 5, lineNumbersDigitCount: 1, lineDecorationsWidth: 10, @@ -357,6 +363,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { showGlyphMargin: false, lineHeight: 16, showLineNumbers: true, + lineNumberInterval: 1, lineNumbersMinChars: 5, lineNumbersDigitCount: 5, lineDecorationsWidth: 10, @@ -413,6 +420,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { showGlyphMargin: false, lineHeight: 16, showLineNumbers: true, + lineNumberInterval: 1, lineNumbersMinChars: 5, lineNumbersDigitCount: 6, lineDecorationsWidth: 10, @@ -469,6 +477,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { showGlyphMargin: false, lineHeight: 16, showLineNumbers: true, + lineNumberInterval: 1, lineNumbersMinChars: 5, lineNumbersDigitCount: 6, lineDecorationsWidth: 10, @@ -525,6 +534,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { showGlyphMargin: false, lineHeight: 16, showLineNumbers: true, + lineNumberInterval: 1, lineNumbersMinChars: 5, lineNumbersDigitCount: 6, lineDecorationsWidth: 10, @@ -581,6 +591,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { showGlyphMargin: false, lineHeight: 16, showLineNumbers: false, + lineNumberInterval: 1, lineNumbersMinChars: 0, lineNumbersDigitCount: 1, lineDecorationsWidth: 10, @@ -637,6 +648,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { showGlyphMargin: false, lineHeight: 16, showLineNumbers: false, + lineNumberInterval: 1, lineNumbersMinChars: 0, lineNumbersDigitCount: 1, lineDecorationsWidth: 10, @@ -693,6 +705,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { showGlyphMargin: false, lineHeight: 16, showLineNumbers: false, + lineNumberInterval: 1, lineNumbersMinChars: 0, lineNumbersDigitCount: 1, lineDecorationsWidth: 10, @@ -733,6 +746,62 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { verticalScrollbarWidth: 0, horizontalScrollbarHeight: 0, + overviewRuler: { + top: 0, + width: 0, + height: 800, + right: 0 + } + }); + }); + test('EditorLayoutProvider 10 - render editor with lineNumberInterval = 1', () => { + doTest({ + outerWidth: 1000, + outerHeight: 800, + showGlyphMargin: false, + lineHeight: 16, + showLineNumbers: false, + lineNumberInterval: 1, + lineNumbersMinChars: 0, + lineNumbersDigitCount: 1, + lineDecorationsWidth: 10, + typicalHalfwidthCharacterWidth: 10, + maxDigitWidth: 10, + verticalScrollbarWidth: 0, + horizontalScrollbarHeight: 0, + scrollbarArrowSize: 0, + verticalScrollbarHasArrows: false, + minimap: false, + minimapRenderCharacters: true, + minimapMaxColumn: 150, + pixelRatio: 1, + }, { + width: 1000, + height: 800, + + glyphMarginLeft: 0, + glyphMarginWidth: 0, + glyphMarginHeight: 800, + + lineNumbersLeft: 0, + lineNumbersWidth: 0, + lineNumbersHeight: 800, + + decorationsLeft: 0, + decorationsWidth: 10, + decorationsHeight: 800, + + contentLeft: 10, + contentWidth: 990, + contentHeight: 800, + + renderMinimap: RenderMinimap.None, + minimapWidth: 0, + viewportColumn: 99, + + verticalScrollbarWidth: 0, + horizontalScrollbarHeight: 0, + overviewRuler: { top: 0, width: 0, diff --git a/src/vs/monaco.d.ts b/src/vs/monaco.d.ts index e5901d0c0da..270d34976b5 100644 --- a/src/vs/monaco.d.ts +++ b/src/vs/monaco.d.ts @@ -2746,6 +2746,11 @@ declare module monaco.editor { * Defaults to true. */ lineNumbers?: 'on' | 'off' | 'relative' | ((lineNumber: number) => string); + /** + * Controls the interval at which line numbers are rendered. + * Defaults to 1. + */ + lineNumberInterval?: number; /** * Should the corresponding line be selected when clicking on the line number? * Defaults to true. @@ -3280,6 +3285,7 @@ declare module monaco.editor { readonly renderCustomLineNumbers: (lineNumber: number) => string; readonly renderRelativeLineNumbers: boolean; readonly selectOnLineNumbers: boolean; + readonly lineNumberInterval: number; readonly glyphMargin: boolean; readonly revealHorizontalRightPadding: number; readonly roundedSelection: boolean; -- GitLab