diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-05-20 18:55:41 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-05-20 18:55:41 +0300 |
| commit | 836fd7e585af15cc1ccb0d4f04586ffec28d2a3c (patch) | |
| tree | a3bf07e7af7ffd884a38fce3d65f8c2243bc0615 /src/ui/menus.rs | |
| parent | be66f33d2acde30d25794bcead991e5e7b7eaff8 (diff) | |
feat: add keybinding v2
refs #154
refs #201
refs #202
refs #219
Diffstat (limited to 'src/ui/menus.rs')
| -rw-r--r-- | src/ui/menus.rs | 65 |
1 files changed, 56 insertions, 9 deletions
diff --git a/src/ui/menus.rs b/src/ui/menus.rs index 7a074c68..d17aa897 100644 --- a/src/ui/menus.rs +++ b/src/ui/menus.rs @@ -9,6 +9,12 @@ use ratatui::{ use super::widgets::{panel_contrast_fg, render_panel_shell}; use crate::app::AppState; +fn prefix_rhs_label(bindings: &crate::config::ActionKeybinds) -> String { + bindings + .prefix_rhs_label() + .unwrap_or_else(|| "unset".to_string()) +} + fn render_bottom_bar(frame: &mut Frame, area: Rect, line: Line<'_>, bg: ratatui::style::Color) { frame.render_widget(Clear, area); let buf = frame.buffer_mut(); @@ -18,6 +24,38 @@ fn render_bottom_bar(frame: &mut Frame, area: Rect, line: Line<'_>, bg: ratatui: frame.render_widget(Paragraph::new(line), area); } +pub(super) fn render_prefix_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 workspace_picker = prefix_rhs_label(&app.keybinds.workspace_picker); + let help = prefix_rhs_label(&app.keybinds.help); + let prefix = crate::config::format_key_combo((app.prefix_code, app.prefix_mods)); + + let line = Line::from(vec![ + Span::styled(" PREFIX ", mode_style), + Span::raw(" "), + Span::styled("esc", key), + Span::styled(" cancel ", dim), + Span::styled(prefix, key), + Span::styled(" send prefix ", dim), + Span::styled(workspace_picker, key), + Span::styled(" workspace nav ", dim), + Span::styled(help, key), + Span::styled(" keybinds", 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) @@ -30,6 +68,15 @@ pub(super) fn render_navigate_overlay(app: &AppState, frame: &mut Frame, area: R .add_modifier(Modifier::BOLD); let kb = &app.keybinds; + let new_tab = prefix_rhs_label(&kb.new_tab); + let split_vertical = prefix_rhs_label(&kb.split_vertical); + let split_horizontal = prefix_rhs_label(&kb.split_horizontal); + let close_pane = prefix_rhs_label(&kb.close_pane); + let zoom = prefix_rhs_label(&kb.zoom); + let resize = prefix_rhs_label(&kb.resize_mode); + let help = prefix_rhs_label(&kb.help); + let settings = prefix_rhs_label(&kb.settings); + let quit = prefix_rhs_label(&kb.quit); let line = Line::from(vec![ Span::styled(" NAVIGATE ", mode_style), Span::raw(" "), @@ -39,23 +86,23 @@ pub(super) fn render_navigate_overlay(app: &AppState, frame: &mut Frame, area: R Span::styled(" ws ", dim), Span::styled("⇥", key), Span::styled(" pane ", dim), - Span::styled(kb.new_tab_label.as_str(), key), + Span::styled(new_tab, key), Span::styled(" new tab ", dim), - Span::styled(kb.split_vertical_label.as_str(), key), + Span::styled(split_vertical, key), Span::styled(" split│ ", dim), - Span::styled(kb.split_horizontal_label.as_str(), key), + Span::styled(split_horizontal, key), Span::styled(" split─ ", dim), - Span::styled(kb.close_pane_label.as_str(), key), + Span::styled(close_pane, key), Span::styled(" close ", dim), - Span::styled(kb.zoom_label.as_str(), key), + Span::styled(zoom, key), Span::styled(" zoom ", dim), - Span::styled(kb.resize_mode_label.as_str(), key), + Span::styled(resize, key), Span::styled(" resize ", dim), - Span::styled("?", key), + Span::styled(help, key), Span::styled(" keybinds ", dim), - Span::styled("s", key), + Span::styled(settings, key), Span::styled(" settings ", dim), - Span::styled("q", key), + Span::styled(quit, key), Span::styled(" quit", dim), ]); |
