Fix jump-to-bottom button broken during active terminal output
All checks were successful
Build App / compute-version (push) Successful in 6s
Build App / build-macos (push) Successful in 2m21s
Build App / build-windows (push) Successful in 3m4s
Build App / build-linux (push) Successful in 5m31s
Build App / create-tag (push) Successful in 3s
Build App / sync-to-github (push) Successful in 11s
All checks were successful
Build App / compute-version (push) Successful in 6s
Build App / build-macos (push) Successful in 2m21s
Build App / build-windows (push) Successful in 3m4s
Build App / build-linux (push) Successful in 5m31s
Build App / create-tag (push) Successful in 3s
Build App / sync-to-github (push) Successful in 11s
The shouldFollow flag was captured before term.write() but the callback ran asynchronously — if the user scrolled up in between, the stale flag forced the viewport back to bottom, preventing the button from appearing. Check isAtBottomRef at callback time instead so user scroll-up is respected. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -197,13 +197,12 @@ export default function TerminalView({ sessionId, active }: Props) {
|
|||||||
|
|
||||||
const outputPromise = onOutput(sessionId, (data) => {
|
const outputPromise = onOutput(sessionId, (data) => {
|
||||||
if (aborted) return;
|
if (aborted) return;
|
||||||
const shouldFollow = isAtBottomRef.current;
|
|
||||||
term.write(data, () => {
|
term.write(data, () => {
|
||||||
// Keep viewport pinned to bottom when user hasn't scrolled up
|
// Keep viewport pinned to bottom when user hasn't scrolled up.
|
||||||
if (shouldFollow) {
|
// Check ref at callback time (not capture time) so that a user
|
||||||
|
// scroll-up between the write() call and callback is respected.
|
||||||
|
if (isAtBottomRef.current) {
|
||||||
term.scrollToBottom();
|
term.scrollToBottom();
|
||||||
isAtBottomRef.current = true;
|
|
||||||
setIsAtBottom(true);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
detector.feed(data);
|
detector.feed(data);
|
||||||
|
|||||||
Reference in New Issue
Block a user