feat: Add complete keyboard navigation system
Implemented a full keyboard navigation system with directional commands (C-h/j/k/l) for moving between views, vim-style navigation (j/k for rows, h/l for columns), and TAB cycling. Added table header navigation mode where users can move between columns and change sort order with keyboard shortcuts. The navigation follows visual position: left sidebar, table, and filter bar can all be reached with directional keys. Created a keymap system with context-aware bindings that resolve commands based on current focus (Table, TableHeaders, FilterBar, Sidebar). Commands are dispatched through a centralized handler that manages focus transitions and view state. Added helper methods to cycle through column headers with proper wrapping. Auto-select first task on load when tasks exist, and set initial window focus so keyboard shortcuts work immediately without requiring a mouse click.
This commit is contained in:
@@ -88,6 +88,11 @@ impl Input {
|
||||
cx.notify();
|
||||
}
|
||||
|
||||
pub fn blur(&self, window: &mut gpui::Window, cx: &mut gpui::Context<Self>) {
|
||||
window.blur();
|
||||
cx.notify();
|
||||
}
|
||||
|
||||
fn word_start_before(&self, pos: usize) -> usize {
|
||||
if pos == 0 {
|
||||
return 0;
|
||||
@@ -300,6 +305,10 @@ impl Input {
|
||||
let ctrl = event.keystroke.modifiers.control;
|
||||
let shift = event.keystroke.modifiers.shift;
|
||||
|
||||
if ctrl && (key == "h" || key == "l") {
|
||||
return;
|
||||
}
|
||||
|
||||
match key {
|
||||
"enter" => {
|
||||
if self.suggestions_open {
|
||||
|
||||
Reference in New Issue
Block a user