Add keybindings.md and help widget

This commit is contained in:
Dheepak Krishnamurthy 2020-10-27 03:26:14 -06:00
parent c6156333e7
commit c8feaa15b3
4 changed files with 83 additions and 189 deletions

37
KEYBINDINGS.md Normal file
View file

@ -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

View file

@ -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<impl Backend>, 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<impl Backend>, rect: Rect, text: &str, title: T)

42
src/help.rs Normal file
View file

@ -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<Spans> = 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);
}
}

View file

@ -4,6 +4,7 @@
mod app;
mod calendar;
mod help;
mod config;
mod table;
mod util;