Commit Graph

719 Commits

Author SHA1 Message Date
fcc8c8085a reimplement 'G' motion so that it follows new rule (cursor goes to second-last chr if last chr is a newline preceded by a non-newline, but goes to last chr otherwise) 2025-09-23 11:57:19 +01:00
5d20b81bcc adjust functor to move by dfa so that we cannot go to the last char of the file if (last char is a newline and is preceded by a non-newline), but otherwise we can go to the last char of the file. 2025-09-23 11:47:25 +01:00
5fded45303 remove redundant test 2025-09-23 11:11:33 +01:00
4f20379219 take care of a few tests after refactoring/making a different design decision 2025-09-23 11:04:47 +01:00
961ce63023 begin refactoring to let cursor move to very last char of file (including unix line ending) 2025-09-23 10:50:10 +01:00
8931d4d071 fix minor compilation error introduced in previous commit 2025-09-23 09:29:02 +01:00
ec462a4df7 remove special case from 'k' motion: the exact semantics we want for trailing newlines at the end of a file are currently a bit unclear and require exploration 2025-09-23 09:27:13 +01:00
21e12addf3 in text builders, check when on newline if this is the second last character in the file, and draw it on a newline if so. This is to align with the design decision that we want the second-last character to be selectable 2025-09-23 09:16:02 +01:00
505521f5e2 minor cosmetic change 2025-09-23 09:04:18 +01:00
6be1d48b02 add test for 'k' motion: when file ends with two newlines and cursor is on newline_1 in the pattern (char -> newline_1 -> newline_2), we should be able to move up by a line 2025-09-23 09:00:50 +01:00
c9365076ad handle special case with 'k' motion: when file ends with \n\n and cursor is on first \n: we should be able to move upwards from here too 2025-09-23 08:54:19 +01:00
494d56e997 add two new tests to check that 'w' motion does not let cursor go to last newline in file, but does let cursor go to second-last newline 2025-09-23 08:20:40 +01:00
79d232df7a amend very minor bug: when looping through DFA and hitting a 'final state', we let the next chr afterwards handle the start state, but we want the current char to handle the start state instead, as this matches vim's behaviour 2025-09-23 07:36:51 +01:00
0b0d5268fc handle edge case when deleting by DFA: when we are deleting to the end of the file and if cursor is on first character after newline, then we also want to delete preceding newline too. Or else we will end up with two newlines at the end of the file, which is not what we want. 2025-09-23 07:18:58 +01:00
ec10f3e025 tiny amount of formatting 2025-09-23 07:04:41 +01:00
9174e4923c don't deleteByDfa when buffer's length is 1, because that would mean that we would be deleting last newline in file 2025-09-23 07:04:20 +01:00
02ada5765b improve 'MakeNormalDelete.deleteByDfa' function by refraining from deleting the unix-style line ending, if DFA takes us past the ending 2025-09-23 06:09:03 +01:00
12bd30d9dd pull in new version of brolib-sml, which contains a bug fix for 'LineGap.delete' 2025-09-22 15:07:45 +01:00
cb0dec93a0 simplify implementation of 'MakeNormalDelete.deleteLine 2025-09-22 13:02:08 +01:00
e3148e6ac1 when deleting using a DFA motion, make sure we have a linebreak at the end so that we still have unix-style line endings as an invariant 2025-09-22 12:41:33 +01:00
351f7e9bf9 fix edge case with 'd$' motion: if deleting to end of file, we need to append two newlines 2025-09-22 12:28:08 +01:00
d3c6031b19 pull in new version of brolib-sml, which has bug fixes for line_gap.sml's 'lineNumberToIdx' function 2025-09-22 10:30:00 +01:00
6f968ee8e5 in 'dk' motion, make sure we move the cursor to the start of the previous line in all cases 2025-09-22 09:46:43 +01:00
90eeb6e570 restore temp.txt to original version, as it was being edited for testing purposes 2025-09-22 07:46:45 +01:00
a890381f2a amend vi's 'k' tests after having reimplemented 'k' motion 2025-09-22 07:13:04 +01:00
e6ea96f995 fix bug in 'k' motion: when we move from any other line to line 0, always unconditionally decrement column by 1 2025-09-22 07:02:20 +01:00
3128647a5f reimplement 'k' motion so that newlines which are immediately preceded by non-newline chars are skipped 2025-09-22 06:49:00 +01:00
4dc73aa4d6 amend tests for vi's 'j' motion, after having reimplemented it 2025-09-22 05:37:54 +01:00
5315aff600 reimplement 'j' motion so that newline is skipped only if immediately preceded by char 2025-09-22 05:32:03 +01:00
8ca8d1db29 add new tests for 'l' motion to ensure that newlines are only skipped when they are preceded by chars 2025-09-22 04:10:39 +01:00
4c5c1f304a amend a test to respect new viH implementation 2025-09-21 21:45:30 +01:00
cdc23945a5 reimplement vi's 'h' movement, so that we only skip newline characters that immediately follow a non-newline 2025-09-21 21:36:59 +01:00
d63201ada7 reimplement vi's 'l' motion so that we only skip a newline when it is preceded by a non-newline character 2025-09-21 17:49:30 +01:00
639f71009c done reimplementing 'MakeNormalDelete.deleteLineBack', taking care of cases where we use this motion while on the first line or on the last 2025-09-21 16:40:05 +01:00
3ea44d9725 progress reimplementing 'NormalDelete.deleteLineBack' function 2025-09-21 15:45:14 +01:00
68cd2a33cf add tests for 'dl' motion 2025-09-21 00:34:02 +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
3b27e437bc add a failing test for 'dl' motion 2025-09-20 23:59:14 +01:00
46ab3d20e7 add tests to verify that cursorIdx is as expected after 'dh' delete motion 2025-09-20 23:49:30 +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
a0add68e92 begin adding normal-delete tests 2025-09-20 17:59:22 +01:00
6b05c9a07a done addint to hjkl movement tests 2025-09-20 10:04:38 +01:00
a81d45b3b3 add additional tests for 'j' motion 2025-09-20 08:09:35 +01:00
ec091b56a3 add additional tests for 'l' motion 2025-09-20 06:31:14 +01:00
60cbb33cb6 add additional tests for 'h' motion 2025-09-20 04:18:15 +01:00
2e77175187 refactor tests a bit by putting LineGap-creation functionality into TestUtils.init, and make sure we also add a Unix-style newline to the end of the string if it doesn't already have one 2025-09-20 03:44:48 +01:00
c29afbdb7c fix minor bug regarding 'NormalMove.moveCursorDown': after a <count-j> that moved the cursor to the last line in the buffer, the cursor would be at the last column too, even if that wasn't the previous column. To address this issue, we take out code that calculates the lineIdx from the 'NormalMove.finishMoveCursorUpDown' function, and have both 'NormalMove.moveCursorUp' and 'NormalMove.moveCursorDown' calculate their own lineIdx in different ways and pass it to the 'NormalMove.finishMoveCursorUpAndDown' function. 2025-09-20 02:58:51 +01:00
090e7ccea2 pass 'maxLength' value to TextScroll function so that we can prevent scrolling past the bottom of the file (unless we want to od so by centtering the screen) 2025-09-19 23:17:28 +01:00
d3fa4d08bf extract reusable function containing common code previously used in both 'NormalMove.moveCursorUp' and 'NormalMove.moveCursorDown' functions, and make them call the reusable function instead 2025-09-19 22:40:29 +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