From b4a28a0b56722fa1a8218b845181723a8c4f60e7 Mon Sep 17 00:00:00 2001 From: Dheepak Krishnamurthy Date: Thu, 28 Jul 2022 08:39:53 -0600 Subject: [PATCH] =?UTF-8?q?feat:=20Support=20rotating=20tabs=20using=20'['?= =?UTF-8?q?=20and=20']'=20=E2=9C=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/configuration/advanced.md | 1 + src/app.rs | 8 ++++++++ src/config.rs | 10 ++++++++++ src/pane/mod.rs | 12 ++++++++++-- 4 files changed, 29 insertions(+), 2 deletions(-) diff --git a/docs/configuration/advanced.md b/docs/configuration/advanced.md index 2a74c78..fa95064 100644 --- a/docs/configuration/advanced.md +++ b/docs/configuration/advanced.md @@ -39,6 +39,7 @@ uda.taskwarrior-tui.task-report.auto-insert-double-quotes-on-annotate=true uda.taskwarrior-tui.task-report.auto-insert-double-quotes-on-log=true uda.taskwarrior-tui.task-report.reset-filter-on-esc=true uda.taskwarrior-tui.context-menu.select-on-move=false +uda.taskwarrior-tui.tabs.change-focus-rotate=false ``` The `uda.taskwarrior-tui.task-report.next.filter` variable defines the default view at program startup. Set this to any preconfigured report (`task reports`), or create your own report in taskwarrior and specify its name here. diff --git a/src/app.rs b/src/app.rs index 415dba3..a759dda 100644 --- a/src/app.rs +++ b/src/app.rs @@ -2542,6 +2542,10 @@ impl TaskwarriorTui { Mode::Calendar => { if input == self.keyconfig.quit || input == KeyCode::Ctrl('c') { self.should_quit = true; + } else if input == self.keyconfig.next_tab { + if self.config.uda_change_focus_rotate { + self.mode = Mode::Tasks(Action::Report); + } } else if input == self.keyconfig.previous_tab { self.mode = Mode::Projects; } else if input == KeyCode::Up || input == self.keyconfig.up { @@ -2842,6 +2846,10 @@ impl TaskwarriorTui { self.task_report_show_info = !self.task_report_show_info; } else if input == self.keyconfig.context_menu { self.mode = Mode::Tasks(Action::ContextMenu); + } else if input == self.keyconfig.previous_tab { + if self.config.uda_change_focus_rotate { + self.mode = Mode::Calendar; + } } else if input == self.keyconfig.next_tab { self.mode = Mode::Projects; } diff --git a/src/config.rs b/src/config.rs index 2c9afbb..c587984 100644 --- a/src/config.rs +++ b/src/config.rs @@ -90,6 +90,7 @@ pub struct Config { pub uda_style_report_completion_pane: Style, pub uda_style_report_completion_pane_highlight: Style, pub uda_shortcuts: Vec, + pub uda_change_focus_rotate: bool, pub uda_background_process: String, pub uda_background_process_period: usize, pub uda_quick_tag_name: String, @@ -120,6 +121,7 @@ impl Config { let rule_precedence_color = Self::get_rule_precedence_color(data); let uda_priority_values = Self::get_uda_priority_values(data); let uda_tick_rate = Self::get_uda_tick_rate(data); + let uda_change_focus_rotate = Self::get_uda_change_focus_rotate(data); let uda_auto_insert_double_quotes_on_add = Self::get_uda_auto_insert_double_quotes_on_add(data); let uda_auto_insert_double_quotes_on_annotate = Self::get_uda_auto_insert_double_quotes_on_annotate(data); let uda_auto_insert_double_quotes_on_log = Self::get_uda_auto_insert_double_quotes_on_log(data); @@ -185,6 +187,7 @@ impl Config { rule_precedence_color, uda_priority_values, uda_tick_rate, + uda_change_focus_rotate, uda_auto_insert_double_quotes_on_add, uda_auto_insert_double_quotes_on_annotate, uda_auto_insert_double_quotes_on_log, @@ -529,6 +532,13 @@ impl Config { .unwrap_or(true) } + fn get_uda_change_focus_rotate(data: &str) -> bool { + Self::get_config("uda.taskwarrior-tui.tabs.change-focus-rotate", data) + .unwrap_or_default() + .get_bool() + .unwrap_or(false) + } + fn get_uda_tick_rate(data: &str) -> u64 { Self::get_config("uda.taskwarrior-tui.tick-rate", data) .unwrap_or_default() diff --git a/src/pane/mod.rs b/src/pane/mod.rs index 64c01c3..be9acfd 100644 --- a/src/pane/mod.rs +++ b/src/pane/mod.rs @@ -12,7 +12,11 @@ pub trait Pane { fn handle_input(app: &mut TaskwarriorTui, input: KeyCode) -> Result<()>; fn change_focus_to_left_pane(app: &mut TaskwarriorTui) { match app.mode { - Mode::Tasks(_) => {} + Mode::Tasks(_) => { + if app.config.uda_change_focus_rotate { + app.mode = Mode::Calendar; + } + } Mode::Projects => app.mode = Mode::Tasks(Action::Report), Mode::Calendar => { app.mode = Mode::Projects; @@ -23,7 +27,11 @@ pub trait Pane { match app.mode { Mode::Tasks(_) => app.mode = Mode::Projects, Mode::Projects => app.mode = Mode::Calendar, - Mode::Calendar => {} + Mode::Calendar => { + if app.config.uda_change_focus_rotate { + app.mode = Mode::Tasks(Action::Report); + } + } } } }