← Back to context

Comment by blippage

13 hours ago

Visidata is a fast popular data tool in python https://www.visidata.org/ if you just want data entry.

If I may be permitted a small plug ...

Oleo is a GNU spreadsheet going back absolutely donkey years. I cloned the repo here: https://github.com/blippy/oleo and made minimalist fixes to get the thing to compile.

I also based my own terminal-based spreadsheet based off of it call neoleo: https://github.com/blippy/neoleo

I wouldn't say that my project is particularly good, but it does have a number of features that I find useful. The next release will include Tcl bindings, so you can customise some of the workings of the app. There's also a module available where you can go to town programmatically.

It opens up a world of possibilities, including stuff like pivot tables.

  package require oleo
  load-oleo mysheet.oleo
  set ws [toMat]
  set subset [subRows $ws [mand [mstreq 2 foo] [mstreq 3 bar]]

It has what I think is a nice little query language, too. In the last line I select the rows from the spreadsheet sheet column 2 is equal to foo and column 3 is equal to bar.

I'm kinda dog-fooding it at the moment to put in place features that I need. It doesn't have the full equivalence of SQL-equivalent though.

> Oleo is a GNU spreadsheet going back absolutely donkey years.

Third line of README:

> As of this writing (February 1999)

Whoah, you weren't kidding!

  • Yes, I'm partial to a bit of retro. It does back to around 1991, IIRC. I don't think it had a curses interface in those days.

    And check this: version 1.2.2 is available on Aminet, for the Amiga. How's that for a blast from the past?

Thanks for showing this. What would you say the differences between the classic version of oleo and your neoleo version?

  • Oleo is C, circa 50k of C code, Neo(-leo) is around 5k of C++ code. A 10th of the size, but not necessarily any less powerful. Oleo has some memory leaks in places, whereas Neo has no (known) leaks.

    Oleo uses lex and yacc, whereas Neo has a hand-parser.

    Oleo is in the style of emacs bindings, whereas Neo is more vim-like, but without the modality.

    I think the Neo code is better-structured and more readable (but I would say that, wouldn't I? - although it is far from perfect). C++ generally makes code more readable and obvious, without all that pointer arithmetic.

    The internals of Oleo are more complicated. It uses byte-code for cells, for example. Neo stores a parse tree for a cell. So you can see that a lot of programming effort is saved right there.

    In terms of speed, I suspect that the original Oleo is faster, although it's difficult to benchmark.

    Neo is also heading towards being a library that you can compile in with other C++ code. Plus there's an interface to Tcl, which Oleo never had. So you get a lot of extensibility there which Oleo doesn't have.

    I also think Neo is more generally accessible. It's got something in the way of a menu (still early stages), which helps. Neo is just generally less fiddly with editing cells, IMO. The mouse works, too.

    Oleo does have an interface using Motif. Very early-90s. There's even an interface to GTk, although I don't think that works properly. I decided to abandon all that and just stick to an ncurses interface. After all, if you want a fancy interface, there are proper options these days like LibreCalc, Caliigra and Gnumeric.

    • To add to the cool things you can do with Neoleo, I wrote a little TCL extension that loads current processes into the spreadsheet. I added custom bindings so that you could search for processes, go to its parent, and kill processes.

      I'm also half-way to adding a little calendar extension, too.