Summary (EN) — The terminal scrollbar is an overlay that is only drawn while the viewport is scrolled back into history: it auto-hides at the live bottom, and is never drawn when there is no scrollback. This request asks for a scrollbar visibility option — auto-hide (current, default) / show while hovering / always show — so that scrollback is discoverable and the scrollbar stays grabbable in mouse-first workflows. This is an enhancement request; the current behavior is understood to be by design and unrelated to the shell (e.g. PowerShell) running inside.
背景
- 现象:终端滚动条(overlay 细条)在视口回到最底部(实时位置)后自动隐藏;即使上方仍有回滚历史。
- 已确认与运行在其中的 shell 无关:滚动条由 Pebrel 的终端渲染层绘制,显隐只取决于 Pebrel 自身的视口偏移与回滚历史量;shell(PowerShell 等)向 PTY 输出的文本无法控制宿主终端滚动条的显隐。因此该问题不涉及 PowerShell / Windows Terminal 等其他项目。
- 也非缺陷:源码注释明确写明「贴着底部时自动隐藏,没有回滚历史时也不画」,属既定设计;本请求是希望把它做成可配置项。
现状(当前版本的行为)
- 滚动条为 overlay 风格:约 4 逻辑 px 宽,浮在网格右缘、不占列宽、无轨道;最小拇指高度 24px;命中带在拇指左右各放宽 8px(
SCROLLBAR_W / SCROLLBAR_MIN_THUMB / SCROLLBAR_SLOP)。
- 仅在「存在回滚历史 且 视口已上翻」时绘制(
display_offset > 0);视口贴底(display_offset == 0)时不绘制;没有回滚历史时也不绘制。
- 由此有两个不便:
- 贴底时完全看不到滚动条:无法一眼判断当前会话是否有回滚历史;想用鼠标拖着回看,必须先滚轮/键盘上翻一点、让滚动条出现,才能抓住它;
- 用鼠标把拇指拖到最底部时,拇指在到达底部的一瞬消失(拖拽状态仍在、继续上拖会重新出现,但过程中丢失视觉反馈)。
实现定位(供参考):
- 显示判定与几何真值源:
nebula_app/src/gpui_shell/terminal/view/pointer.rs 的 scrollbar_thumb()(贴底或无历史时返回 None;渲染与命中测试共用同一矩形);
- 绘制:
nebula_app/src/gpui_shell/terminal/element.rs(「贴着底部时拇指为 None 不画,滚进历史才浮在网格右缘」);
- 相关设置现状:只有「回滚行数」「滚动速度」(
nebula_app/src/gpui_shell/settings_pane/scrolling.rs),没有滚动条可见性选项。
需求(建议)
新增「滚动条显示方式」设置(与「回滚行数 / 滚动速度」同区),建议三档:
- 自动隐藏(现状,默认)——仅在回滚历史中显示;
- 悬停显示——鼠标悬停终端右缘 / 滚动条区域时显示(贴底也显示),移开后隐藏;
- 始终显示——只要存在回滚历史就常显(贴底时拇指停在轨道底部);无历史时不绘制(或按维护者判断显示禁用态)。
若希望范围更小,也可以先加一个布尔开关「滚动条常显(有回滚历史时)」,之后再扩展悬停档。
参考实现
- kitty:
scrollbar 选项,取值 scrolled(默认)/ always / never / hovered / scrolled-and-hovered / scrolled-or-hovered;另有 scrollbar_hover_width 等配套项(kitty/options/definition.py);
- Windows Terminal:
scrollbarState,取值 visible(默认)/ hidden / always(1.17+)。
兼容性
- 默认值保持现状(自动隐藏),存量用户无感知;
- 建议新键
scrollbar_visibility(auto / hover / always),沿用现有 key=value 持久化;
- 改动点集中:只需放宽
scrollbar_thumb() 的早退条件,不影响现有拖拽 / 轨道点击 / 命中几何。
开放问题(请维护者定夺)
- 默认档保持「自动隐藏」?
- 「始终显示」在无回滚历史时:不画,还是画禁用态?
- 悬停热区沿用现有 8px 放宽,还是与 hover 加宽联动?
环境
- Pebrel 2.1.0,Windows 11(x64),默认 shell:PowerShell 7.6.6;
- 使用场景:希望贴底时滚动条也可感知、可抓取(至少悬停可见),避免「先滚动才能找到滚动条」以及拖到底部时失去反馈。
本请求由社区用户整理;若以上「建议」与项目既定方向冲突,以维护者方案为准。
背景
现状(当前版本的行为)
SCROLLBAR_W / SCROLLBAR_MIN_THUMB / SCROLLBAR_SLOP)。display_offset > 0);视口贴底(display_offset == 0)时不绘制;没有回滚历史时也不绘制。实现定位(供参考):
nebula_app/src/gpui_shell/terminal/view/pointer.rs的scrollbar_thumb()(贴底或无历史时返回None;渲染与命中测试共用同一矩形);nebula_app/src/gpui_shell/terminal/element.rs(「贴着底部时拇指为 None 不画,滚进历史才浮在网格右缘」);nebula_app/src/gpui_shell/settings_pane/scrolling.rs),没有滚动条可见性选项。需求(建议)
新增「滚动条显示方式」设置(与「回滚行数 / 滚动速度」同区),建议三档:
若希望范围更小,也可以先加一个布尔开关「滚动条常显(有回滚历史时)」,之后再扩展悬停档。
参考实现
scrollbar选项,取值scrolled(默认)/always/never/hovered/scrolled-and-hovered/scrolled-or-hovered;另有scrollbar_hover_width等配套项(kitty/options/definition.py);scrollbarState,取值visible(默认)/hidden/always(1.17+)。兼容性
scrollbar_visibility(auto/hover/always),沿用现有key=value持久化;scrollbar_thumb()的早退条件,不影响现有拖拽 / 轨道点击 / 命中几何。开放问题(请维护者定夺)
环境
本请求由社区用户整理;若以上「建议」与项目既定方向冲突,以维护者方案为准。