mirror of
https://github.com/ChrisTitusTech/linutil.git
synced 2024-11-21 21:09:42 +00:00
Refactor tab (#347)
Co-authored-by: Chris Titus <contact@christitus.com>
This commit is contained in:
parent
9ed0a48281
commit
197f359c45
|
@ -120,7 +120,7 @@ pub fn draw_shortcuts(state: &AppState, frame: &mut Frame, area: Rect) {
|
||||||
hints.push(Shortcut::new(vec!["q", "CTRL-c"], "Exit linutil"));
|
hints.push(Shortcut::new(vec!["q", "CTRL-c"], "Exit linutil"));
|
||||||
|
|
||||||
if state.at_root() {
|
if state.at_root() {
|
||||||
hints.push(Shortcut::new(vec!["h", "Left", "Tab"], "Focus tab list"));
|
hints.push(Shortcut::new(vec!["h", "Left"], "Focus tab list"));
|
||||||
hints.push(get_list_item_shortcut(state));
|
hints.push(get_list_item_shortcut(state));
|
||||||
} else {
|
} else {
|
||||||
if state.selected_item_is_up_dir() {
|
if state.selected_item_is_up_dir() {
|
||||||
|
@ -136,14 +136,14 @@ pub fn draw_shortcuts(state: &AppState, frame: &mut Frame, area: Rect) {
|
||||||
hints.push(Shortcut::new(vec!["d"], "Command Description"));
|
hints.push(Shortcut::new(vec!["d"], "Command Description"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
hints.push(Shortcut::new(vec!["Tab"], "Focus tab list"));
|
|
||||||
};
|
};
|
||||||
|
|
||||||
hints.push(Shortcut::new(vec!["k", "Up"], "Select item above"));
|
hints.push(Shortcut::new(vec!["k", "Up"], "Select item above"));
|
||||||
hints.push(Shortcut::new(vec!["j", "Down"], "Select item below"));
|
hints.push(Shortcut::new(vec!["j", "Down"], "Select item below"));
|
||||||
hints.push(Shortcut::new(vec!["t"], "Next theme"));
|
hints.push(Shortcut::new(vec!["t"], "Next theme"));
|
||||||
hints.push(Shortcut::new(vec!["T"], "Previous theme"));
|
hints.push(Shortcut::new(vec!["T"], "Previous theme"));
|
||||||
|
hints.push(Shortcut::new(vec!["Tab"], "Next tab"));
|
||||||
|
hints.push(Shortcut::new(vec!["Shift-Tab"], "Previous tab"));
|
||||||
ShortcutList {
|
ShortcutList {
|
||||||
scope_name: "Item list",
|
scope_name: "Item list",
|
||||||
hints,
|
hints,
|
||||||
|
@ -154,11 +154,13 @@ pub fn draw_shortcuts(state: &AppState, frame: &mut Frame, area: Rect) {
|
||||||
scope_name: "Tab list",
|
scope_name: "Tab list",
|
||||||
hints: vec![
|
hints: vec![
|
||||||
Shortcut::new(vec!["q", "CTRL-c"], "Exit linutil"),
|
Shortcut::new(vec!["q", "CTRL-c"], "Exit linutil"),
|
||||||
Shortcut::new(vec!["l", "Right", "Tab", "Enter"], "Focus action list"),
|
Shortcut::new(vec!["l", "Right", "Enter"], "Focus action list"),
|
||||||
Shortcut::new(vec!["k", "Up"], "Select item above"),
|
Shortcut::new(vec!["k", "Up"], "Select item above"),
|
||||||
Shortcut::new(vec!["j", "Down"], "Select item below"),
|
Shortcut::new(vec!["j", "Down"], "Select item below"),
|
||||||
Shortcut::new(vec!["t"], "Next theme"),
|
Shortcut::new(vec!["t"], "Next theme"),
|
||||||
Shortcut::new(vec!["T"], "Previous theme"),
|
Shortcut::new(vec!["T"], "Previous theme"),
|
||||||
|
Shortcut::new(vec!["Tab"], "Next tab"),
|
||||||
|
Shortcut::new(vec!["Shift-Tab"], "Previous tab"),
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -247,6 +247,31 @@ impl AppState {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Handle key only when Tablist or List is focused
|
||||||
|
// Prevents exiting the application even when a command is running
|
||||||
|
// Add keys here which should work on both TabList and List
|
||||||
|
if matches!(self.focus, Focus::TabList | Focus::List) {
|
||||||
|
match key.code {
|
||||||
|
KeyCode::Tab => {
|
||||||
|
if self.current_tab.selected().unwrap() == self.tabs.len() - 1 {
|
||||||
|
self.current_tab.select_first(); // Select first tab when it is at last
|
||||||
|
} else {
|
||||||
|
self.current_tab.select_next();
|
||||||
|
}
|
||||||
|
self.refresh_tab();
|
||||||
|
}
|
||||||
|
KeyCode::BackTab => {
|
||||||
|
if self.current_tab.selected().unwrap() == 0 {
|
||||||
|
self.current_tab.select(Some(self.tabs.len() - 1)); // Select last tab when it is at first
|
||||||
|
} else {
|
||||||
|
self.current_tab.select_previous();
|
||||||
|
}
|
||||||
|
self.refresh_tab();
|
||||||
|
}
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
match &mut self.focus {
|
match &mut self.focus {
|
||||||
Focus::FloatingWindow(command) => {
|
Focus::FloatingWindow(command) => {
|
||||||
if command.handle_key_event(key) {
|
if command.handle_key_event(key) {
|
||||||
|
@ -268,9 +293,7 @@ impl AppState {
|
||||||
}
|
}
|
||||||
|
|
||||||
Focus::TabList => match key.code {
|
Focus::TabList => match key.code {
|
||||||
KeyCode::Enter | KeyCode::Char('l') | KeyCode::Right | KeyCode::Tab => {
|
KeyCode::Enter | KeyCode::Char('l') | KeyCode::Right => self.focus = Focus::List,
|
||||||
self.focus = Focus::List
|
|
||||||
}
|
|
||||||
|
|
||||||
KeyCode::Char('j') | KeyCode::Down
|
KeyCode::Char('j') | KeyCode::Down
|
||||||
if self.current_tab.selected().unwrap() + 1 < self.tabs.len() =>
|
if self.current_tab.selected().unwrap() + 1 < self.tabs.len() =>
|
||||||
|
@ -304,7 +327,6 @@ impl AppState {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
KeyCode::Char('/') => self.enter_search(),
|
KeyCode::Char('/') => self.enter_search(),
|
||||||
KeyCode::Tab => self.focus = Focus::TabList,
|
|
||||||
KeyCode::Char('t') => self.theme.next(),
|
KeyCode::Char('t') => self.theme.next(),
|
||||||
KeyCode::Char('T') => self.theme.prev(),
|
KeyCode::Char('T') => self.theme.prev(),
|
||||||
_ => {}
|
_ => {}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user