about summary refs log tree commit diff stats
Commit message (Collapse)AuthorAgeFilesLines
...
* kilo bugfix: syntax highlight final word in lineKartik K. Agaram2021-11-291-1/+1
| | | | | Kilo likely never ran into this because it's only been tested on C, which uses semi-colons at the end of each statement.
* gotcha: silent string concatenationKartik K. Agaram2021-11-291-1/+1
|
* .Kartik K. Agaram2021-11-291-7/+7
|
* a couple more global curses bindingsKartik K. Agaram2021-11-291-0/+3
|
* fix regression in showing error messagesKartik K. Agaram2021-11-291-4/+4
|
* .Kartik K. Agaram2021-11-291-2/+0
|
* why not keep manual tests in the repo?Kartik K. Agaram2021-11-291-0/+15
|
* let people fix bad images from within TelivaKartik K. Agaram2021-11-292-12/+28
| | | | | | | | | 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.
* redo uncommentKartik K. Agaram2021-11-281-5/+6
| | | | It was printing a phantom null at end of line on screen.
* auto-indentKartik K. Agaram2021-11-281-1/+7
|
* tab key: always insert two spacesKartik K. Agaram2021-11-281-0/+5
|
* hide some 'advanced' hotkeys to support narrow windowsKartik K. Agaram2021-11-281-4/+0
|
* ctrl-/ to comment/uncomment lineKartik K. Agaram2021-11-282-0/+28
|
* ctrl-u/ctrl-k to make editing a bit more ergonomicKartik K. Agaram2021-11-282-1/+18
|
* special indent settings for kiloKartik K. Agaram2021-11-281-0/+3
|
* indentKartik K. Agaram2021-11-281-40/+40
|
* mac backspace attempt 3Kartik K. Agaram2021-11-281-1/+1
|
* fix half-assed mac os backspace commitKartik K. Agaram2021-11-282-4/+4
|
* 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-282-4/+10
| | | | | | 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-282-8/+2
| | | | | 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-282-3/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* yet another fucking makefile bugKartik K. Agaram2021-11-281-1/+1
| | | | | | | | | | | | | | Making changes to lcurses directory was causing it to be compiled, but not causing teliva to be relinked. Now I'm: - unconditionally running `make` on subdirectories - conditionally linking their outputs Seems reasonable when I put it like that. Hopefully this is working now. I used to know `make` down cold a decade ago, but it's evaporated from my brain.
* clear editor state across user-visible restartsKartik K. Agaram2021-11-281-1/+3
| | | | | | | | | | | | | | | | Teliva's constantly restarting without the user being aware of it. So far I figured saving history across the user actually exiting and restarting Teliva was just a happy "feature". However, it looks like that's actually more complex to implement. Keeping editor state across user-visible restarts results in these problems: - opening the editor after restart has the cursor position messed up, no matter what definition you open. - more seriously, opening the editor after restart can't seem to get to the big-picture view anymore. Rather than try to debug what's going on, I'm going to just cordon off that part of the state space for now.
* use header everywhereKartik K. Agaram2021-11-281-3/+3
|
* unused variableKartik K. Agaram2021-11-281-1/+0
|
* standardize filenames that teliva strews on diskKartik K. Agaram2021-11-282-26/+26
| | | | | 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-282-1/+62
|
* make look_up_definition more composableKartik K. Agaram2021-11-281-7/+12
|
* save a snapshot of editor state across restartsKartik K. Agaram2021-11-282-1/+14
| | | | | | | | | | | | | | | | 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
|
* fix backspace on MacKartik K. Agaram2021-11-282-1/+6
| | | | | I'm deliberately restricting this incompatibility to the editor environment for now.
* editor hotkeys: sol/eolKartik K. Agaram2021-11-282-4/+20
| | | | | I'm growing attached to ^e, so mildly breaking with convention there. Perhaps this is a bad idea.
* a starting point for new appsKartik K. Agaram2021-11-271-0/+72
|
* tour: add some imagesKartik K. Agaram2021-11-273-4/+9
|
* more friendlyKartik K. Agaram2021-11-271-0/+7
|
* don't distract the tour with things we don't haveKartik K. Agaram2021-11-271-7/+4
|
* .Kartik K. Agaram2021-11-271-1/+1
|
* .Kartik K. Agaram2021-11-271-6/+10
|
* tour: split the first task into 3Kartik K. Agaram2021-11-271-12/+65
|
* tour: better links for task 1Kartik K. Agaram2021-11-271-2/+3
|
* pass some CFLAGS at least to libcursesKartik K. Agaram2021-11-271-3/+3
| | | | | My Makefiles are an utter mess. Unclear how to reconcile staying close to upstream with being clean in isolation.