about summary refs log tree commit diff stats
path: root/src/lua.c
Commit message (Collapse)AuthorAgeFilesLines
...
* fix regression in showing error messagesKartik K. Agaram2021-11-291-4/+4
|
* let people fix bad images from within TelivaKartik K. Agaram2021-11-291-10/+26
| | | | | | | | | Short of syntax errors that keep us from parsing the teliva_program table, we should now be able to recover gracefully from everything. Yesterday I started to try to add this to load_definitions before realizing most errors are only noticed while running `main`. But I didn't think of recovering from the docall of `main` until this morning.
* sacrificing another LoC to ward off crashesKartik K. Agaram2021-11-281-0/+1
| | | | | | It makes me very nervous now that there's save_editor_state within editor event loop, when the editor could be editing notes. Things are slightly better than this morning, but this prototype still suxxors.
* editing notes sucks a little lessKartik K. Agaram2021-11-281-2/+2
| | | | | | I think I've gotten rid of all the segfaults, but it's still pretty messed up: if you hit ctrl-g and go edit some definition, it doesn't get saved. You're just storing the edit in the note.
* fix the bug described in commit cec57992b7Kartik K. Agaram2021-11-281-4/+12
|
* rename a fn and reorganize its responsibilitiesKartik K. Agaram2021-11-281-3/+3
|
* split a lumpy abstraction into two cleaner onesKartik K. Agaram2021-11-281-13/+19
| | | | | | | | | | | | | | I'm mindful of the way abstractions can create duplicate effort: https://flak.tedunangst.com/post/browser-ktrace-browsing == Kartik's SAD theorem As programs grow complex, you will be repeatedly forced to either: - maintain some State, - perform some computations Again, - or Duplicate some code. Here a small amount of duplication seems like the best alternative. Particularly since no syscalls are involved.
* purge abstraction hiding teliva_editor_bufferKartik K. Agaram2021-11-281-10/+5
|
* inline another functionKartik K. Agaram2021-11-281-6/+0
| | | | | I'm going to give up on hiding teliva_editor_buffer from kilo. It was taking too much knowledge of extern function prototypes on both sides.
* take one responsibility away from edit_imageKartik K. Agaram2021-11-281-4/+4
| | | | Also rename it appropriately.
* .Kartik K. Agaram2021-11-281-1/+1
|
* inline an unnecessary functionKartik K. Agaram2021-11-281-7/+2
|
* start streamlining architectureKartik K. Agaram2021-11-281-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | All the spaghetti is hiding another issue: when we load editor state, that code path currently never leads to importing the edited buffer back into the image. Yet another attempt at drawing the state diagram: Wgetch -> switch_to_editor -> select_view select_view -> load_editor_state | big_picture_view load_editor_state -> edit_from -> editorProcessKeypress big_picture_view -> edit_image -> edit_buffer -> resumeEdit* -> load_editor_buffer -> editorProcessKeypress big_picture_view -> recent_changes recent_changes -> big_picture_view | edit_buffer The problem is that load_editor_state doesn't eventually call load_editor_buffer the way its sibling big_picture_view does. For starters, it's confusing that switch_to_editor calls big_picture_view which calls other editor functions. What is 'editor' here, anyway? Let's rename switch_to_editor to developer_mode. So the app starts out in user mode, and might eventually transition to developer mode. Developer mode is a black hole; to leave it and return to user mode we restart the entire app. The architecture in my mind is now: - Teliva consists of user mode and developer mode - Developer mode consists of multiple views - Each view, when it needs to edit something: - initializes kilo - loads a buffer into it - resumes editing the buffer as necessary
* fix going to big picture after saving editor stateKartik K. Agaram2021-11-281-7/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | My code is already at spaghetti levels. Some coping mechanisms. === The big problem with the Teliva approach compared to my previous Mu project: no tests. At this point I should document the growing list of manual tests I've been maintaining: run a program run a program, edit run a program, edit, make an edit, run | edit takes effect run a program with error run a program, edit, make an error, run run a program, edit, ^g to a different definition, make an edit, ^e to run again run a program, edit, ^g to a non-existent definition run a program, edit, ^g to a different definition, ^g to a different definition, ^e to run again start -> big picture -> edit -> move cursor -> run -> edit | cursor preserved start -> big picture -> edit A -> move cursor -> big picture -> edit B | cursor initialized start -> big picture -> edit A -> move cursor -> run -> exit -> start -> big picture -> edit B | cursor initialized start -> big picture -> edit A -> move cursor -> run -> exit -> start -> big picture -> edit B -> big picture (*) syntax highlighting for line comments syntax highlighting for multiline comments (*) - fixed in this commit === Coarse-grained state diagram (ignoring recent_changes_view): app -> big picture on ^e big picture -> editor when selecting a definition editor -> app on e editor -> big picture on ^b Fine-grained sequence diagram: main -> pmain -> ... -> Wgetch -> switch_to_editor -> select_view select_view -> load_editor_state, falling through to big_picture_view if needed load_editor_state -> edit_from -> editorProcessKeypress The consequence I hadn't fully internalized was the return path: editorProcessKeypress -> edit_from -> big_picture_view Which implies that load_editor_state fails in two ways: - when the state doesn't exist or is not applicable or is corrupted - when editing from the state explicitly requested the big picture view Switching the return value semantics for load_editor_state now supports both ways.
* unused variableKartik K. Agaram2021-11-281-1/+0
|
* standardize filenames that teliva strews on diskKartik K. Agaram2021-11-281-24/+24
| | | | | We still need a proper story for file system side effects. But it's not time yet for sandboxing considerations. Soon, but not yet.
* restore editor state from snapshotKartik K. Agaram2021-11-281-1/+44
|
* make look_up_definition more composableKartik K. Agaram2021-11-281-7/+12
|
* save a snapshot of editor state across restartsKartik K. Agaram2021-11-281-1/+12
| | | | | | | | | | | | | | | | We're not using this yet. I agonized over this decision for several weeks. Is Teliva's need to restart with execve an utter hack or a good thing? I'm leaning towards the latter. Constantly exercising the initial flow makes Teliva more crash-only. We can build Steve Yegge's idea of immortality (http://steve-yegge.blogspot.com/2007/01/pinocchio-problem.html) out of crash-only primitives, just by making reboots instantaneous. But focusing directly on immortality tends to compromise crash-only by exercising it more rarely. One other issue this brings up: loading these Lua tables from disk is a vector for arbitrary code execution. I need to fix these when I get to sandboxing.
* more salient concept of 'views'Kartik K. Agaram2021-11-281-4/+4
|
* select C99 standardKartik K. Agaram2021-11-271-4/+2
|
* bugfix: emit legal Lua representationKartik K. Agaram2021-11-261-1/+1
|
* support space/backspace in recent changes viewKartik K. Agaram2021-11-261-6/+8
|
* standardize indentKartik K. Agaram2021-11-261-4/+4
|
* colorize comments in recent changesKartik K. Agaram2021-11-261-0/+4
|
* support notes on editsKartik K. Agaram2021-11-261-2/+38
| | | | | Unlike both conventional version control and wiki history, I'm planning to always allow modifying commit messages.
* periodic cleanup of warningsKartik K. Agaram2021-11-261-3/+3
|
* .Kartik K. Agaram2021-11-261-4/+3
|
* .Kartik K. Agaram2021-11-261-1/+1
|
* don't mislead immediately after undoKartik K. Agaram2021-11-261-1/+7
|
* .Kartik K. Agaram2021-11-261-1/+0
|
* more obvious serialization of undo eventsKartik K. Agaram2021-11-261-0/+4
|
* render undo eventsKartik K. Agaram2021-11-261-0/+8
|
* start processing undo eventsKartik K. Agaram2021-11-261-0/+14
|
* start recording undo events in timelineKartik K. Agaram2021-11-261-6/+30
| | | | We're not using or rendering them yet.
* save timestamp on change; show in recent changesKartik K. Agaram2021-11-261-2/+20
|
* .Kartik K. Agaram2021-11-261-0/+1
|
* clean up traces of an old experimentKartik K. Agaram2021-11-261-2/+2
|
* add support for metadata in Teliva programsKartik K. Agaram2021-11-261-12/+26
| | | | They don't have any semantics yet. We just ignore them for now.
* undo to a specific pointKartik K. Agaram2021-11-261-4/+12
| | | | Still highly experimental. I'm not persisting state yet.
* standardize screen headingsKartik K. Agaram2021-11-261-1/+5
|
* start of 'recent changes' screenKartik K. Agaram2021-11-261-0/+102
| | | | | | | | | I'm still unclear on precisely what the experience should be here. We probably don't need all of a version control system. The goal is just to be able to answer the question, "what did I change recently that caused things to break?" For now let's just start with letting people see past versions.
* eliminate tail call using gotoKartik K. Agaram2021-11-261-1/+2
|
* clean up terminal in a specific situationKartik K. Agaram2021-11-261-7/+6
| | | | | | | | | The problem: if ever I hit ctrl-e to go to the big picture view and then hit Esc to go back to running the app, my terminal was messed up after exiting the app. Why did I even have this gunk? Perhaps it dates from the time when kilo was emitting raw escape sequences rather than using ncurses.
* dedup an enumKartik K. Agaram2021-11-261-5/+1
|
* .Kartik K. Agaram2021-11-261-2/+2
|
* .Kartik K. Agaram2021-11-261-2/+2
|
* extract a functionKartik K. Agaram2021-11-251-10/+18
|
* more stack hygieneKartik K. Agaram2021-11-251-0/+2
|
* .Kartik K. Agaram2021-11-251-7/+7
|