/** * 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(); return { term, fitAddon }; }