dooby

A very simplistic command-line to-do/note list manager in Ruby.

WARNING!!!

You should know this gem lacks of fancy things, meaning: social, cloud, mobile, web interface, etc.

Why another to-do list manager?

I spend a lot of time in the terminal and I didn't really like any of the current options.

How does Dooby works?

A bunch of lists

Dooby is directory-based, so you can maintain different to-do/notes lists in every directory you want.

For instance, I use one to-do list per project, that way I don't have all the tasks in one place so I can get focused in just one set of tasks, in one context.

Priorities

Dooby doesn't like to handle priorities, that's your concern. The main goal of Dooby is to help me to handle my today/tomorrow tasks and to handle my personal notes.

Due dates

Due dates for today/tomorrow tasks? well, maybe later.

#tag #tag and #tag again and tell @jim to #tag everything in his %life as well

Dooby uses some special characters to visually help us to differentiate between things and let us search tasks very easily, the ones that you might recognize are @ and #, I stole the idea from Twitter, but of course they don't behave as in Twitter, the @ sign is not an username but a character to simply tag a person, that's all, nothing else (so far).

People

@peter, @john, @jim

Contexts (states of mind, mood, places, etc)

#today, #tomorrow, #urgent

#work, #home

#thinking, #sad

Projects

%website, %shoppinglist, %whatever

Most of these characters are meaningless to Dooby, she (yes, she's a woman) isn't aware of them, Dooby is aware only of some of them:

#today
#urgent
#tomorrow

All the tasks tagged with #today and #urgent will be shown in a special section every time you list your to-dos/notes.

All the tasks tagged with #tomorrow will be marked with the tag #today at the next day.

Usage

Creating an alias

$ alias d='dooby'

Initializing Dooby

$ d init

This creates a .dooby/list.yml file in the current directory. Dooby will save all the tasks on it.

Adding items

$ d add "#fix the email error in %website, talk to @peter #today"

$ d a "learn to use the #aliases of the #commands"

Listing items

$ d list @peter

$ d l today

$ d l \#today

$ d l "#today"

$ d l %website

$ d l @
 > shows tasks related to people

$ d l %
 > shows all the tasks with a related project

Listing items interactively

$ d il

> #today
Showing items containing: #today
 (b954bf)  #fix the email error in %website, talk to @peter #today
 (9cfbf4)  Need to go to the #doctor @hendrix #today

> #doctor
Showing items containing: #doctor
(9cfbf4)  Need to go to the #doctor #today

> email
Showing items containing: email
(b954bf)  #fix the email error in %website, talk to @peter #today

Note: Dooby uses SHA1 as Task ID.

Listing all the hashtags you have used

$ d l#
#today
#doctor
#fix

Listing all the people you have tagged

$ d l@
@peter
@hendrix

Listing all the projects you have tagged

$ d l%
%website

Editing items

Dooby supports autocompletion of task IDs in the delete and the edit commands, to fire it just do the same as in a bash shell, press TAB TAB.

$ d edit

or

$ d e
Task ID > TAB TAB
b954bf 9cfbf4 (we only have 2 tasks)

$ d e
Task ID > b TAB

and you'll see that the task id have been auto-completed

$ d e
Task ID > b954bf

now press Enter and TAB TAB again if you want the original text of the item:

$ d e
Task ID > b954bf
TAB or up arrow to edit > TAB

$ d e
Task ID > b954bf
TAB or up arrow to edit > #fix the email error in %website, talk to @peter #today

$ d e
Task ID > b954bf
TAB or up arrow to edit > #fix the email error in %website #today

Edit it and press Enter and the task will be saved.

Deleting items

$ d delete

or

$ d d
Task ID > TAB TAB
521a3d 9cfbf4

Note: the SHA1 of the task we edited previously has changed because it's based on the content

$ d d
Task ID > 9cfbf4
9cfbf4 deleted...

Dooby won't ask you if you really want to delete the task.

$ d l
Showing all items...
 (521a3d)  #fix the email error in %website #today

Bulk delete

If you want to delete all the tasks containing a tag or set of tags this is what bulk delete is useful for. This feature will delete only by tag, not simple text, actually if you enter simple text it will simply ignore it.

Bulk delete supports auto-completion too. Say you want to delete all the tasks containing @hendrix AND #today.

$ d bulkdelete

or

$ d b
What do you want to bulk delete? (@, #, % allowed)
_ #TAB TAB
#today #doctor

$ d b
What do you want to bulk delete? (@, #, % allowed)
#today @hendrix

That's it

Deleting all the items

$ d flush

or

$ d f
Sure??? (yes/no)
yes
All the task were deleted!

Deleting the .dooby directory and all the tasks

$ d trash

or

$ d t
Sure??? (yes/no)
yes
No more dooby here T_T

Help

You can check the help out using the -h flag

$ d -h

$ d t -h

$ d l -h
NAME
  dooby

SYNOPSIS
  dooby list [what_to_show*] [options]+

DESCRIPTION
  Lists @people, #tags, %projects or tasks (default)

PARAMETERS
  what_to_show (-1 ~> what_to_show) 
  --help, -h 

Known bugs

  • Auto-completion doesn't work with at signs (@)

Special Thanks

Most of the the ideas to code dooby were based on the work of other programmers, here's a list of all of them:

Gina Trapani (http://github.com/ginatrapani/todo.txt-cli)
Lakshan Perera (http://github.com/laktek/todo)
Scott Chacon (http://github.com/schacon/ticgit)

Thanks all of you!

Note on Patches/Pull Requests

  • Fork the project.
  • Make your feature addition or bug fix.
  • Add tests for it. This is important so I don't break it in a future version unintentionally.
  • Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
  • Send me a pull request. Bonus points for topic branches.

Copyright (c) 2010 Rafael Magana. See LICENSE for details.