Merge pull request #5953 from xtermjs/cursor/alt-click-for-mouse-events-5b17

Add altClickForMouseEvents option
This commit is contained in:
Daniel Imms
2026-05-28 06:35:56 -07:00
committed by GitHub
9 changed files with 314 additions and 15 deletions
+13 -1
View File
@@ -15,7 +15,7 @@ import { IBufferLine, ICellData, IDisposable } from 'common/Types';
import { getRangeLength } from 'common/buffer/BufferRange';
import { CellData } from 'common/buffer/CellData';
import { IBuffer } from 'common/buffer/Types';
import { IBufferService, ICoreService, IOptionsService } from 'common/services/Services';
import { IBufferService, ICoreService, IMouseStateService, IOptionsService } from 'common/services/Services';
import { Emitter } from 'common/Event';
const enum Constants {
@@ -127,6 +127,7 @@ export class SelectionService extends Disposable implements ISelectionService {
@ICoreService private readonly _coreService: ICoreService,
@IMouseCoordsService private readonly _mouseCoordsService: IMouseCoordsService,
@IOptionsService private readonly _optionsService: IOptionsService,
@IMouseStateService private readonly _mouseStateService: IMouseStateService,
@IRenderService private readonly _renderService: IRenderService,
@ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService
) {
@@ -434,6 +435,10 @@ export class SelectionService extends Disposable implements ISelectionService {
* @param event The mouse event.
*/
public shouldForceSelection(event: MouseEvent): boolean {
if (this._optionsService.rawOptions.mouseEventsRequireAlt && this._mouseStateService.areMouseEventsActive) {
return !event.altKey;
}
if (Browser.isMac) {
return event.altKey && this._optionsService.rawOptions.macOptionClickForcesSelection;
}
@@ -458,6 +463,10 @@ export class SelectionService extends Disposable implements ISelectionService {
return;
}
if (this._optionsService.rawOptions.mouseEventsRequireAlt && this._mouseStateService.areMouseEventsActive && event.altKey) {
return;
}
// Allow selection when using a specific modifier key, even when disabled
if (!this._enabled) {
if (!this.shouldForceSelection(event)) {
@@ -596,6 +605,9 @@ export class SelectionService extends Disposable implements ISelectionService {
* @param event the mouse or keyboard event
*/
public shouldColumnSelect(event: KeyboardEvent | MouseEvent): boolean {
if (this._optionsService.rawOptions.mouseEventsRequireAlt && this._mouseStateService.areMouseEventsActive) {
return false;
}
return event.altKey && !(Browser.isMac && this._optionsService.rawOptions.macOptionClickForcesSelection);
}