about summary refs log tree commit diff stats
path: root/edit.mu
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2015-07-29 19:42:24 -0700
committerKartik K. Agaram <vc@akkartik.com>2015-07-29 19:42:24 -0700
commit3d43239929c255bea54f325341edf84be144f321 (patch)
tree70f4028ff11182b08572ab748fb87466b13d275a /edit.mu
parentdf17810f0a0c677bcc61dbf1c98e4fc1343de05e (diff)
downloadmu-3d43239929c255bea54f325341edf84be144f321.tar.gz
1891
Diffstat (limited to 'edit.mu')
-rw-r--r--edit.mu26
1 files changed, 13 insertions, 13 deletions
diff --git a/edit.mu b/edit.mu
index 6ff18546..35f38cfb 100644
--- a/edit.mu
+++ b/edit.mu
@@ -1037,37 +1037,37 @@ 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
-  # save previous character, then delete it
-  previous-character:character <- get **before-cursor, value:offset
-  remove-duplex *before-cursor
-  *before-cursor <- copy prev
-  # update cursor coordinates
+  # 1. update cursor coordinates
   cursor-row:address:number <- get-address *editor, cursor-row:offset
   cursor-column:address:number <- get-address *editor, cursor-column:offset
-  # 1. if not at left margin, move one character left
+  # 1.1. if not at left margin, move one character left
   {
     at-left-margin?:boolean <- equal *cursor-column, 0
     break-if at-left-margin?
     *cursor-column <- subtract *cursor-column, 1
-    reply
+    jump +delete:label
   }
-  # 2. if at left margin, we must move to previous row:
+  # 1.2. if at left margin, we must move to previous row:
   assert *cursor-row, [unimplemented: moving cursor above top of screen]
   *cursor-row <- subtract *cursor-row, 1
   {
-    # 2a. if previous character was newline, figure out how long the previous line is
+    # 1.2.1. if previous character was newline, figure out how long the previous line is
+    previous-character:character <- get **before-cursor, value:offset
     previous-character-is-newline?:boolean <- equal previous-character, 10/newline
     break-unless previous-character-is-newline?
     # compute length of previous line
     d:address:duplex-list <- get *editor, data:offset
     end-of-line:number <- previous-line-length *before-cursor, d
-    # fudge factor: we're already at the last character, so we didn't count it
-    *cursor-column <- add end-of-line, 1
-    reply
+    *cursor-column <- copy end-of-line
+    jump +delete:label
   }
-  # 2b. if previous-character was not newline, we're just at a wrapped line
+  # 1.2.2. if previous-character was not newline, we're just at a wrapped line
   right:number <- get *editor, right:offset
   *cursor-column <- subtract right, 1  # leave room for wrap icon
+  # 2. delete previous character
+  +delete
+  remove-duplex *before-cursor
+  *before-cursor <- copy prev
 ]
 
 # takes a pointer 'curr' into the doubly-linked list and its sentinel, counts