mirror of
https://github.com/wavetermdev/xterm.js.git
synced 2026-08-05 13:43:48 -07:00
Merge branch 'master' into character-joiner
This commit is contained in:
-673
File diff suppressed because it is too large
Load Diff
+2
-3
@@ -32,7 +32,6 @@ import { Viewport } from './Viewport';
|
||||
import { rightClickHandler, moveTextAreaUnderMouseCursor, pasteHandler, copyHandler } from './handlers/Clipboard';
|
||||
import { C0 } from './common/data/EscapeSequences';
|
||||
import { InputHandler } from './InputHandler';
|
||||
// import { Parser } from './Parser';
|
||||
import { Renderer } from './renderer/Renderer';
|
||||
import { Linkifier } from './Linkifier';
|
||||
import { SelectionManager } from './SelectionManager';
|
||||
@@ -584,7 +583,7 @@ export class Terminal extends EventEmitter implements ITerminal, IDisposable, II
|
||||
}, true));
|
||||
|
||||
this.register(addDisposableDomListener(this.element, 'keyup', (ev: KeyboardEvent) => {
|
||||
if (!wasMondifierKeyOnlyEvent(ev)) {
|
||||
if (!wasModifierKeyOnlyEvent(ev)) {
|
||||
this.focus();
|
||||
}
|
||||
|
||||
@@ -1966,7 +1965,7 @@ export class Terminal extends EventEmitter implements ITerminal, IDisposable, II
|
||||
* Helpers
|
||||
*/
|
||||
|
||||
function wasMondifierKeyOnlyEvent(ev: KeyboardEvent): boolean {
|
||||
function wasModifierKeyOnlyEvent(ev: KeyboardEvent): boolean {
|
||||
return ev.keyCode === 16 || // Shift
|
||||
ev.keyCode === 17 || // Ctrl
|
||||
ev.keyCode === 18; // Alt
|
||||
|
||||
@@ -7,42 +7,46 @@ import { ITerminal } from '../Types';
|
||||
import { IColorSet, IRenderDimensions } from './Types';
|
||||
import { BaseRenderLayer } from './BaseRenderLayer';
|
||||
|
||||
interface ISelectionState {
|
||||
start: [number, number];
|
||||
end: [number, number];
|
||||
columnSelectMode: boolean;
|
||||
ydisp: number;
|
||||
}
|
||||
|
||||
export class SelectionRenderLayer extends BaseRenderLayer {
|
||||
private _state: { start: [number, number], end: [number, number], columnSelectMode: boolean };
|
||||
private _state: ISelectionState;
|
||||
|
||||
constructor(container: HTMLElement, zIndex: number, colors: IColorSet) {
|
||||
super(container, 'selection', zIndex, true, colors);
|
||||
this._clearState();
|
||||
}
|
||||
|
||||
private _clearState(): void {
|
||||
this._state = {
|
||||
start: null,
|
||||
end: null,
|
||||
columnSelectMode: null
|
||||
columnSelectMode: null,
|
||||
ydisp: null
|
||||
};
|
||||
}
|
||||
|
||||
public resize(terminal: ITerminal, dim: IRenderDimensions): void {
|
||||
super.resize(terminal, dim);
|
||||
// Resizing the canvas discards the contents of the canvas so clear state
|
||||
this._state = {
|
||||
start: null,
|
||||
end: null,
|
||||
columnSelectMode: null
|
||||
};
|
||||
this._clearState();
|
||||
}
|
||||
|
||||
public reset(terminal: ITerminal): void {
|
||||
if (this._state.start && this._state.end) {
|
||||
this._state = {
|
||||
start: null,
|
||||
end: null,
|
||||
columnSelectMode: null
|
||||
};
|
||||
this._clearState();
|
||||
this.clearAll();
|
||||
}
|
||||
}
|
||||
|
||||
public onSelectionChanged(terminal: ITerminal, start: [number, number], end: [number, number], columnSelectMode: boolean): void {
|
||||
// Selection has not changed
|
||||
if (!this._didStateChange(start, end, columnSelectMode)) {
|
||||
if (!this._didStateChange(start, end, columnSelectMode, terminal.buffer.ydisp)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -94,12 +98,14 @@ export class SelectionRenderLayer extends BaseRenderLayer {
|
||||
this._state.start = [start[0], start[1]];
|
||||
this._state.end = [end[0], end[1]];
|
||||
this._state.columnSelectMode = columnSelectMode;
|
||||
this._state.ydisp = terminal.buffer.ydisp;
|
||||
}
|
||||
|
||||
private _didStateChange(start: [number, number], end: [number, number], columnSelectMode: boolean): boolean {
|
||||
private _didStateChange(start: [number, number], end: [number, number], columnSelectMode: boolean, ydisp: number): boolean {
|
||||
return !this._areCoordinatesEqual(start, this._state.start) ||
|
||||
!this._areCoordinatesEqual(end, this._state.end) ||
|
||||
columnSelectMode !== this._state.columnSelectMode;
|
||||
columnSelectMode !== this._state.columnSelectMode ||
|
||||
ydisp !== this._state.ydisp;
|
||||
}
|
||||
|
||||
private _areCoordinatesEqual(coord1: [number, number], coord2: [number, number]): boolean {
|
||||
|
||||
Reference in New Issue
Block a user