• Stars
    star
    723
  • Rank 61,352 (Top 2 %)
  • Language
    Python
  • License
    MIT License
  • Created almost 15 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A command-line todo list manager for people that want to finish tasks, not organize them. (git mirror)

t

t is a command-line todo list manager for people that want to finish tasks, not organize them.

Why t?

Yeah, I know, another command-line todo list manager. Several others already exist (todo.txt and TaskWarrior come to mind), so why make another one?

It Does the Simplest Thing That Could Possibly Work

Todo.txt and TaskWarrior are feature-packed. They let you tag tasks, split them into projects, set priorities, order them, color-code them, and much more.

That's the problem.

It's easy to say "I'll just organize my todo list a bit" and spend 15 minutes tagging your tasks. In those 15 minutes you probably could have finished a couple of them.

t was inspired by j. It's simple, messy, has almost no features, and is extremely effective at the one thing it does. With t the only way to make your todo list prettier is to finish some damn tasks.

It's Flexible

t's simplicity makes it extremely flexible.

Want to edit a bunch of tasks at once? Open the list in a text editor.

Want to view the lists on a computer that doesn't have t installed? Open the list in a text editor.

Want to synchronize the list across a couple of computers? Keep your task lists in a Dropbox folder.

Want to use it as a distributed bug tracking system like BugsEverywhere? Make the task list a bugs file in the project repository.

It Plays Nice with Version Control

Other systems keep your tasks in a plain text file. This is a good thing, and t follows their lead.

However, some of them append new tasks to the end of the file when you create them. This is not good if you're using a version control system to let more than one person edit a todo list. If two people add a task and then try to merge, they'll get a conflict and have to resolve it manually.

t uses random IDs (actually SHA1 hashes) to order the todo list files. Once the list has a couple of tasks in it, adding more is far less likely to cause a merge conflict because the list is sorted.

Installing t

t requires Python 2.5 or newer, and some form of UNIX-like shell (bash works well). It works on Linux, OS X, and Windows (with Cygwin).

Installing and setting up t will take about one minute.

First, download the newest version or clone the Mercurial repository (hg clone https://hg.stevelosh.com/t/). Put it anywhere you like.

Next, decide where you want to keep your todo lists. I put mine in ~/tasks. Create that directory:

mkdir ~/tasks

Finally, set up an alias to run t. Put something like this in your ~/.bashrc file:

alias t='python ~/path/to/t.py --task-dir ~/tasks --list tasks'

Make sure you run source ~/.bashrc or restart your terminal window to make the alias take effect.

Using t

t is quick and easy to use.

Add a Task

To add a task, use t [task description]:

$ t Clean the apartment.
$ t Write chapter 10 of the novel.
$ t Buy more beer.
$

List Your Tasks

Listing your tasks is even easier -- just use t:

$ t
9  - Buy more beer.
30 - Clean the apartment.
31 - Write chapter 10 of the novel.
$

t will list all of your unfinished tasks and their IDs.

Finish a Task

After you're done with something, use t -f ID to finish it:

$ t -f 31
$ t
9  - Buy more beer.
30 - Clean the apartment.
$

Edit a Task

Sometimes you might want to change the wording of a task. You can use t -e ID [new description] to do that:

$ t -e 30 Clean the entire apartment.
$ t
9  - Buy more beer.
30 - Clean the entire apartment.
$

Yes, nerds, you can use sed-style substitution strings:

$ t -e 9 /more/a lot more/
$ t
9  - Buy a lot more beer.
30 - Clean the entire apartment.
$

Delete the Task List if it's Empty

If you keep your task list in a visible place (like your desktop) you might want it to be deleted if there are no tasks in it. To do this automatically you can use the --delete-if-empty option in your alias:

alias t='python ~/path/to/t.py --task-dir ~/Desktop --list todo.txt --delete-if-empty'

Tips and Tricks

t might be simple, but it can do a lot of interesting things.

Count Your Tasks

Counting your tasks is simple using the wc program:

$ t | wc -l
      2
$

Put Your Task Count in Your Bash Prompt

Want a count of your tasks right in your prompt? Edit your ~/.bashrc file:

export PS1='[$(t | wc -l | sed -e"s/ *//")]'" $PS1"

Now you've got a prompt that looks something like this:

[2] $ t -f 30
[1] $ t Feed the cat.
[2] $

Multiple Lists

t is for people that want to do tasks, not organize them. With that said, sometimes it's useful to be able to have at least one level of organization. To split up your tasks into different lists you can add a few more aliases:

alias g='python ~/path/to/t.py --task-dir ~/tasks --list groceries'
alias m='python ~/path/to/t.py --task-dir ~/tasks --list music-to-buy'
alias w='python ~/path/to/t.py --task-dir ~/tasks --list wines-to-try'

Distributed Bugtracking

Like the idea of distributed bug trackers like BugsEverywhere, but don't want to use such a heavyweight system? You can use t instead.

Add another alias to your ~/.bashrc file:

alias b='python ~/path/to/t.py --task-dir . --list bugs'

Now when you're in your project directory you can use b to manage the list of bugs/tasks for that project. Add the bugs file to version control and you're all set.

Even people without t installed can view the bug list, because it's plain text.

Problems, Contributions, Etc

t was hacked together in a couple of nights to fit my needs. If you use it and find a bug, please let me know.

If you want to request a feature feel free, but remember that t is meant to be simple. If you need anything beyond the basics you might want to look at todo.txt or TaskWarrior instead. They're great tools with lots of bells and whistles.

If you want to contribute code to t, that's great! Get the Mercurial repository or the git mirror on GitHub and send me a patch or pull request.

More Repositories

1

gundo.vim

A git mirror of gundo.vim
Vim Script
1,460
star
2

learnvimscriptthehardway

Shell
1,332
star
3

badwolf

A Vim color scheme.
Vim Script
1,229
star
4

vitality.vim

Make Vim play nicely with iTerm 2 and tmux.
Vim Script
321
star
5

dotfiles

A git mirror of my dotfiles (.vimrc, .zshrc, .hgrc, etc). Note: this won't work on its own because the real repo uses Mercurial's subrepos. Look at .hgsub and .hgsubstate for what you'll need to get.
Vim Script
300
star
6

splice.vim

A Vim plugin for managing three-way merges.
Python
240
star
7

friendly-find

A friendlier find(1).
Python
210
star
8

caves

The code for my Caves of Clojure series of blog posts.
Clojure
157
star
9

clam.vim

A lightweight Vim plugin for working with shell commands.
Vim Script
148
star
10

d

Markdown files to documentation. Nothing else.
CSS
134
star
11

z-fish

A fork of http://github.com/rupa/z to port it to the Fish shell.
Shell
134
star
12

peat

Repeat commands!
Python
128
star
13

stevelosh

A git mirror of my personal site.
JavaScript
125
star
14

cl-chip8

chip-8 emulator in common lisp
Common Lisp
73
star
15

threesome.vim

A git mirror of threesome.vim.
Python
69
star
16

temperance

A logic programming library for Common Lisp.
Common Lisp
53
star
17

tslime2.vim

Send text from Vim to a tmux pane.
Vim Script
50
star
18

clojurecraft

A framework for writing Minecraft bots in Clojure. STILL ALPHA!
Clojure
40
star
19

stoat

A sleek, lightweight, pluggable CMS app for Django.
Python
39
star
20

cl-losh

Common Lisp
33
star
21

red-tape

A Clojure library for working with forms.
Clojure
30
star
22

bookmarkdown

CSS
29
star
23

flask-lesscss

A git mirror of flask-lesscss.
Python
26
star
24

adopt

A Damn OPTion parsing library.
Common Lisp
24
star
25

strftimedammit.vim

A single Vim documentation file that lists strftime-like formatting characters for a variety of languages.
23
star
26

flask-csrf

A git mirror of flask-csrf.
Python
22
star
27

beast

Basic Entity/Aspect/System Toolkit
Common Lisp
21
star
28

cl-digraph

A simple directed graph implementation for Common Lisp.
Common Lisp
21
star
29

cl-nrepl

NREPL server for Common Lisp
Common Lisp
19
star
30

flax

Weaving art from seeds.
Common Lisp
19
star
31

dram

Clojure templating that won't make you drink.
Clojure
17
star
32

cl-blt

Common Lisp bindings for bearlibterminal, with a Lispy interface on top.
Common Lisp
17
star
33

tis100.vim

Git mirror of tis100.vim
Vim Script
15
star
34

rldt

Common Lisp
15
star
35

newseasons

A simple Clojure webapp for notifying users when new seasons of their favorite TV shows hit iTunes.
Clojure
15
star
36

roul

A tiny Clojure library for working with random numbers.
Clojure
15
star
37

coding-math

Common Lisp
12
star
38

pgworld

Procedural world generation in Unity (for GEDE at ReykjavΓ­k University 2016)
C#
10
star
39

bobbin

Bobbin wraps strings.
Common Lisp
9
star
40

typkov

Clojure
9
star
41

django-hoptoad

I don't have time to work on django-hoptoad much any more, but there's a more active fork:
Python
9
star
42

keymando-vim

A Keymando plugin to add a Vim-like editing mode everywhere.
Ruby
7
star
43

euler

Project Euler
Common Lisp
7
star
44

sand

Common Lisp
7
star
45

advent

Git mirror of https://bitbucket.org/sjl/advent
Common Lisp
6
star
46

scully

A General Game Player for imperfect-information games.
Common Lisp
6
star
47

chancery

A text and data generation library for Common Lisp, inspired by Tracery.
Common Lisp
6
star
48

alienscript

Look at the wiki.
JavaScript
5
star
49

zen

A throwaway roguelike non-game in Clojure.
Clojure
5
star
50

mazes

Common Lisp
5
star
51

introduction-to-mathematical-thinking

My notes/work for the Coursera Intro to Mathematical Thinking course.
5
star
52

silt2

Lisp Game Jam August 2016
Common Lisp
4
star
53

silt

Ludum Dare 34
Clojure
4
star
54

cl-netpbm

Common Lisp support for reading/writing PPM, PGM, and PBM files.
Common Lisp
4
star
55

st

Mirror of st with my config and patches applied
C
4
star
56

flask-urls

A git mirror of flask-urls.
Python
4
star
57

cl-ggp

Git mirror of https://bitbucket.org/sjl/cl-ggp/
Common Lisp
4
star
58

brows

urlview in common lisp
Common Lisp
3
star
59

antipodes

https://itch.io/jam/igi-1
Common Lisp
3
star
60

dtach

A tiny program that emulates the detach feature of screen
Shell
3
star
61

boots

A simple text UI framework, inspired by _why's Shoes.
Common Lisp
3
star
62

magitek

Whimsical robots infused with just a hint of magic.
Common Lisp
3
star
63

cl-pcg

Permuted congruential generators in Common Lisp
Common Lisp
2
star
64

eve

My talk at BACON 2012.
Clojure
2
star
65

bones

Git mirror of https://bitbucket.org/sjl/bones/
2
star
66

gdl.vim

Git mirror of https://bitbucket.org/sjl/gdl.vim
Vim Script
2
star
67

merge-conflict-test

A simple repo that provides two branches with a merge conflict.
2
star
68

vex

Yet another vector math library for Common Lisp.
Common Lisp
2
star
69

.plan

Git mirror of https://hg.stevelosh.com/.plan/
2
star
70

ruin

Clojure
2
star
71

els

The Exciting Lisp Solver!
Common Lisp
1
star
72

beef

shavin beefalos in common lisp
Common Lisp
1
star
73

slock

fork of https://tools.suckless.org/slock/ with my patches
C
1
star
74

batty

A 2D Batformer for the October 2017 Lisp Game Jam.
Common Lisp
1
star
75

cacl

Common Lisp
1
star
76

sm-slurm-example

Demo of snakemake/slurm problem
Python
1
star
77

hype

Common Lisp
1
star
78

fern

Common Lisp
1
star
79

rosalind

Rosalind problems.
Common Lisp
1
star
80

conserve

Yet Another CSV Library for Common Lisp.
Common Lisp
1
star
81

cl-gameboy

Common Lisp
1
star
82

dbvolve

Database evolutions for Common Lisp.
Common Lisp
1
star
83

constrained-game

C#
1
star