Skip to content

대기 중인 TUI의 100ms 재그리기 깜빡임 수정 - #147

Merged
SonAIengine merged 2 commits into
mainfrom
fix/tui-idle-redraw
Nov 3, 2026
Merged

SonAIengine merged 2 commits into
mainfrom
fix/tui-idle-redraw

Conversation

@SonAIengine

Copy link
Copy Markdown
Contributor

문제

대화형 TUI가 입력을 기다리는 동안에도 100ms마다 다음을 반복했다.

  1. 커서를 화면 구석으로 보내 크기를 묻는다(ESC[6n).
  2. 입력창 4줄을 지우고(ESC[2K) 다시 그린다.

iTerm2에서는 계속 깜빡이고, 한글 IME 조합 글자가 입력줄 아래에 그려졌다. tmux에서 재 보면 대기 5초 동안 61KB가 출력됐다.

수정

  • 시간 재그리기는 spinner가 돌 때(Run 진행·취소 중)와 resize 뒤 1초 동안만 한다.
  • 화면 크기 조회는 PTY 보고 크기가 바뀌었거나 resize 직후일 때만 한다. PTY 지연 대응(f1171ba)은 유지된다.
  • 마지막으로 그린 프레임과 같으면 쓰지 않는다. 그리는 프레임은 동기화 출력(?2026)으로 감싼다.
  • REPL 메시지가 오면 항상 다시 그린다. 취소 표시 해제도 그리기 전에 반영한다.

검증

  • 대기 5초 출력: 61,103 → 0바이트(tmux 150x40)
  • smoke-inline-tui.py 기본·--rapid-resize·--results --rapid-resize 통과(macOS, TMPDIR=/tmp)
  • cargo test -p xgen-cli 243 passed, clippy·fmt 통과, 새 단위 테스트 only_a_running_or_resizing_pane_is_repainted_on_a_timer

🤖 Generated with Claude Code

SonAIengine and others added 2 commits November 3, 2026 19:53
입력을 기다리는 동안에도 100ms마다 커서를 화면 구석으로 보내 크기를 묻고
(ESC[6n) 입력창을 지웠다 다시 그렸다. iTerm2에서는 깜빡임으로 보이고,
한글 IME 조합 글자가 입력줄이 아닌 곳에 그려졌다(tmux 실측 대기 5초 61KB).

- 시간 재그리기는 spinner가 돌 때와 resize 뒤 1초 동안만 한다.
- 화면 크기 조회는 PTY 보고 크기가 바뀌었거나 resize 직후일 때만 한다.
  PTY 지연 대응(f1171ba)은 그대로 유지된다.
- 같은 프레임은 쓰지 않고, 나머지는 동기화 출력(?2026)으로 감싼다.
- REPL 메시지가 오면 항상 다시 그려 상태 변화를 놓치지 않는다.

대기 5초 출력 0바이트, smoke-inline-tui 3종(rapid-resize·PTY 지연 포함) 통과.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
tmux는 resize 중에 입력창 뒤 화면을 reflow·잘라내므로, 마지막으로 그린
프레임과 같다는 것이 화면이 그대로라는 증거가 되지 않는다. 건너뛰기 때문에
rapid-resize 스모크의 heldout-burst-restored가 CI에서 실패했다.
resize 뒤 2초 동안은 항상 다시 그린다.

스모크의 stty.txt 대기는 셸이 파일을 만든 직후 빈 내용을 읽어
"raw mode not restored"로 가끔 실패했다. mode 목록이 써질 때까지 기다린다.

맥 로컬 rapid-resize: 수정본 8/8 통과, main 7/8(같은 heldout-burst-restored
조각 잔상은 기존에도 가끔 난다, MEMORY.md 기록).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@SonAIengine
SonAIengine merged commit 167e1d3 into main Nov 3, 2026
3 checks passed
@SonAIengine
SonAIengine deleted the fix/tui-idle-redraw branch November 3, 2026 11:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant