about summary refs log tree commit diff stats
path: root/apps/tile/word.mu
diff options
context:
space:
mode:
authorKartik Agaram <vc@akkartik.com>2020-09-19 23:16:23 -0700
committerKartik Agaram <vc@akkartik.com>2020-09-19 23:16:23 -0700
commit593b95246c971bce26650141a7e3a0502c4abedb (patch)
treefbd4ed5a83633ca356d382b55da7973266ef18fb /apps/tile/word.mu
parente43ff485e6fcff8cbf004d8db00c489a60437094 (diff)
downloadmu-593b95246c971bce26650141a7e3a0502c4abedb.tar.gz
6814 - tile: backspace deletes char or word
Diffstat (limited to 'apps/tile/word.mu')
-rw-r--r--apps/tile/word.mu24
1 files changed, 24 insertions, 0 deletions
diff --git a/apps/tile/word.mu b/apps/tile/word.mu
index cbc3c90d..9145f1d5 100644
--- a/apps/tile/word.mu
+++ b/apps/tile/word.mu
@@ -140,6 +140,30 @@ fn cursor-index _self: (addr word) -> result/eax: int {
   result <- gap-index data
 }
 
+fn delete-before-cursor _self: (addr word) {
+  var self/esi: (addr word) <- copy _self
+  var data/eax: (addr gap-buffer) <- get self, data
+  delete-before-gap data
+}
+
+fn delete-next _self: (addr word) {
+$delete-next:body: {
+  var self/esi: (addr word) <- copy _self
+  var next-ah/edi: (addr handle word) <- get self, next
+  var next/eax: (addr word) <- lookup *next-ah
+  compare next, 0
+  break-if-= $delete-next:body
+  var next-next-ah/ecx: (addr handle word) <- get next, next
+  var self-ah/esi: (addr handle word) <- get next, prev
+  copy-object next-next-ah, next-ah
+  var new-next/eax: (addr word) <- lookup *next-next-ah
+  compare new-next, 0
+  break-if-= $delete-next:body
+  var dest/eax: (addr handle word) <- get new-next, prev
+  copy-object self-ah, dest
+}
+}
+
 fn print-word screen: (addr screen), _self: (addr word) {
   var self/esi: (addr word) <- copy _self
   var data/eax: (addr gap-buffer) <- get self, data