mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Use webgl when available, add search and better weblinks
Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
1 parent
c9f1594907
commit
2de306810e
4 files changed
+48
-31
No files matched your search
@@ -645,6 +645,14 @@ exports[`test for opening terminal tab within cluster frame when new terminal ta
|
||||
<div
|
||||
class="xterm-decoration-container"
|
||||
/>
|
||||
<canvas
|
||||
class="xterm-link-layer"
|
||||
style="z-index: 2;"
|
||||
/>
|
||||
<canvas
|
||||
class="xterm-cursor-layer"
|
||||
style="z-index: 3;"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -17,9 +17,11 @@ import type { Logger } from "../../../../common/logger";
|
||||
import type { TerminalConfig } from "../../../../common/user-store/preferences-helpers";
|
||||
import assert from "assert";
|
||||
import { TerminalChannels } from "../../../../common/terminal/channels";
|
||||
import { LinkProvider } from "xterm-link-provider";
|
||||
import type { OpenLinkInBrowser } from "../../../../common/utils/open-link-in-browser.injectable";
|
||||
import type { CreateTerminalRenderer } from "./create-renderer.injectable";
|
||||
import { WebLinksAddon } from "xterm-addon-web-links";
|
||||
import { SearchAddon } from "xterm-addon-search";
|
||||
import { WebglAddon } from "xterm-addon-webgl";
|
||||
|
||||
export interface TerminalDependencies {
|
||||
readonly spawningPool: HTMLElement;
|
||||
@@ -98,10 +100,25 @@ export class Terminal {
|
||||
fontFamily: this.fontFamily,
|
||||
theme: this.dependencies.xtermColorTheme.get(),
|
||||
});
|
||||
|
||||
// enable terminal addons
|
||||
this.xterm.loadAddon(this.fitAddon);
|
||||
this.xterm.loadAddon(new WebLinksAddon());
|
||||
this.xterm.loadAddon(new SearchAddon());
|
||||
|
||||
this.xterm.open(this.dependencies.spawningPool);
|
||||
|
||||
try {
|
||||
const webgl = new WebglAddon();
|
||||
|
||||
this.xterm.loadAddon(webgl);
|
||||
webgl.onContextLoss(() => {
|
||||
webgl.dispose();
|
||||
});
|
||||
} catch (error) {
|
||||
this.dependencies.logger.warn("[TERMINAL]: failed to load webgl as renderer, falling back to DOM", error);
|
||||
}
|
||||
|
||||
this.xterm.attachCustomKeyEventHandler(this.keyHandler);
|
||||
this.xterm.onSelectionChange(this.onSelectionChange);
|
||||
|
||||
@@ -116,16 +133,7 @@ export class Terminal {
|
||||
this.api.on("error", this.onApiError);
|
||||
window.addEventListener("resize", this.onResize);
|
||||
|
||||
const linkProvider = new LinkProvider(
|
||||
this.xterm,
|
||||
/https?:\/\/[^\s]+/i,
|
||||
(event, link) => this.dependencies.openLinkInBrowser(link),
|
||||
undefined,
|
||||
0,
|
||||
);
|
||||
|
||||
this.disposer.push(
|
||||
this.xterm.registerLinkProvider(linkProvider),
|
||||
reaction(
|
||||
() => this.dependencies.xtermColorTheme.get(),
|
||||
colors => this.xterm.options.theme = colors,
|
||||
@@ -133,7 +141,6 @@ export class Terminal {
|
||||
reaction(() => this.fontSize, this.setFontSize),
|
||||
reaction(() => this.fontFamily, this.setFontFamily),
|
||||
this.xterm.onData(this.onData),
|
||||
() => this.fitAddon.dispose(),
|
||||
() => this.api.removeAllListeners(),
|
||||
() => window.removeEventListener("resize", this.onResize),
|
||||
() => this.elem.removeEventListener("contextmenu", this.onContextMenu),
|
||||
|
||||
Reference in new issue
Block a user