parent
0f64a45c35
commit
b51797773d
|
@ -7,7 +7,7 @@ def! main text:text [
|
|||
load-ingredients
|
||||
open-console
|
||||
clear-screen 0/screen # non-scrolling app
|
||||
editor:&:editor <- new-editor text, 5/left, 45/right
|
||||
editor:&:editor <- new-editor text, 5/left, 10/right
|
||||
editor-render 0/screen, editor
|
||||
editor-event-loop 0/screen, 0/console, editor
|
||||
close-console
|
||||
|
|
|
@ -1012,15 +1012,13 @@ def move-to-previous-line editor:&:editor -> go-render?:bool, editor:&:editor [
|
|||
{
|
||||
# if cursor not at top, move it
|
||||
break-if already-at-top?
|
||||
# if not at newline, move to start of line (previous newline)
|
||||
# if not at start of screen line, move to start of screen line (previous newline)
|
||||
# then scan back another line
|
||||
# if either step fails, give up without modifying cursor or coordinates
|
||||
curr:&:duplex-list:char <- copy before-cursor
|
||||
old:&:duplex-list:char <- copy curr
|
||||
{
|
||||
c2:char <- get *curr, value:offset
|
||||
at-newline?:bool <- equal c2, 10/newline
|
||||
break-if at-newline?
|
||||
break-unless cursor-column
|
||||
curr <- before-previous-screen-line curr, editor
|
||||
no-motion?:bool <- equal curr, old
|
||||
return-if no-motion?
|
||||
|
@ -1177,6 +1175,92 @@ ghi]
|
|||
]
|
||||
]
|
||||
|
||||
scenario editor-moves-to-top-line-in-presence-of-wrapped-line [
|
||||
local-scope
|
||||
assume-screen 10/width, 5/height
|
||||
s:text <- new [abcde]
|
||||
e:&:editor <- new-editor s, 0/left, 5/right
|
||||
editor-render screen, e
|
||||
screen-should-contain [
|
||||
. .
|
||||
.abcd↩ .
|
||||
.e .
|
||||
.┈┈┈┈┈ .
|
||||
]
|
||||
$clear-trace
|
||||
assume-console [
|
||||
left-click 2, 0
|
||||
press up-arrow
|
||||
]
|
||||
run [
|
||||
editor-event-loop screen, console, e
|
||||
3:num/raw <- get *e, cursor-row:offset
|
||||
4:num/raw <- get *e, cursor-column:offset
|
||||
]
|
||||
memory-should-contain [
|
||||
3 <- 1
|
||||
4 <- 0
|
||||
]
|
||||
check-trace-count-for-label 0, [print-character]
|
||||
assume-console [
|
||||
type [0]
|
||||
]
|
||||
run [
|
||||
editor-event-loop screen, console, e
|
||||
]
|
||||
screen-should-contain [
|
||||
. .
|
||||
.0abc↩ .
|
||||
.de .
|
||||
.┈┈┈┈┈ .
|
||||
]
|
||||
]
|
||||
|
||||
scenario editor-moves-to-top-line-in-presence-of-wrapped-line-2 [
|
||||
local-scope
|
||||
assume-screen 10/width, 5/height
|
||||
s:text <- new [abc
|
||||
defgh]
|
||||
e:&:editor <- new-editor s, 0/left, 5/right
|
||||
editor-render screen, e
|
||||
screen-should-contain [
|
||||
. .
|
||||
.abc .
|
||||
.defg↩ .
|
||||
.h .
|
||||
.┈┈┈┈┈ .
|
||||
]
|
||||
$clear-trace
|
||||
assume-console [
|
||||
left-click 3, 0
|
||||
press up-arrow
|
||||
press up-arrow
|
||||
]
|
||||
run [
|
||||
editor-event-loop screen, console, e
|
||||
3:num/raw <- get *e, cursor-row:offset
|
||||
4:num/raw <- get *e, cursor-column:offset
|
||||
]
|
||||
memory-should-contain [
|
||||
3 <- 1
|
||||
4 <- 0
|
||||
]
|
||||
check-trace-count-for-label 0, [print-character]
|
||||
assume-console [
|
||||
type [0]
|
||||
]
|
||||
run [
|
||||
editor-event-loop screen, console, e
|
||||
]
|
||||
screen-should-contain [
|
||||
. .
|
||||
.0abc .
|
||||
.defg↩ .
|
||||
.h .
|
||||
.┈┈┈┈┈ .
|
||||
]
|
||||
]
|
||||
|
||||
# down arrow
|
||||
|
||||
scenario editor-moves-to-next-line-with-down-arrow [
|
||||
|
|
|
@ -1012,9 +1012,7 @@ def move-to-previous-line editor:&:editor -> editor:&:editor [
|
|||
curr:&:duplex-list:char <- copy before-cursor
|
||||
old:&:duplex-list:char <- copy curr
|
||||
{
|
||||
c2:char <- get *curr, value:offset
|
||||
at-newline?:bool <- equal c2, 10/newline
|
||||
break-if at-newline?
|
||||
break-unless cursor-column
|
||||
curr <- before-previous-screen-line curr, editor
|
||||
no-motion?:bool <- equal curr, old
|
||||
return-if no-motion?
|
||||
|
@ -1164,6 +1162,92 @@ ghi]
|
|||
]
|
||||
]
|
||||
|
||||
scenario editor-moves-to-top-line-in-presence-of-wrapped-line [
|
||||
local-scope
|
||||
assume-screen 10/width, 5/height
|
||||
s:text <- new [abcde]
|
||||
e:&:editor <- new-editor s, 0/left, 5/right
|
||||
editor-render screen, e
|
||||
screen-should-contain [
|
||||
. .
|
||||
.abcd↩ .
|
||||
.e .
|
||||
.┈┈┈┈┈ .
|
||||
]
|
||||
$clear-trace
|
||||
assume-console [
|
||||
left-click 2, 0
|
||||
press up-arrow
|
||||
]
|
||||
run [
|
||||
editor-event-loop screen, console, e
|
||||
3:num/raw <- get *e, cursor-row:offset
|
||||
4:num/raw <- get *e, cursor-column:offset
|
||||
]
|
||||
memory-should-contain [
|
||||
3 <- 1
|
||||
4 <- 0
|
||||
]
|
||||
check-trace-count-for-label 0, [print-character]
|
||||
assume-console [
|
||||
type [0]
|
||||
]
|
||||
run [
|
||||
editor-event-loop screen, console, e
|
||||
]
|
||||
screen-should-contain [
|
||||
. .
|
||||
.0abc↩ .
|
||||
.de .
|
||||
.┈┈┈┈┈ .
|
||||
]
|
||||
]
|
||||
|
||||
scenario editor-moves-to-top-line-in-presence-of-wrapped-line-2 [
|
||||
local-scope
|
||||
assume-screen 10/width, 5/height
|
||||
s:text <- new [abc
|
||||
defgh]
|
||||
e:&:editor <- new-editor s, 0/left, 5/right
|
||||
editor-render screen, e
|
||||
screen-should-contain [
|
||||
. .
|
||||
.abc .
|
||||
.defg↩ .
|
||||
.h .
|
||||
.┈┈┈┈┈ .
|
||||
]
|
||||
$clear-trace
|
||||
assume-console [
|
||||
left-click 3, 0
|
||||
press up-arrow
|
||||
press up-arrow
|
||||
]
|
||||
run [
|
||||
editor-event-loop screen, console, e
|
||||
3:num/raw <- get *e, cursor-row:offset
|
||||
4:num/raw <- get *e, cursor-column:offset
|
||||
]
|
||||
memory-should-contain [
|
||||
3 <- 1
|
||||
4 <- 0
|
||||
]
|
||||
check-trace-count-for-label 0, [print-character]
|
||||
assume-console [
|
||||
type [0]
|
||||
]
|
||||
run [
|
||||
editor-event-loop screen, console, e
|
||||
]
|
||||
screen-should-contain [
|
||||
. .
|
||||
.0abc .
|
||||
.defg↩ .
|
||||
.h .
|
||||
.┈┈┈┈┈ .
|
||||
]
|
||||
]
|
||||
|
||||
# down arrow
|
||||
|
||||
scenario editor-moves-to-next-line-with-down-arrow [
|
||||
|
|
Loading…
Reference in New Issue