Note
This is a scratchpad for a current project, and doesn't reflect current working status in any way.
Introduction
Outliners are good for many purposes, but for some reason as a project they are quite unsuccessful. In the Linux world this means we're left with a bunch of half-finished outliners, this is my attempt at adding to the pile.
I've been toying with the idea for a long time now, and I've had a working prototype for approaching 15 months. Unfortunately, from the outset I've chosen to use tools which while useful I'm unable to redistribute outside of work colleagues due to licensing issues. This recently started rewrite, which I'm calling gout until I think of a better name, will only use library code which is compatible with the GPL-2.
Features
Branch inheritance
The most important feature to me is branch inheritance, I have no choice but to store many items I'd like to visualise in an outliner on remote systems. That could be in the form of bugs in Bugzilla, event listings trapped for eternity in exported ICS files and or even the outlines authored by other project members for shared projects.
Support for non-textual nodes
Not only should this be styled text or HTML, but also SVGs and perhaps even audio. I often record audio notes on my mobile phone, I tend to upload them all to a directory once a week and transcribe them when I'm waiting for something to build. It would be nice if I could directly link audio items in to the tree.
Some other editing formats would also be useful, many people refused to use my previous tool until a wiki text editing mode was added. Looking at the data files hosted on our servers it looks as if the bluecloth-using Markdown plugin was popular too.
Hard and soft links
The way I work I often develop outlines that when viewed in global scope have massively overlapping sections, it is incredibly important to be able to link single nodes or subtrees in to other parts of the tree.
The normal UNIX-style semantics for hard and soft links seem to apply well here, and should be retained. In this instance hard links within the node tree shouldn't be possible across separate physical files, to stop file moves breaking the tree in exciting ways. Soft links within the node tree would "hang" if their destination is not available; the lack of destination shouldn't result in data loss ever.
Retargetable user interface
If I can't edit the outline on my phone and desktop the project is a complete failure, there is no single truth which is more important than this. Already having GTK+ available on my phone should mean just another glade file.
An ncurses interface would be really nice too, and maybe even an web interface if time permits. Both of these points suggest relying on a name with the G of GTK+ in it is a bad idea.
File formats
By default XHTML and XOXO are the formats that will be supported, I also plan on supporting export to OpenDocument for possible typesetting and TVO for legacy system support. Maybe devtodo as well because a lot of people I know use it, but it will necessarily be very lossy.
Maybe an import filter can be written to pull in some common OPML formatted files, but due to the complete lack of a coherent spec it just isn't worth attempting to support in a large way.
Abuse libraries for everything possible
If at all possible use standard available libraries for everything, even though the cool display options of the current implementation may look pretty the display code is now just over 60% of the code size and actually adds little that couldn't be achieved with a decent HTML engine and graphviz.
Current systems
There are some systems already available for outlining on Linux, but they don't fit my needs for one reason or another. Some of the systems I've looked at include the following, but if you know of any good tools I've missed please drop me a mail. I'd really prefer to improve an existing Open Source project than start my own.
hnb
hnb is a curses based outlining tool, which is incredibly useful. Unfortunately, the project seems to have died in as much as there is no response to posted patches and the last releases are really quite buggy.
Again with the GUI issue, it would need a new frontend to be considered as a solution. It probably wouldn't be all that difficult to retrofit some of the ideas to it.
leo
leo is an outlining editor and apparently a usable text editor too. Being written in Python and using tk for the UI means I've not bothered to look any further, it's that simple.
newton
The newton project is the successor to notemeister, with a slightly larger feature set. Development has seemingly stopped. The GNOME applet concept is a nice idea, definitely needs to be completely optional though.
notecase
notecase is an interesting looking project, which seems to have a reasonable feature set and uses GTK+. It is mostly targeted at Windows unfortunately though, which becomes immediately evident when you look for a download link and find a zip file. The feeling continues when you're trying to fix the build so it compiles and have to stare through the ugliness of the DOS encoded files and desperately broken Makefiles.
Still it shows some promise, and I'd like to take another longer look at it to see if it could be a suitable base project. I guess it depends on a lot on how much work it would take to make it a usable and portable base.
Note
Given some further consideration it doesn't look like notecase would be a valuable base, it isn't remotely portable and much of it would require a complete rewrite to become so.
notemeister
The notemeister project seems to be dead, and has been replaced by newton. It looks like it has a relatively nice interface, one which I'd probably consider implementing as secondary "simple" view.
Unfortunately, it is written in Python which makes it inappropriate as either a base or possible solution.
TVO
TVO is a plugin for vim which provides some basic outlining capabilities, I've used it a lot in the past and generally I've been very happy with it.
Unfortunately, many of the features I really want to see aren't really possible to implement on top of TVO. There is also the GUI issue and I have given some thought to writing a GUI which just sits above everything else running vim commands, but it doesn't really seem like a good way to work.
vimoutliner
vimoutliner is another outlining plugin for vim, it works in pretty much the same way as TVO but definitely isn't as polished even if it is possibly more featureful.