about summary refs log tree commit diff stats
path: root/edit.mu
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2015-08-04 20:55:58 -0700
committerKartik K. Agaram <vc@akkartik.com>2015-08-04 20:55:58 -0700
commit11312cecee834fc91dd4d4282c2e1b339519eaef (patch)
treea03a9386c56551467faea6921f2dd9702b12cf4a /edit.mu
parent8641181d9fe8ad72f5b00a6909f468e6f7af16d7 (diff)
downloadmu-11312cecee834fc91dd4d4282c2e1b339519eaef.tar.gz
1933 - bugfix: backspace now works on right side
Diffstat (limited to 'edit.mu')
-rw-r--r--edit.mu35
1 files changed, 33 insertions, 2 deletions
diff --git a/edit.mu b/edit.mu
index 14a19e27..a6359b4f 100644
--- a/edit.mu
+++ b/edit.mu
@@ -592,6 +592,7 @@ recipe handle-keyboard-event [
   {
     c:address:character <- maybe-convert e, text:variant
     break-unless c
+#?     trace [app], [handle-keyboard-event: special character] #? 1
     # exceptions for special characters go here
     +handle-special-character
     # otherwise type it in
@@ -1235,6 +1236,7 @@ recipe delete-before-cursor [
   # if at start of text (before-cursor at § sentinel), return
   prev:address:duplex-list <- prev-duplex *before-cursor
   reply-unless prev
+#?   trace [app], [delete-before-cursor] #? 1
   editor <- move-cursor-coordinates-left editor
   remove-duplex *before-cursor
   *before-cursor <- copy prev
@@ -1246,9 +1248,10 @@ recipe move-cursor-coordinates-left [
   before-cursor:address:duplex-list <- get *editor, before-cursor:offset
   cursor-row:address:number <- get-address *editor, cursor-row:offset
   cursor-column:address:number <- get-address *editor, cursor-column:offset
+  left:number <- get *editor, left:offset
   # if not at left margin, move one character left
   {
-    at-left-margin?:boolean <- equal *cursor-column, 0
+    at-left-margin?:boolean <- equal *cursor-column, left
     break-if at-left-margin?
 #?     trace [app], [decrementing cursor column] #? 1
     *cursor-column <- subtract *cursor-column, 1
@@ -1266,7 +1269,7 @@ recipe move-cursor-coordinates-left [
 #?     trace [app], [switching to previous line] #? 1
     d:address:duplex-list <- get *editor, data:offset
     end-of-line:number <- previous-line-length before-cursor, d
-    *cursor-column <- copy end-of-line
+    *cursor-column <- add left, end-of-line
     reply editor/same-as-ingredient:0
   }
   # case 2: if previous-character was not newline, we're just at a wrapped line
@@ -3004,6 +3007,34 @@ scenario editor-in-focus-keeps-cursor [
   ]
 ]
 
+scenario backspace-in-sandbox-editor-joins-lines [
+  $close-trace
+  assume-screen 30/width, 5/height
+  # initialize sandbox side with two lines
+  1:address:array:character <- new []
+  2:address:array:character <- new [abc
+def]
+  # position cursor at start of second line and hit backspace
+  assume-console [
+    left-click 2, 16
+    type [«]
+  ]
+  3:event/backspace <- merge 0/text, 8/backspace, 0/dummy, 0/dummy
+  replace-in-console 171/«, 3:event/backspace
+  run [
+    4:address:programming-environment-data <- new-programming-environment screen:address, 1:address:array:character, 2:address:array:character
+    event-loop screen:address, console:address, 4:address:programming-environment-data
+    screen:address <- print-character screen:address, 9251/␣
+  ]
+  # cursor moves to end of old line
+  screen-should-contain [
+    .           run (F4)           .
+    .               ┊abc␣ef        .
+    .┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┊━━━━━━━━━━━━━━.
+    .               ┊              .
+  ]
+]
+
 recipe render-all [
   local-scope
   screen:address <- next-ingredient