42 lines
1.2 KiB
JavaScript
42 lines
1.2 KiB
JavaScript
/**
|
|
* Terminal initialization and management
|
|
*/
|
|
|
|
import { build_link_handler } from "./links.js";
|
|
|
|
/**
|
|
* Initialize the terminal with all required addons and configuration
|
|
* @returns {object} Object containing term and fitAddon instances
|
|
*/
|
|
export function initTerminal() {
|
|
const term = new Terminal({
|
|
fontFamily: "Monospace",
|
|
allowProposedApi: true,
|
|
scrollback: 0,
|
|
});
|
|
// for debugging
|
|
window.term = term;
|
|
const fitAddon = new FitAddon.FitAddon();
|
|
const clipboardAddon = new ClipboardAddon.ClipboardAddon();
|
|
|
|
const { linkHandler, activateLink } = build_link_handler();
|
|
const webLinksAddon = new WebLinksAddon.WebLinksAddon(
|
|
activateLink,
|
|
linkHandler
|
|
);
|
|
term.options.linkHandler = linkHandler;
|
|
|
|
const webglAddon = new WebglAddon.WebglAddon();
|
|
term.loadAddon(fitAddon);
|
|
term.loadAddon(clipboardAddon);
|
|
term.loadAddon(webLinksAddon);
|
|
webglAddon.onContextLoss((e) => {
|
|
// TODO: reload, or?
|
|
webglAddon.dispose();
|
|
});
|
|
term.loadAddon(webglAddon);
|
|
term.open(document.getElementById("terminal"));
|
|
fitAddon.fit();
|
|
term.focus();
|
|
return { term, fitAddon };
|
|
}
|