From c8feaa15b3e8ec530cf3428150d74eb708d804ab Mon Sep 17 00:00:00 2001 From: Dheepak Krishnamurthy Date: Tue, 27 Oct 2020 03:26:14 -0600 Subject: [PATCH] Add keybindings.md and help widget --- KEYBINDINGS.md | 37 ++++++++++ src/app.rs | 192 +------------------------------------------------ src/help.rs | 42 +++++++++++ src/main.rs | 1 + 4 files changed, 83 insertions(+), 189 deletions(-) create mode 100644 KEYBINDINGS.md create mode 100644 src/help.rs diff --git a/KEYBINDINGS.md b/KEYBINDINGS.md new file mode 100644 index 0000000..10cded6 --- /dev/null +++ b/KEYBINDINGS.md @@ -0,0 +1,37 @@ +Keybindings: + + /: task {string} - Filter task report + + a: task add {string} - Add new task + + d: task {selected} done - Mark task as done + + e: task {selected} edit - Open selected task in editor + + j: {selected+=1} - Move down in task report + + k: {selected-=1} - Move up in task report + + l: task log {string} - Log new task + + m: task {selected} modify {string} - Modify selected task + + q: exit - Quit + + s: task {selected} start/stop - Toggle start and stop + + u: task undo - Undo + + x: task delete {selected} - Delete + + z: toggle task info - Toggle task info view + + A: task {selected} annotate {string} - Annotate current task + + ?: help - Help menu + + !: {string} - Custom shell command + + ]: Next view - Go to next view + + [: Previous view - Go to previous view diff --git a/src/app.rs b/src/app.rs index 2cb48bb..3638615 100644 --- a/src/app.rs +++ b/src/app.rs @@ -1,4 +1,5 @@ use crate::calendar::Calendar; +use crate::help::Help; use crate::config::TConfig; use crate::table::{Row, Table, TableState}; @@ -579,197 +580,10 @@ impl TTApp { } fn draw_help_popup(&self, f: &mut Frame, rect: Rect) { - let text = vec![ - Spans::from(""), - Spans::from(vec![ - Span::from(" /"), - Span::from(" "), - Span::styled( - "task {string} ", - Style::default().add_modifier(Modifier::BOLD), - ), - Span::from(" "), - Span::from("- Filter task report"), - ]), - Spans::from(""), - Spans::from(vec![ - Span::from(" a"), - Span::from(" "), - Span::styled( - "task add {string} ", - Style::default().add_modifier(Modifier::BOLD), - ), - Span::from(" "), - Span::from("- Add new task"), - ]), - Spans::from(""), - Spans::from(vec![ - Span::from(" A"), - Span::from(" "), - Span::styled( - "task annotate {string} ", - Style::default().add_modifier(Modifier::BOLD), - ), - Span::from(" "), - Span::from("- Annotate task"), - ]), - Spans::from(""), - Spans::from(vec![ - Span::from(" d"), - Span::from(" "), - Span::styled( - "task done {selected} ", - Style::default().add_modifier(Modifier::BOLD), - ), - Span::from(" "), - Span::from("- Mark task as done"), - ]), - Spans::from(""), - Spans::from(vec![ - Span::from(" e"), - Span::from(" "), - Span::styled( - "task edit {selected} ", - Style::default().add_modifier(Modifier::BOLD), - ), - Span::from(" "), - Span::from("- Open selected task in editor"), - ]), - Spans::from(""), - Spans::from(vec![ - Span::from(" j"), - Span::from(" "), - Span::styled( - "{selected+=1} ", - Style::default().add_modifier(Modifier::BOLD), - ), - Span::from(" "), - Span::from("- Move down in task report"), - ]), - Spans::from(""), - Spans::from(vec![ - Span::from(" k"), - Span::from(" "), - Span::styled( - "{selected-=1} ", - Style::default().add_modifier(Modifier::BOLD), - ), - Span::from(" "), - Span::from("- Move up in task report"), - ]), - Spans::from(""), - Spans::from(vec![ - Span::from(" l"), - Span::from(" "), - Span::styled( - "task log {string} ", - Style::default().add_modifier(Modifier::BOLD), - ), - Span::from(" "), - Span::from("- Log new task"), - ]), - Spans::from(""), - Spans::from(vec![ - Span::from(" m"), - Span::from(" "), - Span::styled( - "task modify {string} ", - Style::default().add_modifier(Modifier::BOLD), - ), - Span::from(" "), - Span::from("- Modify selected task"), - ]), - Spans::from(""), - Spans::from(vec![ - Span::from(" q"), - Span::from(" "), - Span::styled( - "exit ", - Style::default().add_modifier(Modifier::BOLD), - ), - Span::from(" "), - Span::from("- Quit"), - ]), - Spans::from(""), - Spans::from(vec![ - Span::from(" s"), - Span::from(" "), - Span::styled( - "task start/stop {selected} ", - Style::default().add_modifier(Modifier::BOLD), - ), - Span::from(" "), - Span::from("- Toggle start and stop"), - ]), - Spans::from(""), - Spans::from(vec![ - Span::from(" u"), - Span::from(" "), - Span::styled( - "task undo ", - Style::default().add_modifier(Modifier::BOLD), - ), - Span::from(" "), - Span::from("- Undo"), - ]), - Spans::from(""), - Spans::from(vec![ - Span::from(" x"), - Span::from(" "), - Span::styled( - "task delete ", - Style::default().add_modifier(Modifier::BOLD), - ), - Span::from(" "), - Span::from("- Delete task"), - ]), - Spans::from(""), - Spans::from(vec![ - Span::from(" z"), - Span::from(" "), - Span::styled( - "toggle details ", - Style::default().add_modifier(Modifier::BOLD), - ), - Span::from(" "), - Span::from("- Toggle task detail panel"), - ]), - Spans::from(""), - Spans::from(""), - Spans::from(vec![ - Span::from(" ?"), - Span::from(" "), - Span::styled( - "help ", - Style::default().add_modifier(Modifier::BOLD), - ), - Span::from(" "), - Span::from("- Show this help menu"), - ]), - Spans::from(""), - Spans::from(vec![ - Span::from(" !"), - Span::from(" "), - Span::styled( - "shell ", - Style::default().add_modifier(Modifier::BOLD), - ), - Span::from(" "), - Span::from("- Custom shell command"), - ]), - - ]; - let paragraph = Paragraph::new(text) - .block( - Block::default() - .title(Span::styled("Help", Style::default().add_modifier(Modifier::BOLD))) - .borders(Borders::ALL) - .border_type(BorderType::Rounded), - ) - .alignment(Alignment::Left); let area = centered_rect(80, 90, rect); + let h = Help::new(); f.render_widget(Clear, area); - f.render_widget(paragraph, area); + f.render_widget(&h, area); } fn draw_command<'a, T>(&self, f: &mut Frame, rect: Rect, text: &str, title: T) diff --git a/src/help.rs b/src/help.rs new file mode 100644 index 0000000..e875f98 --- /dev/null +++ b/src/help.rs @@ -0,0 +1,42 @@ +use std::cmp; + +use tui::{ + layout::{Alignment, Rect}, + buffer::Buffer, + style::{Modifier, Style}, + text::{Text, Span, Spans}, + widgets::{Block, Widget, BorderType, Borders, Clear, Paragraph}, +}; + + +const TEXT: &str = include_str!("../KEYBINDINGS.md"); + +pub struct Help { + title: String, +} + +impl Help { + pub fn new() -> Self { + Self { + title: "Help".to_string(), + } + } +} + +impl Widget for &Help { + fn render(self, area: Rect, buf: &mut Buffer) { + let text: Vec = TEXT.lines() + .map(|line| Spans::from(format!("{}\n", line))) + .collect(); + + Paragraph::new(text) + .block( + Block::default() + .title(Span::styled(&self.title, Style::default().add_modifier(Modifier::BOLD))) + .borders(Borders::ALL) + .border_type(BorderType::Rounded) + ) + .alignment(Alignment::Left) + .render(area, buf); + } +} diff --git a/src/main.rs b/src/main.rs index 7f1bea6..9b1ce7e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,6 +4,7 @@ mod app; mod calendar; +mod help; mod config; mod table; mod util;