From 5efd2b6b56bdb8d365ff24aa212b405e9ff37f2e Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Thu, 27 Aug 2015 00:31:15 -0700 Subject: 2085 - undo/redo now working for simple typing Not yet useable, because we never ever stop coalescing operations. That will happen when we introduce a second type of operation. --- 065duplex_list.mu | 7 +++++-- edit.mu | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 2 deletions(-) diff --git a/065duplex_list.mu b/065duplex_list.mu index 3310400d..65cb9592 100644 --- a/065duplex_list.mu +++ b/065duplex_list.mu @@ -411,8 +411,11 @@ recipe insert-duplex-range [ next:address:duplex-list <- next-duplex in dest:address:address:duplex-list <- get-address *end, next:offset *dest <- copy next - dest <- get-address *next, prev:offset - *dest <- copy end + { + break-unless next + dest <- get-address *next, prev:offset + *dest <- copy end + } dest <- get-address *in, next:offset *dest <- copy start dest <- get-address *start, prev:offset diff --git a/edit.mu b/edit.mu index 3e643fa9..c33fa4e8 100644 --- a/edit.mu +++ b/edit.mu @@ -6782,6 +6782,56 @@ scenario editor-redo-typing [ ] ] +scenario editor-redo-typing-empty [ + # create an editor, type something, undo + assume-screen 10/width, 5/height + 1:address:array:character <- new [] + 2:address:editor-data <- new-editor 1:address:array:character, screen:address, 0/left, 10/right + editor-render screen, 2:address:editor-data + assume-console [ + type [012] + type [z] # ctrl-z + ] + 3:event/ctrl-z <- merge 0/text, 26/ctrl-z, 0/dummy, 0/dummy + replace-in-console 122/z, 3:event/ctrl-z + editor-event-loop screen:address, console:address, 2:address:editor-data + screen-should-contain [ + . . + . . + .┈┈┈┈┈┈┈┈┈┈. + . . + ] + # redo + assume-console [ + type [y] # ctrl-y + ] + 4:event/ctrl-y <- merge 0/text, 25/ctrl-y, 0/dummy, 0/dummy + replace-in-console 121/y, 4:event/ctrl-y + run [ + editor-event-loop screen:address, console:address, 2:address:editor-data + ] + # all characters must be back + screen-should-contain [ + . . + .012 . + .┈┈┈┈┈┈┈┈┈┈. + . . + ] + # cursor should be in the right place + assume-console [ + type [3] + ] + run [ + editor-event-loop screen:address, console:address, 2:address:editor-data + ] + screen-should-contain [ + . . + .0123 . + .┈┈┈┈┈┈┈┈┈┈. + . . + ] +] + after +handle-redo [ { typing:address:insert-operation <- maybe-convert *op, typing:variant -- cgit 1.4.1-2-gfad0