3 run a program, edit, make an edit, run | edit takes effect
4 run a program with error | big picture
5 run a program, edit, make an error, run
6 run a program, edit, ^g to a different definition, make an edit, ^e to run again
7 run a program, edit, ^g to a non-existent definition
8 run a program, edit, ^g to a different definition, ^g to a different definition, ^e to run again
9 start -> big picture -> edit -> move cursor -> run -> edit | cursor preserved
10 start -> big picture -> edit A -> move cursor -> big picture -> edit B | cursor initialized
11 start -> big picture -> edit -> move cursor -> run -> exit -> start | big picture (optional)
12 start -> big picture -> edit A -> move cursor -> run -> exit -> start -> ... -> edit B | cursor initialized
13 start -> big picture -> edit A -> move cursor -> run -> exit -> start -> ... -> edit B | big picture
14 syntax highlighting for line comments
15 syntax highlighting for multiline comments
16 start -> big picture -> recent changes -> add note -> save | note visible
17 start -> big picture -> arrow keys* | always exactly one definition highlighted
19 It's very important not to leak space on the Lua stack, particularly
20 proportionate to keypresses. That's a recipe for segfaults.
22 This implies that bouncing around between big picture, editor, recent changes,
23 running app.. shouldn't grow the call stack either.
26 program draws over menu -> getch -> Teliva menu is still visible
28 app tries to read/write sensitive teliva files (teliva_edit_buffer, etc.) -> never allowed
29 TODO should we protect .c sources?
31 TODO protect against DoS attack filling up disk
34 listing files in a directory is not worth sandboxing
35 since reading their contents is sandboxed
36 and since UNIX permissions protect system directories
38 rmdir() is not worth sandboxing, since it only succeeds on empty directories
39 no need to sandbox unlink() since it's not exposed