todotxt-machine is an interactive terminal based todo.txt file editor with an interface similar to mutt. It follows the todo.txt format and stores todo items in plain text.
- View your todos in a list with helpful syntax highlighting
- Archive completed todos
- Define your own colorschemes
- Tab completion of contexts and projects
- Filter contexts and projects
- Search for the todos you want with fuzzy matching
- Sort in ascending or descending order, or keep things unsorted
- Clickable UI elements
Python 2.7 or Python 3.4 on Linux or Mac OS X.
todotxt-machine 1.1.8 and earlier drew its user interface using only raw terminal escape sequences. While this was very educational it was difficult to extend with new features. Version 2 and up uses urwid to draw its interface and is much more easily extendable.
Using pip
pip install todotxt-machine
Download or clone this repo and run the todotxt-machine.py
script.
git clone https://github.com/AnthonyDiGirolamo/todotxt-machine.git cd todotxt-machine ./todotxt-machine.py
todotxt-machine Usage: todotxt-machine todotxt-machine TODOFILE [DONEFILE] todotxt-machine [--config FILE] todotxt-machine (-h | --help) todotxt-machine --version todotxt-machine --show-default-bindings Options: -c FILE --config=FILE Path to your todotxt-machine configuraton file [default: ~/.todotxt-machinerc] -h --help Show this screen. --version Show version. --show-default-bindings Show default keybindings in config parser format Add this to your config file and edit to customize
You can tell todotxt-machine to use the same todo.txt file whenever it
starts up by adding a file
entry to the ~/.todotxt-machinerc
file. If you want to archive completed tasks, you can specify a done.txt
file using an archive
entry. You can also set you preferred
colorscheme or even define new themes. Here is a short example:
[settings] file = ~/todo.txt archive = ~/done.txt auto-save = True show-toolbar = False show-filter-panel = False enable-borders = False enable-word-wrap = True colorscheme = myawesometheme
todotxt-machine currently supports solarized and base16 colors.
Pictured above are the following themes from left to right:
base16-light
base16-dark
solarized-light
solarized-dark
Here is a config file with a complete colorscheme definition:
[settings] file = ~/todo.txt colorscheme = myawesometheme [colorscheme-myawesometheme] plain=h250 selected=,h238 header=h250,h235 header_todo_count=h39,h235 header_todo_pending_count=h228,h235 header_todo_done_count=h156,h235 header_file=h48,h235 dialog_background=,h248 dialog_color=,h240 dialog_shadow=,h238 footer=h39,h235 search_match=h222,h235 completed=h59 context=h39 project=h214 creation_date=h135 due_date=h161 priority_a=h167 priority_b=h173 priority_c=h185 priority_d=h77 priority_e=h80 priority_f=h62
You can add colorschemes by adding sections with names that start with
colorscheme-
. Then under the [settings]
section you can say
which colorscheme you want to use.
The format for a color definitions is:
name=foreground,background
Foreground and background colors are follow the 256 color formats defined by urwid. Here is an excerpt from that link:
High colors may be specified by their indexh0
, ...,h255
or with the shortcuts for the color cube#000
,#006
,#008
, ...,#fff
or gray scale entriesg0
(black from color cube) ,g3
,g7
, ...g100
(white from color cube).
You can see all the colors defined here.
I recommend you leave the foreground out of the following definitions by
adding a comma immediately after the =
selected=,h238 dialog_background=,h248 dialog_color=,h240 dialog_shadow=,h238
If you want to use your terminal's default foreground and background color use blank strings and keep the comma:
dialog_background=,
Let me know if you make any good colorschemes and I'll add it to the default collection.
You can customize any key binding by adding a setting to the [keys]
section of your config file ~/.todotxt-machinerc
.
For a list of the default key bindings run:
todotxt-machine --show-default-bindings
You can easily append this to your config file by running:
todotxt-machine --show-default-bindings >> ~/.todotxt-machinerc
When you edit a key binding the in app help will reflect it. Hit h
or ?
to view the help.
- On Mac OS hitting
ctrl-y
suspends the application. Runstty dsusp undef
to fix. - Mouse interaction doesn't seem to work properly in the Apple Terminal. I would recommend using iTerm2 or rxvt / xterm in XQuartz.
With tmux the background color in todotxt-machine can sometimes be lost at the end of a line. If this is happening to you set your
$TERM
variable toscreen
orscreen-256color
export TERM=screen-256color
- [STRIKEOUT:User defined color themes]
- [STRIKEOUT:Manual reordering of todo items]
- [STRIKEOUT:Config file for setting colors and todo.txt file location]
- [STRIKEOUT:Support for archiving todos in done.txt]
- [STRIKEOUT:Custom keybindings]
- Add vi readline keybindings. urwid doesn't support readline currently. The emacs style bindings currently available are emulated.
See the log here