Status animation makes mouse selection and copying unreliable in GNOME Terminal/VTE

Open 💬 1 comment Opened Aug 11, 2026 by jancellor
💡 Likely answer: A maintainer (github-actions[bot], contributor) responded on this thread — see the highlighted reply below.

What version of Codex CLI is running?

codex-cli 0.147.0

What subscription do you have?

Plus

Which model were you using?

Not model-specific.

What platform is your computer?

Ubuntu 24.04.4 LTS, Linux 7.0.0-28-generic x86_64, GNOME Wayland session.

What terminal emulator and version are you using?

GNOME Terminal 3.52.0 using VTE 0.76.0.

What issue are you seeing?

While Codex's animated status indicator is active, mouse selection of static
transcript text usually fails in GNOME Terminal/VTE. The highlight disappears
or never becomes visible while dragging; after releasing the mouse,
Ctrl+Shift+C copies nothing. The selected rows are not changing or scrolling.

Disabling animations makes selection reliable:

[tui]
animations = false

An equivalent rapid-update test does not reproduce in Ghostty.

What steps can reproduce the bug?

  1. In GNOME Terminal, start Codex with animations enabled (the default).
  2. Ask Codex to run sleep 300 and wait for it to complete.
  3. While the status indicator is animating, drag across static text earlier in

the transcript.

  1. Release the mouse, press Ctrl+Shift+C, and try to paste.
  2. Repeat after setting tui.animations = false and restarting Codex.

What is the expected behavior?

Static transcript text should remain selectable and copyable while the status
animation is running.

Please reduce the status animation refresh rate from 32 ms (~31 Hz) to 100 ms
(10 Hz), or otherwise avoid emitting animation redraws more often than 10 Hz.

Additional information

The status widget schedules animation frames every 32 ms:

PR #2316 changed this interval
directly from 100 ms to 32 ms in August 2025.

A 100 ms interval also has precedent in popular terminal progress libraries:
Rich defaults to 10 refreshes per second,
tqdm defaults to a 0.1-second minimum interval,
and indicatif's official spinner example uses 100 ms.

In a minimal erase-and-rewrite test, selection almost always failed at 32 ms,
remained somewhat unreliable at 60 ms, and was reliable at 100 ms.

The existing VTE report for this behavior is:

A smaller reproducer and the interval measurements above are in:

Related report about the status animation's terminal traffic:

Avoiding redraws when the rendered shimmer has not changed would reduce the
terminal traffic further.

View original on GitHub ↗

1 Comment

github-actions[bot] contributor · 16 days ago

Potential duplicates detected. Please review them and close your issue if it is a duplicate.

  • #37706

Powered by Codex Action