6811 - tile: left-cursor movement
Displayed cursor position is not yet correct, but insertions happen at the right cursor position.
This commit is contained in:
parent
4449f48781
commit
f32e575e38
|
@ -46,11 +46,26 @@ $process:body: {
|
|||
compare key, 0x445b1b # left-arrow
|
||||
{
|
||||
break-if-!=
|
||||
# TODO:
|
||||
# gap-left cursor-word
|
||||
# or
|
||||
# cursor-word = cursor-word->prev
|
||||
# gap-to-end cursor-word
|
||||
var cursor-word-ah/edi: (addr handle word) <- get self, cursor-word
|
||||
var _cursor-word/eax: (addr word) <- lookup *cursor-word-ah
|
||||
var cursor-word/ecx: (addr word) <- copy _cursor-word
|
||||
# if not at start, gap-left
|
||||
var at-start?/eax: boolean <- cursor-at-start? cursor-word
|
||||
compare at-start?, 0 # false
|
||||
{
|
||||
break-if-=
|
||||
cursor-left cursor-word
|
||||
break $process:body
|
||||
}
|
||||
# otherwise, move gap to end of prev word
|
||||
var prev-word-ah/esi: (addr handle word) <- get cursor-word, prev
|
||||
var prev-word/eax: (addr word) <- lookup *prev-word-ah
|
||||
{
|
||||
compare prev-word, 0
|
||||
break-if-=
|
||||
copy-object prev-word-ah, cursor-word-ah
|
||||
cursor-to-end prev-word
|
||||
}
|
||||
break $process:body
|
||||
}
|
||||
compare key, 0x435b1b # right-arrow
|
||||
|
|
|
@ -114,6 +114,18 @@ fn gap-to-end self: (addr gap-buffer) {
|
|||
}
|
||||
}
|
||||
|
||||
fn gap-at-start? _self: (addr gap-buffer) -> result/eax: boolean {
|
||||
var self/esi: (addr gap-buffer) <- copy _self
|
||||
var left/eax: (addr grapheme-stack) <- get self, left
|
||||
result <- grapheme-stack-empty? left
|
||||
}
|
||||
|
||||
fn gap-at-end? _self: (addr gap-buffer) -> result/eax: boolean {
|
||||
var self/esi: (addr gap-buffer) <- copy _self
|
||||
var right/eax: (addr grapheme-stack) <- get self, right
|
||||
result <- grapheme-stack-empty? right
|
||||
}
|
||||
|
||||
fn gap-right _self: (addr gap-buffer) -> result/eax: grapheme {
|
||||
$gap-right:body: {
|
||||
var self/esi: (addr gap-buffer) <- copy _self
|
||||
|
|
|
@ -98,6 +98,42 @@ fn add-grapheme-to-word _self: (addr word), c: grapheme {
|
|||
add-grapheme-at-gap data, c
|
||||
}
|
||||
|
||||
fn cursor-at-start? _self: (addr word) -> result/eax: boolean {
|
||||
var self/esi: (addr word) <- copy _self
|
||||
var data/eax: (addr gap-buffer) <- get self, data
|
||||
result <- gap-at-start? data
|
||||
}
|
||||
|
||||
fn cursor-at-end? _self: (addr word) -> result/eax: boolean {
|
||||
var self/esi: (addr word) <- copy _self
|
||||
var data/eax: (addr gap-buffer) <- get self, data
|
||||
result <- gap-at-end? data
|
||||
}
|
||||
|
||||
fn cursor-left _self: (addr word) {
|
||||
var self/esi: (addr word) <- copy _self
|
||||
var data/eax: (addr gap-buffer) <- get self, data
|
||||
var dummy/eax: grapheme <- gap-left data
|
||||
}
|
||||
|
||||
fn cursor-right _self: (addr word) {
|
||||
var self/esi: (addr word) <- copy _self
|
||||
var data/eax: (addr gap-buffer) <- get self, data
|
||||
var dummy/eax: grapheme <- gap-right data
|
||||
}
|
||||
|
||||
fn cursor-to-start _self: (addr word) {
|
||||
var self/esi: (addr word) <- copy _self
|
||||
var data/eax: (addr gap-buffer) <- get self, data
|
||||
gap-to-start data
|
||||
}
|
||||
|
||||
fn cursor-to-end _self: (addr word) {
|
||||
var self/esi: (addr word) <- copy _self
|
||||
var data/eax: (addr gap-buffer) <- get self, data
|
||||
gap-to-end data
|
||||
}
|
||||
|
||||
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
|
||||
|
|
Loading…
Reference in New Issue