|
|
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 |
|
|
|
11015dfa9e
|
add two more test cases for 'dj' motion that were failing when added, and modify 'MakeNormalDelete.deleteLineDown' to handle them
|
2025-09-25 05:28:13 +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 |
|
|
|
1255238d6c
|
pass failing tests for 'dj' motion
|
2025-09-24 19:32:31 +01:00 |
|
|
|
2076d25653
|
begin reimplementing 'MakeNormalDelete.deleteLine' function
|
2025-09-24 17:58:37 +01:00 |
|
|
|
80078196e0
|
if 'MakeNormalDelete.deleteLine' deletes to the end of the file such that there is no newline at the end, then append a newline. This makes one of the tests we have pass.
|
2025-09-24 13:05:13 +01:00 |
|
|
|
222a9aa43c
|
fix 'MakeNormalDelete.removeChr' by accounting for case when we are deleting from last line but the last line does not end with its own newline
|
2025-09-24 09:46:28 +01:00 |
|
|
|
95393e1e13
|
amand MakeNormalDelete.removeChr function (which is used by 'x' and 'dh' commands) to pass test, which checks that cursorIdx does not fall on newline-after-chr after deletion
|
2025-09-24 09:02:33 +01:00 |
|
|
|
00ab086257
|
remove code related to appending newlines in 'MakeNormalDelete', as we have decided that we allow files which do not end in newlines as well as files that do
|
2025-09-24 07:18:11 +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 |
|
|
|
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 |
|
|
|
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 |
|
|
|
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 |
|
|
|
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 |
|
|
|
dbf05ec8dc
|
refactor Cursor.viH to use DFA
|
2025-09-17 10:45:37 +01:00 |
|
|
|
12478f8ac2
|
remove references to 'Cursor.clipIdx' and delete that function once it is no longer used
|
2025-09-16 16:08:01 +01:00 |
|
|
|
19d2235686
|
refactor 'MakeNormalDelete.removeLineBreaks' function to remove function call to 'Cursor.clipIdx', instead relying on textLength field in buffer
|
2025-09-16 15:53:41 +01:00 |
|
|
|
3d9bf962e7
|
handle additional deleteLine edge case
|
2025-09-16 07:40:58 +01:00 |
|
|
|
70ffea21b3
|
fix the last MakeNormalDelete.deleteLine bug: if we delete such that the startIdx (prior to deletion) becomes longer than the text in the buffer, we move the cursor to the start of the last line
|
2025-09-16 07:01:55 +01:00 |
|
|
|
6507b9d49c
|
adjust MakeNormalDelete.deleteLine implementation slightly, because the previous implementation did not delete the last character when we are at the end of the file
|
2025-09-16 06:29:35 +01:00 |
|
|
|
bbe39f90d4
|
move cursor to low/cursorIdx in helper function
|
2025-09-13 08:48:00 +01:00 |
|
|
|
422d6ad9ac
|
fix bugs in implementing and using text buffer. Some functions did not save the drawMsg to the app's state, which we means we didn't draw in those cases. The text builder functions also drew cursors on characters even when the cursor is not at this position. Both of these bugs are fixed.
|
2025-09-12 23:21:53 +01:00 |
|
|
|
2ad7623848
|
fix further compiler errors
|
2025-09-12 13:47:14 +01:00 |
|
|
|
8698333f5b
|
refactor to make sure that we count the visual scroll column on move/delete, in normal mode
|
2025-09-11 23:43:09 +01:00 |
|
|
|
fd303c0f7d
|
reimplement part of 'deleteToEndOfLine' function in make-normal-delete.sml, so that it doesn't rely on the 'helpRemoveChr' function, and so we can delete the 'helpRemoveChr' function.
|
2025-09-07 23:24:31 +01:00 |
|
|
|
494c702ab6
|
add commends to clarify 'removeChr' logic.
|
2025-09-07 23:06:52 +01:00 |
|
|
|
e2acdd90f4
|
new implementation for removing characters with 'x', which is simpler than previous implementation as well
|
2025-09-07 22:30:39 +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 |
|
|
|
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 |
|
|
|
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 |
|