aboutsummaryrefslogtreecommitdiffhomepage
path: root/doc/DESIGN
blob: d33c28c8a4a70becb2fcbc4c31504d07bd3ec639 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Notes on how this bastard works
===============================

Overview:

The editor is based on Emacs: same sort of buffers, similar commands, etc.
It's written in Erlang and uses the S-Lang library for terminal control.

Essential facts:

- Text is stored as a tree of binaries
- Buffers are small servers and are destructively updated (.. for now?)
- Commands are executed serially, but buffers can be "loaned" to other
  processes to work on them asynchronously.

Hacking:

To see how commands are implemented, look at the edit_lib module, it contains
all the most basic commands. A rundown of the most important modules:

* edit:           where it all begins, and main editor loop.
* edit_lib:       basic command implementations
* edit_eval:      erlang shell mode
* cord:           text data structure
* edit_buf:       buffer server
* edit_globalmap: standard keymap definitions - look there to see what exists.
* edit_display:   screen redraw
* edit_extended:  "interactive" command runner (shows how to use minibuffer)
* edit_var:       emacs-style variables (optionally persistent)

Programming style:

I've gone with do-it-yourself servers and message sending in a lot of places.
I'd like to keep it that way, at least for now. It feels good to use
selective receives and whatnot :-)