From a437ccebc943d59130ad0440a9816a92c27bf7d8 Mon Sep 17 00:00:00 2001 From: Quinten Kock Date: Tue, 18 Nov 2025 01:36:55 +0100 Subject: [PATCH] simplify terminal code --- src/app/editorgrid.ts | 1 - src/app/terminal.ts | 4 +--- src/main/main.ts | 21 +-------------------- src/main/pty.ts | 23 +++++++++-------------- src/preload.ts | 3 --- src/types/global.d.ts | 1 - 6 files changed, 11 insertions(+), 42 deletions(-) diff --git a/src/app/editorgrid.ts b/src/app/editorgrid.ts index eb0c1b9..209fadb 100644 --- a/src/app/editorgrid.ts +++ b/src/app/editorgrid.ts @@ -94,7 +94,6 @@ vanX.list(EditorTabs, editors, EditorGrid); document.addEventListener("keyup", (e) => { if (e.key === "t" && e.altKey) { - console.log("Opening terminal"); addTerminal(); } }); diff --git a/src/app/terminal.ts b/src/app/terminal.ts index 3e151a1..e776506 100644 --- a/src/app/terminal.ts +++ b/src/app/terminal.ts @@ -61,7 +61,7 @@ export class Terminal implements Displayable { ); this.unsubTerminalExit = window.electronAPI.onTerminalExit( - (id, exitCode, signal) => { + (id, exitCode) => { if (id === this.terminalId) { this.term.writeln( `\r\n[Process exited with code ${exitCode}]`, @@ -101,10 +101,8 @@ export class Terminal implements Displayable { this.dom.clientWidth > 0 && this.dom.clientHeight > 0 ) { - console.log("Old size: ", this.term.rows, this.term.cols); this.fitAddon.fit(); const { cols, rows } = this.term; - console.log("New size: ", rows, cols); window.electronAPI.resizeTerminal(this.terminalId, cols, rows); } } diff --git a/src/main/main.ts b/src/main/main.ts index a7d361d..5b0384a 100644 --- a/src/main/main.ts +++ b/src/main/main.ts @@ -100,22 +100,7 @@ app.whenReady().then(() => { ipcMain.handle( "terminal:create", async (event, shell?: string, args?: string[]) => { - const terminalId = terminalManager.createTerminal(shell, args); - - // Set up data forwarding to the renderer - terminalManager.on("terminal-data", (id, data) => { - if (id === terminalId) { - event.sender.send("terminal:data", id, data); - } - }); - - terminalManager.on("terminal-exit", (id, exitCode, signal) => { - if (id === terminalId) { - event.sender.send("terminal:exit", id, exitCode, signal); - } - }); - - return terminalId; + return terminalManager.createTerminal(event, shell, args); }, ); @@ -137,10 +122,6 @@ app.whenReady().then(() => { return terminalManager.closeTerminal(id); }); - ipcMain.handle("terminal:list", async () => { - return terminalManager.listTerminals(); - }); - createWindow(); if (process.platform === "darwin") { app.on("activate", function () { diff --git a/src/main/pty.ts b/src/main/pty.ts index 72334cf..62e6d5c 100644 --- a/src/main/pty.ts +++ b/src/main/pty.ts @@ -1,15 +1,18 @@ import * as pty from "node-pty"; -import { EventEmitter } from "events"; export interface TerminalInstance { ptyProcess: pty.IPty; } -export class TerminalManager extends EventEmitter { +export class TerminalManager { private terminals: Map = new Map(); private nextId: number = 1; - createTerminal(shell?: string, args?: string[]): string { + createTerminal( + event: Electron.IpcMainInvokeEvent, + shell?: string, + args?: string[], + ): string { const id = `terminal-${this.nextId++}`; // Default shell based on platform @@ -30,11 +33,11 @@ export class TerminalManager extends EventEmitter { }; ptyProcess.onData((data) => { - this.emit("terminal-data", id, data); + event.sender.send("terminal:data", id, data); }); - ptyProcess.onExit(({ exitCode, signal }) => { - this.emit("terminal-exit", id, exitCode, signal); + ptyProcess.onExit(({ exitCode }) => { + event.sender.send("terminal:exit", id, exitCode); this.terminals.delete(id); }); @@ -42,10 +45,6 @@ export class TerminalManager extends EventEmitter { return id; } - getTerminal(id: string): TerminalInstance | undefined { - return this.terminals.get(id); - } - resizeTerminal(id: string, cols: number, rows: number): boolean { const terminal = this.terminals.get(id); if (terminal) { @@ -73,10 +72,6 @@ export class TerminalManager extends EventEmitter { } return false; } - - listTerminals(): string[] { - return Array.from(this.terminals.keys()); - } } export const terminalManager = new TerminalManager(); diff --git a/src/preload.ts b/src/preload.ts index 2a0b3b0..c8d97e3 100644 --- a/src/preload.ts +++ b/src/preload.ts @@ -82,9 +82,6 @@ contextBridge.exposeInMainWorld("electronAPI", { closeTerminal: (id: string) => ipcRenderer.invoke("terminal:close", id) as Promise, - listTerminals: () => - ipcRenderer.invoke("terminal:list") as Promise, - // Terminal events (subscribe/unsubscribe) onTerminalData: (callback: (id: string, data: string) => void) => { terminalDataCallbacks.add(callback); diff --git a/src/types/global.d.ts b/src/types/global.d.ts index d44e2c5..1959226 100644 --- a/src/types/global.d.ts +++ b/src/types/global.d.ts @@ -47,7 +47,6 @@ declare global { ) => Promise; writeToTerminal: (id: string, data: string) => Promise; closeTerminal: (id: string) => Promise; - listTerminals: () => Promise; onTerminalData: ( callback: (id: string, data: string) => void, ) => () => void;