diff --git a/src/file_browser.rs b/src/file_browser.rs index 60576b7..241af1f 100644 --- a/src/file_browser.rs +++ b/src/file_browser.rs @@ -89,6 +89,10 @@ impl Tabbable for TabView { Ok(()) } + fn goto_tab(&mut self, index: usize) -> HResult<()> { + self.goto_tab_(index) + } + fn get_tab_names(&self) -> Vec> { self.widgets.iter().map(|filebrowser| { let path = filebrowser.cwd.path(); @@ -106,7 +110,7 @@ impl Tabbable for TabView { self.active_tab_mut_() } - fn on_next_tab(&mut self) -> HResult<()> { + fn on_tab_switch(&mut self) -> HResult<()> { self.active_tab_mut().refresh() } diff --git a/src/minibuffer.rs b/src/minibuffer.rs index 33ccf3d..02f235e 100644 --- a/src/minibuffer.rs +++ b/src/minibuffer.rs @@ -44,7 +44,7 @@ impl MiniBuffer { self.completions.clear(); self.last_completion = None; - self.get_core()?.screen.lock()?.cursor_hide(); + self.get_core()?.screen.lock()?.cursor_hide().log(); self.popup()?; @@ -316,6 +316,11 @@ impl Widget for MiniBuffer { Key::Char('\t') => { self.complete()?; } + Key::F(n) => { + let fnstr = format!("${}", n-1); + self.input.insert_str(self.position, &fnstr); + self.position += 2; + } Key::Backspace => { if self.position != 0 { self.input.remove(self.position - 1); diff --git a/src/tabview.rs b/src/tabview.rs index cd171c5..53bed38 100644 --- a/src/tabview.rs +++ b/src/tabview.rs @@ -7,7 +7,8 @@ pub trait Tabbable { fn new_tab(&mut self) -> HResult<()>; fn close_tab(&mut self) -> HResult<()>; fn next_tab(&mut self) -> HResult<()>; - fn on_next_tab(&mut self) -> HResult<()> { + fn goto_tab(&mut self, index: usize) -> HResult<()>; + fn on_tab_switch(&mut self) -> HResult<()> { Ok(()) } fn get_tab_names(&self) -> Vec>; @@ -16,6 +17,7 @@ pub trait Tabbable { fn on_key_sub(&mut self, key: Key) -> HResult<()>; fn on_key(&mut self, key: Key) -> HResult<()> { match key { + Key::F(n) => self.goto_tab(n as usize -1), Key::Ctrl('t') => self.new_tab(), Key::Ctrl('w') => self.close_tab(), Key::Char('\t') => self.next_tab(), @@ -65,6 +67,14 @@ impl TabView where T: Widget, TabView: Tabbable { Ok(()) } + pub fn goto_tab_(&mut self, index: usize) -> HResult<()> { + if index < self.widgets.len() { + self.active = index; + self.on_tab_switch().log(); + } + Ok(()) + } + pub fn active_tab_(&self) -> &T { &self.widgets[self.active] } @@ -84,7 +94,7 @@ impl TabView where T: Widget, TabView: Tabbable { } else { self.active += 1 } - self.on_next_tab().log(); + self.on_tab_switch().log(); } }