Merge branch 'master' into options3

This commit is contained in:
Simon Lamon
2021-12-21 19:22:41 +00:00
17 changed files with 213 additions and 61 deletions
+5 -19
View File
@@ -57,16 +57,10 @@ export const DEFAULT_OPTIONS: Readonly<ITerminalOptions> = {
const FONT_WEIGHT_OPTIONS: Extract<FontWeight, string>[] = ['normal', 'bold', '100', '200', '300', '400', '500', '600', '700', '800', '900'];
/**
* The set of options that only have an effect when set in the Terminal constructor.
*/
const CONSTRUCTOR_ONLY_OPTIONS = ['cols', 'rows'];
export class OptionsService implements IOptionsService {
public serviceBrand: any;
public options: ITerminalOptions;
public publicOptions: ITerminalOptions;
private _onOptionChange = new EventEmitter<string>();
public get onOptionChange(): IEvent<string> { return this._onOptionChange.event; }
@@ -86,11 +80,10 @@ export class OptionsService implements IOptionsService {
}
// set up getters and setters for each option
this.options = this._setupOptions(defaultOptions, false);
this.publicOptions = this._setupOptions(defaultOptions, true);
this.options = this._setupOptions(defaultOptions);
}
private _setupOptions(options: ITerminalOptions, isPublic: boolean): ITerminalOptions {
private _setupOptions(options: ITerminalOptions): ITerminalOptions {
return new Proxy(options, {
get: (target, propName: string): any => {
if (!(propName in DEFAULT_OPTIONS)) {
@@ -103,13 +96,6 @@ export class OptionsService implements IOptionsService {
throw new Error(`No option with key "${propName}"`);
}
// Throw an error if any constructor only option is modified
// from terminal.options
// Modifications from anywhere else are allowed
if (isPublic && CONSTRUCTOR_ONLY_OPTIONS.includes(propName)) {
throw new Error(`Option "${propName}" can only be set in the constructor`);
}
value = this._sanitizeAndValidateOption(propName, value);
// Don't fire an option change event if they didn't change
if (target[propName] !== value) {
@@ -122,7 +108,7 @@ export class OptionsService implements IOptionsService {
}
public setOption(key: string, value: any): void {
this.publicOptions[key] = value;
this.options[key] = value;
}
private _sanitizeAndValidateOption(key: string, value: any): any {
@@ -145,7 +131,7 @@ export class OptionsService implements IOptionsService {
break;
case 'cursorWidth':
value = Math.floor(value);
// Fall through for bounds check
// Fall through for bounds check
case 'lineHeight':
case 'tabStopWidth':
if (value < 1) {
@@ -177,6 +163,6 @@ export class OptionsService implements IOptionsService {
}
public getOption(key: string): any {
return this.publicOptions[key];
return this.options[key];
}
}
+10 -9
View File
@@ -164,6 +164,14 @@ export interface IInstantiationService {
createInstance<Ctor extends new (...args: any[]) => any, R extends InstanceType<Ctor>>(t: Ctor, ...args: GetLeadingNonServiceArgs<ConstructorParameters<Ctor>>): R;
}
export enum LogLevelEnum {
DEBUG = 0,
INFO = 1,
WARN = 2,
ERROR = 3,
OFF = 4
}
export const ILogService = createDecorator<ILogService>('LogService');
export interface ILogService {
serviceBrand: undefined;
@@ -181,7 +189,6 @@ export interface IOptionsService {
serviceBrand: undefined;
readonly options: ITerminalOptions;
readonly publicOptions: ITerminalOptions;
readonly onOptionChange: IEvent<string>;
@@ -191,13 +198,7 @@ export interface IOptionsService {
export type FontWeight = 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | number;
export type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'off';
export enum LogLevelEnum {
DEBUG = 0,
INFO = 1,
WARN = 2,
ERROR = 3,
OFF = 4
}
export type RendererType = 'dom' | 'canvas';
export interface ITerminalOptions {
@@ -207,6 +208,7 @@ export interface ITerminalOptions {
bellSound: string;
bellStyle: 'none' | 'sound' /* | 'visual' | 'both' */;
cols: number;
convertEol: boolean;
cursorBlink: boolean;
cursorStyle: 'block' | 'underline' | 'bar';
cursorWidth: number;
@@ -240,7 +242,6 @@ export interface ITerminalOptions {
[key: string]: any;
cancelEvents: boolean;
convertEol: boolean;
termName: string;
}