about summary refs log tree commit diff stats
path: root/src/lua.c
Commit message (Collapse)AuthorAgeFilesLines
* 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
|
* dedup definitions in big-picture viewKartik K. Agaram2021-11-251-4/+40
| | | | We only want to show most recent version of each binding.
* new shortcut: return to big-picture viewKartik K. Agaram2021-11-251-9/+14
|
* teliva is now ASan-clean againKartik K. Agaram2021-11-251-0/+4
| | | | | | | | | At least in short runs. Encouraging that the problem was in a recent commit (5a63a5ca40 from yesterday when I introduced version control). Disabling Address Sanitizer again.
* renameKartik K. Agaram2021-11-241-9/+9
|
* monotonically accumulate versions of definitionsKartik K. Agaram2021-11-241-71/+137
| | | | | | | | | | | One old drawback now has a new look. Before, we loaded definitions in order, so global definitions had to exist before other global definitions that used them. See window and grid in life.tlv. Now we load definitions in reverse order, so initialization needs to change. Worse, if we update window, we need to edit grid just to fix the order. This implies that we can't yet optimize away bindings where there are no new changes.
* .Kartik K. Agaram2021-11-241-3/+3
|
* consistent file opsKartik K. Agaram2021-11-241-6/+6
| | | | Now we're down to 1 real warning and 1 false positive.
* styleKartik K. Agaram2021-11-241-3/+3
|