This page is out-of-date.

Introduction

Tomboy is an up-and-coming note taking tool (personal wiki) written using C#, primarily for GNOME.

I've found hacking on tomboy fun, perhaps because I am familiar with Java and C# is very similar. Here are some hacks.

If I ever work on the HTML plugin a bit, this page might be generated from my 'tomboy hacks' note in future :-)

Contents

  1. Introduction
  2. Contents
  3. Archive this selection
  4. "Insert" menu
  5. Date searching
  6. tags (not done)
  7. Remote storage (not done)
  8. Mind mapping (not done)

Archive this selection

Last updated Wed Feb 22 20:27:07 GMT 2006

[pic]
[pic]
[pic]

Currently if I maintain a TODO list, I flag it with `TODO' (using the insert menu, below) and when it's done I strike it through and stick the date on (again with the insert menu). This is a quick keyboard operation, but could be quicker. Also, notes get bogged down with lots of struck-through text.

The archive plugin / patch will add a context menu item / drop-down menu item / keyboard shortcut to archive the current selection. This will append the selection to the note with name 'X/archived', where X is the name of the current note. It may also add a line such as 'archived on XXX' where XXX is the current date/time.

Current version: tomboy-archive-5.patch which relies on tomboy-move_PrependTimestampedText-4.patch. Previous version tomboy-archive-3.patch (applies against 0.3.5). but doesn't remove the selection from the current buffer.

Currently 'Archive' is accessible only from the right-click context menu. The selection is pre-pended to the archive-page, with a 'archived on this date' prefix (formatted nicely).

Insert menu

[pic]
[pic]
[pic]

I've hacked in an insert menu, allowing you to insert information into your notes using keyboard shortcuts, the toolbar or the pop-up menu.

At the moment, there are only two items on this menu: Date and TODO. Using the find function, you can use these inserts to quickly

  1. work out how many things you have TODO
  2. work out how many things you did on a particular date/time

The most recent version is tomboy__add-insert-menu-20050604-3.patch.

In conjunction with the archive this selection patch above, you can use tomboy as an effective TODO-list manager.

Date searching

This item was a paragraph in the above section, but I felt it important enough to split out into a seperate heading altogether.

Presently, the date/todo hack inserts a literal string into the note. In the case of `date', it most likely uses the current locale to format the date. However, If you were to change your locale settings in a way that would alter the display of a date, the dates you have inserted should be re-displayed appropriately.

Furthermore, when searching on dates, you can currently use literal string searches to find e.g. 'all stuff I did in 2005', or '2005/07', or '2005/07/06', but what about all things I did last week?

The solution to both of these things would be to have an XML tag describing the date inserted into the note, which is re-interpreted at run time based on your locale, and which can be queried and manipulated as part of an advanced search.

Tags

I plan to write an extension which will maintain a set of user-defined tags which can be applied to notes. This would be useful from a sorting perspective, but I think it would also have quite an impact on other extensions.

For example, I may modify the HTML export plugin so it only exports those notes tagged public.

remote storage

Quite a few people are interested in this. I don't think I could use tomboy as my primary note-taking device unless I could store the notes themselves on my server, and therefore have the same set of notes at home, at work, etc.

I plan to look at gnome-vfs and FUSE to see how they might be applied to this problem.

Mind-mapping

There's some interest in developing an extension for tomboy which allows you to create mind-maps.

My take on this would be to walk the note structures and generate a .dot file suitable for feeding to graphviz. This could then be displayed and updated when the structures changed.

If graphviz exported SVG, then the graph could be manipulated and nodes clicked on to bring up the corresponding note, for example.

In combination with tags above, the mindmap could be restricted to a set of nodes which were tagged to be mapped.

I do forsee one problem: graphviz is licenced under the CPL, and I don't know how that might sit with the other components.