fix(terminal): update ghostty-web to a build that clears recycled rows
ghostty-web 0.4.0 hands rows that scroll into view out of recycled WASM page memory without clearing them, so after a tab or project switch the new emulator showed the previous terminal's text (upstream #138). The fix landed only in prereleases, so pin 0.4.0-next.20 and carry the local block-glyph rendering patch over to the new dist file. Verified in a production build: creating an emulator after disposing a full one no longer exposes its rows, and switching between two projects with live output in each keeps every terminal's content to itself.
This commit is contained in:
@@ -47,7 +47,7 @@
|
|||||||
"clsx": "^2.1.1",
|
"clsx": "^2.1.1",
|
||||||
"cmdk": "^1.1.1",
|
"cmdk": "^1.1.1",
|
||||||
"express": "^5.1.0",
|
"express": "^5.1.0",
|
||||||
"ghostty-web": "0.4.0",
|
"ghostty-web": "0.4.0-next.20.g1858a59",
|
||||||
"http-proxy-middleware": "^3.0.5",
|
"http-proxy-middleware": "^3.0.5",
|
||||||
"next-themes": "^0.4.6",
|
"next-themes": "^0.4.6",
|
||||||
"node-pty": "1.2.0-beta.12",
|
"node-pty": "1.2.0-beta.12",
|
||||||
@@ -97,7 +97,7 @@
|
|||||||
},
|
},
|
||||||
"packages/electron": {
|
"packages/electron": {
|
||||||
"name": "@openchamber/electron",
|
"name": "@openchamber/electron",
|
||||||
"version": "1.22.1",
|
"version": "1.22.2",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@openchamber/web": "workspace:*",
|
"@openchamber/web": "workspace:*",
|
||||||
"electron-context-menu": "^4.1.2",
|
"electron-context-menu": "^4.1.2",
|
||||||
@@ -134,7 +134,7 @@
|
|||||||
},
|
},
|
||||||
"packages/ui": {
|
"packages/ui": {
|
||||||
"name": "@openchamber/ui",
|
"name": "@openchamber/ui",
|
||||||
"version": "1.22.1",
|
"version": "1.22.2",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@aparajita/capacitor-secure-storage": "^8.0.0",
|
"@aparajita/capacitor-secure-storage": "^8.0.0",
|
||||||
"@base-ui/react": "^1.4.0",
|
"@base-ui/react": "^1.4.0",
|
||||||
@@ -185,7 +185,7 @@
|
|||||||
"express": "^5.1.0",
|
"express": "^5.1.0",
|
||||||
"fflate": "^0.8.3",
|
"fflate": "^0.8.3",
|
||||||
"fuse.js": "^7.1.0",
|
"fuse.js": "^7.1.0",
|
||||||
"ghostty-web": "^0.4.0",
|
"ghostty-web": "0.4.0-next.20.g1858a59",
|
||||||
"heic2any": "^0.0.4",
|
"heic2any": "^0.0.4",
|
||||||
"html-to-image": "^1.11.13",
|
"html-to-image": "^1.11.13",
|
||||||
"http-proxy-middleware": "^3.0.5",
|
"http-proxy-middleware": "^3.0.5",
|
||||||
@@ -241,7 +241,7 @@
|
|||||||
},
|
},
|
||||||
"packages/vscode": {
|
"packages/vscode": {
|
||||||
"name": "openchamber",
|
"name": "openchamber",
|
||||||
"version": "1.22.1",
|
"version": "1.22.2",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@openchamber/ui": "workspace:*",
|
"@openchamber/ui": "workspace:*",
|
||||||
"@opencode-ai/sdk": "1.18.29",
|
"@opencode-ai/sdk": "1.18.29",
|
||||||
@@ -264,7 +264,7 @@
|
|||||||
},
|
},
|
||||||
"packages/web": {
|
"packages/web": {
|
||||||
"name": "@openchamber/web",
|
"name": "@openchamber/web",
|
||||||
"version": "1.22.1",
|
"version": "1.22.2",
|
||||||
"bin": {
|
"bin": {
|
||||||
"openchamber": "./bin/cli.js",
|
"openchamber": "./bin/cli.js",
|
||||||
},
|
},
|
||||||
@@ -323,7 +323,7 @@
|
|||||||
"eslint": "^9.33.0",
|
"eslint": "^9.33.0",
|
||||||
"eslint-plugin-react-hooks": "^5.2.0",
|
"eslint-plugin-react-hooks": "^5.2.0",
|
||||||
"eslint-plugin-react-refresh": "^0.5.0",
|
"eslint-plugin-react-refresh": "^0.5.0",
|
||||||
"ghostty-web": "0.4.0",
|
"ghostty-web": "0.4.0-next.20.g1858a59",
|
||||||
"globals": "^16.3.0",
|
"globals": "^16.3.0",
|
||||||
"next-themes": "^0.4.6",
|
"next-themes": "^0.4.6",
|
||||||
"nodemon": "^3.1.7",
|
"nodemon": "^3.1.7",
|
||||||
@@ -2122,7 +2122,7 @@
|
|||||||
|
|
||||||
"get-tsconfig": ["get-tsconfig@4.13.6", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw=="],
|
"get-tsconfig": ["get-tsconfig@4.13.6", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw=="],
|
||||||
|
|
||||||
"ghostty-web": ["ghostty-web@0.4.0", "", {}, "sha512-0puDBik2qapbD/QQBW9o5ZHfXnZBqZWx/ctBiVtKZ6ZLds4NYb+wZuw1cRLXZk9zYovIQ908z3rvFhexAvc5Hg=="],
|
"ghostty-web": ["ghostty-web@0.4.0-next.20.g1858a59", "", {}, "sha512-NXA9H3IJlx+DGJukXbOPQWFkigYdAatTqkoIvM8tvhfbaYoDf3gGKxXLLyXtLYOBt5qzGdEZa294TU36gULjVg=="],
|
||||||
|
|
||||||
"github-from-package": ["github-from-package@0.0.0", "", {}, "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw=="],
|
"github-from-package": ["github-from-package@0.0.0", "", {}, "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw=="],
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -135,7 +135,7 @@
|
|||||||
"clsx": "^2.1.1",
|
"clsx": "^2.1.1",
|
||||||
"cmdk": "^1.1.1",
|
"cmdk": "^1.1.1",
|
||||||
"express": "^5.1.0",
|
"express": "^5.1.0",
|
||||||
"ghostty-web": "0.4.0",
|
"ghostty-web": "0.4.0-next.20.g1858a59",
|
||||||
"http-proxy-middleware": "^3.0.5",
|
"http-proxy-middleware": "^3.0.5",
|
||||||
"next-themes": "^0.4.6",
|
"next-themes": "^0.4.6",
|
||||||
"node-pty": "1.2.0-beta.12",
|
"node-pty": "1.2.0-beta.12",
|
||||||
|
|||||||
@@ -61,7 +61,7 @@
|
|||||||
"express": "^5.1.0",
|
"express": "^5.1.0",
|
||||||
"fflate": "^0.8.3",
|
"fflate": "^0.8.3",
|
||||||
"fuse.js": "^7.1.0",
|
"fuse.js": "^7.1.0",
|
||||||
"ghostty-web": "^0.4.0",
|
"ghostty-web": "0.4.0-next.20.g1858a59",
|
||||||
"heic2any": "^0.0.4",
|
"heic2any": "^0.0.4",
|
||||||
"html-to-image": "^1.11.13",
|
"html-to-image": "^1.11.13",
|
||||||
"http-proxy-middleware": "^3.0.5",
|
"http-proxy-middleware": "^3.0.5",
|
||||||
|
|||||||
@@ -77,7 +77,7 @@
|
|||||||
"eslint": "^9.33.0",
|
"eslint": "^9.33.0",
|
||||||
"eslint-plugin-react-hooks": "^5.2.0",
|
"eslint-plugin-react-hooks": "^5.2.0",
|
||||||
"eslint-plugin-react-refresh": "^0.5.0",
|
"eslint-plugin-react-refresh": "^0.5.0",
|
||||||
"ghostty-web": "0.4.0",
|
"ghostty-web": "0.4.0-next.20.g1858a59",
|
||||||
"globals": "^16.3.0",
|
"globals": "^16.3.0",
|
||||||
"next-themes": "^0.4.6",
|
"next-themes": "^0.4.6",
|
||||||
"nodemon": "^3.1.7",
|
"nodemon": "^3.1.7",
|
||||||
|
|||||||
@@ -0,0 +1,55 @@
|
|||||||
|
diff --git a/node_modules/ghostty-web/dist/ghostty-web.js b/node_modules/ghostty-web/dist/ghostty-web.js
|
||||||
|
index 0000000000000000000000000000000000000000..1111111111111111111111111111111111111111 100644
|
||||||
|
--- a/node_modules/ghostty-web/dist/ghostty-web.js
|
||||||
|
+++ b/node_modules/ghostty-web/dist/ghostty-web.js
|
||||||
|
@@ -1844,7 +1844,7 @@
|
||||||
|
A.flags & G.FAINT && (this.ctx.globalAlpha = 0.5);
|
||||||
|
const s = C, h = I + this.metrics.baseline;
|
||||||
|
let N;
|
||||||
|
- if (A.grapheme_len > 0 && ((k = this.currentBuffer) != null && k.getGraphemeString) ? N = this.currentBuffer.getGraphemeString(g, Q) : N = String.fromCodePoint(A.codepoint || 32), this.ctx.fillText(N, s, h), A.flags & G.FAINT && (this.ctx.globalAlpha = 1), A.flags & G.UNDERLINE) {
|
||||||
|
+ if (A.grapheme_len > 0 && ((k = this.currentBuffer) != null && k.getGraphemeString) ? N = this.currentBuffer.getGraphemeString(g, Q) : N = A.codepoint == null || A.codepoint <= 0 || A.codepoint > 1114111 || A.codepoint >= 55296 && A.codepoint <= 57343 ? " " : String.fromCodePoint(A.codepoint), this.renderBlockChar(A.codepoint || 32, C, I, D) || this.ctx.fillText(N, s, h), A.flags & G.FAINT && (this.ctx.globalAlpha = 1), A.flags & G.UNDERLINE) {
|
||||||
|
const t = I + this.metrics.baseline + 2;
|
||||||
|
this.ctx.strokeStyle = this.ctx.fillStyle, this.ctx.lineWidth = 1, this.ctx.beginPath(), this.ctx.moveTo(C, t), this.ctx.lineTo(C + D, t), this.ctx.stroke();
|
||||||
|
}
|
||||||
|
@@ -1864,6 +1864,41 @@
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+ renderBlockChar(A, B, g, E) {
|
||||||
|
+ const C = this.metrics.height, I = E / 2, D = C / 2;
|
||||||
|
+ switch (A) {
|
||||||
|
+ case 9600: this.ctx.fillRect(B, g, E, D); return !0;
|
||||||
|
+ case 9601: this.ctx.fillRect(B, g + C * 7 / 8, E, C / 8); return !0;
|
||||||
|
+ case 9602: this.ctx.fillRect(B, g + C * 3 / 4, E, C / 4); return !0;
|
||||||
|
+ case 9603: this.ctx.fillRect(B, g + C * 5 / 8, E, C * 3 / 8); return !0;
|
||||||
|
+ case 9604: this.ctx.fillRect(B, g + D, E, D); return !0;
|
||||||
|
+ case 9605: this.ctx.fillRect(B, g + C * 3 / 8, E, C * 5 / 8); return !0;
|
||||||
|
+ case 9606: this.ctx.fillRect(B, g + C / 4, E, C * 3 / 4); return !0;
|
||||||
|
+ case 9607: this.ctx.fillRect(B, g + C / 8, E, C * 7 / 8); return !0;
|
||||||
|
+ case 9608: this.ctx.fillRect(B, g, E, C); return !0;
|
||||||
|
+ case 9609: this.ctx.fillRect(B, g, E * 7 / 8, C); return !0;
|
||||||
|
+ case 9610: this.ctx.fillRect(B, g, E * 3 / 4, C); return !0;
|
||||||
|
+ case 9611: this.ctx.fillRect(B, g, E * 5 / 8, C); return !0;
|
||||||
|
+ case 9612: this.ctx.fillRect(B, g, I, C); return !0;
|
||||||
|
+ case 9613: this.ctx.fillRect(B, g, E * 3 / 8, C); return !0;
|
||||||
|
+ case 9614: this.ctx.fillRect(B, g, E / 4, C); return !0;
|
||||||
|
+ case 9615: this.ctx.fillRect(B, g, E / 8, C); return !0;
|
||||||
|
+ case 9616: this.ctx.fillRect(B + I, g, I, C); return !0;
|
||||||
|
+ case 9620: this.ctx.fillRect(B, g, E, C / 8); return !0;
|
||||||
|
+ case 9621: this.ctx.fillRect(B + E * 7 / 8, g, E / 8, C); return !0;
|
||||||
|
+ case 9622: this.ctx.fillRect(B, g + D, I, D); return !0;
|
||||||
|
+ case 9623: this.ctx.fillRect(B + I, g + D, I, D); return !0;
|
||||||
|
+ case 9624: this.ctx.fillRect(B, g, I, D); return !0;
|
||||||
|
+ case 9625: this.ctx.fillRect(B, g, I, C); this.ctx.fillRect(B + I, g + D, I, D); return !0;
|
||||||
|
+ case 9626: this.ctx.fillRect(B, g, I, D); this.ctx.fillRect(B + I, g + D, I, D); return !0;
|
||||||
|
+ case 9627: this.ctx.fillRect(B, g, E, D); this.ctx.fillRect(B, g + D, I, D); return !0;
|
||||||
|
+ case 9628: this.ctx.fillRect(B, g, E, D); this.ctx.fillRect(B + I, g + D, I, D); return !0;
|
||||||
|
+ case 9629: this.ctx.fillRect(B + I, g, I, D); return !0;
|
||||||
|
+ case 9630: this.ctx.fillRect(B + I, g, I, D); this.ctx.fillRect(B, g + D, I, D); return !0;
|
||||||
|
+ case 9631: this.ctx.fillRect(B + I, g, I, C); this.ctx.fillRect(B, g + D, I, D); return !0;
|
||||||
|
+ default: return !1;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
/**
|
||||||
|
* Render cursor
|
||||||
|
*/
|
||||||
Reference in New Issue
Block a user