
SES: Simple Emacs Spreadsheet - yitchelle
https://www.gnu.org/software/emacs/manual/html_node/ses/index.html#Top
======
lokedhs
I used SES when adding a matrix editor to gnu-apl-mode. When editing a matrix,
it opens it as a SES document and when closing it it automatically updates the
underlying variable.

You can see it in use here:
[https://www.youtube.com/watch?v=yP4A5CKITnM](https://www.youtube.com/watch?v=yP4A5CKITnM)

------
dima55
These days one can use org-mode tables for quite a bit of spreadsheet stuff.

~~~
toothbrush
It might just be me, but i've found manipulating tables and formulae in Org to
be nothing but pain. I probably don't understand enough how they work, though
(i love and daily use many other Org features though). SES looks pretty fine
to me, at first glance!

~~~
josteink
If you use the edit-formula mode (which you should, C-c ') you should have
real-time highlighting of the affected cells of any expression you write.

I agree it's not so plain and cut like Excel, but it's not terrible either.

You can probably find more useful things (like turning coordinate grid on/off)
in the Emacs manual too:
[https://www.gnu.org/software/emacs/manual/html_node/org/Edit...](https://www.gnu.org/software/emacs/manual/html_node/org/Editing-
and-debugging-formulas.html)

~~~
josteink
Just for fun, I tried using ses-mode inside org-babel.

It didn't work for a new empty code-block, but if I pasted an existing ses-
mode file into it, it did actually work.

So you can have your org-mode cake and eat it too with ses :)

------
julienchastang
This looks interesting, but what I would like to see is good integration with
org, org tables, and org babel.

------
clessg
Cool! Is there anything roughly equivalent for Vim? The closest I could find
is vim-table-mode: [https://github.com/dhruvasagar/vim-table-
mode](https://github.com/dhruvasagar/vim-table-mode).

~~~
catern
The closest approximation is probably gritting your teeth, installing evil-
mode, and using Emacs.

------
ghostly_s
I found myself searching for an easy to use command line spreadsheet recently
after discovering none of the GUI options have a sane dark color scheme
ability. This is not what I'm looking for (as I'm not an emacs person, and I
think I'd prefer something more pico-esque for the kind of simple personal
finance/BOM documents I work with), but I was surprised to find this is
apparently a niche that has been abandoned since the 80's. Anyone know of
something I overlooked?

~~~
sprash
Do you mean something like "sc"?

~~~
skrause
Or its more active fork scim:
[https://github.com/andmarti1424/scim](https://github.com/andmarti1424/scim)

~~~
watchdogtimer
Thank you! I have been using sc for years, but really, REALLY wished it had
the option to undo. Glad to see it's been forked and that feature was added.

------
mattbasta
"Immune to viruses in spreadsheet files."

I find this claim dubious.

~~~
wglb
Because?

~~~
technomancy
Elsewhere in the manual it seems to imply that formulas can include arbitrary
Emacs Lisp functions, which would make it quite easy to implement a virus as
there appears to be no sandboxing. What it probably means is that viruses
written for other spreadsheet implementations won't work on it.

Edit: never mind; I read further and it does do some sandboxing based on the
same whitelisting principles as directory-local variable settings. Very
clever.

~~~
bastawhiz
Even still, pure interpreters are not immune to vulnerabilities. One buffer
overflow or bad array lookup and you're hosed.

~~~
wglb
I must admit that I haven't heard of buffer overflows in emacs lisp.

~~~
hollerith
Right. When all of the language's data structures are garbage collected and
the language has no pointer types, buffer overflows become much rarer.

There are a few array-lookup operations like AREF, but they do bounds checking
(at run time, when the check is easier to get right).

------
mindcrime
That's actually really freaking cool. I was hoping that the native file format
would be just a simple csv/tsv or something, but no such luck. But there _is_
an "export as tab separated" function.

