# cl-todo

A simple TODO list widget for the GNOME desktop.

Honestly, this was mostly written to give me a chance to try out 
Gtk+3 on Common Lisp (see this 
[tutorial](https://lisp-journey.gitlab.io/blog/gui-programming-in-common-lisp-part-3-of-5-gtk3/)).

## Usage

Simply click on `cl-todo`. The app is designed to be used via keyboard shortcuts:

* UP/DOWN: switch between active widgets

* ENTER: Complete and remove the active task, or (if the input field is
  active) add a new task
  
* RIGHT/LEFT Switch between the task view and the notes view
  
* ESCAPE: Close the window (tasks are autosaved, notes not yet)

Your TODO list is saved under `~/.todo`.

**Tip:** Add a custom keyboard shortcut to quickly call up your TODO list. To do
so, copy the executable `cl-todo` to `/usr/local/bin` or similar. Then (if 
you're in the GNOME shell) go to "Settings" -> "Keyboard shortcuts" and scroll 
to the `+` sign at the bottom. Enter `cl-todo` as the command to be executed
and a key combination of your choice (I use `Super`+`Return`).

## Compiling

Requires a Common Lisp (tested on SBCL), [Quicklisp](https://www.quicklisp.org/beta/#installation), 
and the `cl-cffi-gtk` library.

To install, simply symlink this directory into your Quicklisp `local-projects`
folder:

```
ln -s /path/to/cl-todo ~/.quicklisp/local-projects/cl-todo
```

Then, you can open up a REPL to run: 


```
(ql:quickload :cl-todo)
(cl-todo:launch)
```

To produce a stand-alone executable, run `(asdf:make :cl-todo)`.

## Project TODO

* save text pane content to file

* add tabs with multiple todo lists

* add task priorities

* implement directory-specific todo files (with Nautilus plugin)

---

*&copy; Daniel Vedder 2020*
