Commit Graph

194 Commits

Author SHA1 Message Date
137cbfee19 fix bug when saving search from NORMAL_SEARCH_MODE. Previously, when pressing <Enter> to save the search, the tempSearchList (which searches against a subset of the buffer's text instead of all of it, to ensure we do not spend too much time was spent while the user was entering the regex/search string) was being saved instead of the newly built searchList (which executes the DFA against all of the text) 2025-12-02 17:55:25 +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
9f53c5549a rename 'Cursor.toNextChrNew' function to 'Cursor.toNextChr', and update usages to change the name as well. 2025-10-18 15:17:26 +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
bc44c7bcd0 add another test for 'df<char>' motion, checking that we leave a newline behind if the whole buffer is deleted 2025-10-18 14:29:20 +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
b8beeaaa60 add some more tests for 'df<char' motion, and fix implementation to pass those tests (if our cursor is at the same position after calling 'fMove', then exit the loop to find the next occurrence of <char>) 2025-10-17 16:19:17 +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
7676556513 fix failing test for 'd$' motion, which means completing tests for 'd$' motion too 2025-10-16 12:07:27 +01:00
c2eaa5537c modify 'd$' implementation to pass failing test (we don't want to delete newline at end of line, so we don't do that now) 2025-10-16 11:09:20 +01:00
a855cecd25 implement 'dG' motion (need to test it next) 2025-10-16 01:13:14 +01:00
82c1d48c6f add tests for 'dgg' motion 2025-10-15 15:06:04 +01:00
999a35cb8b fix failing test for 'dge' motion: if the deletion takes us to a newliune that follows a non-newline-character, we should decrement the cursor to be on the non-newline-character 2025-10-14 12:31:18 +01:00
be7a9b3035 add minimal modifications to implementation of 'dge' motion, so that failing test for 'dge' motion passes 2025-10-13 22:08:33 +01:00
0de7a9278a progress implementing help-prev-match for vector 2025-10-08 10:27:19 +01:00
3b823d7ae6 delete 'nextMatch' function in search-list.sml, and refactor other code to use alternative function 2025-10-08 08:16:20 +01:00
8941ce9f89 reimplement functionality to search forwards using 'n' command 2025-10-08 08:10:51 +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
8857f49537 pass DFA to 'SearchList.buildRange' function, so that we don't need to parse search string into DFA each time 2025-10-08 05:20:33 +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
cc5c0bf95c implement escape sequences for regex 2025-10-06 21:44:57 +01:00
45fbd85183 move buffer around when calling 'SearchList.buildRange' 2025-09-30 05:40:57 +01:00
665497cf46 fix all remaining type errors 2025-09-29 15:06:33 +01:00
fd321c2f14 fix some type errors 2025-09-29 15:02:40 +01:00
d01a1367ae add test for 'dw' case: when we use 'dw' on last word in buffer, and there is no newline after last word, we delete last word fully 2025-09-27 13:09:18 +01:00
88a1489a54 pass failing test case for 'dw'. When we delete to the end of the file and the position the cursor was previously at no longer exists, move cursor to last valid character in file. 2025-09-26 07:46:42 +01:00
b31d7650a8 change the way we calculate the newCursorIdx when we delete using the 'dk' motion while on the last line. We go to the buffer's last line and find the first column. This more directly expresses what we want and now passes the failing unit test for 'dk'. 2025-09-25 14:59:29 +01:00
05abecc70d pass a failing test for 'dk' motion by decrementing newCursorLineNumber if the end of the deletion range is on a newline, and it is also the last char in the buffer 2025-09-25 14:44:39 +01:00
6b0149162f a bit of formatting 2025-09-25 10:50:02 +01:00
bf55373f6d fix 'MakeNormalDelete.deleteLineBack' test, which failed because we were using the wrong way to check if cursor is currently at the start of the line. We checked '(endOfLine = cursorIdx) which works in most cases to verify that the current position is a newline, but fails when the cursor is at the last non-newline character of the line. This is fixed by being more precise and calling 'Cursor.isCursorAtStartOfLine' to check directly if the cursor is currently at the end of the line. 2025-09-25 10:49:20 +01:00
c13ef69a9e pass failing test for 'dk' by paying attention to newlines 2025-09-25 10:31:02 +01:00
1921f87191 handle edge case which deleted newline incorrectly when it shouldn't, passing failing test for 'dk' motion 2025-09-25 09:49:37 +01:00
02cc5a0e53 make failing test for 'dk' motion pass by appending a newline to the buffer if the buffer becomes empty 2025-09-25 09:09:18 +01:00
1000e74183 pass failing test for 'dj' motion through a different startLine calculation depending on whether cursor is already on a newline or not 2025-09-25 06:34:08 +01:00
cddd03812b implement first pass of 'MakeNormalDelete.deleteLine'; have to add tests for this next 2025-09-25 06:23:12 +01:00
efaadf1337 a bit of refactoring 2025-09-25 06:18:12 +01:00
b73117d075 add failing test for 'dj' motion, and progress reimplementing 'MakeNormalDelete.deleteLine' 2025-09-25 06:11:36 +01:00
d25a06a9ed progress reimplementing 'MakeNormalDelete.deleteLine 2025-09-25 06:04:11 +01:00