diff --git a/src/vs/editor/browser/controller/textAreaHandler.ts b/src/vs/editor/browser/controller/textAreaHandler.ts index d4428d9ce78..8656d4af624 100644 --- a/src/vs/editor/browser/controller/textAreaHandler.ts +++ b/src/vs/editor/browser/controller/textAreaHandler.ts @@ -25,6 +25,7 @@ import { PartFingerprints, PartFingerprint, ViewPart } from 'vs/editor/browser/v import { Margin } from 'vs/editor/browser/viewParts/margin/margin'; import { LineNumbersOverlay } from 'vs/editor/browser/viewParts/lineNumbers/lineNumbers'; import { BareFontInfo } from 'vs/editor/common/config/fontInfo'; +import { RenderLineNumbersType } from 'vs/editor/common/config/editorOptions'; export interface ITextAreaHandlerHelper { visibleRangeForPositionRelativeToEditor(lineNumber: number, column: number): HorizontalRange; @@ -481,7 +482,7 @@ export class TextAreaHandler extends ViewPart { if (this._context.configuration.editor.viewInfo.glyphMargin) { tac.setClassName('monaco-editor-background textAreaCover ' + Margin.CLASS_NAME); } else { - if (this._context.configuration.editor.viewInfo.renderLineNumbers) { + if (this._context.configuration.editor.viewInfo.renderLineNumbers !== RenderLineNumbersType.Off) { tac.setClassName('monaco-editor-background textAreaCover ' + LineNumbersOverlay.CLASS_NAME); } else { tac.setClassName('monaco-editor-background textAreaCover'); diff --git a/src/vs/editor/browser/viewParts/lineNumbers/lineNumbers.ts b/src/vs/editor/browser/viewParts/lineNumbers/lineNumbers.ts index f22cabdff44..4eab44b504d 100644 --- a/src/vs/editor/browser/viewParts/lineNumbers/lineNumbers.ts +++ b/src/vs/editor/browser/viewParts/lineNumbers/lineNumbers.ts @@ -14,6 +14,7 @@ import { ViewContext } from 'vs/editor/common/view/viewContext'; import { RenderingContext } from 'vs/editor/common/view/renderingContext'; import * as viewEvents from 'vs/editor/common/view/viewEvents'; import { Position } from 'vs/editor/common/core/position'; +import { RenderLineNumbersType } from 'vs/editor/common/config/editorOptions'; export class LineNumbersOverlay extends DynamicViewOverlay { @@ -22,9 +23,8 @@ export class LineNumbersOverlay extends DynamicViewOverlay { private _context: ViewContext; private _lineHeight: number; - private _renderLineNumbers: boolean; + private _renderLineNumbers: RenderLineNumbersType; private _renderCustomLineNumbers: (lineNumber: number) => string; - private _renderRelativeLineNumbers: boolean; private _lineNumbersLeft: number; private _lineNumbersWidth: number; @@ -47,7 +47,6 @@ export class LineNumbersOverlay extends DynamicViewOverlay { this._lineHeight = config.lineHeight; this._renderLineNumbers = config.viewInfo.renderLineNumbers; this._renderCustomLineNumbers = config.viewInfo.renderCustomLineNumbers; - this._renderRelativeLineNumbers = config.viewInfo.renderRelativeLineNumbers; this._lineNumbersLeft = config.layoutInfo.lineNumbersLeft; this._lineNumbersWidth = config.layoutInfo.lineNumbersWidth; } @@ -69,7 +68,7 @@ export class LineNumbersOverlay extends DynamicViewOverlay { const primaryViewPosition = e.selections[0].getPosition(); this._lastCursorModelPosition = this._context.model.coordinatesConverter.convertViewPositionToModelPosition(primaryViewPosition); - if (this._renderRelativeLineNumbers) { + if (this._renderLineNumbers === RenderLineNumbersType.Relative) { return true; } return false; @@ -106,7 +105,7 @@ export class LineNumbersOverlay extends DynamicViewOverlay { return this._renderCustomLineNumbers(modelLineNumber); } - if (this._renderRelativeLineNumbers) { + if (this._renderLineNumbers === RenderLineNumbersType.Relative) { let diff = Math.abs(this._lastCursorModelPosition.lineNumber - modelLineNumber); if (diff === 0) { return '' + modelLineNumber + ''; @@ -118,7 +117,7 @@ export class LineNumbersOverlay extends DynamicViewOverlay { } public prepareRender(ctx: RenderingContext): void { - if (!this._renderLineNumbers) { + if (this._renderLineNumbers === RenderLineNumbersType.Off) { this._renderResult = null; return; } @@ -166,4 +165,4 @@ registerThemingParticipant((theme, collector) => { if (lineNumbers) { collector.addRule(`.monaco-editor .line-numbers { color: ${lineNumbers}; }`); } -}); \ No newline at end of file +}); diff --git a/src/vs/editor/common/config/commonEditorConfig.ts b/src/vs/editor/common/config/commonEditorConfig.ts index 76613d9b7c4..9e671c1f61d 100644 --- a/src/vs/editor/common/config/commonEditorConfig.ts +++ b/src/vs/editor/common/config/commonEditorConfig.ts @@ -204,8 +204,13 @@ const editorConfiguration: IConfigurationNode = { 'editor.lineNumbers': { 'type': 'string', 'enum': ['off', 'on', 'relative'], + 'enumDescriptions': [ + nls.localize('lineNumbers.off', "Line numbers are not rendered."), + nls.localize('lineNumbers.on', "Line numbers are rendered as absolute number."), + nls.localize('lineNumbers.relative', "Line numbers are rendered as distance in lines to cursor position.") + ], '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.") + 'description': nls.localize('lineNumbers', "Controls the display of line numbers. Possible values are 'on', 'off', and 'relative'.") }, 'editor.rulers': { 'type': 'array', diff --git a/src/vs/editor/common/config/editorOptions.ts b/src/vs/editor/common/config/editorOptions.ts index ebb78f046b7..fbdc2384b21 100644 --- a/src/vs/editor/common/config/editorOptions.ts +++ b/src/vs/editor/common/config/editorOptions.ts @@ -753,14 +753,20 @@ export interface EditorWrappingInfo { readonly wordWrapBreakObtrusiveCharacters: string; } +export const enum RenderLineNumbersType { + Off = 0, + On = 1, + Relative = 2, + Custom = 3 +} + export interface InternalEditorViewOptions { readonly extraEditorClassName: string; readonly disableMonospaceOptimizations: boolean; readonly rulers: number[]; readonly ariaLabel: string; - readonly renderLineNumbers: boolean; + readonly renderLineNumbers: RenderLineNumbersType; readonly renderCustomLineNumbers: (lineNumber: number) => string; - readonly renderRelativeLineNumbers: boolean; readonly selectOnLineNumbers: boolean; readonly glyphMargin: boolean; readonly revealHorizontalRightPadding: number; @@ -1029,7 +1035,6 @@ export class InternalEditorOptions { && a.ariaLabel === b.ariaLabel && a.renderLineNumbers === b.renderLineNumbers && a.renderCustomLineNumbers === b.renderCustomLineNumbers - && a.renderRelativeLineNumbers === b.renderRelativeLineNumbers && a.selectOnLineNumbers === b.selectOnLineNumbers && a.glyphMargin === b.glyphMargin && a.revealHorizontalRightPadding === b.revealHorizontalRightPadding @@ -1558,9 +1563,8 @@ export class EditorOptionsValidator { rulers.sort(); } - let renderLineNumbers: boolean = defaults.renderLineNumbers; + let renderLineNumbers: RenderLineNumbersType = defaults.renderLineNumbers; let renderCustomLineNumbers: (lineNumber: number) => string = defaults.renderCustomLineNumbers; - let renderRelativeLineNumbers: boolean = defaults.renderRelativeLineNumbers; if (typeof opts.lineNumbers !== 'undefined') { let lineNumbers = opts.lineNumbers; @@ -1573,21 +1577,14 @@ export class EditorOptionsValidator { } if (typeof lineNumbers === 'function') { - renderLineNumbers = true; + renderLineNumbers = RenderLineNumbersType.Custom; renderCustomLineNumbers = lineNumbers; - renderRelativeLineNumbers = false; } else if (lineNumbers === 'relative') { - renderLineNumbers = true; - renderCustomLineNumbers = null; - renderRelativeLineNumbers = true; + renderLineNumbers = RenderLineNumbersType.Relative; } else if (lineNumbers === 'on') { - renderLineNumbers = true; - renderCustomLineNumbers = null; - renderRelativeLineNumbers = false; + renderLineNumbers = RenderLineNumbersType.On; } else { - renderLineNumbers = false; - renderCustomLineNumbers = null; - renderRelativeLineNumbers = false; + renderLineNumbers = RenderLineNumbersType.Off; } } @@ -1627,7 +1624,6 @@ export class EditorOptionsValidator { ariaLabel: _string(opts.ariaLabel, defaults.ariaLabel), renderLineNumbers: renderLineNumbers, renderCustomLineNumbers: renderCustomLineNumbers, - renderRelativeLineNumbers: renderRelativeLineNumbers, selectOnLineNumbers: _boolean(opts.selectOnLineNumbers, defaults.selectOnLineNumbers), glyphMargin: _boolean(opts.glyphMargin, defaults.glyphMargin), revealHorizontalRightPadding: _clampedInt(opts.revealHorizontalRightPadding, defaults.revealHorizontalRightPadding, 0, 1000), @@ -1730,7 +1726,6 @@ export class InternalEditorOptionsFactory { ariaLabel: (accessibilityIsOff ? nls.localize('accessibilityOffAriaLabel', "The editor is not accessible at this time. Press Alt+F1 for options.") : opts.viewInfo.ariaLabel), renderLineNumbers: opts.viewInfo.renderLineNumbers, renderCustomLineNumbers: opts.viewInfo.renderCustomLineNumbers, - renderRelativeLineNumbers: opts.viewInfo.renderRelativeLineNumbers, selectOnLineNumbers: opts.viewInfo.selectOnLineNumbers, glyphMargin: opts.viewInfo.glyphMargin, revealHorizontalRightPadding: opts.viewInfo.revealHorizontalRightPadding, @@ -1822,7 +1817,7 @@ export class InternalEditorOptionsFactory { outerHeight: env.outerHeight, showGlyphMargin: opts.viewInfo.glyphMargin, lineHeight: env.fontInfo.lineHeight, - showLineNumbers: opts.viewInfo.renderLineNumbers, + showLineNumbers: (opts.viewInfo.renderLineNumbers !== RenderLineNumbersType.Off), lineNumbersMinChars: opts.lineNumbersMinChars, lineNumbersDigitCount: env.lineNumbersDigitCount, lineDecorationsWidth: lineDecorationsWidth, @@ -2152,9 +2147,8 @@ export const EDITOR_DEFAULTS: IValidatedEditorOptions = { disableMonospaceOptimizations: false, rulers: [], ariaLabel: nls.localize('editorViewAccessibleLabel', "Editor content"), - renderLineNumbers: true, + renderLineNumbers: RenderLineNumbersType.On, renderCustomLineNumbers: null, - renderRelativeLineNumbers: false, selectOnLineNumbers: true, glyphMargin: true, revealHorizontalRightPadding: 30, diff --git a/src/vs/editor/standalone/browser/standaloneEditor.ts b/src/vs/editor/standalone/browser/standaloneEditor.ts index f09e6397d9a..b3f29fdbf22 100644 --- a/src/vs/editor/standalone/browser/standaloneEditor.ts +++ b/src/vs/editor/standalone/browser/standaloneEditor.ts @@ -338,6 +338,20 @@ enum ScrollType { Immediate = 1, } +/** + * @internal + * -------------------------------------------- + * This is repeated here so it can be exported + * because TS inlines const enums + * -------------------------------------------- + */ +enum RenderLineNumbersType { + Off = 0, + On = 1, + Relative = 2, + Custom = 3 +} + /** * @internal */ @@ -384,6 +398,7 @@ export function createMonacoEditorAPI(): typeof monaco.editor { OverlayWidgetPositionPreference: OverlayWidgetPositionPreference, RenderMinimap: editorOptions.RenderMinimap, ScrollType: ScrollType, + RenderLineNumbersType: RenderLineNumbersType, // classes InternalEditorOptions: editorOptions.InternalEditorOptions, diff --git a/src/vs/monaco.d.ts b/src/vs/monaco.d.ts index 483ffdfa1de..40eef4c1f82 100644 --- a/src/vs/monaco.d.ts +++ b/src/vs/monaco.d.ts @@ -3024,14 +3024,20 @@ declare module monaco.editor { readonly wordWrapBreakObtrusiveCharacters: string; } + export const enum RenderLineNumbersType { + Off = 0, + On = 1, + Relative = 2, + Custom = 3, + } + export interface InternalEditorViewOptions { readonly extraEditorClassName: string; readonly disableMonospaceOptimizations: boolean; readonly rulers: number[]; readonly ariaLabel: string; - readonly renderLineNumbers: boolean; + readonly renderLineNumbers: RenderLineNumbersType; readonly renderCustomLineNumbers: (lineNumber: number) => string; - readonly renderRelativeLineNumbers: boolean; readonly selectOnLineNumbers: boolean; readonly glyphMargin: boolean; readonly revealHorizontalRightPadding: number; diff --git a/src/vs/workbench/api/electron-browser/mainThreadEditor.ts b/src/vs/workbench/api/electron-browser/mainThreadEditor.ts index 3aec29a4589..0ef66473f47 100644 --- a/src/vs/workbench/api/electron-browser/mainThreadEditor.ts +++ b/src/vs/workbench/api/electron-browser/mainThreadEditor.ts @@ -13,7 +13,7 @@ import { Range, IRange } from 'vs/editor/common/core/range'; import { Selection, ISelection } from 'vs/editor/common/core/selection'; import { SnippetController2 } from 'vs/editor/contrib/snippet/snippetController2'; import { EndOfLine, TextEditorLineNumbersStyle } from 'vs/workbench/api/node/extHostTypes'; -import { TextEditorCursorStyle, cursorStyleToString } from 'vs/editor/common/config/editorOptions'; +import { TextEditorCursorStyle, cursorStyleToString, RenderLineNumbersType } from 'vs/editor/common/config/editorOptions'; import { ICursorSelectionChangedEvent } from 'vs/editor/common/controller/cursorEvents'; import { IResolvedTextEditorConfiguration, ISelectionChangeEvent, ITextEditorConfigurationUpdate, TextEditorRevealType, IApplyEditsOptions, IUndoStopOptions } from 'vs/workbench/api/node/extHost.protocol'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; @@ -290,12 +290,16 @@ export class MainThreadTextEditor { let codeEditorOpts = codeEditor.getConfiguration(); cursorStyle = codeEditorOpts.viewInfo.cursorStyle; - if (codeEditorOpts.viewInfo.renderRelativeLineNumbers) { - lineNumbers = TextEditorLineNumbersStyle.Relative; - } else if (codeEditorOpts.viewInfo.renderLineNumbers) { - lineNumbers = TextEditorLineNumbersStyle.On; - } else { - lineNumbers = TextEditorLineNumbersStyle.Off; + switch (codeEditorOpts.viewInfo.renderLineNumbers) { + case RenderLineNumbersType.Off: + lineNumbers = TextEditorLineNumbersStyle.Off; + break; + case RenderLineNumbersType.Relative: + lineNumbers = TextEditorLineNumbersStyle.Relative; + break; + default: + lineNumbers = TextEditorLineNumbersStyle.On; + break; } } diff --git a/src/vs/workbench/parts/quickopen/browser/gotoLineHandler.ts b/src/vs/workbench/parts/quickopen/browser/gotoLineHandler.ts index ddde848d692..f213f0fb695 100644 --- a/src/vs/workbench/parts/quickopen/browser/gotoLineHandler.ts +++ b/src/vs/workbench/parts/quickopen/browser/gotoLineHandler.ts @@ -20,7 +20,7 @@ import { getCodeEditor } from 'vs/editor/browser/services/codeEditorService'; import { IRange } from 'vs/editor/common/core/range'; import { overviewRulerRangeHighlight } from 'vs/editor/common/view/editorColorRegistry'; import { themeColorFromId } from 'vs/platform/theme/common/themeService'; -import { IEditorOptions } from 'vs/editor/common/config/editorOptions'; +import { IEditorOptions, RenderLineNumbersType } from 'vs/editor/common/config/editorOptions'; export const GOTO_LINE_PREFIX = ':'; @@ -43,7 +43,7 @@ export class GotoLineAction extends QuickOpenAction { if (editor) { const config = editor.getConfiguration(); - if (config.viewInfo.renderLineNumbers && config.viewInfo.renderRelativeLineNumbers) { + if (config.viewInfo.renderLineNumbers === RenderLineNumbersType.Relative) { editor.updateOptions({ lineNumbers: 'on' });