# A mini todo-cli
> Documentation available at [docs.rs](https://docs.rs/todo-cli-manikya/0.1.0/todo_cli_manikya/)
## About
This is a small todo app written in rust for learning purposes.
## Features
- An easy to use TUI with explanation of all keymaps
- Tasks stored in local storage so that they can be accessed later
- High performance and no lag even on slow devices
- cli commands for advanced users who do not need a tui
## How to install
### Using binary
Download the executable for your platform from the github latest release!
### Using cargo
Clone this repository using git
```bash
git clone "https://github.com/Manikya-Sharma/todo-cli"
```
cd to directory and build using Cargo
```bash
cd todo-cli
cargo build --release
```
Simply run the exetuable created in `target/release` directory
Alternatively, use cargo run while providing `opt-level=3` in `Cargo.toml`.
## Usage
### Begin TUI
Run without any arguments to start the TUI
```bash
todo-cli
```
### Help
Get help regarding cli
```bash
todo-cli help
```
You can also run help on any subcommand, e.g.
```bash
todo-cli list help
```
### List
List out all the tasks
```bash
todo-cli list
```
List out all the tasks which are not yet completed
```bash
todo-cli list -p true # p stands for pending
```
List out all the tasks which are completed
```bash
todo-cli list -c true
```
Find out tasks using fuzzy search
```bash
todo-cli list -f "buy" # list all tasks with buy
```
You cna combine multiple flags for more specific searches
```bash
todo-cli list -p true -f "cmp" # all pending tasks with fuzzy
# e.g. "organize computer" task
# which is pending will match
```
### Clear all data
```bash
todo-cli clean
```
### Edit a task
Currently, only TUI supports editing a task but CLI feature will be added soon!
## How its made
The todo-cli follows a very simple approach, keep all the tasks in a csv and access them efficiently as and when needed.
This project stand on the shoulder of giants, by managing majority of requirements from external dependencies.
## Scope for improvement
This project is far from complete yet and needs many improvements
- [x] Improve performance while navigation the tasks in tui
- [x] Add a hash value to tasks and store then properly in csv for fast access and management
- [ ] Add options to use only CLI for adding and managing tasks
- [ ] Use hashing algorithm instead of RNG for task ID
## Missing features / Bugs
- Tasks cannot yet be edited using CLI
- Excess tasks will overflow from TUI
- No method yet to know about ID or status of a task in TUI
- Tasks are rendered naively in TUI which does not offer customization.
- No provision for storing dates when tasks are created/edited
## Some ambitious features
This list includes those features which are not currently high priority but can improve User Experience
- Allow customization of themes using yml/toml
- Make tasks richer by allowing bold, italic, highlight, internal and external links
- Tags for tasks which follow common ideas
- Extra status for tasks in-progress