滚动,比看上去难。
划动会做什么
Section titled “划动会做什么”- 在普通 shell 里——你在真实回滚里移动。tmux 上用的是 tmux 自己的缓冲, 进出都干净。
- 在全屏程序里——划动变成滚轮事件转发给那个程序,让它自己滚。 全程打字都正常。
在 tmux 上,Moshpit 问 tmux「这个窗格的程序有没有抢鼠标」,然后据此路由。 在 herdr 上根本不用问:滚动是一个协议动作, 由服务端决定它该变成鼠标报告还是回滚移动。这是 herdr 悄悄更胜一筹的地方之一。
退出 copy-mode
Section titled “退出 copy-mode”当一次划动把 tmux 窗格带进了 copy-mode,你接下来敲的字必须到达 shell, 而不是 copy-mode 的覆盖层。Moshpit 会替你退出,并且走的是和按键同一条通道, 所以两者不可能乱序——这里的顺序 bug 表现出来就是「我第一个字符不见了」。
值得知道的限制
Section titled “值得知道的限制”- 不用多路复用器时,回滚就是 App 自己为这个会话在内存里保留的那些。 断线之后什么都不留。
- 在 herdr 上,历史翻页是按请求由服务端做的——herdr 没有导出整个回滚 缓冲的 API,所以本地没有一份可供搜索的副本。
- 走 Mosh 时,协议传的是可见屏幕而不是字节流,所以回滚属于跑在里面的 多路复用器,不属于 Mosh。