Commit Graph

378 Commits

Author SHA1 Message Date
a037211763 add a new test validating that the cursor does not move when cursor is on an empty line 2025-09-07 21:09:20 +01:00
11212430f4 fix bug with ViDlrDfa.next: we previously did not consider the case of cursor starts on a line containing nothing but a blank \n newline. We consider this now, returning the same index when it occurs. 2025-09-07 20:59:13 +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
9ba3e8464b add backtract functionality for range search as well 2025-09-06 23:05:11 +01:00
435c520955 add backtracking functionality to search; when we find a partial but incomplete match, we want to start looking for a match from ('idx + 1'), where 'idx' is the index we started this failed search at. 2025-09-06 22:53:07 +01:00
8d241366a1 handle edge cases in line-break removal function ('J' command). If the newline we find is the last character in the file, we don't delete it, because of Unix convention that text files always end with newlines. 2025-09-06 10:05:06 +01:00
764c5367eb remove unneeded todo comment 2025-09-06 04:53:08 +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
6ab3e592ad add yank-delete motions like 'ydw' and so on 2025-09-06 03:53:47 +01:00
caf43d0864 functorise NormalDelete structure so we can use share the same deletion logic and code for NormalDelete and NormalYankDelete (the latter which is not yet implemented) 2025-09-06 03:43:45 +01:00
5bfafe3987 replace redundant code (which matched semantics of a newly added function) with a function call. 2025-09-06 03:07:01 +01:00
0dede58ca0 done parsing yank-around 2025-09-06 02:59:05 +01:00
fb6cab7d0d fix minor bug when deleting around (with motion like da( or da< or da) or da>). The bug was that, if the last character we delete with the highest index is also the last character at the end of this line, we deleted the range properly but placed the cursor at a linebreak. In this case, the cursor is meant to be a single character before the line break, and after this commit, we have this desired behaviour. 2025-09-06 02:46:49 +01:00
0506cf6176 done implementing 'yankInside' functions and functionality. 2025-09-06 02:27:01 +01:00
9369bbed93 in normal mode, when we receive an event which we don't want to handle (like enter), we clear the app's mode and command history instead of simply returning the same app unmodified. This fixes a bug: say we pres 'f' to go to a character and then press enter. Before this commit, pressing a character after that 'enter' will go to that character. This is contrary to Vim, which resets the command history on an invalid command, and now we reset the command history too. 2025-09-06 01:40:32 +01:00
58e74afffb add function to yank inside WORD 2025-09-06 01:15:45 +01:00
73ec4e7578 bug fix when yanking or deleting inside a word (we should not clip 'high' value, and we should search for end of word strictly); this handles cases like when we only have one character in the buffer, or an empty buffer 2025-09-06 01:12:59 +01:00
b9332bcd94 fix bugs related to deleting ('dge' and 'dgE' motions should also delete the letter which the cursor is currently at, and now they do) 2025-09-06 00:02:37 +01:00
76e14ea491 add functions to yank to end-of-previous-character, and to yank from current line to start of buffer 2025-09-05 23:46:10 +01:00
367e691349 implement additional non-terminal yank commands 2025-09-04 00:50:16 +01:00
e1a15ab1d0 append non-terminal characters after string in yank 2025-09-02 22:41:34 +01:00
6cd038cf81 done refactoring terminal yank commands 2025-09-02 12:46:30 +01:00
d7f69574af a bit of refactoring 2025-09-02 12:39:50 +01:00
d135526386 refactoring, and fix bug in 'y^' motion. (When cursor is after first-non-space-character, copy from first-non-space-character to cursor. Otherwise, copy spaces at beginning until first-non-space-character.) 2025-09-02 12:33:02 +01:00
44441ad26b add two additional terminal yank operations: '<count-y-n> for copying to next match, and <count-y-N> for copying to prev match 2025-09-02 11:48:14 +01:00
a90cdf7943 implement a couple of more yank operations 2025-09-02 11:35:29 +01:00
1d631a708c implement a few more yank motions 2025-09-02 09:43:50 +01:00
74f1fb77ab parse a few additional motions for yanking 2025-09-02 03:13:01 +01:00
ea38e95e6b add a few additional motions to be parsed by yank 2025-09-02 03:07:50 +01:00
298cec88b3 create higher order functions to remove boilerplate code when implementing different yank cases 2025-09-02 02:55:19 +01:00
b3436b2963 implement function to yank a single line 2025-09-02 02:37:08 +01:00
72e3b59bb7 because GLFW at this time has clipboard bugs on Wayland (setting clipboard string), we print out whenever the shell receives a 'yank' message indicating for GLFW to copy. This will let us test that the correct string is yanked. 2025-09-02 02:18:14 +01:00
6d9ad9b13b rename a file and a structure because another file with the same name exists, except that one is lowercase and the other is uppercase. Case insensitive filesystems don't like that they had the same name before, except for the case. 2025-09-02 02:14:12 +01:00
75916234e6 pull in new version of cozette-sml, which makes '=' glyph better aligned with other glyphs 2025-09-01 23:10:08 +01:00
e5b45461b4 update shf-test.mlb to make acquire changes in main (tests have not been compiling for a few days, since persistent-vector.sml was added, and that's fine because I was working on unrelated aspects) 2025-09-01 16:23:16 +01:00
543453e8bd unescape an escaped search string 2025-09-01 13:56:32 +01:00
1419843508 add function to convert string to an unescaped string 2025-09-01 13:46:16 +01:00
1296ce367b handle resize event and concurrent (permanent and full) search result in NORMAL_SEARCH_MODE 2025-09-01 12:52:26 +01:00
faac32e0f8 add note about unhandled keys in normal mode 2025-09-01 12:01:54 +01:00
3e69c41d8f implement functionality for left and right arrow keys to move cursor left/right when entering searchString in NORMAL_SEARCH_MODE 2025-09-01 11:33:01 +01:00
a10e56935e scaffolding for arrow-movement functionality 2025-09-01 11:23:45 +01:00
53082315ac draw cursor when in NORMAL_SEARCH_MODE 2025-09-01 11:04:56 +01:00
ea4dae3c53 implement backspace for normal-search-mode 2025-09-01 03:34:16 +01:00
b80bc3d93c add searchCursorIdx field specific to NORMAL_SEARCH_MODE which we will later use to keep track of where to add/remove characters in the in-progress searchString from 2025-09-01 03:18:45 +01:00
71c77fc6ac redraw screen when we change from NORMAL_MODE to NORMAL_SEARCH_MODE, so it is visually clear that we have changed modes 2025-09-01 03:04:39 +01:00