From 1df3d62a83f7d5dc09e82a4fdac31ce4d08da02b Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Sun, 28 May 2017 13:22:25 -0700 Subject: 3884 - per-line scroll in edit/ app --- edit/003-shortcuts.mu | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) (limited to 'edit/003-shortcuts.mu') diff --git a/edit/003-shortcuts.mu b/edit/003-shortcuts.mu index 9aa6b95d..32d40823 100644 --- a/edit/003-shortcuts.mu +++ b/edit/003-shortcuts.mu @@ -2176,6 +2176,7 @@ after [ # takes a pointer into the doubly-linked list, scans ahead at most 'max' # positions until the next newline +# returns original if no next newline # beware: never return null pointer. def before-start-of-next-line original:&:duplex-list:char, max:num -> curr:&:duplex-list:char [ local-scope @@ -2555,6 +2556,7 @@ after [ # takes a pointer into the doubly-linked list, scans back to before start of # previous *wrapped* line +# returns original if no next newline # beware: never return null pointer def before-previous-line in:&:duplex-list:char, editor:&:editor -> out:&:duplex-list:char [ local-scope @@ -3489,3 +3491,62 @@ gxy .dxy . ] ] + +# ctrl-e - scroll up by one line +# todo: scenarios + +after [ + { + scroll-up?:bool <- equal c, 5/ctrl-e + break-unless scroll-up? + + do-render?:bool, editor <- line-up editor, screen-height + undo-coalesce-tag:num <- copy 5/line-up + + return do-render? + } +] + +def line-up editor:&:editor, screen-height:num -> do-render?:bool, editor:&:editor [ + local-scope + load-ingredients + left:num <- get *editor, left:offset + right:num <- get *editor, right:offset + max:num <- subtract right, left + old-top:&:duplex-list:char <- get *editor, top-of-screen:offset + new-top:&:duplex-list:char <- before-start-of-next-line old-top, max + movement?:bool <- not-equal old-top, new-top + { + break-unless movement? + *editor <- put *editor, top-of-screen:offset, new-top + } + return movement? +] + +# ctrl-d - scroll down by one line +# todo: scenarios + +after [ + { + scroll-down?:bool <- equal c, 4/ctrl-d + break-unless scroll-down? + + do-render?:bool, editor <- line-down editor, screen-height + undo-coalesce-tag:num <- copy 6/line-down + + return do-render? + } +] + +def line-down editor:&:editor, screen-height:num -> do-render?:bool, editor:&:editor [ + local-scope + load-ingredients + old-top:&:duplex-list:char <- get *editor, top-of-screen:offset + new-top:&:duplex-list:char <- before-previous-line old-top, editor + movement?:bool <- not-equal old-top, new-top + { + break-unless movement? + *editor <- put *editor, top-of-screen:offset, new-top + } + return movement? +] -- cgit 1.4.1-2-gfad0