鼠标行为因界面而异
终端里的「鼠标」其实有两套语义,Hunea 会按当前界面在两套之间切换:
默认主界面走应用捕获。原因很直接:
- 需要鼠标点一下,就把 composer 光标落到对应位置
- 需要在 transcript 上拖出一块语义选区,复制的是正文,而不是左侧装饰、缩进、状态行边距
- 需要在列表里点行移动光标,但不误触成「终端选中半行乱码再粘贴」
所以主界面的选区是 Hunea 自己算的:命中范围和复制范围是分开的,左边的提示符、视觉缩进可以更好点中,但复制时不会把这些装饰一起带上。选区结束后是否自动写入剪贴板,由 copy_on_mouse_selection_release 控制,默认关闭;中键也可以触发复制当前选区。消息级整段拷贝则走 /copy,和屏幕拖选是两条路径。
但全屏层不能一刀切。Hunea 按「这一层此刻更需要点选,还是更需要读和拷」来切鼠标模式:
- 需要点行、需要滚轮当导航的列表(例如
/tree、/copy、消息历史、/prompt的列表态)
继续由应用捕获鼠标,并打开 alternate scroll,让滚轮稳定变成翻页/移动,而不是被终端占用。 - 已经进入内容预览(例如树节点预览、copy 预览、prompt 预览)
关闭鼠标捕获,把原生选区还给终端模拟器,同时保留 alternate scroll,滚轮仍可翻页。
也就是说:预览页更像「打开了一份只读文本」,你可以直接用终端习惯去划词复制。 - 本身就以阅读为主的层(例如 transcript overlay、会话预览)
同样偏向原生选区 + alternate scroll。
一句话总结:
要交互时,鼠标归 Hunea;要阅读和划词时,比如 space 预览界面和
Ctrl + t进入的详情界面,鼠标归终端。
这就是你会感觉「有的界面能像普通终端一样拖选,有的界面拖不动、却能点选列表」的原因。