Commit Graph

157 Commits

Author SHA1 Message Date
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
543453e8bd unescape an escaped search string 2025-09-01 13:56:32 +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
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
f4a4dd9161 scaffolding for backspace functionality 2025-09-01 02:52:05 +01:00
3f7009bf09 prefix search string with a / in NORMAL_SEARCH_MODE, just like in Vim 2025-09-01 02:39:16 +01:00
0f945c9646 create an 'exitToNormalMode' function which exits NORMAL_SEARCH_MODE and creates a message to redraw the screen so that it looks like normal mode 2025-09-01 02:26:25 +01:00
561e45c556 extract reusable function which can be used when a search string is changed, in NORMAL_SEARCH_MODE 2025-09-01 02:18:23 +01:00
c95ae5eae3 add functionality to return from NORMAL_SEARCH_MODE back to NORMAL_MODE, saving new search string and new search list 2025-08-31 07:40:31 +01:00
a86befdea8 a bit of refactoring 2025-08-31 06:28:05 +01:00
542da2229c a little additional scaffolding for normal mode 2025-08-31 02:41:37 +01:00
3b6dff3081 begin scaffolding NormalSearchMode (normal mode, except we are searching) 2025-08-31 02:10:57 +01:00
659a1d2585 change buildRange length from 777 to 1111 2025-08-30 23:36:14 +01:00
2b3f0405c6 reimplement search-range functionality to scan range from the string from left to right 2025-08-30 23:31:55 +01:00
148b72835b move buffer to start before creating searchMsg 2025-08-30 18:21:47 +01:00
0dd7a69777 propagate 'time' value throughout normal mode updating 2025-08-20 13:12:07 +01:00
f97a2944ae pass time parameter in normal-delete.sml 2025-08-20 13:00:36 +01:00
c4f3e921a3 formating 2025-08-20 12:51:31 +01:00
c21d1b8205 progress fixing compile errors resulting from adding 'bufferModifyTime' field (fixed normal-mode move expressions) 2025-08-20 12:50:39 +01:00
28593486ed refactor command-parsing code for normal mode, so that non-character events (KEY_ESC, RESIZE_EVENT, WITH_SEARCH_LIST) are dealt with at the beginning, and that the remainder of the parsing code looks at the current string and the new character typed. This is safe because pattern matching on the other commands (KEY_ESC, RESIZE_EVENT, WITH_SEARCH_LIST) always calls the same functions. 2025-08-08 23:23:40 +01:00
3b8faf28e4 add d% motion for deleting a matching pair 2025-08-08 07:30:39 +01:00
f848d4f301 done implementing 'deleteInside' and 'deleteAroundd' commands 2025-08-07 23:33:40 +01:00
5236579cd5 extract some more common code (which was used in many delete functions) into its own function 2025-08-07 19:31:34 +01:00
0fd63fe82f extract a function which has commonly used code 2025-08-07 19:17:47 +01:00