summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorrabite <rabite@posteo.de>2019-03-11 12:33:17 +0100
committerrabite <rabite@posteo.de>2019-03-11 12:33:17 +0100
commit9cc1ce1a44850f65f84db1c6fd9356013d53e5ea (patch)
treec64b4cbffff55b11614751e399a93e111044e574 /src
parente63c65ab7d944fb3a80f6c40bd0d98ec50b054c6 (diff)
switch tabs with f keys
Diffstat (limited to 'src')
-rw-r--r--src/file_browser.rs6
-rw-r--r--src/minibuffer.rs7
-rw-r--r--src/tabview.rs14
3 files changed, 23 insertions, 4 deletions
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<FileBrowser> {
Ok(())
}
+ fn goto_tab(&mut self, index: usize) -> HResult<()> {
+ self.goto_tab_(index)
+ }
+
fn get_tab_names(&self) -> Vec<Option<String>> {
self.widgets.iter().map(|filebrowser| {
let path = filebrowser.cwd.path();
@@ -106,7 +110,7 @@ impl Tabbable for TabView<FileBrowser> {
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<Option<String>>;
@@ -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<T> TabView<T> where T: Widget, TabView<T>: 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<T> TabView<T> where T: Widget, TabView<T>: Tabbable {
} else {
self.active += 1
}
- self.on_next_tab().log();
+ self.on_tab_switch().log();
}
}