Move bracketed paste mode to coreservice

This commit is contained in:
Daniel Imms
2020-04-25 11:11:05 -07:00
parent b80c14639e
commit 4cec11be9c
8 changed files with 30 additions and 20 deletions
+2 -2
View File
@@ -1802,7 +1802,7 @@ export class InputHandler extends Disposable implements IInputHandler {
this._terminal.showCursor();
break;
case 2004: // bracketed paste mode (https://cirw.in/blog/bracketed-paste)
this._terminal.bracketedPasteMode = true;
this._coreService.decPrivateModes.bracketedPasteMode = true;
break;
}
}
@@ -2020,7 +2020,7 @@ export class InputHandler extends Disposable implements IInputHandler {
this._terminal.showCursor();
break;
case 2004: // bracketed paste mode (https://cirw.in/blog/bracketed-paste)
this._terminal.bracketedPasteMode = false;
this._coreService.decPrivateModes.bracketedPasteMode = false;
break;
}
}
+5 -11
View File
@@ -90,7 +90,6 @@ export class Terminal extends CoreTerminal implements ITerminal, IInputHandlingT
// modes
public insertMode: boolean;
public bracketedPasteMode: boolean;
// mouse properties
public mouseEvents: CoreMouseEventType = CoreMouseEventType.NONE;
@@ -173,20 +172,19 @@ export class Terminal extends CoreTerminal implements ITerminal, IInputHandlingT
return;
}
super.dispose();
this._windowsMode?.dispose();
this._windowsMode = undefined;
this._renderService?.dispose();
this._customKeyEventHandler = null;
this.write = () => { };
this.element?.parentNode?.removeChild(this.element);
}
private _setup(): void {
protected _setup(): void {
super._setup();
this._customKeyEventHandler = null;
// modes
this.insertMode = false;
this.bracketedPasteMode = false;
this._userScrolling = false;
@@ -209,10 +207,6 @@ export class Terminal extends CoreTerminal implements ITerminal, IInputHandlingT
if (!this.linkifier2) {
this.linkifier2 = this._instantiationService.createInstance(Linkifier2);
}
if (this.options.windowsMode) {
this._enableWindowsMode();
}
}
/**
@@ -337,7 +331,7 @@ export class Terminal extends CoreTerminal implements ITerminal, IInputHandlingT
}
copyHandler(event, this._selectionService);
}));
const pasteHandlerWrapper = (event: ClipboardEvent): void => handlePasteEvent(event, this.textarea, this.bracketedPasteMode, this._coreService);
const pasteHandlerWrapper = (event: ClipboardEvent): void => handlePasteEvent(event, this.textarea, this._coreService);
this.register(addDisposableDomListener(this.textarea, 'paste', pasteHandlerWrapper));
this.register(addDisposableDomListener(this.element, 'paste', pasteHandlerWrapper));
@@ -982,7 +976,7 @@ export class Terminal extends CoreTerminal implements ITerminal, IInputHandlingT
}
public paste(data: string): void {
paste(data, this.textarea, this.bracketedPasteMode, this._coreService);
paste(data, this.textarea, this._coreService);
}
/**
-2
View File
@@ -22,7 +22,6 @@ export type LineData = CharData[];
*/
export interface IInputHandlingTerminal {
insertMode: boolean;
bracketedPasteMode: boolean;
sendFocus: boolean;
buffers: IBufferSet;
@@ -135,7 +134,6 @@ export interface ITerminal extends IPublicTerminal, IElementAccessor, IBufferAcc
buffer: IBuffer;
buffers: IBufferSet;
viewport: IViewport;
bracketedPasteMode: boolean;
optionsService: IOptionsService;
// TODO: We should remove options once components adopt optionsService
options: ITerminalOptions;
+4 -4
View File
@@ -42,17 +42,17 @@ export function copyHandler(ev: ClipboardEvent, selectionService: ISelectionServ
* @param ev The original paste event to be handled
* @param term The terminal on which to apply the handled paste event
*/
export function handlePasteEvent(ev: ClipboardEvent, textarea: HTMLTextAreaElement, bracketedPasteMode: boolean, coreService: ICoreService): void {
export function handlePasteEvent(ev: ClipboardEvent, textarea: HTMLTextAreaElement, coreService: ICoreService): void {
ev.stopPropagation();
if (ev.clipboardData) {
const text = ev.clipboardData.getData('text/plain');
paste(text, textarea, bracketedPasteMode, coreService);
paste(text, textarea, coreService);
}
}
export function paste(text: string, textarea: HTMLTextAreaElement, bracketedPasteMode: boolean, coreService: ICoreService): void {
export function paste(text: string, textarea: HTMLTextAreaElement, coreService: ICoreService): void {
text = prepareTextForTerminal(text);
text = bracketTextForPaste(text, bracketedPasteMode);
text = bracketTextForPaste(text, coreService.decPrivateModes.bracketedPasteMode);
coreService.triggerDataEvent(text, true);
textarea.value = '';
}
+16 -1
View File
@@ -50,7 +50,7 @@ export abstract class CoreTerminal extends Disposable {
public readonly unicodeService: IUnicodeService;
public readonly optionsService: IOptionsService;
protected _windowsMode: IDisposable | undefined;
private _windowsMode: IDisposable | undefined;
private _onBinary = new EventEmitter<string>();
public get onBinary(): IEvent<string> { return this._onBinary.event; }
@@ -93,6 +93,21 @@ export abstract class CoreTerminal extends Disposable {
this.optionsService.onOptionChange(key => this._updateOptions(key));
}
public dispose(): void {
if (this._isDisposed) {
return;
}
super.dispose();
this._windowsMode?.dispose();
this._windowsMode = undefined;
}
protected _setup(): void {
if (this.optionsService.options.windowsMode) {
this._enableWindowsMode();
}
}
protected _updateOptions(key: string): void {
// TODO: These listeners should be owned by individual components
switch (key) {
+1
View File
@@ -61,6 +61,7 @@ export class MockCoreService implements ICoreService {
public decPrivateModes: IDecPrivateModes = {
applicationCursorKeys: false,
applicationKeypad: false,
bracketedPasteMode: false,
origin: false,
wraparound: true
};
+1
View File
@@ -163,6 +163,7 @@ export interface IMarker extends IDisposable {
export interface IDecPrivateModes {
applicationCursorKeys: boolean;
applicationKeypad: boolean;
bracketedPasteMode: boolean;
origin: boolean;
wraparound: boolean; // defaults: xterm - true, vt100 - false
}
+1
View File
@@ -11,6 +11,7 @@ import { clone } from 'common/Clone';
const DEFAULT_DEC_PRIVATE_MODES: IDecPrivateModes = Object.freeze({
applicationCursorKeys: false,
applicationKeypad: false,
bracketedPasteMode: false,
origin: false,
wraparound: true // defaults: xterm - true, vt100 - false
});