Commit Graph

897 Commits

Author SHA1 Message Date
bb4d1d318e add a couple of more tests asserting searchList state after deletion 2026-02-08 10:13:30 +00:00
6c1e5777d1 begin adding tests for how searchList should be after a deletion 2026-02-08 09:54:39 +00:00
3b21025dbc expand plan for addressing to-do list in todo.md a bit 2026-02-08 03:21:34 +00:00
33866533a3 address remainning todo-notes, which had to do with updating the searchList when we insert into a buffer. 2026-02-08 03:17:19 +00:00
c28ae4d8cd code function that can insert into both searchList and buffer 2026-02-08 02:32:32 +00:00
1fa2a44a2f progress addressing to-do notes in fcore/normal-mode/make-normal-delete.sml, although some notes are still left. The notes that have been addressed involved cases where we create a new buffer containing just a newline, because all of the text in the buffer has been deleted otherwise. In this case, we call 'SearchList.build' and build the search-list from scratch, which is fast because only one character needs to be checked. 2026-02-08 02:16:48 +00:00
0c40cad77a done replacing direct calls to 'LineGap.delete' with calls to 'SearchList.deleteBufferAndSearchList', so that the search list is also deleted from whenever the buffer is deleted from 2026-02-07 22:27:44 +00:00
9b520d71f5 pull in new brolib-sml changes, which fixes a minor bug in the 'LineGap.lineNumberToIdx' function. That function tried to index into a vector immediately when the metadata indicated the current node is at the correct line number, without checking if the relevant line break is at the current node. We perform this check first, and continue going leftwards until we find the line break if the relevant line break is not at the current node. 2026-02-07 03:10:23 +00:00
340e52019f handle edge case when deleting from buffer: if the previous match is extended into a new match, then replace the old match in the search list with the extended match 2026-02-07 02:25:45 +00:00
68be55342d fix failing test for 'PersistentVector.extendExistingMatch'. The test itself was wrong, as it forgets that lists are 0-indexed. 2026-02-07 01:40:43 +00:00
7fa573334f add failing test for PersistentVector.extendExistingMatch. (Need to fix.) 2026-02-07 00:33:29 +00:00
0ea0d44da3 add function to extend an existing match, and add tests for it 2026-02-07 00:29:58 +00:00
b02b2f53da when deleting from buffer and search list both, don't try to find any matches if the DFA is empty (has a length of 0), because that means there is no search to find a match for 2026-02-06 21:25:44 +00:00
2292c30cd3 bookmark checkpoint in refactoring code to call funhction which deletes from both (searchList and buffer), instead of just deleting buffer 2026-02-06 20:43:47 +00:00
02086e0922 code outline of a function to extend an existing match in search-list.sml. 2026-02-06 20:30:07 +00:00
11a632556c progress refactoring delete functions in fcore/normal-mode/make-normal-delete.sml so that searchList is incrementally rebuilt when buffer is deleted from 2026-02-06 09:41:39 +00:00
9c66c3f5e8 progress in changing functions to use 'PersistentVector.delete' so that search list is incremental and not rebuilt from scratch after each deletion 2026-02-06 08:57:18 +00:00
df7669b065 progress in changing functions to use 'PersistentVector.delete' so that search list is incremental and not rebuilt from scratch after each deletion 2026-02-06 08:52:11 +00:00
c856f49a6c amend merge function from persistent-vector.sml. If we reach the same depth and find that there is no space, then climb (using the stack) up by one depth, raise the depth of the smaller node by 1, and merge there. This helps ensure balance. Before, we broke a LEAF into two LEAF objects if we wanted to merge and found that there was no room, but that led to balancing problems, which are addressed by this change. 2026-02-05 23:54:31 +00:00
0f907769e3 add a function to persistent-vector.sml to check if all leaves are at the same depth (which is how we want to balance) 2026-02-05 20:39:01 +00:00
5c34a4c6ac done with tests for 'yw' motion 2026-02-04 10:19:40 +00:00
1f2af6aacd amend implementation of 'yw' so that we do not yank newline following last word in line, if we are trying to yank last word 2026-02-04 10:12:04 +00:00
83c660818e begin adding tests for 'yw' yank motion 2026-02-04 09:26:57 +00:00
2a8785a373 add tests for 'yy' yank motion 2026-02-01 09:48:10 +00:00
2ee963a3d8 done implementing tests for yank. Also simplify 'NormalDelete.deleteLineDown' and 'NormalYank.yankLineDown' functions by removing an if-branch which can never trigger. (The code path can only be executed in the event that 'endLineIdx' is on a newline, and there is an if-expression in that branch checking whether 'endLineIdx' is on a newline, which is redundant.) 2026-01-31 22:20:52 +00:00
c0d4155808 adjust 'NormalYank.yankLineDown' function to pass failing test 2026-01-31 21:53:32 +00:00
ef9da12a0b begin adding tests for 'yj' motion, based on tests for 'dj' motion 2026-01-31 21:18:21 +00:00
000cf4ab62 implement 'yj' motion. (Next: add tests for it.) 2026-01-31 12:05:16 +00:00
900343203a enable vsync in rgfw shell, to majorly decrease cpu usage 2026-01-23 23:20:40 +00:00
fdc289e237 change use of 'Bool' type to 'bool' in rgfw-exports.c 2026-01-23 21:19:10 +00:00
00df20042a update gitignore to ignore shf-glfw and shf-rgfw test files 2026-01-23 21:10:01 +00:00
faa15866f8 seems like 'NormalYankDelete' functions need to yank one character more than the deletion range, so implement that, and make note to add tests for that module 2026-01-23 21:08:12 +00:00
8b46f1edfc make sure that characters sent from RGFW to mlton char callback are shifted if shift is held 2026-01-23 21:05:12 +00:00
238e6f8907 mostly done implementing callbacks for rgfw 2026-01-23 20:53:37 +00:00
2b383ce756 change if statement in keyCallback (on C side) to a switch statement, so adding more cases becomes easier 2026-01-23 15:09:43 +00:00
0b91362fd1 fix compile error for rgfw shell. The compile error was on the C side, and was caused by a dependency (<GL/glx.h>) having the typedef 'Bool', and the mlton-generated export headers also having a typedef 'Bool' with the same name. The solution for this project is just to delete the typedef from the mlton-generated headers. 2026-01-23 14:56:55 +00:00
8d68bcbd13 remove duplicate '<stdboo.h>' include in ffi/glfw-export.c, and disambiguate mlton-generated export file for GLFW shell further (by prepending 'mlton-' to the file) 2026-01-23 13:37:13 +00:00
a8f69bec06 disambiguate exports (rename 'export.h' to 'glfw-export.h' because now we are beginning to add RGFW as a back-end with its own separate exports) 2026-01-23 13:10:34 +00:00
e18032dcc8 checkpoint (seem to have encountered an FFI bug?) 2026-01-23 12:52:47 +00:00
609c30bef5 mark 'Rgfw.swapBuffers' as reentrant, because calling this function will likely trigger the registered key callbacks 2026-01-23 11:16:14 +00:00
a89bb8fa5f consume events in RGFW loop. (Next: react to input events.) 2026-01-23 11:13:33 +00:00
b4573441fb progrfess scaffolding rgfw (next: consume events and add callbacks for events) 2026-01-23 10:55:43 +00:00
df20641af1 refactor functional core into its own .mlb file that can be shared across different shells 2026-01-23 10:08:57 +00:00
13d4989792 additional scaffolding for making RGFW main loop 2026-01-23 10:04:44 +00:00
e7ab53310e ffi progress 2026-01-23 09:47:27 +00:00
dee5e72f39 add rule to Makefile to run RGFW build more quickly 2026-01-22 21:38:15 +00:00
d0f9220cfe progress binding RGFW and making RGFW shell 2026-01-22 21:02:22 +00:00
e0c09c5480 begin adding bindings to rgfw window library 2026-01-22 02:00:57 +00:00
5eb94f5ccb remove shell/shell.sml and merge its contents into shell/glfw-loop.sml, because shell.sml used to set up and initialise GLFW before calling the main loop. We may want to add additional back-ends later instead, so it's better to keep names specific to the windowing library or platform. 2026-01-22 00:57:21 +00:00
9ef8231b8b separate OpenGL drawing from GLFW loop in imperative shell, so that other windowing libraries can call the same OpenGL functions. 2026-01-22 00:04:22 +00:00