I personally have difficulty with GUIs and with how every one of them seems to approach the same problem differenlty. Mastered point-and-click is not as useful as the CLI because it's generally less direct. (e.g. you slide your mouse up there on the menu, click to open it, slide down, click to choose the option, click on a field in the newly opened window, type in the new value, slide down and click on the OK button. whereas with CLI you type in your command and pass in your arguments for the new values, and you're done)

I love Tomboy for how simple it is and how you can sync notes with ssh and other methods. However, I personally don't like how note management is achieved. It is very easy for newcommers, but lets no room for power users to get faster / better.

So, I've built a CLI interface to Tomboy. I called it Scout (after being advised to change name from Tomtom -- which was a slang synonym for Tomboy. Scout comes from the character from "To kill a mockingbird". She's that tomboy girl that likes to pick up a fight with other students when they make fun of her father).

Everything is done through the D-Bus API exposed by Tomboy. Luckily, Gnote (a port of Tomboy to C++ that became an entirely separate project) exposes the same API functions; this means Scout supports Gnote, too!

State of the project

It still doesn't have enough features for me to ditch the GUI entirely (that's what I would call the 1.0 point), but most of it is there. My todo list includes note editing and note creation from the CLI, both with a CLI editor and with text piped in from other commands.

I must admit that I let that project unattended for way too long now, and I'm a bit ashamed of that.. But I intend in finishing the version 1.0 someday not too far in the future. Finding free time from work has been too rough in the last 2 years, though :\

Here's the current list of available features:

  • list note titles with last modification date and a list of affected tags, possibly filtered by a couple of criterion like tags or book affected to notes, or by name
  • display one or more notes
  • search for a string in all or a subset of your notes.
  • manage tags affected to notes. Tomboy has the ability to attach different tags to notes. This feature is not exposed in the GUI, but it's how books and templates are designated.
  • delete one or more notes

Very small howto

Here are some examples of how to use Scout:

Listing notes

All notes:

$ scout list
2012-04-03 | bup  (system:notebook:projects)
2012-03-20 | addressbook  (system:notebook:pim)
2012-02-10 | TODO-list  (system:notebook:reminders)
2012-02-06 | This Company - project-1  (system:notebook:thiscompany)
2012-01-30 | IPs Client 2
2012-01-24 | Client 2-TODO  (system:notebook:client2, work)
2012-01-09 | home infra stuff
2011-09-22 | This Company-network ports  (system:notebook:thiscompany, work)
2011-09-17 | This Company-Rack-checklist  (system:notebook:thiscompany, work)
2011-09-17 | This Company  (system:notebook:thiscompany, work)
2011-08-31 | Some client  (system:notebook:someclient, work)
2011-08-06 | scout  (system:notebook:projects)
2010-12-12 | Bash  (system:notebook:reminders)
2010-12-12 | nutrition site  (system:notebook:projects)

Only notes from one book:

$ scout list -b thiscompany
2012-02-06 | This Company - project-1  (system:notebook:thiscompany)
2011-09-22 | This Company-network ports  (system:notebook:thiscompany, work)
2011-09-17 | This Company-Rack-checklist  (system:notebook:thiscompany, work)
2011-09-17 | This Company  (system:notebook:thiscompany, work)

Searching for content

Let's search for someone's phone number in the "pim" book:

$ scout search -b pim "Joe Bloe"
addressbook : 14 : Joe Bloe - 555-1234
addressbook : 15 : Joe Bloe (cell) - 555-9991

Tag management

There's a note up there in the full list that has "Client 2" in it's name but that isn't in the right book. Let's add the note to the book "client2":

$ scout tag --on-book client2 "IPs Client 2"
$ scout list -b client2
2012-01-30 | IPs Client 2  (system:notebook:client2)
2012-01-24 | Client 2-TODO  (system:notebook:client2, work)

oh, wait. it is work, so we'll add the tag "work", too:

$ scout tag work "IPs Client 2"
$ scout list -t work
2012-01-30 | IPs Client 2  (system:notebook:client2, work)
2012-01-24 | Client 2-TODO  (system:notebook:client2, work)
2011-09-22 | This Company-network ports  (system:notebook:thiscompany, work)
2011-09-17 | This Company-Rack-checklist  (system:notebook:thiscompany, work)
2011-09-17 | This Company  (system:notebook:thiscompany, work)
2011-08-31 | Some client  (system:notebook:someclient, work)

Contributing

Scout is licensed under the MIT license, so if you'd like to help me out with this project, I'd gladly accept any help (testing, bug reports, feature ideas, patches, critics). You can contact me on github via the project's issue tracker or via Tomboy's or Gnote's mailing lists.