From 4682fe76b043b87485ec2004d2552db118e06a2e Mon Sep 17 00:00:00 2001 From: Dheepak Krishnamurthy Date: Fri, 26 Mar 2021 10:33:31 -0600 Subject: [PATCH] Add task details scroll --- KEYBINDINGS.md | 5 ++++- docs/taskwarrior-tui.1.md | 7 +++++++ src/app.rs | 29 +++++++++++++++++++++++------ src/task_report.rs | 4 ++-- 4 files changed, 36 insertions(+), 9 deletions(-) diff --git a/KEYBINDINGS.md b/KEYBINDINGS.md index 3667b5f..366a302 100644 --- a/KEYBINDINGS.md +++ b/KEYBINDINGS.md @@ -45,6 +45,10 @@ Keybindings for task report: A: task {selected} annotate {string} - Annotate current task + Ctrl-e: scroll down task details - Scroll task details view down one line + + Ctrl-y: scroll up task details - Scroll task details view up one line + !: {string} - Custom shell command 1-9: {string} - Run user defined shortcuts @@ -53,7 +57,6 @@ Keybindings for task report: ?: help - Help menu - Keybindings for context switcher: j: {selected+=1} - Move forward a context diff --git a/docs/taskwarrior-tui.1.md b/docs/taskwarrior-tui.1.md index 11b1ff5..0ffff4a 100644 --- a/docs/taskwarrior-tui.1.md +++ b/docs/taskwarrior-tui.1.md @@ -100,6 +100,13 @@ Keybindings for task report: `A` : task {selected} annotate {string} - Annotate current task +Ctrl-e +: scroll down task details - Scroll task details view down one line + +Ctrl-y +: scroll up task details - Scroll task details view up one line + + `!` : {string} - Custom shell command diff --git a/src/app.rs b/src/app.rs index 4adcbc4..e7008a7 100644 --- a/src/app.rs +++ b/src/app.rs @@ -155,6 +155,7 @@ pub struct TTApp { pub config: Config, pub task_report_show_info: bool, pub task_report_height: u16, + pub task_details_scroll: u16, pub help_popup: Help, pub contexts: Vec, pub last_export: Option, @@ -179,6 +180,7 @@ impl TTApp { error: "".to_string(), mode: AppMode::TaskReport, task_report_height: 0, + task_details_scroll: 0, task_report_show_info: c.uda_task_report_show_info, config: c, task_report_table: TaskReportTable::new()?, @@ -517,16 +519,27 @@ impl TTApp { .output(); if let Ok(output) = output { let data = String::from_utf8_lossy(&output.stdout); - let p = Paragraph::new(Text::from(&data[..])).block( - Block::default() - .borders(Borders::ALL) - .border_type(BorderType::Rounded) - .title(format!("Task {}", task_id)), - ); + self.task_details_scroll = std::cmp::min(data.lines().count() as u16, self.task_details_scroll); + let p = Paragraph::new(Text::from(&data[..])) + .block( + Block::default() + .borders(Borders::ALL) + .border_type(BorderType::Rounded) + .title(format!("Task {}", task_id)), + ) + .scroll((self.task_details_scroll, 0)); f.render_widget(p, rect); } } + fn task_details_scroll_down(&mut self) { + self.task_details_scroll = self.task_details_scroll.saturating_sub(1); + } + + fn task_details_scroll_up(&mut self) { + self.task_details_scroll = self.task_details_scroll.saturating_add(1); + } + fn task_by_index(&self, i: usize) -> Option { let tasks = &self.tasks.lock().unwrap(); if i > tasks.len() { @@ -1514,6 +1527,10 @@ impl TTApp { self.task_report_next_page(); } else if input == Key::PageUp || input == self.keyconfig.page_up { self.task_report_previous_page(); + } else if input == Key::Ctrl('e') { + self.task_details_scroll_up(); + } else if input == Key::Ctrl('y') { + self.task_details_scroll_down(); } else if input == self.keyconfig.done { match self.task_done() { Ok(_) => self.update(true)?, diff --git a/src/task_report.rs b/src/task_report.rs index 490a868..e843971 100644 --- a/src/task_report.rs +++ b/src/task_report.rs @@ -254,14 +254,14 @@ impl TaskReportTable { }, "description.count" => { let c = match task.annotations() { - Some(a) => format!("[{}]", a.iter().count()), + Some(a) => format!("[{}]", a.len()), None => format!(""), }; format!("{} {}", task.description().to_string(), c) } "description.truncated_count" => { let c = match task.annotations() { - Some(a) => format!(" [{}]", a.iter().count()), + Some(a) => format!(" [{}]", a.len()), None => format!(""), }; let mut d = task.description().to_string();