commonEditorConfig.ts 28.5 KB
Newer Older
E
Erich Gamma 已提交
1 2 3 4 5 6
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/
'use strict';

A
Alex Dima 已提交
7
import * as nls from 'vs/nls';
J
Johannes Rieken 已提交
8 9
import Event, { Emitter } from 'vs/base/common/event';
import { Disposable } from 'vs/base/common/lifecycle';
A
Alex Dima 已提交
10
import * as objects from 'vs/base/common/objects';
A
Alex Dima 已提交
11
import * as platform from 'vs/base/common/platform';
12
import { Extensions, IConfigurationRegistry, IConfigurationNode, ConfigurationScope } from 'vs/platform/configuration/common/configurationRegistry';
13
import { Registry } from 'vs/platform/registry/common/platform';
A
Alex Dima 已提交
14
import * as editorCommon from 'vs/editor/common/editorCommon';
15
import { FontInfo, BareFontInfo } from 'vs/editor/common/config/fontInfo';
A
Alex Dima 已提交
16
import { EditorZoom } from 'vs/editor/common/config/editorZoom';
17
import * as editorOptions from 'vs/editor/common/config/editorOptions';
18 19 20
import EDITOR_DEFAULTS = editorOptions.EDITOR_DEFAULTS;
import EDITOR_FONT_DEFAULTS = editorOptions.EDITOR_FONT_DEFAULTS;
import EDITOR_MODEL_DEFAULTS = editorOptions.EDITOR_MODEL_DEFAULTS;
E
Erich Gamma 已提交
21

22 23 24 25 26 27 28
/**
 * Control what pressing Tab does.
 * If it is false, pressing Tab or Shift-Tab will be handled by the editor.
 * If it is true, pressing Tab or Shift-Tab will move the browser focus.
 * Defaults to false.
 */
export interface ITabFocus {
J
Johannes Rieken 已提交
29
	onDidChangeTabFocus: Event<boolean>;
30
	getTabFocusMode(): boolean;
J
Johannes Rieken 已提交
31
	setTabFocusMode(tabFocusMode: boolean): void;
32 33
}

A
Alex Dima 已提交
34
export const TabFocus: ITabFocus = new class implements ITabFocus {
35 36 37
	private _tabFocus: boolean = false;

	private _onDidChangeTabFocus: Emitter<boolean> = new Emitter<boolean>();
J
Johannes Rieken 已提交
38
	public onDidChangeTabFocus: Event<boolean> = this._onDidChangeTabFocus.event;
39 40 41 42 43

	public getTabFocusMode(): boolean {
		return this._tabFocus;
	}

J
Johannes Rieken 已提交
44
	public setTabFocusMode(tabFocusMode: boolean): void {
45 46 47 48 49 50 51 52 53
		if (this._tabFocus === tabFocusMode) {
			return;
		}

		this._tabFocus = tabFocusMode;
		this._onDidChangeTabFocus.fire(this._tabFocus);
	}
};

A
Alex Dima 已提交
54 55 56 57
export interface IEnvConfiguration {
	extraEditorClassName: string;
	outerWidth: number;
	outerHeight: number;
58
	emptySelectionClipboard: boolean;
A
Alex Dima 已提交
59 60
	pixelRatio: number;
	zoomLevel: number;
61
	accessibilitySupport: platform.AccessibilitySupport;
62 63
}

A
Alex Dima 已提交
64
export abstract class CommonEditorConfiguration extends Disposable implements editorCommon.IConfiguration {
E
Erich Gamma 已提交
65

66 67
	protected _rawOptions: editorOptions.IEditorOptions;
	protected _validatedOptions: editorOptions.IValidatedEditorOptions;
68
	public editor: editorOptions.InternalEditorOptions;
J
Johannes Rieken 已提交
69
	private _isDominatedByLongLines: boolean;
70
	private _lineNumbersDigitCount: number;
E
Erich Gamma 已提交
71

72 73
	private _onDidChange = this._register(new Emitter<editorOptions.IConfigurationChangedEvent>());
	public onDidChange: Event<editorOptions.IConfigurationChangedEvent> = this._onDidChange.event;
A
Alex Dima 已提交
74

A
Alex Dima 已提交
75
	constructor(options: editorOptions.IEditorOptions) {
A
Alex Dima 已提交
76
		super();
77

78 79 80 81 82 83
		// Do a "deep clone of sorts" on the incoming options
		this._rawOptions = objects.mixin({}, options || {});
		this._rawOptions.scrollbar = objects.mixin({}, this._rawOptions.scrollbar || {});
		this._rawOptions.minimap = objects.mixin({}, this._rawOptions.minimap || {});
		this._rawOptions.find = objects.mixin({}, this._rawOptions.find || {});

84
		this._validatedOptions = editorOptions.EditorOptionsValidator.validate(this._rawOptions, EDITOR_DEFAULTS);
A
Alex Dima 已提交
85
		this.editor = null;
E
Erich Gamma 已提交
86
		this._isDominatedByLongLines = false;
87
		this._lineNumbersDigitCount = 1;
A
Alex Dima 已提交
88

89
		this._register(EditorZoom.onDidChangeZoomLevel(_ => this._recomputeOptions()));
90
		this._register(TabFocus.onDidChangeTabFocus(_ => this._recomputeOptions()));
E
Erich Gamma 已提交
91 92 93 94 95 96 97
	}

	public dispose(): void {
		super.dispose();
	}

	protected _recomputeOptions(): void {
A
Alex Dima 已提交
98 99
		const oldOptions = this.editor;
		const newOptions = this._computeInternalOptions();
100

A
Alex Dima 已提交
101
		if (oldOptions && oldOptions.equals(newOptions)) {
102
			return;
E
Erich Gamma 已提交
103 104
		}

105
		this.editor = newOptions;
E
Erich Gamma 已提交
106

A
Alex Dima 已提交
107 108
		if (oldOptions) {
			this._onDidChange.fire(oldOptions.createChangeEvent(newOptions));
109
		}
E
Erich Gamma 已提交
110
	}
111

112
	public getRawOptions(): editorOptions.IEditorOptions {
113
		return this._rawOptions;
E
Erich Gamma 已提交
114
	}
115

116
	private _computeInternalOptions(): editorOptions.InternalEditorOptions {
117
		const opts = this._validatedOptions;
A
Alex Dima 已提交
118 119
		const partialEnv = this._getEnvConfiguration();
		const bareFontInfo = BareFontInfo.createFromRawSettings(this._rawOptions, partialEnv.zoomLevel);
A
Alex Dima 已提交
120
		const env: editorOptions.IEnvironmentalOptions = {
A
Alex Dima 已提交
121 122
			outerWidth: partialEnv.outerWidth,
			outerHeight: partialEnv.outerHeight,
123
			fontInfo: this.readConfiguration(bareFontInfo),
124
			extraEditorClassName: partialEnv.extraEditorClassName,
125 126
			isDominatedByLongLines: this._isDominatedByLongLines,
			lineNumbersDigitCount: this._lineNumbersDigitCount,
127
			emptySelectionClipboard: partialEnv.emptySelectionClipboard,
A
Alex Dima 已提交
128
			pixelRatio: partialEnv.pixelRatio,
129 130
			tabFocusMode: TabFocus.getTabFocusMode(),
			accessibilitySupport: partialEnv.accessibilitySupport
A
Alex Dima 已提交
131
		};
132
		return editorOptions.InternalEditorOptionsFactory.createInternalEditorOptions(env, opts);
E
Erich Gamma 已提交
133 134
	}

135
	public updateOptions(newOptions: editorOptions.IEditorOptions): void {
136
		this._rawOptions = objects.mixin(this._rawOptions, newOptions || {});
137
		this._validatedOptions = editorOptions.EditorOptionsValidator.validate(this._rawOptions, EDITOR_DEFAULTS);
E
Erich Gamma 已提交
138 139 140
		this._recomputeOptions();
	}

J
Johannes Rieken 已提交
141
	public setIsDominatedByLongLines(isDominatedByLongLines: boolean): void {
E
Erich Gamma 已提交
142 143 144 145
		this._isDominatedByLongLines = isDominatedByLongLines;
		this._recomputeOptions();
	}

J
Johannes Rieken 已提交
146
	public setMaxLineNumber(maxLineNumber: number): void {
147
		let digitCount = CommonEditorConfiguration._digitCount(maxLineNumber);
148
		if (this._lineNumbersDigitCount === digitCount) {
A
Alex Dima 已提交
149 150
			return;
		}
151
		this._lineNumbersDigitCount = digitCount;
E
Erich Gamma 已提交
152 153 154
		this._recomputeOptions();
	}

155
	private static _digitCount(n: number): number {
156 157 158 159 160 161 162
		var r = 0;
		while (n) {
			n = Math.floor(n / 10);
			r++;
		}
		return r ? r : 1;
	}
A
Alex Dima 已提交
163
	protected abstract _getEnvConfiguration(): IEnvConfiguration;
164

165
	protected abstract readConfiguration(styling: BareFontInfo): FontInfo;
166

E
Erich Gamma 已提交
167 168
}

169 170
const configurationRegistry = <IConfigurationRegistry>Registry.as(Extensions.Configuration);
const editorConfiguration: IConfigurationNode = {
E
Erich Gamma 已提交
171 172 173
	'id': 'editor',
	'order': 5,
	'type': 'object',
174
	'title': nls.localize('editorConfigurationTitle', "Editor"),
175
	'overridable': true,
S
Sandeep Somavarapu 已提交
176
	'scope': ConfigurationScope.RESOURCE,
J
Johannes Rieken 已提交
177 178
	'properties': {
		'editor.fontFamily': {
E
Erich Gamma 已提交
179
			'type': 'string',
180
			'default': EDITOR_FONT_DEFAULTS.fontFamily,
E
Erich Gamma 已提交
181 182
			'description': nls.localize('fontFamily', "Controls the font family.")
		},
J
Johannes Rieken 已提交
183
		'editor.fontWeight': {
184
			'type': 'string',
185
			'enum': ['normal', 'bold', '100', '200', '300', '400', '500', '600', '700', '800', '900'],
186
			'default': EDITOR_FONT_DEFAULTS.fontWeight,
187 188
			'description': nls.localize('fontWeight', "Controls the font weight.")
		},
J
Johannes Rieken 已提交
189
		'editor.fontSize': {
E
Erich Gamma 已提交
190
			'type': 'number',
191
			'default': EDITOR_FONT_DEFAULTS.fontSize,
192
			'description': nls.localize('fontSize', "Controls the font size in pixels.")
E
Erich Gamma 已提交
193
		},
J
Johannes Rieken 已提交
194
		'editor.lineHeight': {
E
Erich Gamma 已提交
195
			'type': 'number',
196
			'default': EDITOR_FONT_DEFAULTS.lineHeight,
197
			'description': nls.localize('lineHeight', "Controls the line height. Use 0 to compute the lineHeight from the fontSize.")
E
Erich Gamma 已提交
198
		},
199 200
		'editor.letterSpacing': {
			'type': 'number',
201
			'default': EDITOR_FONT_DEFAULTS.letterSpacing,
202 203
			'description': nls.localize('letterSpacing', "Controls the letter spacing in pixels.")
		},
J
Johannes Rieken 已提交
204
		'editor.lineNumbers': {
205
			'type': 'string',
206
			'enum': ['off', 'on', 'relative', 'interval'],
207 208 209
			'enumDescriptions': [
				nls.localize('lineNumbers.off', "Line numbers are not rendered."),
				nls.localize('lineNumbers.on', "Line numbers are rendered as absolute number."),
210 211
				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.")
212
			],
213
			'default': 'on',
214
			'description': nls.localize('lineNumbers', "Controls the display of line numbers. Possible values are 'on', 'off', and 'relative'.")
E
Erich Gamma 已提交
215
		},
J
Johannes Rieken 已提交
216
		'editor.rulers': {
217 218 219 220
			'type': 'array',
			'items': {
				'type': 'number'
			},
A
Alex Dima 已提交
221
			'default': EDITOR_DEFAULTS.viewInfo.rulers,
222
			'description': nls.localize('rulers', "Render vertical rulers after a certain number of monospace characters. Use multiple values for multiple rulers. No rulers are drawn if array is empty")
223
		},
J
Johannes Rieken 已提交
224
		'editor.wordSeparators': {
A
Alex Dima 已提交
225
			'type': 'string',
226
			'default': EDITOR_DEFAULTS.wordSeparators,
A
Alex Dima 已提交
227 228
			'description': nls.localize('wordSeparators', "Characters that will be used as word separators when doing word related navigations or operations")
		},
J
Johannes Rieken 已提交
229
		'editor.tabSize': {
230
			'type': 'number',
231
			'default': EDITOR_MODEL_DEFAULTS.tabSize,
E
Erich Gamma 已提交
232
			'minimum': 1,
233
			'description': nls.localize('tabSize', "The number of spaces a tab is equal to. This setting is overridden based on the file contents when `editor.detectIndentation` is on."),
234
			'errorMessage': nls.localize('tabSize.errorMessage', "Expected 'number'. Note that the value \"auto\" has been replaced by the `editor.detectIndentation` setting.")
E
Erich Gamma 已提交
235
		},
J
Johannes Rieken 已提交
236
		'editor.insertSpaces': {
237
			'type': 'boolean',
238
			'default': EDITOR_MODEL_DEFAULTS.insertSpaces,
239
			'description': nls.localize('insertSpaces', "Insert spaces when pressing Tab. This setting is overridden based on the file contents when `editor.detectIndentation` is on."),
240
			'errorMessage': nls.localize('insertSpaces.errorMessage', "Expected 'boolean'. Note that the value \"auto\" has been replaced by the `editor.detectIndentation` setting.")
E
Erich Gamma 已提交
241
		},
J
Johannes Rieken 已提交
242
		'editor.detectIndentation': {
243
			'type': 'boolean',
244
			'default': EDITOR_MODEL_DEFAULTS.detectIndentation,
A
Alex Dima 已提交
245
			'description': nls.localize('detectIndentation', "When opening a file, `editor.tabSize` and `editor.insertSpaces` will be detected based on the file contents.")
246
		},
J
Johannes Rieken 已提交
247
		'editor.roundedSelection': {
E
Erich Gamma 已提交
248
			'type': 'boolean',
A
Alex Dima 已提交
249
			'default': EDITOR_DEFAULTS.viewInfo.roundedSelection,
E
Erich Gamma 已提交
250 251
			'description': nls.localize('roundedSelection', "Controls if selections have rounded corners")
		},
J
Johannes Rieken 已提交
252
		'editor.scrollBeyondLastLine': {
E
Erich Gamma 已提交
253
			'type': 'boolean',
A
Alex Dima 已提交
254
			'default': EDITOR_DEFAULTS.viewInfo.scrollBeyondLastLine,
E
Erich Gamma 已提交
255 256
			'description': nls.localize('scrollBeyondLastLine', "Controls if the editor will scroll beyond the last line")
		},
257 258 259 260 261
		'editor.smoothScrolling': {
			'type': 'boolean',
			'default': EDITOR_DEFAULTS.viewInfo.smoothScrolling,
			'description': nls.localize('smoothScrolling', "Controls if the editor will scroll using an animation")
		},
262 263
		'editor.minimap.enabled': {
			'type': 'boolean',
A
Alex Dima 已提交
264
			'default': EDITOR_DEFAULTS.viewInfo.minimap.enabled,
265 266
			'description': nls.localize('minimap.enabled', "Controls if the minimap is shown")
		},
267 268 269 270
		'editor.minimap.showSlider': {
			'type': 'string',
			'enum': ['always', 'mouseover'],
			'default': EDITOR_DEFAULTS.viewInfo.minimap.showSlider,
B
BrokenBacon 已提交
271
			'description': nls.localize('minimap.showSlider', "Controls whether the minimap slider is automatically hidden. Possible values are \'always\' and \'mouseover\'")
272
		},
273
		'editor.minimap.renderCharacters': {
274
			'type': 'boolean',
A
Alex Dima 已提交
275
			'default': EDITOR_DEFAULTS.viewInfo.minimap.renderCharacters,
276
			'description': nls.localize('minimap.renderCharacters', "Render the actual characters on a line (as opposed to color blocks)")
277
		},
A
Alex Dima 已提交
278 279
		'editor.minimap.maxColumn': {
			'type': 'number',
A
Alex Dima 已提交
280
			'default': EDITOR_DEFAULTS.viewInfo.minimap.maxColumn,
A
Alex Dima 已提交
281 282
			'description': nls.localize('minimap.maxColumn', "Limit the width of the minimap to render at most a certain number of columns")
		},
283 284 285
		'editor.find.seedSearchStringFromSelection': {
			'type': 'boolean',
			'default': EDITOR_DEFAULTS.contribInfo.find.seedSearchStringFromSelection,
286
			'description': nls.localize('find.seedSearchStringFromSelection', "Controls if we seed the search string in Find Widget from editor selection")
287
		},
R
rebornix 已提交
288 289 290 291 292
		'editor.find.autoFindInSelection': {
			'type': 'boolean',
			'default': EDITOR_DEFAULTS.contribInfo.find.autoFindInSelection,
			'description': nls.localize('find.autoFindInSelection', "Controls if Find in Selection flag is turned on when multiple characters or lines of text are selected in the editor")
		},
293 294 295
		'editor.find.globalFindClipboard': {
			'type': 'boolean',
			'default': EDITOR_DEFAULTS.contribInfo.find.globalFindClipboard,
296 297
			'description': nls.localize('find.globalFindClipboard', "Controls if the Find Widget should read or modify the shared find clipboard on macOS"),
			'included': platform.isMacintosh
298
		},
J
Johannes Rieken 已提交
299
		'editor.wordWrap': {
300
			'type': 'string',
A
Alex Dima 已提交
301
			'enum': ['off', 'on', 'wordWrapColumn', 'bounded'],
302 303 304
			'enumDescriptions': [
				nls.localize('wordWrap.off', "Lines will never wrap."),
				nls.localize('wordWrap.on', "Lines will wrap at the viewport width."),
A
Alex Dima 已提交
305 306 307 308 309 310
				nls.localize({
					key: 'wordWrap.wordWrapColumn',
					comment: [
						'- `editor.wordWrapColumn` refers to a different setting and should not be localized.'
					]
				}, "Lines will wrap at `editor.wordWrapColumn`."),
A
Alex Dima 已提交
311 312 313 314
				nls.localize({
					key: 'wordWrap.bounded',
					comment: [
						'- viewport means the edge of the visible window size.',
A
Alex Dima 已提交
315
						'- `editor.wordWrapColumn` refers to a different setting and should not be localized.'
A
Alex Dima 已提交
316 317
					]
				}, "Lines will wrap at the minimum of viewport and `editor.wordWrapColumn`."),
318
			],
319
			'default': EDITOR_DEFAULTS.wordWrap,
A
Alex Dima 已提交
320 321 322 323 324 325 326
			'description': nls.localize({
				key: 'wordWrap',
				comment: [
					'- \'off\', \'on\', \'wordWrapColumn\' and \'bounded\' refer to values the setting can take and should not be localized.',
					'- `editor.wordWrapColumn` refers to a different setting and should not be localized.'
				]
			}, "Controls how lines should wrap. Can be:\n - 'off' (disable wrapping),\n - 'on' (viewport wrapping),\n - 'wordWrapColumn' (wrap at `editor.wordWrapColumn`) or\n - 'bounded' (wrap at minimum of viewport and `editor.wordWrapColumn`).")
327 328 329
		},
		'editor.wordWrapColumn': {
			'type': 'integer',
330
			'default': EDITOR_DEFAULTS.wordWrapColumn,
331
			'minimum': 1,
A
Alex Dima 已提交
332 333 334 335 336 337 338
			'description': nls.localize({
				key: 'wordWrapColumn',
				comment: [
					'- `editor.wordWrap` refers to a different setting and should not be localized.',
					'- \'wordWrapColumn\' and \'bounded\' refer to values the different setting can take and should not be localized.'
				]
			}, "Controls the wrapping column of the editor when `editor.wordWrap` is 'wordWrapColumn' or 'bounded'.")
339
		},
J
Johannes Rieken 已提交
340
		'editor.wrappingIndent': {
E
Erich Gamma 已提交
341 342
			'type': 'string',
			'enum': ['none', 'same', 'indent'],
343
			'default': 'same',
E
Erich Gamma 已提交
344 345
			'description': nls.localize('wrappingIndent', "Controls the indentation of wrapped lines. Can be one of 'none', 'same' or 'indent'.")
		},
J
Johannes Rieken 已提交
346
		'editor.mouseWheelScrollSensitivity': {
E
Erich Gamma 已提交
347
			'type': 'number',
A
Alex Dima 已提交
348
			'default': EDITOR_DEFAULTS.viewInfo.scrollbar.mouseWheelScrollSensitivity,
E
Erich Gamma 已提交
349 350
			'description': nls.localize('mouseWheelScrollSensitivity', "A multiplier to be used on the `deltaX` and `deltaY` of mouse wheel scroll events")
		},
351
		'editor.multiCursorModifier': {
352
			'type': 'string',
353 354 355 356 357
			'enum': ['ctrlCmd', 'alt'],
			'enumDescriptions': [
				nls.localize('multiCursorModifier.ctrlCmd', "Maps to `Control` on Windows and Linux and to `Command` on OSX."),
				nls.localize('multiCursorModifier.alt', "Maps to `Alt` on Windows and Linux and to `Option` on OSX.")
			],
358
			'default': 'alt',
359 360 361 362 363 364 365
			'description': nls.localize({
				key: 'multiCursorModifier',
				comment: [
					'- `ctrlCmd` refers to a value the setting can take and should not be localized.',
					'- `Control` and `Command` refer to the modifier keys Ctrl or Cmd on the keyboard and can be localized.'
				]
			}, "The modifier to be used to add multiple cursors with the mouse. `ctrlCmd` maps to `Control` on Windows and Linux and to `Command` on OSX. The Go To Definition and Open Link mouse gestures will adapt such that they do not conflict with the multicursor modifier.")
366
		},
J
Johannes Rieken 已提交
367
		'editor.quickSuggestions': {
368
			'anyOf': [
369 370 371
				{
					type: 'boolean',
				},
372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392
				{
					type: 'object',
					properties: {
						strings: {
							type: 'boolean',
							default: false,
							description: nls.localize('quickSuggestions.strings', "Enable quick suggestions inside strings.")
						},
						comments: {
							type: 'boolean',
							default: false,
							description: nls.localize('quickSuggestions.comments', "Enable quick suggestions inside comments.")
						},
						other: {
							type: 'boolean',
							default: true,
							description: nls.localize('quickSuggestions.other', "Enable quick suggestions outside of strings and comments.")
						},
					}
				}
			],
A
Alex Dima 已提交
393
			'default': EDITOR_DEFAULTS.contribInfo.quickSuggestions,
394
			'description': nls.localize('quickSuggestions', "Controls if suggestions should automatically show up while typing")
E
Erich Gamma 已提交
395
		},
J
Johannes Rieken 已提交
396
		'editor.quickSuggestionsDelay': {
E
Erich Gamma 已提交
397
			'type': 'integer',
A
Alex Dima 已提交
398
			'default': EDITOR_DEFAULTS.contribInfo.quickSuggestionsDelay,
E
Erich Gamma 已提交
399 400 401
			'minimum': 0,
			'description': nls.localize('quickSuggestionsDelay', "Controls the delay in ms after which quick suggestions will show up")
		},
J
Johannes Rieken 已提交
402
		'editor.parameterHints': {
J
Joao Moreno 已提交
403
			'type': 'boolean',
A
Alex Dima 已提交
404
			'default': EDITOR_DEFAULTS.contribInfo.parameterHints,
405
			'description': nls.localize('parameterHints', "Enables pop-up that shows parameter documentation and type information as you type")
J
Joao Moreno 已提交
406
		},
J
Johannes Rieken 已提交
407
		'editor.autoClosingBrackets': {
E
Erich Gamma 已提交
408
			'type': 'boolean',
409
			'default': EDITOR_DEFAULTS.autoClosingBrackets,
E
Erich Gamma 已提交
410 411
			'description': nls.localize('autoClosingBrackets', "Controls if the editor should automatically close brackets after opening them")
		},
J
Johannes Rieken 已提交
412
		'editor.formatOnType': {
E
Erich Gamma 已提交
413
			'type': 'boolean',
A
Alex Dima 已提交
414
			'default': EDITOR_DEFAULTS.contribInfo.formatOnType,
E
Erich Gamma 已提交
415 416
			'description': nls.localize('formatOnType', "Controls if the editor should automatically format the line after typing")
		},
417 418
		'editor.formatOnPaste': {
			'type': 'boolean',
A
Alex Dima 已提交
419
			'default': EDITOR_DEFAULTS.contribInfo.formatOnPaste,
420
			'description': nls.localize('formatOnPaste', "Controls if the editor should automatically format the pasted content. A formatter must be available and the formatter should be able to format a range in a document.")
421
		},
422 423 424
		'editor.autoIndent': {
			'type': 'boolean',
			'default': EDITOR_DEFAULTS.autoIndent,
G
Guangcong Luo 已提交
425
			'description': nls.localize('autoIndent', "Controls if the editor should automatically adjust the indentation when users type, paste or move lines. Indentation rules of the language must be available.")
426
		},
J
Johannes Rieken 已提交
427
		'editor.suggestOnTriggerCharacters': {
E
Erich Gamma 已提交
428
			'type': 'boolean',
A
Alex Dima 已提交
429
			'default': EDITOR_DEFAULTS.contribInfo.suggestOnTriggerCharacters,
E
Erich Gamma 已提交
430 431
			'description': nls.localize('suggestOnTriggerCharacters', "Controls if suggestions should automatically show up when typing trigger characters")
		},
J
Johannes Rieken 已提交
432
		'editor.acceptSuggestionOnEnter': {
433 434
			'type': 'string',
			'enum': ['on', 'smart', 'off'],
A
Alex Dima 已提交
435
			'default': EDITOR_DEFAULTS.contribInfo.acceptSuggestionOnEnter,
436
			'description': nls.localize('acceptSuggestionOnEnter', "Controls if suggestions should be accepted on 'Enter' - in addition to 'Tab'. Helps to avoid ambiguity between inserting new lines or accepting suggestions. The value 'smart' means only accept a suggestion with Enter when it makes a textual change")
437 438 439
		},
		'editor.acceptSuggestionOnCommitCharacter': {
			'type': 'boolean',
A
Alex Dima 已提交
440
			'default': EDITOR_DEFAULTS.contribInfo.acceptSuggestionOnCommitCharacter,
441
			'description': nls.localize('acceptSuggestionOnCommitCharacter', "Controls if suggestions should be accepted on commit characters. For instance in JavaScript the semi-colon (';') can be a commit character that accepts a suggestion and types that character.")
442
		},
443
		'editor.snippetSuggestions': {
444
			'type': 'string',
445
			'enum': ['top', 'bottom', 'inline', 'none'],
J
Johannes Rieken 已提交
446 447 448 449 450 451
			'enumDescriptions': [
				nls.localize('snippetSuggestions.top', "Show snippet suggestions on top of other suggestions."),
				nls.localize('snippetSuggestions.bottom', "Show snippet suggestions below other suggestions."),
				nls.localize('snippetSuggestions.inline', "Show snippets suggestions with other suggestions."),
				nls.localize('snippetSuggestions.none', "Do not show snippet suggestions."),
			],
A
Alex Dima 已提交
452
			'default': EDITOR_DEFAULTS.contribInfo.snippetSuggestions,
453
			'description': nls.localize('snippetSuggestions', "Controls whether snippets are shown with other suggestions and how they are sorted.")
454
		},
455 456
		'editor.emptySelectionClipboard': {
			'type': 'boolean',
457
			'default': EDITOR_DEFAULTS.emptySelectionClipboard,
458 459
			'description': nls.localize('emptySelectionClipboard', "Controls whether copying without a selection copies the current line.")
		},
460
		'editor.wordBasedSuggestions': {
461
			'type': 'boolean',
A
Alex Dima 已提交
462
			'default': EDITOR_DEFAULTS.contribInfo.wordBasedSuggestions,
J
Johannes Rieken 已提交
463
			'description': nls.localize('wordBasedSuggestions', "Controls whether completions should be computed based on words in the document.")
464
		},
J
Johannes Rieken 已提交
465
		'editor.suggestFontSize': {
J
Joao Moreno 已提交
466 467 468 469 470
			'type': 'integer',
			'default': 0,
			'minimum': 0,
			'description': nls.localize('suggestFontSize', "Font size for the suggest widget")
		},
J
Johannes Rieken 已提交
471
		'editor.suggestLineHeight': {
J
Joao Moreno 已提交
472 473 474 475 476
			'type': 'integer',
			'default': 0,
			'minimum': 0,
			'description': nls.localize('suggestLineHeight', "Line height for the suggest widget")
		},
J
Johannes Rieken 已提交
477
		'editor.selectionHighlight': {
E
Erich Gamma 已提交
478
			'type': 'boolean',
A
Alex Dima 已提交
479
			'default': EDITOR_DEFAULTS.contribInfo.selectionHighlight,
E
Erich Gamma 已提交
480 481
			'description': nls.localize('selectionHighlight', "Controls whether the editor should highlight similar matches to the selection")
		},
482 483
		'editor.occurrencesHighlight': {
			'type': 'boolean',
A
Alex Dima 已提交
484
			'default': EDITOR_DEFAULTS.contribInfo.occurrencesHighlight,
485 486
			'description': nls.localize('occurrencesHighlight', "Controls whether the editor should highlight semantic symbol occurrences")
		},
J
Johannes Rieken 已提交
487
		'editor.overviewRulerLanes': {
E
Erich Gamma 已提交
488 489 490 491
			'type': 'integer',
			'default': 3,
			'description': nls.localize('overviewRulerLanes', "Controls the number of decorations that can show up at the same position in the overview ruler")
		},
492
		'editor.overviewRulerBorder': {
493
			'type': 'boolean',
A
Alex Dima 已提交
494
			'default': EDITOR_DEFAULTS.viewInfo.overviewRulerBorder,
495
			'description': nls.localize('overviewRulerBorder', "Controls if a border should be drawn around the overview ruler.")
496
		},
J
Johannes Rieken 已提交
497
		'editor.cursorBlinking': {
498
			'type': 'string',
499
			'enum': ['blink', 'smooth', 'phase', 'expand', 'solid'],
500
			'default': editorOptions.blinkingStyleToString(EDITOR_DEFAULTS.viewInfo.cursorBlinking),
501
			'description': nls.localize('cursorBlinking', "Control the cursor animation style, possible values are 'blink', 'smooth', 'phase', 'expand' and 'solid'")
502
		},
503 504
		'editor.mouseWheelZoom': {
			'type': 'boolean',
A
Alex Dima 已提交
505
			'default': EDITOR_DEFAULTS.viewInfo.mouseWheelZoom,
506 507
			'description': nls.localize('mouseWheelZoom', "Zoom the font of the editor when using mouse wheel and holding Ctrl")
		},
J
Johannes Rieken 已提交
508
		'editor.cursorStyle': {
M
markrendle 已提交
509
			'type': 'string',
510
			'enum': ['block', 'block-outline', 'line', 'line-thin', 'underline', 'underline-thin'],
511
			'default': editorOptions.cursorStyleToString(EDITOR_DEFAULTS.viewInfo.cursorStyle),
512
			'description': nls.localize('cursorStyle', "Controls the cursor style, accepted values are 'block', 'block-outline', 'line', 'line-thin', 'underline' and 'underline-thin'")
M
markrendle 已提交
513
		},
J
Johannes Rieken 已提交
514
		'editor.fontLigatures': {
515
			'type': 'boolean',
A
Alex Dima 已提交
516
			'default': EDITOR_DEFAULTS.viewInfo.fontLigatures,
517 518
			'description': nls.localize('fontLigatures', "Enables font ligatures")
		},
J
Johannes Rieken 已提交
519
		'editor.hideCursorInOverviewRuler': {
E
Erich Gamma 已提交
520
			'type': 'boolean',
A
Alex Dima 已提交
521
			'default': EDITOR_DEFAULTS.viewInfo.hideCursorInOverviewRuler,
E
Erich Gamma 已提交
522 523 524
			'description': nls.localize('hideCursorInOverviewRuler', "Controls if the cursor should be hidden in the overview ruler.")
		},
		'editor.renderWhitespace': {
525 526
			'type': 'string',
			'enum': ['none', 'boundary', 'all'],
A
Alex Dima 已提交
527
			default: EDITOR_DEFAULTS.viewInfo.renderWhitespace,
528
			description: nls.localize('renderWhitespace', "Controls how the editor should render whitespace characters, possibilities are 'none', 'boundary', and 'all'. The 'boundary' option does not render single spaces between words.")
E
Erich Gamma 已提交
529
		},
530 531
		'editor.renderControlCharacters': {
			'type': 'boolean',
A
Alex Dima 已提交
532
			default: EDITOR_DEFAULTS.viewInfo.renderControlCharacters,
533 534
			description: nls.localize('renderControlCharacters', "Controls whether the editor should render control characters")
		},
535 536
		'editor.renderIndentGuides': {
			'type': 'boolean',
A
Alex Dima 已提交
537
			default: EDITOR_DEFAULTS.viewInfo.renderIndentGuides,
538 539
			description: nls.localize('renderIndentGuides', "Controls whether the editor should render indent guides")
		},
540
		'editor.renderLineHighlight': {
541 542
			'type': 'string',
			'enum': ['none', 'gutter', 'line', 'all'],
A
Alex Dima 已提交
543
			default: EDITOR_DEFAULTS.viewInfo.renderLineHighlight,
544
			description: nls.localize('renderLineHighlight', "Controls how the editor should render the current line highlight, possibilities are 'none', 'gutter', 'line', and 'all'.")
545
		},
J
Johannes Rieken 已提交
546
		'editor.codeLens': {
E
Erich Gamma 已提交
547
			'type': 'boolean',
A
Alex Dima 已提交
548
			'default': EDITOR_DEFAULTS.contribInfo.codeLens,
549
			'description': nls.localize('codeLens', "Controls if the editor shows code lenses")
E
Erich Gamma 已提交
550
		},
J
Johannes Rieken 已提交
551
		'editor.folding': {
M
Martin Aeschlimann 已提交
552
			'type': 'boolean',
A
Alex Dima 已提交
553
			'default': EDITOR_DEFAULTS.contribInfo.folding,
554
			'description': nls.localize('folding', "Controls whether the editor has code folding enabled")
M
Martin Aeschlimann 已提交
555
		},
556 557 558 559 560
		'editor.showFoldingControls': {
			'type': 'string',
			'enum': ['always', 'mouseover'],
			'default': EDITOR_DEFAULTS.contribInfo.showFoldingControls,
			'description': nls.localize('showFoldingControls', "Controls whether the fold controls on the gutter are automatically hidden.")
561
		},
562
		'editor.matchBrackets': {
563
			'type': 'boolean',
A
Alex Dima 已提交
564
			'default': EDITOR_DEFAULTS.contribInfo.matchBrackets,
565
			'description': nls.localize('matchBrackets', "Highlight matching brackets when one of them is selected.")
566
		},
I
isidor 已提交
567 568
		'editor.glyphMargin': {
			'type': 'boolean',
A
Alex Dima 已提交
569
			'default': EDITOR_DEFAULTS.viewInfo.glyphMargin,
I
isidor 已提交
570 571
			'description': nls.localize('glyphMargin', "Controls whether the editor should render the vertical glyph margin. Glyph margin is mostly used for debugging.")
		},
J
Johannes Rieken 已提交
572
		'editor.useTabStops': {
573
			'type': 'boolean',
574
			'default': EDITOR_DEFAULTS.useTabStops,
575 576
			'description': nls.localize('useTabStops', "Inserting and deleting whitespace follows tab stops")
		},
J
Johannes Rieken 已提交
577
		'editor.trimAutoWhitespace': {
578
			'type': 'boolean',
579
			'default': EDITOR_MODEL_DEFAULTS.trimAutoWhitespace,
580 581
			'description': nls.localize('trimAutoWhitespace', "Remove trailing auto inserted whitespace")
		},
J
Johannes Rieken 已提交
582
		'editor.stablePeek': {
583
			'type': 'boolean',
584
			'default': false,
585
			'description': nls.localize('stablePeek', "Keep peek editors open even when double clicking their content or when hitting Escape.")
586
		},
587
		'editor.dragAndDrop': {
588
			'type': 'boolean',
589
			'default': EDITOR_DEFAULTS.dragAndDrop,
590
			'description': nls.localize('dragAndDrop', "Controls if the editor should allow to move selections via drag and drop.")
591
		},
592 593 594 595 596 597 598 599 600 601 602
		'editor.accessibilitySupport': {
			'type': 'string',
			'enum': ['auto', 'on', 'off'],
			'enumDescriptions': [
				nls.localize('accessibilitySupport.auto', "The editor will use platform APIs to detect when a Screen Reader is attached."),
				nls.localize('accessibilitySupport.on', "The editor will be permanently optimized for usage with a Screen Reader."),
				nls.localize('accessibilitySupport.off', "The editor will never be optimized for usage with a Screen Reader."),
			],
			'default': EDITOR_DEFAULTS.accessibilitySupport,
			'description': nls.localize('accessibilitySupport', "Controls whether the editor should run in a mode where it is optimized for screen readers.")
		},
603
		'editor.links': {
604
			'type': 'boolean',
605 606
			'default': EDITOR_DEFAULTS.contribInfo.links,
			'description': nls.localize('links', "Controls whether the editor should detect links and make them clickable")
607
		},
R
rebornix 已提交
608
		'editor.colorDecorators': {
609
			'type': 'boolean',
R
rebornix 已提交
610
			'default': EDITOR_DEFAULTS.contribInfo.colorDecorators,
611
			'description': nls.localize('colorDecorators', "Controls whether the editor should render the inline color decorators and color picker.")
612
		},
613 614 615 616 617
		'editor.lightbulb.enabled': {
			'type': 'boolean',
			'default': EDITOR_DEFAULTS.contribInfo.lightbulbEnabled,
			'description': nls.localize('codeActions', "Enables the code action lightbulb")
		},
618 619 620 621
		'editor.selectionClipboard': {
			'type': 'boolean',
			'default': EDITOR_DEFAULTS.contribInfo.selectionClipboard,
			'description': nls.localize('selectionClipboard', "Controls if the Linux primary clipboard should be supported."),
622
			'included': platform.isLinux
623
		},
J
Johannes Rieken 已提交
624
		'diffEditor.renderSideBySide': {
E
Erich Gamma 已提交
625 626 627 628
			'type': 'boolean',
			'default': true,
			'description': nls.localize('sideBySide', "Controls if the diff editor shows the diff side by side or inline")
		},
J
Johannes Rieken 已提交
629
		'diffEditor.ignoreTrimWhitespace': {
E
Erich Gamma 已提交
630 631 632
			'type': 'boolean',
			'default': true,
			'description': nls.localize('ignoreTrimWhitespace', "Controls if the diff editor shows changes in leading or trailing whitespace as diffs")
633 634 635 636 637
		},
		'diffEditor.renderIndicators': {
			'type': 'boolean',
			'default': true,
			'description': nls.localize('renderIndicators', "Controls if the diff editor shows +/- indicators for added/removed changes")
E
Erich Gamma 已提交
638 639
		}
	}
A
Alex Dima 已提交
640 641
};

642
configurationRegistry.registerConfiguration(editorConfiguration);