diff --git a/docs/configuration/advanced.md b/docs/configuration/advanced.md index 7f07c7a..3c912d7 100644 --- a/docs/configuration/advanced.md +++ b/docs/configuration/advanced.md @@ -34,6 +34,7 @@ uda.taskwarrior-tui.task-report.auto-insert-double-quotes-on-add=true 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 ``` 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 5757ea7..a45ff69 100644 --- a/src/app.rs +++ b/src/app.rs @@ -2699,12 +2699,46 @@ impl TaskwarriorTui { self.mode = Mode::Tasks(Action::Report); } else if input == Key::Down || input == self.keyconfig.down { self.context_next(); + if self.config.uda_context_menu_select_on_move { + if self.error.is_some() { + self.previous_mode = Some(self.mode.clone()); + self.mode = Mode::Tasks(Action::Error); + } else { + match self.context_select() { + Ok(_) => { + self.get_context()?; + self.update(true)?; + } + Err(e) => { + self.error = Some(e.to_string()); + } + } + } + } } else if input == Key::Up || input == self.keyconfig.up { self.context_previous(); + if self.config.uda_context_menu_select_on_move { + if self.error.is_some() { + self.previous_mode = Some(self.mode.clone()); + self.mode = Mode::Tasks(Action::Error); + } else { + match self.context_select() { + Ok(_) => { + self.get_context()?; + self.update(true)?; + } + Err(e) => { + self.error = Some(e.to_string()); + } + } + } + } } else if input == Key::Char('\n') { if self.error.is_some() { self.previous_mode = Some(self.mode.clone()); self.mode = Mode::Tasks(Action::Error); + } else if self.config.uda_context_menu_select_on_move { + self.mode = Mode::Tasks(Action::Report); } else { match self.context_select() { Ok(_) => { diff --git a/src/config.rs b/src/config.rs index 77eb85b..262e39f 100644 --- a/src/config.rs +++ b/src/config.rs @@ -79,6 +79,7 @@ pub struct Config { pub uda_quick_tag_name: String, pub uda_task_report_prompt_on_delete: bool, pub uda_task_report_prompt_on_done: bool, + pub uda_context_menu_select_on_move: bool, } impl Config { @@ -137,6 +138,7 @@ impl Config { let uda_quick_tag_name = Self::get_uda_quick_tag_name(data); let uda_task_report_prompt_on_delete = Self::get_uda_task_report_prompt_on_delete(data); let uda_task_report_prompt_on_done = Self::get_uda_task_report_prompt_on_done(data); + let uda_context_menu_select_on_move = Self::get_uda_context_menu_select_on_move(data); Ok(Self { enabled, @@ -180,6 +182,7 @@ impl Config { uda_quick_tag_name, uda_task_report_prompt_on_delete, uda_task_report_prompt_on_done, + uda_context_menu_select_on_move, }) } @@ -527,6 +530,13 @@ impl Config { .unwrap_or(false) } + fn get_uda_context_menu_select_on_move(data: &str) -> bool { + Self::get_config("uda.taskwarrior-tui.context-menu.select-on-move", data) + .unwrap_or_default() + .get_bool() + .unwrap_or(false) + } + fn get_uda_task_report_prompt_on_delete(data: &str) -> bool { Self::get_config("uda.taskwarrior-tui.task-report.prompt-on-delete", data) .unwrap_or_default()