Skip to content

Add line number interval setting #37120

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 9 commits into from
Nov 14, 2017
14 changes: 12 additions & 2 deletions src/vs/editor/browser/viewParts/lineNumbers/lineNumbers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ export class LineNumbersOverlay extends DynamicViewOverlay {
private _renderCustomLineNumbers: (lineNumber: number) => string;
private _lineNumbersLeft: number;
private _lineNumbersWidth: number;

private _lastCursorModelPosition: Position;
private _renderResult: string[];

Expand Down Expand Up @@ -68,7 +67,7 @@ export class LineNumbersOverlay extends DynamicViewOverlay {
const primaryViewPosition = e.selections[0].getPosition();
this._lastCursorModelPosition = this._context.model.coordinatesConverter.convertViewPositionToModelPosition(primaryViewPosition);

if (this._renderLineNumbers === RenderLineNumbersType.Relative) {
if (this._renderLineNumbers === RenderLineNumbersType.Relative || this._renderLineNumbers === RenderLineNumbersType.Interval) {
return true;
}
return false;
Expand Down Expand Up @@ -113,6 +112,16 @@ export class LineNumbersOverlay extends DynamicViewOverlay {
return String(diff);
}

if (this._renderLineNumbers === RenderLineNumbersType.Interval) {
if (this._lastCursorModelPosition.lineNumber === modelLineNumber) {
return String(modelLineNumber);
}
if (modelLineNumber % 10 === 0) {
return String(modelLineNumber);
}
return '';
}

return String(modelLineNumber);
}

Expand All @@ -132,6 +141,7 @@ export class LineNumbersOverlay extends DynamicViewOverlay {
let lineIndex = lineNumber - visibleStartLineNumber;

let renderLineNumber = this._getLineRenderLineNumber(lineNumber);

if (renderLineNumber) {
output[lineIndex] = (
common
Expand Down
5 changes: 3 additions & 2 deletions src/vs/editor/common/config/commonEditorConfig.ts
Original file line number Diff line number Diff line change
Expand Up @@ -203,11 +203,12 @@ const editorConfiguration: IConfigurationNode = {
},
'editor.lineNumbers': {
'type': 'string',
'enum': ['off', 'on', 'relative'],
'enum': ['off', 'on', 'relative', 'interval'],
'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.")
nls.localize('lineNumbers.relative', "Line numbers are rendered as distance in lines to cursor position."),
nls.localize('lineNumbers.interval', "Line numbers are rendered every 10 lines.")
],
'default': 'on',
'description': nls.localize('lineNumbers', "Controls the display of line numbers. Possible values are 'on', 'off', and 'relative'.")
Expand Down
7 changes: 5 additions & 2 deletions src/vs/editor/common/config/editorOptions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ export interface IEditorOptions {
* Otherwise, line numbers will not be rendered.
* Defaults to true.
*/
lineNumbers?: 'on' | 'off' | 'relative' | ((lineNumber: number) => string);
lineNumbers?: 'on' | 'off' | 'relative' | 'interval' | ((lineNumber: number) => string);
/**
* Should the corresponding line be selected when clicking on the line number?
* Defaults to true.
Expand Down Expand Up @@ -757,7 +757,8 @@ export const enum RenderLineNumbersType {
Off = 0,
On = 1,
Relative = 2,
Custom = 3
Interval = 3,
Custom = 4
}

export interface InternalEditorViewOptions {
Expand Down Expand Up @@ -1579,6 +1580,8 @@ export class EditorOptionsValidator {
if (typeof lineNumbers === 'function') {
renderLineNumbers = RenderLineNumbersType.Custom;
renderCustomLineNumbers = lineNumbers;
} else if (lineNumbers === 'interval') {
renderLineNumbers = RenderLineNumbersType.Interval;
} else if (lineNumbers === 'relative') {
renderLineNumbers = RenderLineNumbersType.Relative;
} else if (lineNumbers === 'on') {
Expand Down
3 changes: 2 additions & 1 deletion src/vs/editor/standalone/browser/standaloneEditor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -349,7 +349,8 @@ enum RenderLineNumbersType {
Off = 0,
On = 1,
Relative = 2,
Custom = 3
Interval = 3,
Custom = 4
}

/**
Expand Down
5 changes: 3 additions & 2 deletions src/vs/monaco.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2498,7 +2498,7 @@ declare module monaco.editor {
* Otherwise, line numbers will not be rendered.
* Defaults to true.
*/
lineNumbers?: 'on' | 'off' | 'relative' | ((lineNumber: number) => string);
lineNumbers?: 'on' | 'off' | 'relative' | 'interval' | ((lineNumber: number) => string);
/**
* Should the corresponding line be selected when clicking on the line number?
* Defaults to true.
Expand Down Expand Up @@ -3028,7 +3028,8 @@ declare module monaco.editor {
Off = 0,
On = 1,
Relative = 2,
Custom = 3,
Interval = 3,
Custom = 4,
}

export interface InternalEditorViewOptions {
Expand Down