From 298f8065857630e414d84e4ee785a6d17e5f99bb Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Tue, 5 Jul 2016 01:08:00 -0700 Subject: 3102 --- html/edit/005-sandbox.mu.html | 246 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 231 insertions(+), 15 deletions(-) (limited to 'html/edit/005-sandbox.mu.html') diff --git a/html/edit/005-sandbox.mu.html b/html/edit/005-sandbox.mu.html index e3523d27..a4aa964c 100644 --- a/html/edit/005-sandbox.mu.html +++ b/html/edit/005-sandbox.mu.html @@ -50,7 +50,7 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color hide-screen 0/screen env:address:programming-environment-data <- new-programming-environment 0/screen, initial-recipe, initial-sandbox env <- restore-sandboxes env - render-all 0/screen, env + render-all 0/screen, env, render event-loop 0/screen, 0/console, env # never gets here ] @@ -167,7 +167,7 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color screen <- update-status screen, [running... ], 245/grey error?:boolean, env, screen <- run-sandboxes env, screen # F4 might update warnings and results on both sides - screen <- render-all screen, env + screen <- render-all screen, env, render { break-if error? screen <- update-status screen, [ ], 245/grey @@ -269,7 +269,7 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color } ] -def! render-sandbox-side screen:address:screen, env:address:programming-environment-data -> screen:address:screen, env:address:programming-environment-data [ +def! render-sandbox-side screen:address:screen, env:address:programming-environment-data, {render-editor: (recipe (address screen) (address editor-data) -> number number (address screen) (address editor-data))} -> screen:address:screen, env:address:programming-environment-data [ local-scope load-ingredients trace 11, [app], [render sandbox side] @@ -282,7 +282,7 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color { render-current-sandbox?:boolean <- equal render-from, -1 break-unless render-current-sandbox? - row, column, screen, current-sandbox <- render screen, current-sandbox + row, column, screen, current-sandbox <- call render-editor, screen, current-sandbox clear-screen-from screen, row, column, left, right row <- add row, 1 } @@ -327,7 +327,7 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color { break-unless empty-screen? <render-sandbox-response> - row, screen <- render screen, sandbox-response, left, right, 245/grey, row + row, screen <- render-text screen, sandbox-response, left, right, 245/grey, row } +render-sandbox-end at-bottom?:boolean <- greater-or-equal row, screen-height @@ -388,6 +388,68 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color copy-button-right:number <- subtract delete-button-left, 1 ] +# print a text 's' to 'editor' in 'color' starting at 'row' +# clear rest of last line, move cursor to next line +def render-text screen:address:screen, s:address:array:character, left:number, right:number, color:number, row:number -> row:number, screen:address:screen [ + local-scope + load-ingredients + return-unless s + column:number <- copy left + screen <- move-cursor screen, row, column + screen-height:number <- screen-height screen + i:number <- copy 0 + len:number <- length *s + { + +next-character + done?:boolean <- greater-or-equal i, len + break-if done? + done? <- greater-or-equal row, screen-height + break-if done? + c:character <- index *s, i + { + # at right? wrap. + at-right?:boolean <- equal column, right + break-unless at-right? + # print wrap icon + wrap-icon:character <- copy 8617/loop-back-to-left + print screen, wrap-icon, 245/grey + column <- copy left + row <- add row, 1 + screen <- move-cursor screen, row, column + loop +next-character:label # retry i + } + i <- add i, 1 + { + # newline? move to left rather than 0 + newline?:boolean <- equal c, 10/newline + break-unless newline? + # clear rest of line in this window + { + done?:boolean <- greater-than column, right + break-if done? + space:character <- copy 32/space + print screen, space + column <- add column, 1 + loop + } + row <- add row, 1 + column <- copy left + screen <- move-cursor screen, row, column + loop +next-character:label + } + print screen, c, color + column <- add column, 1 + loop + } + was-at-left?:boolean <- equal column, left + clear-line-until screen, right + { + break-if was-at-left? + row <- add row, 1 + } + move-cursor screen, row, left +] + # assumes programming environment has no sandboxes; restores them from previous session def restore-sandboxes env:address:programming-environment-data -> env:address:programming-environment-data [ local-scope @@ -428,7 +490,7 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color load-ingredients return-unless sandbox-screen # print 'screen:' - row <- render screen, [screen:], left, right, 245/grey, row + row <- render-text screen, [screen:], left, right, 245/grey, row screen <- move-cursor screen, row, left # start printing sandbox-screen column:number <- copy left @@ -611,6 +673,160 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color ] ] +# keep the bottom of recipes from scrolling off the screen + +scenario scrolling-down-past-bottom-of-recipe-editor [ + local-scope + trace-until 100/app + assume-screen 100/width, 10/height + env:address:programming-environment-data <- new-programming-environment screen:address:screen, [], [] + render-all screen, env, render + assume-console [ + press enter + press down-arrow + ] + event-loop screen, console:address:console, env + # no scroll + screen-should-contain [ + . run (F4) . + . ┊ . + . ┊━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━. + .┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┊ . + . ┊ . + ] +] + +scenario cursor-down-in-recipe-editor [ + local-scope + trace-until 100/app + assume-screen 100/width, 10/height + env:address:programming-environment-data <- new-programming-environment screen:address:screen, [], [] + render-all screen, env, render + assume-console [ + press enter + press up-arrow + press down-arrow # while cursor isn't at bottom + ] + event-loop screen, console:address:console, env + cursor:character <- copy 9251/␣ + print screen:address:screen, cursor + # cursor moves back to bottom + screen-should-contain [ + . run (F4) . + . ┊ . + .␣ ┊━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━. + .┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┊ . + . ┊ . + ] +] + +# we'll not use the recipe-editor's 'bottom' element directly, because later +# layers will add other stuff to the left side below the editor (error messages) + +container programming-environment-data [ + recipe-bottom:number +] + +after <render-recipe-components-end> [ + *env <- put *env, recipe-bottom:offset, row +] + +after <global-keypress> [ + { + break-if sandbox-in-focus? + down-arrow?:boolean <- equal k, 65516/down-arrow + break-unless down-arrow? + recipe-editor:address:editor-data <- get *env, recipes:offset + recipe-cursor-row:number <- get *recipe-editor, cursor-row:offset + recipe-editor-bottom:number <- get *recipe-editor, bottom:offset + at-bottom-of-editor?:boolean <- greater-or-equal recipe-cursor-row, recipe-editor-bottom + break-unless at-bottom-of-editor? + more-to-scroll?:boolean <- more-to-scroll? env, screen + break-if more-to-scroll? + loop +next-event:label + } + { + break-if sandbox-in-focus? + page-down?:boolean <- equal k, 65518/page-down + break-unless page-down? + more-to-scroll?:boolean <- more-to-scroll? env, screen + break-if more-to-scroll? + loop +next-event:label + } +] + +after <global-type> [ + { + break-if sandbox-in-focus? + page-down?:boolean <- equal k, 6/ctrl-f + break-unless page-down? + more-to-scroll?:boolean <- more-to-scroll? env, screen + break-if more-to-scroll? + loop +next-event:label + } +] + +def more-to-scroll? env:address:programming-environment-data, screen:address:screen -> result:boolean [ + local-scope + load-ingredients + recipe-bottom:number <- get *env, recipe-bottom:offset + height:number <- screen-height screen + result <- greater-or-equal recipe-bottom, height +] + +scenario scrolling-down-past-bottom-of-recipe-editor-2 [ + local-scope + trace-until 100/app + assume-screen 100/width, 10/height + env:address:programming-environment-data <- new-programming-environment screen:address:screen, [], [] + render-all screen, env, render + assume-console [ + # add a line + press enter + # cursor back to top line + press up-arrow + # try to scroll + press page-down # or ctrl-f + ] + event-loop screen, console:address:console, env + # no scroll, and cursor remains at top line + screen-should-contain [ + . run (F4) . + . ┊ . + . ┊━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━. + .┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┊ . + . ┊ . + ] +] + +scenario scrolling-down-past-bottom-of-recipe-editor-3 [ + local-scope + trace-until 100/app + assume-screen 100/width, 10/height + env:address:programming-environment-data <- new-programming-environment screen:address:screen, [], [ab +cd] + render-all screen, env, render + assume-console [ + # add a line + press enter + # switch to sandbox + press ctrl-n + # move cursor + press down-arrow + ] + event-loop screen, console:address:console, env + cursor:character <- copy 9251/␣ + print screen:address:screen, cursor + # no scroll on recipe side, cursor moves on sandbox side + screen-should-contain [ + . run (F4) . + . ┊ab . + . ┊␣d . + .┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┊━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━. + . ┊ . + ] +] + # scrolling through sandboxes scenario scrolling-down-past-bottom-of-sandbox-editor [ @@ -620,7 +836,7 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color 1:address:array:character <- new [] 2:address:array:character <- new [add 2, 2] 3:address:programming-environment-data <- new-programming-environment screen:address:screen, 1:address:array:character, 2:address:array:character - render-all screen, 3:address:programming-environment-data + render-all screen, 3:address:programming-environment-data, render assume-console [ # create a sandbox press F4 @@ -690,7 +906,7 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color *env <- put *env, render-from:offset, render-from } hide-screen screen - screen <- render-sandbox-side screen, env + screen <- render-sandbox-side screen, env, render show-screen screen jump +finish-event:label } @@ -721,7 +937,7 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color render-from <- subtract render-from, 1 *env <- put *env, render-from:offset, render-from hide-screen screen - screen <- render-sandbox-side screen, env + screen <- render-sandbox-side screen, env, render show-screen screen jump +finish-event:label } @@ -755,14 +971,14 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color # create a sandbox 2:address:array:character <- new [add 2, 2] 3:address:programming-environment-data <- new-programming-environment screen:address:screen, 1:address:array:character, 2:address:array:character - render-all screen, 3:address:programming-environment-data + render-all screen, 3:address:programming-environment-data, render assume-console [ press F4 ] event-loop screen:address:screen, console:address:console, 3:address:programming-environment-data # hit 'down' in recipe editor assume-console [ - press down-arrow + press page-down ] run [ event-loop screen:address:screen, console:address:console, 3:address:programming-environment-data @@ -772,8 +988,8 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color # cursor moves down on recipe side screen-should-contain [ . run (F4) . - . ┊ . - .␣ ┊━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━. + .␣ ┊ . + . ┊━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━. .┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┊0 edit copy delete . . ┊add 2, 2 . ] @@ -786,7 +1002,7 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color 1:address:array:character <- new [] 2:address:array:character <- new [] 3:address:programming-environment-data <- new-programming-environment screen:address:screen, 1:address:array:character, 2:address:array:character - render-all screen, 3:address:programming-environment-data + render-all screen, 3:address:programming-environment-data, render # create 2 sandboxes assume-console [ press ctrl-n @@ -938,7 +1154,7 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color 1:address:array:character <- new [] 2:address:array:character <- new [] 3:address:programming-environment-data <- new-programming-environment screen:address:screen, 1:address:array:character, 2:address:array:character - render-all screen, 3:address:programming-environment-data + render-all screen, 3:address:programming-environment-data, render # create a sandbox assume-console [ press ctrl-n -- cgit 1.4.1-2-gfad0