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'
});