幽灵网(AurigaX)
幽灵浏览器中的终端引擎,带有 x 任期.js- 成型的API和WebGL和帆布渲染器。 这是引擎 在奥斯提亚的幽灵终端后面.
这是一个硬叉 编码器/鬼网 (麻省理工学院,编者), 保持历史。 它不跟踪上游。 改变了什么:
- (原始内容存档于2012-10-10). Official, unphopped libghostty-vt. 鬼网用一个补丁来建鬼网
C函数。 这叉子建了Ghostty出版的 libghostty-vt API 在一个被钉住的承诺上
(单位:千美元)
GHOSTTY_COMMIT并与之交谈通过lib/abi.ts,它读取结构布局ghostty_type_json()所以,一个字段会大叫地移动,而不是读取垃圾. - 宿主钩子. JavaScript 回调通过可生长函数表到达 libghostty-vt
(单位:千美元)
Abi.addCallback),因此主机可以收到快取标记(OSC 133),工作目录与 它的主机(OSC 7),通知,剪贴板写作和未知序列,并保持标记为 跟踪网格参考. - WebGL 渲染器.
renderer: 'webgl'(默认)从甘油图集中取出WebGL 2, 只重写更改的行并只绘制显示的单元格和格来像素 某物; 没有WebGL 2 , 或者当其上下文丢失时, 终端 取而代之的是画布渲染器(renderer: 'canvas'问取取取. 两种绘图框 挡住几何结构的元素 所以它们会填充细胞. - pnpm 和 Vitest 数据 而不是 Bun; 没有演示服务器、 基准或发布自动化 .
安装
pnpm add @aurigax-ai/ghostty-web
货包载运其TypeScript源和 ghostty-vt.wasm; 将它与Vite或类似的相捆.
构建
需求 齐格 0.16.0和pnpm (英语). 使用官方 Zig 沥青球( 如 CI 所做的): a
发行版的Zig用自己的LLVM制造了一种不同的,同样有效的 ghostty-vt.wasm, (中文(简体) ),
和CI检查 承诺的文件匹配 官方构建。 点 ZIG 如果不是的话
zig 在你的路径: ZIG=/path/to/zig pnpm build:wasm。 。 。 .
pnpm install
pnpm build:wasm # clones Ghostty at GHOSTTY_COMMIT into vendor/ and builds ghostty-vt.wasm
pnpm test
pnpm build # dist/ with the library and the WASM
libghostty -vt的API还不稳定,所以 GHOSTTY_COMMIT 试验为:
警卫 建筑 ghostty-vt.wasm 被承诺, 所以包安装没有 Zig; 构建
如果所承诺的文件与被绑定的承诺的新建文件不同,则CI失效.
软件包导出其 TypeScript 源(lib/index.ts),为维特等捆绑者提供.
主钩
除了xterm.js形状的API, Terminal 揭露了libghostty-vt报道的确切地点
在输出流中 :
| 钩子 | 报告的内容 |
|---|---|
onSemanticPrompt | OSC 133 即时标记(prompt-start, (中文(简体) ), input-start, (中文(简体) ), output-start, (中文(简体) ), command-end 带有退出代码) |
onPwdChange | 发送的OSC 7:原始 file://host/path URI 资源 |
onDesktopNotification | OSC 9和OSC 777通知 |
onUnknownOsc | OCS Ghostty不执行,例如:. 633;E;… |
onBell, (中文(简体) ), onTitleChange | 幽灵自己的钟和头衔 |
clipboardWriteHandler | 决定 OSC 52 写作( 除非它返回为真实; 读作从未被回答) |
registerMarker(offset) | Xterm.js 风格标记,通过滚动和回流遵循其行 |
modes.mouseTrackingMode | none, (中文(简体) ), x10, (中文(简体) ), vt200, (中文(简体) ), drag 或者说 any |
渲染回路只在某事改变时运行(输出、输入、滚动、选择、光标)
眨眼),否则会入睡. setPaused(true) 停止绘制屏幕关闭的终端
继续解析输出; setPaused(false) 重新绘制整个. setPaused(true, { releaseRenderer: true })
并在此之前放弃其WebGL上下文,因为浏览器只保留了少数.
无头终端
HeadlessTerminal 为保留屏幕并回滚的服务器或工人绘制没有DOM、画布或渲染器的字节.
import { Ghostty, HeadlessTerminal } from '@aurigax-ai/ghostty-web';
const ghostty = await Ghostty.fromBytes(wasmBytes);
const term = new HeadlessTerminal({ ghostty, cols: 120, rows: 40, scrollback: 2000 });
term.parser.registerOscHandler(133, (data) => false);
term.parser.registerCsiHandler({ final: 'J' }, (params) => {});
term.write('hello\r\n', () => {});
term.buffer.normal.getLine(0)?.translateToString(true);
它已经 buffer, (中文(简体) ), registerMarker, (中文(简体) ), onScroll, (中文(简体) ), onWriteParsed, (中文(简体) ), modes.bracketedPasteMode, (中文(简体) ), resize 财务报告和审定财务报表 dispose,带有xterm.js名称。 OCS操作员在编号(7、133和任何其他编号)后获得有效载荷。 CSI处理器只观察一个序列,就在终端应用之前. scrollback 释放出整页,因此屏幕的行能比限制(80列时约一半)更能保持更窄的一行.
使用
import { Ghostty, Terminal, FitAddon } from '@aurigax-ai/ghostty-web';
const ghostty = await Ghostty.fromBytes(wasmBytes);
const term = new Terminal({ ghostty, fontSize: 14 });
const fit = new FitAddon();
term.loadAddon(fit);
term.open(element);
fit.fit();
term.onData((data) => pty.write(data));
pty.onData((data) => term.write(data));
释放
提升 version 内 package.json,并按下匹配键 v<version> 标签. release.yml
重建 WASM, 检查它是否匹配承诺的文件, 运行测试并发布到 npm
信任的出版( 无符号) 。 带有一个版本 - (例如:. 0.2.0-rc.1(a) 载于
next 标签.
许可证
麻省理工学院. 见 自由主义鬼蒂是麻省理工学院的许可 由米切尔・桥本和鬼蒂 贡献者.