Do the selection even if there is already a selection

This commit is contained in:
Bruno Ribeito
2017-11-08 23:27:00 +00:00
parent 2865d935b6
commit 18b86a1cbc
3 changed files with 25 additions and 4 deletions
+1
View File
@@ -201,6 +201,7 @@ export interface ISelectionManager {
enable(): void;
setBuffer(buffer: IBuffer): void;
setSelection(row: number, col: number, length: number): void;
isClickInSelection(event: MouseEvent): boolean;
selectWordAtCursor(event: MouseEvent): void;
}
+23 -3
View File
@@ -249,6 +249,22 @@ export class SelectionManager extends EventEmitter implements ISelectionManager
this.emit('refresh', { start: this._model.finalSelectionStart, end: this._model.finalSelectionEnd });
}
/**
* Checks if the current click was inside the current selection
* @param event The mouse event
*/
public isClickInSelection(event: MouseEvent): boolean {
const coords = this._getMouseBufferCoords(event);
const start = this._model.finalSelectionStart;
const end = this._model.finalSelectionEnd;
if (!start || !end) {
return false;
}
return (start[1] < coords[1] && end[1] > coords[1]) || (start[1] === coords[1] && coords[0] > start[0]) || (end[1] === coords[1] && coords[0] < end[0]);
}
/**
* Selects word at the current mouse event coordinates.
* @param event The mouse event.
@@ -256,10 +272,14 @@ export class SelectionManager extends EventEmitter implements ISelectionManager
public selectWordAtCursor(event: MouseEvent): void {
const coords = this._getMouseBufferCoords(event);
if (coords) {
this._selectWordAt(coords, false);
this.refresh(true);
const wordPosition = this._getWordAt(coords, true);
if (wordPosition) {
this._model.selectionStart = [wordPosition.start, coords[1]];
this._model.selectionStartLength = wordPosition.length;
this._model.selectionEnd = [this._model.areSelectionValuesReversed() ? wordPosition.start : (wordPosition.start + wordPosition.length), coords[1]];
this.refresh(true);
}
}
}
/**
* Selects all text within the terminal.
+1 -1
View File
@@ -108,7 +108,7 @@ export function moveTextAreaUnderMouseCursor(ev: MouseEvent, textarea: HTMLTextA
export function rightClickHandler(ev: MouseEvent, textarea: HTMLTextAreaElement, selectionManager: ISelectionManager, shouldSelectWord: boolean): void {
moveTextAreaUnderMouseCursor(ev, textarea);
if (shouldSelectWord && !selectionManager.hasSelection)
if (shouldSelectWord && (!selectionManager.hasSelection || !selectionManager.isClickInSelection(ev)))
selectionManager.selectWordAtCursor(ev);
// Get textarea ready to copy from the context menu