diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-05-28 23:12:50 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-05-28 23:12:50 +0300 |
| commit | 7626a9adc84d6757042670f9816a583dcd717823 (patch) | |
| tree | 56095c659834727ca73b03627a1f6eddc86ac666 /src/ui/menus.rs | |
| parent | 28222b20890a1f6cd36fd477de8e9bc6e5537ff5 (diff) | |
feat: add pane copy mode
refs #231
Diffstat (limited to 'src/ui/menus.rs')
| -rw-r--r-- | src/ui/menus.rs | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/ui/menus.rs b/src/ui/menus.rs index b711358e..e974d524 100644 --- a/src/ui/menus.rs +++ b/src/ui/menus.rs @@ -60,6 +60,39 @@ pub(super) fn render_prefix_overlay(app: &AppState, frame: &mut Frame, area: Rec render_bottom_bar(frame, overlay_area, line, app.palette.panel_bg); } +pub(super) fn render_copy_mode_overlay(app: &AppState, frame: &mut Frame, area: Rect) { + let key = Style::default() + .fg(app.palette.accent) + .add_modifier(Modifier::BOLD); + let dim = Style::default().fg(app.palette.overlay0); + let mode_style = Style::default() + .fg(panel_contrast_fg(&app.palette)) + .bg(app.palette.accent) + .add_modifier(Modifier::BOLD); + + let select = if app.copy_mode.is_some_and(|copy_mode| copy_mode.selecting) { + "selecting" + } else { + "select" + }; + let line = Line::from(vec![ + Span::styled(" COPY ", mode_style), + Span::raw(" "), + Span::styled("h/j/k/l w/b/e { }", key), + Span::styled(" move ", dim), + Span::styled("v/space", key), + Span::styled(format!(" {select} "), dim), + Span::styled("y/enter", key), + Span::styled(" copy ", dim), + Span::styled("q/esc", key), + Span::styled(" exit", dim), + ]); + + let overlay_y = area.y + area.height.saturating_sub(1); + let overlay_area = Rect::new(area.x, overlay_y, area.width, 1); + render_bottom_bar(frame, overlay_area, line, app.palette.panel_bg); +} + pub(super) fn render_navigate_overlay(app: &AppState, frame: &mut Frame, area: Rect) { let key = Style::default() .fg(app.palette.accent) |
