Commit Graph

78 Commits

Author SHA1 Message Date
deb24c2063 with cursor movements, instead of passing in functions as parameters (callbacks/higher order functions), functorise the cursor movement functions instead so we can take advantage of defunctorisation and avoid the runtime cost of closures/higher order functions/function pointers 2025-01-09 22:30:51 +00:00
90f8732f06 move msgs into AppType.app_type, and refactor AppUpdate.update function to have type (app_type -> app_type) instead of pervious case which was (app_type -> app_type * MailboxType.t list). Reason: no need to allocate/return tuple when can store messages in type directly; previous msg list will be reset after each app update. All tests after refactor are passing. 2024-12-17 10:40:06 +00:00
c28dc429b7 address todo in text-builder.sml by adding prerequisite: always call SearchList.goToNum before calling TextBuilder.build 2024-11-25 04:37:47 +00:00
04d4e013e2 ensure that searchList is deleted from when calling delete functions other than 'helpRemoveChr' 2024-11-23 06:10:40 +00:00
0bfe549e04 add just one more 'word' test, extract steps to delete from search list into a reusable function (don't need to memorise the steps), and fix bug in cursor.sml where we were looking at tl without calculating correct strIdx 2024-11-23 05:16:37 +00:00
e90df37b43 in search-list.sml: fix 'delRightFromHere' and 'delLeftFromHere' functions which joined newHd with left/right, rather than the tl, and therefore added new numbers to the list, which is incorrect behaviour. Fixed this by using joining with 'tl' rather than left/right. In build-search-list.sml: make fromRange function return tuple instead of an instance of app. Finally, in app-update.sml: progress towards refactoring 'helpRemoveChr' function to map and delete from searchList as desired. 2024-11-17 09:25:01 +00:00
f2b4f256ec bugfix: in search-list.sml's 'delRightFromHere' function, make sure we preserve the last part of the vector when finish < last 2024-11-16 09:05:47 +00:00
436b3e0d92 simplify and rewrite function 'del' in search-list.sml 2024-11-16 08:33:26 +00:00
c0c1a7c885 refactor app-update.sml to pass additional parameters to TextBuilder.build 2024-11-15 08:24:48 +00:00
f279dc0937 make 'de', 'dE', 'dj' and 'dk' commands work similarly to vi (details are in comments) 2024-11-14 08:57:31 +00:00
5294da6780 use 'Cursor.clipIdx' in app-update.sml's 'helpDelete' and 'helpDeleteLine' functions, to ensure we never delete last line (unix text files always end with \n) 2024-11-10 07:57:49 +00:00
6e4f6b58b9 done with 'parseDelete' functionality in app-update.sml': have all the delete commands I would like 2024-11-10 07:51:12 +00:00
58a9c2ec69 add functionality for commands: 'dgg' (delete from cursor to start of buffer), 'dge' (delete from cursor to the end of the previous word) and 'dgE' (delete from cursor to the end of the previous WORD) 2024-11-10 07:34:30 +00:00
bc27925e75 similar loop optimisations described in previous commit to app-update.sml's 'helpDeleteToChr' function 2024-11-09 10:49:54 +00:00
fed827a6c9 same loop optimisation mentioned in previous commit to app-update.sml's 'helpDelete' function 2024-11-09 10:41:37 +00:00
dece4d4d83 break out of loop early in 'helpMove' and 'helpMoveToChr' functions, in case where calling 'fMove' returned the same value as before 2024-11-09 10:11:51 +00:00
cde4dbc67f reduce unnecessary intermediary allocations in app-update.sml's 'helpDeleteToChr' function, similarly to previous commit 2024-11-09 09:59:12 +00:00
5804620846 small optimisation in app-update.sml's 'helpDelete' function, reducing number of allocations by accumulating otherIdx, and deleting from buffer only once loop is over 2024-11-09 09:39:03 +00:00
19aaae72f3 add functionality to delete to chr (equivalent of Vi commands starting with 'df' like 'dfe' to delete to the next 'e', and also add equivalent of 'dFe' to delete backwards) 2024-11-09 09:24:14 +00:00
faff848cb4 in cursor.sml's 'helpTillPrevChr' function, properly handle edge case where graphical chr is followed by multiple line breaks 2024-11-09 06:33:32 +00:00
d4d0236dab amend cursor.sml's 'helpTillNextChr' function to work with new line break scheme, and use it to implement 'delete till' functionality starting with 'dt' (for example, 'dta' deletes till 'a', 'dts'detetes till 's', etc.) 2024-11-09 05:35:32 +00:00
e4f46295d4 improvement to app-update.sml's 'deleteEndOfLine' function, where we rely on 'helpRemoveChr' function to handle conditional 'go backwards' logic, and we also make sure not to do anything in 'deleteEndOfLine' if we are at a \n 2024-11-09 03:51:39 +00:00
e1b5352cfb add todo notes for 'parseDelete' function 2024-11-08 22:31:19 +00:00
267efae4cc add another custom delete function ('deleteToFirstNonSpaceChr', which can be triggered with command d^ and it works fine on testing 2024-11-08 22:19:57 +00:00
ae80ef5f21 code function to delete to end of line with command 'd$' (custom function needed because it did not work as expected to pass 'Cursor.viDlr' as a higher order function as with other motions) 2024-11-08 21:52:04 +00:00
74822d1541 rename cursor.sml's 'clipIdxAfterDelete' function to 'clipIdx', simplify it, and use it in other functions too 2024-11-08 20:43:36 +00:00
f02a20c6ea clip idx after delete if necessary 2024-11-08 18:47:26 +00:00
c080b913ae reorganisation app-update.sml to place related functions close together 2024-11-08 18:36:02 +00:00
4574a23dc8 extract reusable function 'buildTextAndClear' (but need to be careful since some functions have specialised build functionality and shouldn't use this function) 2024-11-08 18:27:55 +00:00
f7c99530ae rename function for vi's 'x' command from deleteChr to removeChr, because it helps avoid confusion with motion-based delete (for example, 'dw') 2024-11-08 15:27:16 +00:00
88f4ff6057 progress with delete 2024-11-08 15:19:16 +00:00
a4dea7626f add KEY_ESC message type, and refactor app-update.sml to use it (always calls 'clearMode' function which always sets the app to normal mode, and sets the command strnig to empty) 2024-11-08 09:30:57 +00:00
ff38e39deb do not use 'clearMode' in helpDeleteChr function, because we have 'buffer' and 'cursorIdx' parameters we would like to add to the app state before exiting the loop. Instead, go to end of loop by passing 'count' of 0 2024-11-08 04:25:33 +00:00
36763fce94 add count to 'x' command, allowing [count] chars to be deleted 2024-11-08 04:21:05 +00:00
6b9cf8dbc2 amend problem with TextWindow.getStartLineBefore, where we were not following rule mentioned in previous commits to not count (graphical-chr -> \n) as line break 2024-11-06 12:46:53 +00:00
50d10c1a89 delete-chr (equivalent of vi's 'x' cmd) works fine now, except when deleting from the very first line, where first line may become invisible temporarily. I am not sure why that is happening but will find out. 2024-11-06 12:17:26 +00:00
9df6f92a33 progress with equivalent of vi's 'x' command 2024-11-05 12:38:01 +00:00
a0a8fcc17b change line indexing in AppUpdate.moveToLine from 0-based to 1-based (so first line can be access with 1G, second with 2G, as is normal with Vim) 2024-11-04 02:56:57 +00:00
b368619df3 add functionality to go to specific line in buffer 2024-11-02 13:59:55 +00:00
2a8e02ff3a when pressing fcore/text-window.sml to match pair, only recentre text window if matching pair is not currently visible on screen 2024-11-02 12:34:23 +00:00
553d4605e7 add implementation of matching cursor pairs 2024-10-31 11:07:52 +00:00
601a341992 add functionality to move to end of line 2024-10-30 10:54:55 +00:00
308d042deb add functionality to centre text window to cursor 2024-10-30 10:05:16 +00:00
f2f305c35d add command to go to start of lineGap 2024-10-30 07:51:24 +00:00
c7570707ab 100fcore/app-update.sml done with functionality of getting screen to move (if needed) when cursor moves, including getting screen to move when moving to a new chr (in this commit) 2024-10-28 23:06:32 +00:00
5e1e39ca69 fixed two issues. First is that an exception occurred when sometimes moving cursor forwards. Cause of this issue was that callee functions depended on LineGap being moved to start of line, but this did not always happen (and now it does always happen). Second issue was that moving cursor down did not scroll as expected when line wrapped. The reason for this second issue was that the 'getStartLineAfter' function did not increment 'startLine' value in loop when line wrap occurred. Both issues are now fixed. 2024-10-28 22:54:28 +00:00
bff4c006ed have functionality for cursor to scroll down a line when cursor moves down one line working, but it only seems to work perfectly when there are no visual line breaks 2024-10-28 21:56:07 +00:00
0ed5a23ade some progress moving textWindow, but it is not perfect yet 2024-10-28 10:59:18 +00:00
4b1ee33954 begin moving text window when cursor goes off screen (currently, we only move the window when cursor goes backwards but this works fine and as expected) 2024-10-28 09:34:55 +00:00
deab30c46d add equivalent of vi's 'ge' and 'gE' commands 2024-10-28 06:52:58 +00:00