diff options
| author | akbash <akbash@herdr.dev> | 2026-08-09 14:50:11 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-08-09 14:50:11 +0300 |
| commit | e7c38ab37f967d16e2eacdb0bbde2d933a332057 (patch) | |
| tree | 3df712c664e7e33f192d8ce40a99fb0d06d51494 /src | |
| parent | d277d2f83b749a38c90eb96ef7cd329cc2171cd7 (diff) | |
perf(ui): avoid full pane mode reads for scrollbars (#2554)
Diffstat (limited to 'src')
| -rw-r--r-- | src/pane.rs | 4 | ||||
| -rw-r--r-- | src/pane/terminal.rs | 10 | ||||
| -rw-r--r-- | src/terminal/runtime.rs | 4 | ||||
| -rw-r--r-- | src/ui/panes.rs | 5 |
4 files changed, 19 insertions, 4 deletions
diff --git a/src/pane.rs b/src/pane.rs index da99f55e..b2c01f01 100644 --- a/src/pane.rs +++ b/src/pane.rs @@ -2596,6 +2596,10 @@ impl PaneRuntime { self.terminal.input_state() } + pub fn alternate_screen_active(&self) -> bool { + self.terminal.alternate_screen_active() + } + pub fn cursor_state(&self, area: Rect, show_cursor: bool) -> Option<TerminalCursorState> { if !show_cursor { return None; diff --git a/src/pane/terminal.rs b/src/pane/terminal.rs index a6e5c1da..1c10726c 100644 --- a/src/pane/terminal.rs +++ b/src/pane/terminal.rs @@ -388,6 +388,10 @@ impl PaneTerminal { self.ghostty.input_state() } + pub fn alternate_screen_active(&self) -> bool { + self.ghostty.alternate_screen_active() + } + pub fn wheel_routing(&self) -> Option<crate::pane::WheelRouting> { self.ghostty.wheel_routing() } @@ -1665,6 +1669,12 @@ impl GhosttyPaneTerminal { core.kitty_keyboard.replay_ansi() } + pub fn alternate_screen_active(&self) -> bool { + self.core.lock().is_ok_and(|core| { + core.terminal.active_screen().ok() == Some(crate::ghostty::ActiveScreen::Alternate) + }) + } + pub fn input_state(&self) -> Option<InputState> { let Ok(core) = self.core.lock() else { return None; diff --git a/src/terminal/runtime.rs b/src/terminal/runtime.rs index 13e29690..d3900b68 100644 --- a/src/terminal/runtime.rs +++ b/src/terminal/runtime.rs @@ -315,6 +315,10 @@ impl TerminalRuntime { self.0.input_state() } + pub fn alternate_screen_active(&self) -> bool { + self.0.alternate_screen_active() + } + pub fn cursor_state( &self, area: Rect, diff --git a/src/ui/panes.rs b/src/ui/panes.rs index df9813cf..cce8ab02 100644 --- a/src/ui/panes.rs +++ b/src/ui/panes.rs @@ -32,10 +32,7 @@ fn pane_border_title(label: &str, pane_width: u16, _focused: bool) -> Option<Str } fn terminal_inner_rect(rt: &TerminalRuntime, pane_inner: Rect, pane_scrollbars: bool) -> Rect { - if !pane_scrollbars - || pane_inner.width <= 4 - || rt.input_state().is_some_and(|state| state.alternate_screen) - { + if !pane_scrollbars || pane_inner.width <= 4 || rt.alternate_screen_active() { return pane_inner; } |
