Add shortcut to jump to tabs; ctrl + n
This commit is contained in:
parent
37318444d3
commit
e4db4c0dcd
2 changed files with 40 additions and 2 deletions
|
|
@ -30,6 +30,7 @@ pub enum Action {
|
||||||
Redo,
|
Redo,
|
||||||
Save,
|
Save,
|
||||||
SelectAll,
|
SelectAll,
|
||||||
|
TabJump(usize),
|
||||||
ToggleGitManagement,
|
ToggleGitManagement,
|
||||||
ToggleProjectSearch,
|
ToggleProjectSearch,
|
||||||
ToggleSettingsPage,
|
ToggleSettingsPage,
|
||||||
|
|
@ -57,6 +58,7 @@ impl Action {
|
||||||
Self::Redo => Message::Redo,
|
Self::Redo => Message::Redo,
|
||||||
Self::Save => Message::Save,
|
Self::Save => Message::Save,
|
||||||
Self::SelectAll => Message::SelectAll,
|
Self::SelectAll => Message::SelectAll,
|
||||||
|
Self::TabJump(n) => Message::TabActivateJump(*n),
|
||||||
Self::TabNext => Message::TabNext,
|
Self::TabNext => Message::TabNext,
|
||||||
Self::TabPrev => Message::TabPrev,
|
Self::TabPrev => Message::TabPrev,
|
||||||
Self::ToggleGitManagement => Message::ToggleContextPage(ContextPage::GitManagement),
|
Self::ToggleGitManagement => Message::ToggleContextPage(ContextPage::GitManagement),
|
||||||
|
|
@ -114,6 +116,17 @@ impl KeyBind {
|
||||||
Action::$action,
|
Action::$action,
|
||||||
);
|
);
|
||||||
}};
|
}};
|
||||||
|
|
||||||
|
// Match enums with a payload
|
||||||
|
([$($modifier:ident),+ $(,)?], $key_code:ident, $action:ident($($arg:expr)*)) => {{
|
||||||
|
keybinds.insert(
|
||||||
|
KeyBind {
|
||||||
|
modifiers: vec![$(Modifier::$modifier),+],
|
||||||
|
key_code: KeyCode::$key_code,
|
||||||
|
},
|
||||||
|
Action::$action($($arg)*),
|
||||||
|
);
|
||||||
|
}};
|
||||||
}
|
}
|
||||||
|
|
||||||
bind!([Ctrl], W, CloseFile);
|
bind!([Ctrl], W, CloseFile);
|
||||||
|
|
@ -130,13 +143,22 @@ impl KeyBind {
|
||||||
bind!([Ctrl, Shift], Z, Redo);
|
bind!([Ctrl, Shift], Z, Redo);
|
||||||
bind!([Ctrl], S, Save);
|
bind!([Ctrl], S, Save);
|
||||||
bind!([Ctrl], A, SelectAll);
|
bind!([Ctrl], A, SelectAll);
|
||||||
|
bind!([Ctrl], Key1, TabJump(0));
|
||||||
|
bind!([Ctrl], Key2, TabJump(1));
|
||||||
|
bind!([Ctrl], Key3, TabJump(2));
|
||||||
|
bind!([Ctrl], Key4, TabJump(3));
|
||||||
|
bind!([Ctrl], Key5, TabJump(4));
|
||||||
|
bind!([Ctrl], Key6, TabJump(5));
|
||||||
|
bind!([Ctrl], Key7, TabJump(6));
|
||||||
|
bind!([Ctrl], Key8, TabJump(7));
|
||||||
|
bind!([Ctrl], Key9, TabJump(8));
|
||||||
|
bind!([Ctrl], PageUp, TabNext);
|
||||||
|
bind!([Ctrl], PageDown, TabPrev);
|
||||||
bind!([Ctrl, Shift], G, ToggleGitManagement);
|
bind!([Ctrl, Shift], G, ToggleGitManagement);
|
||||||
bind!([Ctrl, Shift], F, ToggleProjectSearch);
|
bind!([Ctrl, Shift], F, ToggleProjectSearch);
|
||||||
bind!([Ctrl], Comma, ToggleSettingsPage);
|
bind!([Ctrl], Comma, ToggleSettingsPage);
|
||||||
bind!([Alt], Z, ToggleWordWrap);
|
bind!([Alt], Z, ToggleWordWrap);
|
||||||
bind!([Ctrl], Z, Undo);
|
bind!([Ctrl], Z, Undo);
|
||||||
bind!([Ctrl], PageUp, TabNext);
|
|
||||||
bind!([Ctrl], PageDown, TabPrev);
|
|
||||||
|
|
||||||
keybinds
|
keybinds
|
||||||
}
|
}
|
||||||
|
|
|
||||||
16
src/main.rs
16
src/main.rs
|
|
@ -212,6 +212,7 @@ pub enum Message {
|
||||||
SystemThemeModeChange(cosmic_theme::ThemeMode),
|
SystemThemeModeChange(cosmic_theme::ThemeMode),
|
||||||
SyntaxTheme(usize, bool),
|
SyntaxTheme(usize, bool),
|
||||||
TabActivate(segmented_button::Entity),
|
TabActivate(segmented_button::Entity),
|
||||||
|
TabActivateJump(usize),
|
||||||
TabChanged(segmented_button::Entity),
|
TabChanged(segmented_button::Entity),
|
||||||
TabClose(segmented_button::Entity),
|
TabClose(segmented_button::Entity),
|
||||||
TabContextAction(segmented_button::Entity, Action),
|
TabContextAction(segmented_button::Entity, Action),
|
||||||
|
|
@ -1599,6 +1600,21 @@ impl Application for App {
|
||||||
self.tab_model.activate(entity);
|
self.tab_model.activate(entity);
|
||||||
return self.update_tab();
|
return self.update_tab();
|
||||||
}
|
}
|
||||||
|
Message::TabActivateJump(pos) => {
|
||||||
|
// Length is always at least one, so there shouldn't be a division by zero
|
||||||
|
let len = self.tab_model.iter().count();
|
||||||
|
//
|
||||||
|
let pos = if pos >= 8 || pos > len - 1 {
|
||||||
|
len - 1
|
||||||
|
} else {
|
||||||
|
pos % len
|
||||||
|
};
|
||||||
|
|
||||||
|
let entity = self.tab_model.iter().nth(pos);
|
||||||
|
if let Some(entity) = entity {
|
||||||
|
return self.update(Message::TabActivate(entity));
|
||||||
|
}
|
||||||
|
}
|
||||||
Message::TabChanged(entity) => {
|
Message::TabChanged(entity) => {
|
||||||
if let Some(Tab::Editor(tab)) = self.tab_model.data::<Tab>(entity) {
|
if let Some(Tab::Editor(tab)) = self.tab_model.data::<Tab>(entity) {
|
||||||
let mut title = tab.title();
|
let mut title = tab.title();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue