Skip to content

Commit

Permalink
Merge pull request #1705 from agurodriguez/xterm-1704
Browse files Browse the repository at this point in the history
Support link underlines in the DOM renderer
  • Loading branch information
Tyriar committed Sep 21, 2018
2 parents 2e8e64e + 4941d5a commit 005785b
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 2 deletions.
24 changes: 23 additions & 1 deletion src/renderer/dom/DomRenderer.ts
Expand Up @@ -4,7 +4,7 @@
*/

import { IRenderer, IRenderDimensions, IColorSet } from '../Types';
import { ITerminal, CharacterJoinerHandler } from '../../Types';
import { ILinkHoverEvent, ITerminal, CharacterJoinerHandler, LinkHoverEventTypes } from '../../Types';
import { ITheme } from 'xterm';
import { EventEmitter } from '../../common/EventEmitter';
import { ColorManager } from '../ColorManager';
Expand Down Expand Up @@ -79,6 +79,9 @@ export class DomRenderer extends EventEmitter implements IRenderer {
this._terminal.element.classList.add(TERMINAL_CLASS_PREFIX + this._terminalClass);
this._terminal.screenElement.appendChild(this._rowContainer);
this._terminal.screenElement.appendChild(this._selectionContainer);

this._terminal.linkifier.on(LinkHoverEventTypes.HOVER, (e: ILinkHoverEvent) => this._onLinkHover(e));
this._terminal.linkifier.on(LinkHoverEventTypes.LEAVE, (e: ILinkHoverEvent) => this._onLinkLeave(e));
}

public dispose(): void {
Expand Down Expand Up @@ -338,4 +341,23 @@ export class DomRenderer extends EventEmitter implements IRenderer {

public registerCharacterJoiner(handler: CharacterJoinerHandler): number { return -1; }
public deregisterCharacterJoiner(joinerId: number): boolean { return false; }

private _onLinkHover(e: ILinkHoverEvent): void {
this._setCellUnderline(e.x1, e.x2, e.y1, e.y2, e.cols, true);
}

private _onLinkLeave(e: ILinkHoverEvent): void {
this._setCellUnderline(e.x1, e.x2, e.y1, e.y2, e.cols, false);
}

private _setCellUnderline(x: number, x2: number, y: number, y2: number, cols: number, enabled: boolean): void {
while (x !== x2 || y !== y2) {
const span = <HTMLElement>this._rowElements[y].children[x];
span.style.textDecoration = enabled ? 'underline' : 'none';
x = (x + 1) % cols;
if (x === 0) {
y++;
}
}
}
}
1 change: 0 additions & 1 deletion typings/xterm.d.ts
Expand Up @@ -148,7 +148,6 @@ declare module 'xterm' {
* when canvas is too slow for the environment. The following features do
* not work when the DOM renderer is used:
*
* - Link underlines
* - Line height
* - Letter spacing
* - Cursor blink
Expand Down

0 comments on commit 005785b

Please sign in to comment.