Commit Graph

85 Commits

Author SHA1 Message Date
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
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
000cf4ab62 implement 'yj' motion. (Next: add tests for it.) 2026-01-31 12:05:16 +00:00
66f1fb0b5e implement 'yk' motion (next: add tests for it) 2026-01-13 23:54:48 +00:00
e37e04a2a2 rename 'NormalDelete.deleteLineBack' function to 'NormalDelete.deleteLineUp' which is clearer ('k' in 'dk' motion means move cursor up one line) 2026-01-13 23:40:29 +00:00
407f78ce7a fix bug in 'NormalYank.yankRight' function. Instead of calling 'Int.max (endOfLineIdx, high)', we should call 'Int.min (endOfLineIdx, high)' because we are trying to get the smaller number, and not the largest. 2026-01-07 06:55:42 +00:00
adb8757ed8 implemented 'yh' motion (yank left) 2026-01-05 10:39:42 +00:00
bce2a5a22d finish reimplementing 'di<symbol>' and 'da<symbol>' motions so that they align more closely with the behaviour of Vim. (Todo: test them next) 2026-01-02 20:07:36 +00:00
886f384490 when deleting inside pair, instead of searching either for either chr1 or chr2 and stopping at first match, search instead for openChr and closeChr, and keep an integer tracking what level of nesting we are at. This gives us the behaviour we want, which is to delete the pair at the correct level of nesting. When we encounter openChr, we increment the nesting counter by 1 and continue searching. When we encounter closeChr, if the nesting counter is 0, we return the current index, but if the nesting counter is higher than 0 when encounter closeChr, we decrement the nesting counter by 1 and continue searching. 2026-01-02 18:50:04 +00:00
6efce2dd67 make 'dW' motion use transition function that is specific for deleting, and add a test to ensure that 'dW' does not delete a newline when it is not on a newline character 2025-12-27 09:45:11 +00:00
742b571b4e amend 'dw' motion in line with previous commit 2025-12-27 07:32:22 +00:00
204f549c79 implement 'daw' motion 2025-12-13 03:40:32 +00:00
8fdc710db4 begin parsing right-arrow in normal mode, for normal mode commands 2025-11-25 21:37:09 +00:00
d60e8bf7aa add todo note to implement yh/yj/yk/yl motions (yank according to h/j/k/l motions) 2025-11-23 23:44:24 +00:00
eefe5221ba begin parsing left arrow in normal mode 2025-11-23 23:19:31 +00:00
7d1272180b remove 'Cursor.tillPrevChr', replacing usages of that function with 'Cursor.toPrevChr' 2025-10-19 14:30:26 +01:00
60ec24453f reimplement 'yt<char>' motion to use 'Cursor.toNextChr' 2025-10-18 19:55:53 +01:00
e07f21d6f4 remove usages of 'Cursor.toNextChr' and delete it 2025-10-18 15:14:41 +01:00
ee96419901 repace usage of 'Cursor.toNextChr' with 'Cursor.toNextChrNew' ins make-normal-delete.sml 2025-10-18 15:07:14 +01:00
d7adae374f reimplement 'dt' motion 2025-10-18 14:59:37 +01:00
5d00da2cbb reimplement 'df' motion as per previous commits, and add a new test for 'df' motion to check that cursor does not land on a 'newline following a non-newline' position, after deleting using 'df<char>' 2025-10-18 14:24:16 +01:00
239aaacfc5 reimplement 't' movement motion the same way that 'f' movement motion was reimplemented in previous commit 2025-10-18 14:05:25 +01:00
e44eae6d46 reimplement 'f' move motion more efficiently, not leaving the LineGap.t data structure while iterating to next count 2025-10-18 14:01:06 +01:00
111e0cf66d remove usage of concurrent ml, deciding that we prefer to run everything in the main thread instead 2025-10-17 23:08:16 +01:00
c4c6634d79 add 'D' motion, which does the same thing as 'd$' (these two aliases exist in Vim too, to do the same thing) 2025-10-16 15:02:45 +01:00
a855cecd25 implement 'dG' motion (need to test it next) 2025-10-16 01:13:14 +01:00
5c8e74ac11 change type of SEARCH message to take a DFA, instead of a searchString 2025-10-08 05:54:19 +01:00
06106f5de8 remove 'searchString' field from app_type, because the same role is fulfilled by new 'dfa' field 2025-10-08 05:40:29 +01:00
df346d0a9e add ability to switch to case-sensitive-search-mode using '?' command from normal mode 2025-10-08 05:29:05 +01:00
fd8385fa81 add dfa field to app_type so that we don't rebuild DFA each time we want to execute a search again (like after deleting) 2025-10-08 05:02:15 +01:00
7f68084398 add 'caseSensitive' field to NORMAL_SEARCH_MODE, so that we know what kind of DFA to build 2025-10-08 04:53:04 +01:00
665497cf46 fix all remaining type errors 2025-09-29 15:06:33 +01:00
e24230834e rename existing 'MakeNormalDelete.deleteLine' function to 'MakeNormalDelete.deleteLineDown', make 'dj' and 'ydj' commands use the renamed function, and add a new 'MakeNormalDelete.deleteLine' function (which has no implementation yet). We do this because we want to distinguish between 'dd' and 'dj' commands, allowing 'dd' to delete to the end of the file despite any count, while stoppinhg 'dj' from deleting the file when on the last line. 2025-09-25 04:56:25 +01:00
6af2b58b0f make 'dl' motion (including count) call the same function as the 'x' motion, because they have identical behaviour. 2025-09-21 00:22:24 +01:00
2758b864bc fix bug found by unit test: when deleting leftwards, we should never delete beyond the end of the line 2025-09-20 18:04:59 +01:00
859860b19f reimplement vi's 'j' motion, and remove the original function for this motion which was in cursor.sml 2025-09-19 22:33:37 +01:00
4c1a76ae67 begin reimplementing motion to move cursor up (vi's 'k' command), although it is in progress and buggy 2025-09-19 04:59:40 +01:00
dbf05ec8dc refactor Cursor.viH to use DFA 2025-09-17 10:45:37 +01:00
9ddb5f68d7 fix bugs in vi-l-dfa (we want to stop looping when the counter is ~1, because the starting character will likely be final/a not-newline, and we want to loop at least once; also, we want to special case 'twoNewlineState' as a final case which causes us to go backwards by 1 instead of treating 'oneNewlineState' as a final/special case). We also modify other code to use the new vi-l implementation in the program. 2025-09-17 03:52:31 +01:00
c4fedc6434 fix 'Cursor.getLineStartIdx' function, which should look at the left nodes if there is no relevant line in this node 2025-09-16 22:09:15 +01:00
f1a06f946d add searchScrollColumn to NORMAL_SEARCH_MODE variant, and update and recalculate it where needed 2025-09-14 09:50:07 +01:00
0a0f723b9b add '<count>yx' function to both yank and delete a specified character 2025-09-07 23:39:33 +01:00
b7e0bab04a modify dedent functionality to support dedenting multiple lines, acting on count parameter 2025-09-07 15:12:34 +01:00
345801ea08 implement indenting for multiple lines, using the 'count' parameter 2025-09-07 14:34:00 +01:00
f7960efab1 add dedent functionality 2025-09-07 14:03:31 +01:00
299735f500 only update search list if timestamp for search message is greater than the buffer's modified time 2025-09-07 13:37:14 +01:00
f3c1905c0c when constructing SEARCH message, include time in the message as well. This will enable us to ignore any messages when we have a 'later' state available. 2025-09-07 13:24:41 +01:00
89c4e85c98 add indent-line functionality 2025-09-07 13:13:00 +01:00
42bd641be4 add a function to remove line breaks: the equivalent of Vim's 'J' command. 2025-09-06 04:39:53 +01:00