about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2015-07-15 21:40:56 -0700
committerKartik K. Agaram <vc@akkartik.com>2015-07-15 21:40:56 -0700
commit38a8e1c9cf8a7a8b5f88c63e0a429c8dee2fe4e3 (patch)
tree06c6c5ea3df0a448b442623b333ef3a7ac16ff31
parent5361ba04eb7e8b1dd8c08c6ace47d5e0fe848e30 (diff)
downloadmu-38a8e1c9cf8a7a8b5f88c63e0a429c8dee2fe4e3.tar.gz
1792 - better semantics for ctrl-k
More evidence that the choice of 'before-cursor' was inspired.
-rw-r--r--edit.mu125
1 files changed, 122 insertions, 3 deletions
diff --git a/edit.mu b/edit.mu
index 7b764f95..d9e5e882 100644
--- a/edit.mu
+++ b/edit.mu
@@ -963,7 +963,6 @@ recipe delete-to-end-of-line [
   editor:address:editor-data <- next-ingredient
   # compute range to delete
   start:address:duplex-list <- get editor:address:editor-data/deref, before-cursor:offset
-  start:address:duplex-list <- next-duplex start:address:duplex-list
   end:address:duplex-list <- next-duplex start:address:duplex-list
   {
     at-end-of-text?:boolean <- equal end:address:duplex-list, 0:literal/null
@@ -2217,6 +2216,30 @@ scenario editor-deletes-to-start-of-line-with-ctrl-u-2 [
   ]
 ]
 
+scenario editor-deletes-to-start-of-line-with-ctrl-u-3 [
+  assume-screen 10:literal/width, 5:literal/height
+  1:address:array:character <- new [123
+456]
+  2:address:editor-data <- new-editor 1:address:array:character, screen:address, 0:literal/left, 10:literal/right
+  # start past end of line, press ctrl-u
+  assume-console [
+    left-click 1, 3
+    type [u]  # ctrl-u
+  ]
+  3:event/ctrl-u <- merge 0:literal/text, 21:literal/ctrl-a, 0:literal/dummy, 0:literal/dummy
+  replace-in-console 117:literal/a, 3:event/ctrl-u
+  run [
+    editor-event-loop screen:address, console:address, 2:address:editor-data
+  ]
+  # cursor deletes to start of line
+  screen-should-contain [
+    .          .
+    .          .
+    .456       .
+    .          .
+  ]
+]
+
 scenario editor-deletes-to-end-of-line-with-ctrl-k [
   assume-screen 10:literal/width, 5:literal/height
   1:address:array:character <- new [123
@@ -2224,7 +2247,7 @@ scenario editor-deletes-to-end-of-line-with-ctrl-k [
   2:address:editor-data <- new-editor 1:address:array:character, screen:address, 0:literal/left, 10:literal/right
   # start on first line, press ctrl-k
   assume-console [
-    left-click 1, 0
+    left-click 1, 1
     type [k]  # ctrl-k
   ]
   3:event/ctrl-k <- merge 0:literal/text, 11:literal/ctrl-k, 0:literal/dummy, 0:literal/dummy
@@ -2248,7 +2271,7 @@ scenario editor-deletes-to-end-of-line-with-ctrl-k-2 [
   2:address:editor-data <- new-editor 1:address:array:character, screen:address, 0:literal/left, 10:literal/right
   # start on second line (no newline after), press ctrl-k
   assume-console [
-    left-click 2, 0
+    left-click 2, 1
     type [k]  # ctrl-k
   ]
   3:event/ctrl-k <- merge 0:literal/text, 11:literal/ctrl-k, 0:literal/dummy, 0:literal/dummy
@@ -2265,6 +2288,102 @@ scenario editor-deletes-to-end-of-line-with-ctrl-k-2 [
   ]
 ]
 
+scenario editor-deletes-to-end-of-line-with-ctrl-k-3 [
+  assume-screen 10:literal/width, 5:literal/height
+  1:address:array:character <- new [123
+456]
+  2:address:editor-data <- new-editor 1:address:array:character, screen:address, 0:literal/left, 10:literal/right
+  # start at end of line
+  assume-console [
+    left-click 1, 2
+    type [k]  # ctrl-k
+  ]
+  3:event/ctrl-k <- merge 0:literal/text, 11:literal/ctrl-k, 0:literal/dummy, 0:literal/dummy
+  replace-in-console 107:literal/k, 3:event/ctrl-k
+  run [
+    editor-event-loop screen:address, console:address, 2:address:editor-data
+  ]
+  # cursor deletes to end of line
+  screen-should-contain [
+    .          .
+    .12        .
+    .456       .
+    .          .
+  ]
+]
+
+scenario editor-deletes-to-end-of-line-with-ctrl-k-4 [
+  assume-screen 10:literal/width, 5:literal/height
+  1:address:array:character <- new [123
+456]
+  2:address:editor-data <- new-editor 1:address:array:character, screen:address, 0:literal/left, 10:literal/right
+  # start past end of line
+  assume-console [
+    left-click 1, 3
+    type [k]  # ctrl-k
+  ]
+  3:event/ctrl-k <- merge 0:literal/text, 11:literal/ctrl-k, 0:literal/dummy, 0:literal/dummy
+  replace-in-console 107:literal/k, 3:event/ctrl-k
+  run [
+    editor-event-loop screen:address, console:address, 2:address:editor-data
+  ]
+  # cursor deletes to end of line
+  screen-should-contain [
+    .          .
+    .123       .
+    .456       .
+    .          .
+  ]
+]
+
+scenario editor-deletes-to-end-of-line-with-ctrl-k-5 [
+  assume-screen 10:literal/width, 5:literal/height
+  1:address:array:character <- new [123
+456]
+  2:address:editor-data <- new-editor 1:address:array:character, screen:address, 0:literal/left, 10:literal/right
+  # start at end of text
+  assume-console [
+    left-click 2, 2
+    type [k]  # ctrl-k
+  ]
+  3:event/ctrl-k <- merge 0:literal/text, 11:literal/ctrl-k, 0:literal/dummy, 0:literal/dummy
+  replace-in-console 107:literal/k, 3:event/ctrl-k
+  run [
+    editor-event-loop screen:address, console:address, 2:address:editor-data
+  ]
+  # cursor deletes to end of line
+  screen-should-contain [
+    .          .
+    .123       .
+    .45        .
+    .          .
+  ]
+]
+
+scenario editor-deletes-to-end-of-line-with-ctrl-k-6 [
+  assume-screen 10:literal/width, 5:literal/height
+  1:address:array:character <- new [123
+456]
+  2:address:editor-data <- new-editor 1:address:array:character, screen:address, 0:literal/left, 10:literal/right
+  # start past end of text
+  assume-console [
+    left-click 2, 3
+    type [k]  # ctrl-k
+  ]
+  3:event/ctrl-k <- merge 0:literal/text, 11:literal/ctrl-k, 0:literal/dummy, 0:literal/dummy
+  replace-in-console 107:literal/k, 3:event/ctrl-k
+  run [
+    editor-event-loop screen:address, console:address, 2:address:editor-data
+  ]
+  # cursor deletes to end of line
+  screen-should-contain [
+    .          .
+    .123       .
+    .456       .
+    .          .
+  ]
+]
+
 scenario point-at-multiple-editors [
   assume-screen 30:literal/width, 5:literal/height
   # initialize both halves of screen