You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[Idea] 把 OSC 9;4 接上,让 Windows Terminal 任务栏显示运行进度
#1878
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
我在 WSL2 里用 dsh-TUI,宿主是 Windows Terminal。长回合跑起来之后我一般会切走,回来发现任务栏上什么都没变:只有标题文字里那个小圆点,而且它只在窗口有焦点的时候才滚,最小化之后就定住了。翻了下代码,有两处明显是断的。
第一处,
src/ink/useTerminalNotification.ts里其实已经有progress(),OSC 9;4 的编码、CLEAR / SET / ERROR / INDETERMINATE 几个状态都写好了,但整个包里没有人调用它。看着像是从 iTerm2 通知那批代码移植过来时一起带进来的,后来一直没接上。第二处,
src/ink/terminal.ts的isProgressReportingAvailable()里,只要环境里有WT_SESSION就直接返回 false,注释给的理由是「Windows Terminal 把 OSC 9;4 当通知处理」。但 WT 从 1.6 开始就按 ConEmu 的进度序列解析了,官方文档写得很清楚:标签页上画一个进度环,任务栏上画一条进度条,跟下载文件时那条一样。所以我猜这个判断是移植时留下的保守值,现在应该可以放开了。我把这两处接起来试了一下,效果是:回合跑着的时候,任务栏按钮上有滚动的进度条,标签页多一个进度环;弹出审批或者提问的时候变成静止的黄条,一眼能看出轮到我了;出错是红条;回合结束就清掉。窗口最小化的时候也一样能看到。
改动其实就三处。
一、加一个 hook,把回合状态翻译成序列,只在状态变化时写一次,不轮询:
二、在
Chat.tsx里挂到useProgramStatus旁边,直接复用它在用的几个字段:三、把
terminal.ts里的早退改成带开关的:默认值这块想请维护者定:我现在写的是「WT 默认开、
DSH_TUI_WT_PROGRESS=0关」,图的是开箱即用;如果担心旧版本 WT 把 9;4 当通知弹出来,也可以改成 opt-in,代码上就一个默认值的差别。几个边界情况顺便说一下:
wrapForMultiplexer,需要allow-passthrough on,和现在的 OSC 通知是同一个前提。taskNotifications不冲突:那个是回合结束时的一次性提醒(BEL / OSC 777 / 99 / 9),这个只是「还在跑」的持续状态,不响铃也不弹窗。验证是这么做的:先在本机 0.18.0 的编译产物上改,用仓库自带的 Ink root 无头挂载 hook、抓实际写出的字节,确认四个状态分别发出
9;4;3;0、9;4;4;100、9;4;2;100、9;4;0;0;然后实机/restart跑长回合,最小化能看到进度条,审批时变黄条,结束消失。不改代码也能先确认终端支不支持:任务栏出现滚动条,就说明 WT 这边没问题。
另外同一批我还动了
ChatTitle:两帧单点换成 10 帧 braille spinner,失焦时降到 1fps 继续转,blocked时标题显示!或?。这部分跟任务栏进度没有依赖,可以拆成单独的 commit,不确定维护者想不想要,先一并说一声。方向如果没问题,我可以按仓库的
src/结构整理成 PR,再补一个verify-*.mjs的回归。All reactions