Gnome Outliner: A Proposed Application

Gnome Outliner Interface Mockup

Since I’m now using Gnome as my primary desktop environment on Linux, I find myself wishing I had a simple outlining application along the lines of OmniOutliner. However, there doesn’t appear to be such a thing for Gnome (despite some old/abandoned projects).

Unfortunately, my limited skill set does not include the skill necessary to create such an application. So, instead of coding, I’ve started a draft of a specification for an application-to-be: Gnome Outliner. I’ve written this in hopes of generating developer interest to create such an application.

I’ve written up the idea and done a basic mock-up of the interface. Please let me know if you have any interest in the project.

UPDATE: There is now a project for this on SourceForge: Gnome Outliner.


32 thoughts on “Gnome Outliner: A Proposed Application

  1. Every since I bought my Powerbook, I’ve wanted a linux equivalent or superior of omni outliner. Outliner is nice, but a little too basic for some of the things I want.

  2. dusty, what kind of stuff did you have in mind? I’ve kept the spec intentionally simple, but were the basics to be implemented, it would grow more robust (I’ve added a note to the spec along these lines).

  3. This is something I’ve been looking for for a looong time.
    An outliner that already exists for Gnome is figment
    which was primarily developed for PDAs but works just fine on the desktop. However for day-to-day use I found it not good enough – you cannot drag-n-drop nodes, for example. But it should be very easy to improve figment to get the extra functionality… and it provides a good code base. But it hasn’t been updated for a while.

    After a lot of research on outliners for linux, I settled for JOE, the Java Outline Editor ( which is really easy to use and has sensible keyboard shortcuts (tab/shift-tab for demoting/promoting nodes, for example…).

  4. Featuritus Alert:

    On my old OSX machine I had OmniOutliner throwing an XML-RPC command against my blog software’s XML-RPC interface, and rendering my outline as a post rendered with a template. I lost the XML-RPC code when I sold the machine (duh), but still have the rendering code here somewhere.

    The point is: It is an incredible way to blog, and I miss it.

  5. Vincent, thanks – Figment is impressive. It’s missing some key basic stuff (multiple lines per node, Enter to create a new node, tab/keyboard indenting, etc.), but you’re right, it’s a great start.

    I’ve added a note about it to the draft spec.

  6. I second your remarks on figment : with only very small improvements, it could turn into a very good outliner.

    About the OPML/XML thing, I’m not sure why it’s needed : JOE (the java outliner I mentioned above) stores outlines in plain text, using tabs to encode the various levels of indentation. Of course if you want fancier stuff (like text formatting and so forth) more elaborate formats are required, but for simple outlines text is enough IMHO.

    If I have some spare time I’ll take a look at figment and try to implement these “small improvements”…

  7. Vincent, thanks again. The updated Figment looks promising, if for no other reason than that it was updated at all.

    As for text files, yeah – that would be sufficient, though Figment already has the capability to handle OPML.

  8. Have you considered sending the request to the gnome-love mailing list. It seems like a simple project that would be good for somebody who wants to get into gnome hacking.

  9. This looks like a cool application: I hadn’t realised someone had written a program to do what I already do with tabs in whatever text editor I happen to be using. If I still had a Linux desktop I’d be interested in taking part, but I’ve recently switched to Mac OSX. If anyone was up for making a cross platform one with interfaces for Mac OSX, GNOME, etc in possibly Python or Java or something, I’d be quite interested. I’m going to check out the Java one just now.

  10. The most difficult part of creating this app in GTK is going to be the multiline editable cells in the tree. The GtkCellRendererText can be set as editable, but only allows the editing of one line.

    A custom cell renderer can be created to display multiple lines of text, but the tough part is the multiline editor. I’ve searched unsuccessfully for such a custom cell renderer.

  11. I think the best way to implement this will be to have a custom text view that inherits from the GtkTextView and draws the disclosure triangles based on a custom GtkTextTag that specifys how the nodes etc… are layed out. For example, the custom text tag will be “new-node” and would have a property saying whether this is at the same level as the parent, or whether it is more indented or outdented. The custom GtkTextView would ovveride the expose event and after the TextView has finished drawing the text it will draw the arrows based on those tags (they could be a pixmap inserted as part of the text, but I don’t know if that will work, since you need to capture the on-click event). Then depending on whetehre the disclosure triangle is set or unset, the invisible and invisible-set properties will be set.

  12. Hi Steven,

    I think an outliner for Gnome2 is a good idea. But the features you have described are to simple to do something useful. ATPM[1] (About this particular Macintosh) has established a series about outliners on MacOS X. They’ve build a feature list and you and the users can pick out the features they really need.


    Do you know which programming language you want to use?

  13. IMO, the best current outliner for *ix platforms is tkoutline (see URL), which includes the above functionality. the major additional function that i think you need is the ability to hide/show points via keystroke.

    You want to be able to toggle the current point’s hide/show level, and also recursively toggle all of the children’s hide/show levels, without leaving the keyboard.

  14. One of the things off the top of my head is a cloning. Also I would like a good, themeable html export. I’d like the html (not opml) export to auto-recognize hyperlinks and anchor them.

    While I have more, I think it’s important to find a medium between omni outliner and some of the more featureful (read: bloated) outliners.

    My basic goal with an outliner is to take notes with speed (oo is excellent for this), restructure those notes, edit the notes and export.

  15. Ok I’ve had a go at implementing the spec using python and glade (libglade). Its only a first stab so be gentle. I’ve uploaded a screenshot and a .tgz file with what I have so far to the URL above. Its far from functional (1 hour lunch time coding session) and i’ll continue to work on it tonight.

    It worked ok at work on my windows 2000 machine and it appears to run ok on my home machine running fedora core 2. A bit of mac testing would be interesting.

    Comments are very much appreciated! You can private email me if you wish at bitmat at bitmat dot co dot uk.

  16. Matt, that’s looking great. Glad to see it’s in python too – not that I’ll be much help, but it seems to be a good approachable language for apps like this.

    I think we might want to get a mailing list / CVS set up. I’ll see about Sourceforge.

  17. I’ve applied for a new Sourceforge project. It will take 2 business days to get approval. I’ll post here.

  18. I agree CVS and a mailing list would be good. Looking forward to the sourceforge project 🙂

    Your right Python is a great language for this sort of app. Good for porting to different platforms.

    I’ve managed to fix a few things up already. The next step is to work out how items are going to be edited. Like Nathan said above multiline editing of nodes will be difficult. I’ll try and keep is very simple for now just to get something working.

    I’ll keep the files on my site up to date with the latest version in case anyones interested. That is until we get the CVS going…

  19. I have started knocking together a java-gnome version of this. I have put together the gui infrastructure and am thinking a bit more about format – opml seems kind of icky (see ). Are there any existing robust/well defined xml formats around that could be used? Ultimately once I have a usable app I intend to compile to native using GCJ rather than distribute as a trad java app.

    As another comparison to the traditional outliners take a look at “progect manager” ( ): I have been using it on my Palm for a while now. It combines outlining with minimalistic but extremely useful timeline/todo capabilities.

  20. Looks cool. BTW I’m also writing a C (gnome/libglade/libxml) outliner app, It can load and save thru GnomeVFS and can create/remove rows. It can’t move and outline it… Maybe we should unite?

  21. I’d suggest switching the Enter key and Shift+Enter key functionality, since just approving/confirming a node is more special than just inserting a linebreak.

    I propose Enter for newLine and Ctrl+Enter to Confirm a node. It works in Photoshop and Illustrator for multi-line text areas. 🙂 Also Enter while a node is focussed will put it in edit-mode, like F2 on a file or folder in the Windows Explorer.

    I’d also ensure that the arrow keys can be used to navigate the tree, Windows-Explorer style:
    left || right : Close Parent/Move Up || Open Parent/Move to firstChild
    up || down : up a node through the visible list || down a node

    Perhaps implement shift-arrow key combinations to select multiple nodes, Ctrl+C to copy, Ctrl+V to paste as nextSibling of the currently selected node, Ctrl+D to clone a node as nextSibling…

    I’m getting carried away.
    Should put this in a small document?

  22. Sweet! A couple days ago I tried to get gnome-think to compile with Gtk2 — couldn’t get it to work. (That’s probably one of the abandoned ones you were referring to.) This is exactly what I’m looking for!

  23. I’d recommend using a primary format based on something that is properly standardised, such as XOXO (spec’d as a XHTML profile). OPML makes it look like there’s file compatibility between different systems, but the open-ended nature of it means it rarely works. Whereas something which had a DTD/schema could be guaranteed to work.

Comments are closed.