Skip to content

Commit

Permalink
Expose range on link handler
Browse files Browse the repository at this point in the history
This is needed for proper tooltip positioning

Part of xtermjs#1134
  • Loading branch information
Tyriar committed Aug 30, 2022
1 parent 0c864cd commit 22cca34
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 18 deletions.
32 changes: 17 additions & 15 deletions src/browser/OscLinkProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import { ILink, ILinkProvider } from 'browser/Types';
import { CellData } from 'common/buffer/CellData';
import { IBufferService, IOptionsService, IOscLinkService } from 'common/services/Services';
import { IBufferRange } from 'xterm';

export class OscLinkProvider implements ILinkProvider {
constructor(
Expand Down Expand Up @@ -54,24 +55,25 @@ export class OscLinkProvider implements ILinkProvider {
if (finishLink || (currentStart !== -1 && x === lineLength - 1)) {
const text = this._oscLinkService.getLinkData(currentLinkId)?.uri;
if (text) {
// These ranges are 1-based
const range: IBufferRange = {
start: {
x: currentStart + 1,
y
},
end: {
// Offset end x if it's a link that ends on the last cell in the line
x: x + (!finishLink && x === lineLength - 1 ? 1 : 0),
y
}
};
// OSC links always use underline and pointer decorations
result.push({
text,
// These ranges are 1-based
range: {
start: {
x: currentStart + 1,
y
},
end: {
// Offset end x if it's a link that ends on the last cell in the line
x: x + (!finishLink && x === lineLength - 1 ? 1 : 0),
y
}
},
activate: linkHandler?.activate || defaultActivate,
hover: linkHandler?.hover,
leave: linkHandler?.leave
range,
activate: (e, text) => (linkHandler?.activate(e, text, range) || defaultActivate(e, text)),
hover: (e, text) => linkHandler?.hover?.(e, text, range),
leave: (e, text) => linkHandler?.leave?.(e, text, range)
});
}
finishLink = false;
Expand Down
9 changes: 6 additions & 3 deletions typings/xterm.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1117,24 +1117,27 @@ declare module 'xterm' {
* Calls when the link is activated.
* @param event The mouse event triggering the callback.
* @param text The text of the link.
* @param range The buffer range of the link.
*/
activate(event: MouseEvent, text: string): void;
activate(event: MouseEvent, text: string, range: IBufferRange): void;

/**
* Called when the mouse hovers the link. To use this to create a DOM-based hover tooltip,
* create the hover element within `Terminal.element` and add the `xterm-hover` class to it,
* that will cause mouse events to not fall through and activate other links.
* @param event The mouse event triggering the callback.
* @param text The text of the link.
* @param range The buffer range of the link.
*/
hover?(event: MouseEvent, text: string): void;
hover?(event: MouseEvent, text: string, range: IBufferRange): void;

/**
* Called when the mouse leaves the link.
* @param event The mouse event triggering the callback.
* @param text The text of the link.
* @param range The buffer range of the link.
*/
leave?(event: MouseEvent, text: string): void;
leave?(event: MouseEvent, text: string, range: IBufferRange): void;
}

/**
Expand Down

0 comments on commit 22cca34

Please sign in to comment.