github / github/copilot-cli

Improve CLI scrolling behavior: implement smooth animated scrolling (as in gemini-cli)

Đang mở
#2,362 0 bình luận 1 reaction 0 người được giao Xem trên GitHub
area:terminal-rendering
Ngôn ngữ chính
Shell
Star
11.2k
Fork
1.9k
Merge trung bình
14 giờ 16 phút
Pull request đã merge (30 ngày)
6

Mô tả

### Describe the feature or problem you'd like to solve

Current scrolling in Copilot CLI is much less smooth than Google Gemini CLI. Implement the same smooth animated scrolling effect as in gemini-cli for a better user experience.

### Proposed solution

The scrolling experience in the Copilot CLI currently feels abrupt, especially when using touchpad to move through long output. In contrast, Google Gemini CLI achieves a much smoother, more fluid scrolling experience using animated transitions and an ease-in-out curve, greatly improving readability and perceived quality.

Gemini implements this by animating scroll positions over a short duration (e.g., 200ms) using setInterval at ~30 FPS, with an ease-in-out function for interpolation. On each frame, the scroll offset is updated incrementally rather than instantly, providing a polished scrolling effect. Abrupt jumps are avoided by clearing any ongoing animation when a new scroll instruction is issued, making it feel stable even with rapid scrolling actions.

Adopting an animation-powered scroll for the main CLI panel(s), similar to Gemini, would significantly improve the feel of Copilot CLI and reduce user fatigue when navigating large outputs.

### Example prompts or workflows

- Scrolling through timeline or chat/log output feels buttery smooth (like Gemini's CLI)
- Repeated arrow/page keys or using the mousewheel animate between scroll positions rather than jumping
- Users quickly switching directions (up/down) don't experience stuttering or lost scroll events
- Large outputs remain readable, and following newly revealed content is more pleasant
- This matches the scrolling experience of modern terminals and TUI apps (Gemini CLI, Glow, etc.)

### Additional context

Gemini CLI achieves this via their ScrollableList component in TypeScript/Ink:
https://github.com/google-gemini/gemini-cli/blob/07ab16dbbee77faabf38b5ecf05ae4ef9d8e9fa1/packages/cli/src/ui/components/shared/ScrollableList.tsx#L112-L197

The core idea:
- On scroll input, clear any existing scroll animation
- Start a setInterval (~33ms/frame, ~30fps)
- Interpolate between the starting and target scroll positions with an ease-in-out function over a short duration (~200ms)
- On each frame, set scroll offset to the current interpolated value
- When the animation ends or new input is received, finish cleanly and show final scroll offset

This delivers a vastly more polished user experience. Please consider adopting or adapting this animation logic for Copilot CLI scrolling.

Feature request by @azakalik.

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.