diff --git a/main.ts b/main.ts index 63b2120..eb30ee2 100644 --- a/main.ts +++ b/main.ts @@ -5,6 +5,53 @@ import * as os from "os"; let mainWindow: BrowserWindow; const terminals = new Map(); +// Create new terminal +ipcMain.on("create-terminal", (event) => { + const terminalId = `terminal-${Date.now()}`; + const shell = os.platform() === "darwin" ? "zsh" : "bash"; + + const ptyProcess = pty.spawn(shell, [], { + name: "xterm-color", + cols: 80, + rows: 30, + cwd: process.env.HOME, + env: process.env, + }); + + terminals.set(terminalId, ptyProcess); + + ptyProcess.onData((data) => { + mainWindow.webContents.send("terminal-output", terminalId, data); + }); + + event.reply("terminal-created", terminalId); +}); + +// Handle terminal input +ipcMain.on("terminal-input", (_event, terminalId: string, data: string) => { + const terminal = terminals.get(terminalId); + if (terminal) { + terminal.write(data); + } +}); + +// Handle terminal resize +ipcMain.on("terminal-resize", (_event, terminalId: string, cols: number, rows: number) => { + const terminal = terminals.get(terminalId); + if (terminal) { + terminal.resize(cols, rows); + } +}); + +// Handle terminal close +ipcMain.on("close-terminal", (_event, terminalId: string) => { + const terminal = terminals.get(terminalId); + if (terminal) { + terminal.kill(); + terminals.delete(terminalId); + } +}); + const createWindow = () => { mainWindow = new BrowserWindow({ width: 1400, @@ -16,53 +63,6 @@ const createWindow = () => { }); mainWindow.loadFile("index.html"); - - // Create new terminal - ipcMain.on("create-terminal", (event) => { - const terminalId = `terminal-${Date.now()}`; - const shell = os.platform() === "darwin" ? "zsh" : "bash"; - - const ptyProcess = pty.spawn(shell, [], { - name: "xterm-color", - cols: 80, - rows: 30, - cwd: process.env.HOME, - env: process.env, - }); - - terminals.set(terminalId, ptyProcess); - - ptyProcess.onData((data) => { - mainWindow.webContents.send("terminal-output", terminalId, data); - }); - - event.reply("terminal-created", terminalId); - }); - - // Handle terminal input - ipcMain.on("terminal-input", (_event, terminalId: string, data: string) => { - const terminal = terminals.get(terminalId); - if (terminal) { - terminal.write(data); - } - }); - - // Handle terminal resize - ipcMain.on("terminal-resize", (_event, terminalId: string, cols: number, rows: number) => { - const terminal = terminals.get(terminalId); - if (terminal) { - terminal.resize(cols, rows); - } - }); - - // Handle terminal close - ipcMain.on("close-terminal", (_event, terminalId: string) => { - const terminal = terminals.get(terminalId); - if (terminal) { - terminal.kill(); - terminals.delete(terminalId); - } - }); }; app.whenReady().then(() => { diff --git a/renderer.ts b/renderer.ts index 72cfea3..e2a910a 100644 --- a/renderer.ts +++ b/renderer.ts @@ -198,8 +198,3 @@ ipcRenderer.on("terminal-created", (_event, terminalId: string) => { document.getElementById("new-terminal")?.addEventListener("click", () => { ipcRenderer.send("create-terminal"); }); - -// Create first terminal on load -window.addEventListener("DOMContentLoaded", () => { - ipcRenderer.send("create-terminal"); -});