about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2017-05-20 01:41:08 -0700
committerKartik K. Agaram <vc@akkartik.com>2017-05-20 01:41:08 -0700
commit7f5600570a24fadb07015ad1b78b1989a8d364f2 (patch)
treef7ef68acf34f2215464580a83d618f1f18e5b2ac
parent53251357c969c3ae7bb3a17b5e55114e69f0e85d (diff)
downloadmu-7f5600570a24fadb07015ad1b78b1989a8d364f2.tar.gz
3871
Strange race condition: if I repeatedly press <enter> and <backspace> so
the screen is constantly playing catch up, it will sometimes fail these
assertions when it does eventually catch up. Somehow the cursor ends up
misplaced. Let's just take them out. It's likely some low-level implementation
detail of the terminal.
-rw-r--r--edit/005-sandbox.mu6
-rw-r--r--html/edit/005-sandbox.mu.html1796
-rw-r--r--html/edit/006-sandbox-copy.mu.html2
-rw-r--r--html/edit/007-sandbox-delete.mu.html2
-rw-r--r--html/edit/008-sandbox-edit.mu.html2
-rw-r--r--html/edit/009-sandbox-test.mu.html6
-rw-r--r--html/edit/010-sandbox-trace.mu.html2
-rw-r--r--html/edit/011-errors.mu.html6
8 files changed, 905 insertions, 917 deletions
diff --git a/edit/005-sandbox.mu b/edit/005-sandbox.mu
index 02bdd284..27b4a2ec 100644
--- a/edit/005-sandbox.mu
+++ b/edit/005-sandbox.mu
@@ -326,14 +326,8 @@ def render-sandbox-menu screen:&:screen, sandbox-index:num, left:num, right:num
   clear-line-until screen, start-buttons, 245/grey
   print screen, [edit], 232/black, 94/background-orange
   clear-line-until screen, edit-button-right, 94/background-orange
-  _, col:num <- cursor-position screen
-  at-start-of-copy-button?:bool <- equal col, copy-button-left
-  assert at-start-of-copy-button?, [aaa]
   print screen, [copy], 232/black, 58/background-green
   clear-line-until screen, copy-button-right, 58/background-green
-  _, col:num <- cursor-position screen
-  at-start-of-delete-button?:bool <- equal col, delete-button-left
-  assert at-start-of-delete-button?, [bbb]
   print screen, [delete], 232/black, 52/background-red
   clear-line-until screen, right, 52/background-red
 ]
diff --git a/html/edit/005-sandbox.mu.html b/html/edit/005-sandbox.mu.html
index caebf9e5..b08141b5 100644
--- a/html/edit/005-sandbox.mu.html
+++ b/html/edit/005-sandbox.mu.html
@@ -75,7 +75,7 @@ if ('onhashchange' in window) {
 <span id="L12" class="LineNr">  12 </span>  open-console
 <span id="L13" class="LineNr">  13 </span>  <a href='../081print.mu.html#L33'>clear-screen</a> <span class="Constant">0/screen</span>  <span class="Comment"># non-scrolling app</span>
 <span id="L14" class="LineNr">  14 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <span class="Constant">0/filesystem</span>, <span class="Constant">0/screen</span>
-<span id="L15" class="LineNr">  15 </span>  env <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L440'>restore-sandboxes</a> env
+<span id="L15" class="LineNr">  15 </span>  env <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L434'>restore-sandboxes</a> env
 <span id="L16" class="LineNr">  16 </span>  <a href='004-programming-environment.mu.html#L400'>render-all</a> <span class="Constant">0/screen</span>, env, <a href='001-editor.mu.html#L122'>render</a>
 <span id="L17" class="LineNr">  17 </span>  <a href='004-programming-environment.mu.html#L39'>event-loop</a> <span class="Constant">0/screen</span>, <span class="Constant">0/console</span>, env, <span class="Constant">0/filesystem</span>
 <span id="L18" class="LineNr">  18 </span>]
@@ -212,7 +212,7 @@ if ('onhashchange' in window) {
 <span id="L149" class="LineNr"> 149 </span><span class="Constant">  <a href='005-sandbox.mu.html#L149'>&lt;run-sandboxes-begin&gt;</a></span>
 <span id="L150" class="LineNr"> 150 </span>  current-sandbox:&amp;:editor <span class="Special">&lt;-</span> get *env, <span class="Constant">current-sandbox:offset</span>
 <span id="L151" class="LineNr"> 151 </span>  <span class="Delimiter">{</span>
-<span id="L152" class="LineNr"> 152 </span>  <span class="Conceal">¦</span> sandbox-contents:text <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L632'>editor-contents</a> current-sandbox
+<span id="L152" class="LineNr"> 152 </span>  <span class="Conceal">¦</span> sandbox-contents:text <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L626'>editor-contents</a> current-sandbox
 <span id="L153" class="LineNr"> 153 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> sandbox-contents
 <span id="L154" class="LineNr"> 154 </span>  <span class="Conceal">¦</span> <span class="Comment"># if contents exist, first save them</span>
 <span id="L155" class="LineNr"> 155 </span>  <span class="Conceal">¦</span> <span class="Comment"># run them and turn them into a new sandbox</span>
@@ -257,7 +257,7 @@ if ('onhashchange' in window) {
 <span id="L194" class="LineNr"> 194 </span>  <span class="Constant">local-scope</span>
 <span id="L195" class="LineNr"> 195 </span>  <span class="Constant">load-ingredients</span>
 <span id="L196" class="LineNr"> 196 </span>  recipes:&amp;:editor <span class="Special">&lt;-</span> get *env, <span class="Constant">recipes:offset</span>
-<span id="L197" class="LineNr"> 197 </span>  in:text <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L632'>editor-contents</a> recipes
+<span id="L197" class="LineNr"> 197 </span>  in:text <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L626'>editor-contents</a> recipes
 <span id="L198" class="LineNr"> 198 </span>  <a href='../088file.mu.html#L11'>resources</a> <span class="Special">&lt;-</span> <a href='../088file.mu.html#L127'>dump</a> <a href='../088file.mu.html#L11'>resources</a>, <span class="Constant">[lesson/recipes.mu]</span>, in
 <span id="L199" class="LineNr"> 199 </span>  reload in
 <span id="L200" class="LineNr"> 200 </span>  errors-found? <span class="Special">&lt;-</span> copy <span class="Constant">0/false</span>
@@ -353,12 +353,12 @@ if ('onhashchange' in window) {
 <span id="L290" class="LineNr"> 290 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> sandbox-screen:&amp;:<a href='../081print.mu.html#L4'>screen</a> <span class="Special">&lt;-</span> get *sandbox, <span class="Constant"><a href='../081print.mu.html#L4'>screen</a>:offset</span>
 <span id="L291" class="LineNr"> 291 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> empty-screen?:bool <span class="Special">&lt;-</span> <a href='../081print.mu.html#L60'>fake-screen-is-empty?</a> sandbox-screen
 <span id="L292" class="LineNr"> 292 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> empty-screen?
-<span id="L293" class="LineNr"> 293 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> row, <a href='../081print.mu.html#L4'>screen</a> <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L474'>render-screen</a> <a href='../081print.mu.html#L4'>screen</a>, sandbox-screen, left, right, row
+<span id="L293" class="LineNr"> 293 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> row, <a href='../081print.mu.html#L4'>screen</a> <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L468'>render-screen</a> <a href='../081print.mu.html#L4'>screen</a>, sandbox-screen, left, right, row
 <span id="L294" class="LineNr"> 294 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
 <span id="L295" class="LineNr"> 295 </span>  <span class="Conceal">¦</span> <span class="Delimiter">{</span>
 <span id="L296" class="LineNr"> 296 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="muControl">break-unless</span> empty-screen?
 <span id="L297" class="LineNr"> 297 </span><span class="Constant">  </span><span class="Conceal">¦</span><span class="Constant"> </span><span class="Conceal">¦</span><span class="Constant"> <a href='005-sandbox.mu.html#L297'>&lt;render-sandbox-response&gt;</a></span>
-<span id="L298" class="LineNr"> 298 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> row, <a href='../081print.mu.html#L4'>screen</a> <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L362'>render-text</a> <a href='../081print.mu.html#L4'>screen</a>, sandbox-response, left, right, <span class="Constant">245/grey</span>, row
+<span id="L298" class="LineNr"> 298 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> row, <a href='../081print.mu.html#L4'>screen</a> <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L356'>render-text</a> <a href='../081print.mu.html#L4'>screen</a>, sandbox-response, left, right, <span class="Constant">245/grey</span>, row
 <span id="L299" class="LineNr"> 299 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
 <span id="L300" class="LineNr"> 300 </span><span class="Constant">  </span><span class="Conceal">¦</span><span class="Constant"> +render-sandbox-end</span>
 <span id="L301" class="LineNr"> 301 </span>  <span class="Conceal">¦</span> at-bottom?:bool <span class="Special">&lt;-</span> greater-or-equal row, <a href='../081print.mu.html#L725'>screen-height</a>
@@ -383,918 +383,912 @@ if ('onhashchange' in window) {
 <span id="L320" class="LineNr"> 320 </span>  <span class="Constant">local-scope</span>
 <span id="L321" class="LineNr"> 321 </span>  <span class="Constant">load-ingredients</span>
 <span id="L322" class="LineNr"> 322 </span>  <a href='../081print.mu.html#L705'>move-cursor-to-column</a> <a href='../081print.mu.html#L4'>screen</a>, left
-<span id="L323" class="LineNr"> 323 </span>  edit-button-left:num, edit-button-right:num, copy-button-left:num, copy-button-right:num, delete-button-left:num <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L344'>sandbox-menu-columns</a> left, right
+<span id="L323" class="LineNr"> 323 </span>  edit-button-left:num, edit-button-right:num, copy-button-left:num, copy-button-right:num, delete-button-left:num <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L338'>sandbox-menu-columns</a> left, right
 <span id="L324" class="LineNr"> 324 </span>  print <a href='../081print.mu.html#L4'>screen</a>, sandbox-index, <span class="Constant">232/dark-grey</span>, <span class="Constant">245/grey</span>
 <span id="L325" class="LineNr"> 325 </span>  start-buttons:num <span class="Special">&lt;-</span> subtract edit-button-left,<span class="Constant"> 1</span>
 <span id="L326" class="LineNr"> 326 </span>  <a href='../081print.mu.html#L536'>clear-line-until</a> <a href='../081print.mu.html#L4'>screen</a>, start-buttons, <span class="Constant">245/grey</span>
 <span id="L327" class="LineNr"> 327 </span>  print <a href='../081print.mu.html#L4'>screen</a>, <span class="Constant">[edit]</span>, <span class="Constant">232/black</span>, <span class="Constant">94/background-orange</span>
 <span id="L328" class="LineNr"> 328 </span>  <a href='../081print.mu.html#L536'>clear-line-until</a> <a href='../081print.mu.html#L4'>screen</a>, edit-button-right, <span class="Constant">94/background-orange</span>
-<span id="L329" class="LineNr"> 329 </span>  _, col:num <span class="Special">&lt;-</span> <a href='../081print.mu.html#L559'>cursor-position</a> <a href='../081print.mu.html#L4'>screen</a>
-<span id="L330" class="LineNr"> 330 </span>  at-start-of-copy-button?:bool <span class="Special">&lt;-</span> equal col, copy-button-left
-<span id="L331" class="LineNr"> 331 </span>  assert at-start-of-copy-button?, <span class="Constant">[aaa]</span>
-<span id="L332" class="LineNr"> 332 </span>  print <a href='../081print.mu.html#L4'>screen</a>, <span class="Constant">[copy]</span>, <span class="Constant">232/black</span>, <span class="Constant">58/background-green</span>
-<span id="L333" class="LineNr"> 333 </span>  <a href='../081print.mu.html#L536'>clear-line-until</a> <a href='../081print.mu.html#L4'>screen</a>, copy-button-right, <span class="Constant">58/background-green</span>
-<span id="L334" class="LineNr"> 334 </span>  _, col:num <span class="Special">&lt;-</span> <a href='../081print.mu.html#L559'>cursor-position</a> <a href='../081print.mu.html#L4'>screen</a>
-<span id="L335" class="LineNr"> 335 </span>  at-start-of-delete-button?:bool <span class="Special">&lt;-</span> equal col, delete-button-left
-<span id="L336" class="LineNr"> 336 </span>  assert at-start-of-delete-button?, <span class="Constant">[bbb]</span>
-<span id="L337" class="LineNr"> 337 </span>  print <a href='../081print.mu.html#L4'>screen</a>, <span class="Constant">[delete]</span>, <span class="Constant">232/black</span>, <span class="Constant">52/background-red</span>
-<span id="L338" class="LineNr"> 338 </span>  <a href='../081print.mu.html#L536'>clear-line-until</a> <a href='../081print.mu.html#L4'>screen</a>, right, <span class="Constant">52/background-red</span>
-<span id="L339" class="LineNr"> 339 </span>]
-<span id="L340" class="LineNr"> 340 </span>
-<span id="L341" class="LineNr"> 341 </span><span class="Comment"># divide up the menu bar for a sandbox into 3 segments, for edit/copy/delete buttons</span>
-<span id="L342" class="LineNr"> 342 </span><span class="Comment"># delete-button-right == right</span>
-<span id="L343" class="LineNr"> 343 </span><span class="Comment"># all left/right pairs are inclusive</span>
-<span id="L344" class="LineNr"> 344 </span><span class="muRecipe">def</span> <a href='005-sandbox.mu.html#L344'>sandbox-menu-columns</a> left:num, right:num<span class="muRecipe"> -&gt; </span>edit-button-left:num, edit-button-right:num, copy-button-left:num, copy-button-right:num, delete-button-left:num [
-<span id="L345" class="LineNr"> 345 </span>  <span class="Constant">local-scope</span>
-<span id="L346" class="LineNr"> 346 </span>  <span class="Constant">load-ingredients</span>
-<span id="L347" class="LineNr"> 347 </span>  start-buttons:num <span class="Special">&lt;-</span> add left, <span class="Constant">4/space-for-sandbox-index</span>
-<span id="L348" class="LineNr"> 348 </span>  buttons-space:num <span class="Special">&lt;-</span> subtract right, start-buttons
-<span id="L349" class="LineNr"> 349 </span>  button-width:num <span class="Special">&lt;-</span> divide-with-remainder buttons-space,<span class="Constant"> 3</span>  <span class="Comment"># integer division</span>
-<span id="L350" class="LineNr"> 350 </span>  buttons-wide-enough?:bool <span class="Special">&lt;-</span> greater-or-equal button-width,<span class="Constant"> 8</span>
-<span id="L351" class="LineNr"> 351 </span>  assert buttons-wide-enough?, <span class="Constant">[sandbox must be at least 30 or so characters wide]</span>
-<span id="L352" class="LineNr"> 352 </span>  edit-button-left:num <span class="Special">&lt;-</span> copy start-buttons
-<span id="L353" class="LineNr"> 353 </span>  copy-button-left:num <span class="Special">&lt;-</span> add start-buttons, button-width
-<span id="L354" class="LineNr"> 354 </span>  edit-button-right:num <span class="Special">&lt;-</span> subtract copy-button-left,<span class="Constant"> 1</span>
-<span id="L355" class="LineNr"> 355 </span>  delete-button-left:num <span class="Special">&lt;-</span> subtract right, button-width
-<span id="L356" class="LineNr"> 356 </span>  copy-button-right:num <span class="Special">&lt;-</span> subtract delete-button-left,<span class="Constant"> 1</span>
-<span id="L357" class="LineNr"> 357 </span>]
-<span id="L358" class="LineNr"> 358 </span>
-<span id="L359" class="LineNr"> 359 </span><span class="Comment"># print a text 's' to 'editor' in 'color' starting at 'row'</span>
-<span id="L360" class="LineNr"> 360 </span><span class="Comment"># clear rest of last line, move cursor to next line</span>
-<span id="L361" class="LineNr"> 361 </span><span class="Comment"># like 'render-code' but without syntax-based colorization</span>
-<span id="L362" class="LineNr"> 362 </span><span class="muRecipe">def</span> <a href='005-sandbox.mu.html#L362'>render-text</a> <a href='../081print.mu.html#L4'>screen</a>:&amp;:<a href='../081print.mu.html#L4'>screen</a>, s:text, left:num, right:num, color:num, row:num<span class="muRecipe"> -&gt; </span>row:num, <a href='../081print.mu.html#L4'>screen</a>:&amp;:<a href='../081print.mu.html#L4'>screen</a> [
-<span id="L363" class="LineNr"> 363 </span>  <span class="Constant">local-scope</span>
-<span id="L364" class="LineNr"> 364 </span>  <span class="Constant">load-ingredients</span>
-<span id="L365" class="LineNr"> 365 </span>  <span class="muControl">return-unless</span> s
-<span id="L366" class="LineNr"> 366 </span>  column:num <span class="Special">&lt;-</span> copy left
-<span id="L367" class="LineNr"> 367 </span>  <a href='../081print.mu.html#L4'>screen</a> <span class="Special">&lt;-</span> <a href='../081print.mu.html#L573'>move-cursor</a> <a href='../081print.mu.html#L4'>screen</a>, row, column
-<span id="L368" class="LineNr"> 368 </span>  <a href='../081print.mu.html#L725'>screen-height</a>:num <span class="Special">&lt;-</span> <a href='../081print.mu.html#L725'>screen-height</a> <a href='../081print.mu.html#L4'>screen</a>
-<span id="L369" class="LineNr"> 369 </span>  i:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
-<span id="L370" class="LineNr"> 370 </span>  len:num <span class="Special">&lt;-</span> length *s
-<span id="L371" class="LineNr"> 371 </span>  <span class="Delimiter">{</span>
-<span id="L372" class="LineNr"> 372 </span><span class="Constant">  </span><span class="Conceal">¦</span><span class="Constant"> +next-character</span>
-<span id="L373" class="LineNr"> 373 </span>  <span class="Conceal">¦</span> done?:bool <span class="Special">&lt;-</span> greater-or-equal i, len
-<span id="L374" class="LineNr"> 374 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> done?
-<span id="L375" class="LineNr"> 375 </span>  <span class="Conceal">¦</span> done? <span class="Special">&lt;-</span> greater-or-equal row, <a href='../081print.mu.html#L725'>screen-height</a>
-<span id="L376" class="LineNr"> 376 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> done?
-<span id="L377" class="LineNr"> 377 </span>  <span class="Conceal">¦</span> c:char <span class="Special">&lt;-</span> index *s, i
-<span id="L378" class="LineNr"> 378 </span>  <span class="Conceal">¦</span> <span class="Delimiter">{</span>
-<span id="L379" class="LineNr"> 379 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment"># newline? move to left rather than 0</span>
-<span id="L380" class="LineNr"> 380 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> newline?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">10/newline</span>
-<span id="L381" class="LineNr"> 381 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="muControl">break-unless</span> newline?
-<span id="L382" class="LineNr"> 382 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment"># clear rest of line in this window</span>
-<span id="L383" class="LineNr"> 383 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">{</span>
-<span id="L384" class="LineNr"> 384 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> done?:bool <span class="Special">&lt;-</span> greater-than column, right
-<span id="L385" class="LineNr"> 385 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> done?
-<span id="L386" class="LineNr"> 386 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> space:char <span class="Special">&lt;-</span> copy <span class="Constant">32/space</span>
-<span id="L387" class="LineNr"> 387 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> print <a href='../081print.mu.html#L4'>screen</a>, space
-<span id="L388" class="LineNr"> 388 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> column <span class="Special">&lt;-</span> add column,<span class="Constant"> 1</span>
-<span id="L389" class="LineNr"> 389 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="muControl">loop</span>
-<span id="L390" class="LineNr"> 390 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
-<span id="L391" class="LineNr"> 391 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> row <span class="Special">&lt;-</span> add row,<span class="Constant"> 1</span>
-<span id="L392" class="LineNr"> 392 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> column <span class="Special">&lt;-</span> copy left
-<span id="L393" class="LineNr"> 393 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='../081print.mu.html#L4'>screen</a> <span class="Special">&lt;-</span> <a href='../081print.mu.html#L573'>move-cursor</a> <a href='../081print.mu.html#L4'>screen</a>, row, column
-<span id="L394" class="LineNr"> 394 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> i <span class="Special">&lt;-</span> add i,<span class="Constant"> 1</span>
-<span id="L395" class="LineNr"> 395 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="muControl">loop</span> <span class="Constant">+next-character</span>
-<span id="L396" class="LineNr"> 396 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
-<span id="L397" class="LineNr"> 397 </span>  <span class="Conceal">¦</span> <span class="Delimiter">{</span>
-<span id="L398" class="LineNr"> 398 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment"># at right? wrap.</span>
-<span id="L399" class="LineNr"> 399 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> at-right?:bool <span class="Special">&lt;-</span> equal column, right
-<span id="L400" class="LineNr"> 400 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="muControl">break-unless</span> at-right?
-<span id="L401" class="LineNr"> 401 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment"># print wrap icon</span>
-<span id="L402" class="LineNr"> 402 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> wrap-icon:char <span class="Special">&lt;-</span> copy <span class="Constant">8617/loop-back-to-left</span>
-<span id="L403" class="LineNr"> 403 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> print <a href='../081print.mu.html#L4'>screen</a>, wrap-icon, <span class="Constant">245/grey</span>
-<span id="L404" class="LineNr"> 404 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> column <span class="Special">&lt;-</span> copy left
-<span id="L405" class="LineNr"> 405 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> row <span class="Special">&lt;-</span> add row,<span class="Constant"> 1</span>
-<span id="L406" class="LineNr"> 406 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='../081print.mu.html#L4'>screen</a> <span class="Special">&lt;-</span> <a href='../081print.mu.html#L573'>move-cursor</a> <a href='../081print.mu.html#L4'>screen</a>, row, column
-<span id="L407" class="LineNr"> 407 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment"># don't increment i</span>
-<span id="L408" class="LineNr"> 408 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="muControl">loop</span> <span class="Constant">+next-character</span>
-<span id="L409" class="LineNr"> 409 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
-<span id="L410" class="LineNr"> 410 </span>  <span class="Conceal">¦</span> i <span class="Special">&lt;-</span> add i,<span class="Constant"> 1</span>
-<span id="L411" class="LineNr"> 411 </span>  <span class="Conceal">¦</span> print <a href='../081print.mu.html#L4'>screen</a>, c, color
-<span id="L412" class="LineNr"> 412 </span>  <span class="Conceal">¦</span> column <span class="Special">&lt;-</span> add column,<span class="Constant"> 1</span>
-<span id="L413" class="LineNr"> 413 </span>  <span class="Conceal">¦</span> <span class="muControl">loop</span>
+<span id="L329" class="LineNr"> 329 </span>  print <a href='../081print.mu.html#L4'>screen</a>, <span class="Constant">[copy]</span>, <span class="Constant">232/black</span>, <span class="Constant">58/background-green</span>
+<span id="L330" class="LineNr"> 330 </span>  <a href='../081print.mu.html#L536'>clear-line-until</a> <a href='../081print.mu.html#L4'>screen</a>, copy-button-right, <span class="Constant">58/background-green</span>
+<span id="L331" class="LineNr"> 331 </span>  print <a href='../081print.mu.html#L4'>screen</a>, <span class="Constant">[delete]</span>, <span class="Constant">232/black</span>, <span class="Constant">52/background-red</span>
+<span id="L332" class="LineNr"> 332 </span>  <a href='../081print.mu.html#L536'>clear-line-until</a> <a href='../081print.mu.html#L4'>screen</a>, right, <span class="Constant">52/background-red</span>
+<span id="L333" class="LineNr"> 333 </span>]
+<span id="L334" class="LineNr"> 334 </span>
+<span id="L335" class="LineNr"> 335 </span><span class="Comment"># divide up the menu bar for a sandbox into 3 segments, for edit/copy/delete buttons</span>
+<span id="L336" class="LineNr"> 336 </span><span class="Comment"># delete-button-right == right</span>
+<span id="L337" class="LineNr"> 337 </span><span class="Comment"># all left/right pairs are inclusive</span>
+<span id="L338" class="LineNr"> 338 </span><span class="muRecipe">def</span> <a href='005-sandbox.mu.html#L338'>sandbox-menu-columns</a> left:num, right:num<span class="muRecipe"> -&gt; </span>edit-button-left:num, edit-button-right:num, copy-button-left:num, copy-button-right:num, delete-button-left:num [
+<span id="L339" class="LineNr"> 339 </span>  <span class="Constant">local-scope</span>
+<span id="L340" class="LineNr"> 340 </span>  <span class="Constant">load-ingredients</span>
+<span id="L341" class="LineNr"> 341 </span>  start-buttons:num <span class="Special">&lt;-</span> add left, <span class="Constant">4/space-for-sandbox-index</span>
+<span id="L342" class="LineNr"> 342 </span>  buttons-space:num <span class="Special">&lt;-</span> subtract right, start-buttons
+<span id="L343" class="LineNr"> 343 </span>  button-width:num <span class="Special">&lt;-</span> divide-with-remainder buttons-space,<span class="Constant"> 3</span>  <span class="Comment"># integer division</span>
+<span id="L344" class="LineNr"> 344 </span>  buttons-wide-enough?:bool <span class="Special">&lt;-</span> greater-or-equal button-width,<span class="Constant"> 8</span>
+<span id="L345" class="LineNr"> 345 </span>  assert buttons-wide-enough?, <span class="Constant">[sandbox must be at least 30 or so characters wide]</span>
+<span id="L346" class="LineNr"> 346 </span>  edit-button-left:num <span class="Special">&lt;-</span> copy start-buttons
+<span id="L347" class="LineNr"> 347 </span>  copy-button-left:num <span class="Special">&lt;-</span> add start-buttons, button-width
+<span id="L348" class="LineNr"> 348 </span>  edit-button-right:num <span class="Special">&lt;-</span> subtract copy-button-left,<span class="Constant"> 1</span>
+<span id="L349" class="LineNr"> 349 </span>  delete-button-left:num <span class="Special">&lt;-</span> subtract right, button-width
+<span id="L350" class="LineNr"> 350 </span>  copy-button-right:num <span class="Special">&lt;-</span> subtract delete-button-left,<span class="Constant"> 1</span>
+<span id="L351" class="LineNr"> 351 </span>]
+<span id="L352" class="LineNr"> 352 </span>
+<span id="L353" class="LineNr"> 353 </span><span class="Comment"># print a text 's' to 'editor' in 'color' starting at 'row'</span>
+<span id="L354" class="LineNr"> 354 </span><span class="Comment"># clear rest of last line, move cursor to next line</span>
+<span id="L355" class="LineNr"> 355 </span><span class="Comment"># like 'render-code' but without syntax-based colorization</span>
+<span id="L356" class="LineNr"> 356 </span><span class="muRecipe">def</span> <a href='005-sandbox.mu.html#L356'>render-text</a> <a href='../081print.mu.html#L4'>screen</a>:&amp;:<a href='../081print.mu.html#L4'>screen</a>, s:text, left:num, right:num, color:num, row:num<span class="muRecipe"> -&gt; </span>row:num, <a href='../081print.mu.html#L4'>screen</a>:&amp;:<a href='../081print.mu.html#L4'>screen</a> [
+<span id="L357" class="LineNr"> 357 </span>  <span class="Constant">local-scope</span>
+<span id="L358" class="LineNr"> 358 </span>  <span class="Constant">load-ingredients</span>
+<span id="L359" class="LineNr"> 359 </span>  <span class="muControl">return-unless</span> s
+<span id="L360" class="LineNr"> 360 </span>  column:num <span class="Special">&lt;-</span> copy left
+<span id="L361" class="LineNr"> 361 </span>  <a href='../081print.mu.html#L4'>screen</a> <span class="Special">&lt;-</span> <a href='../081print.mu.html#L573'>move-cursor</a> <a href='../081print.mu.html#L4'>screen</a>, row, column
+<span id="L362" class="LineNr"> 362 </span>  <a href='../081print.mu.html#L725'>screen-height</a>:num <span class="Special">&lt;-</span> <a href='../081print.mu.html#L725'>screen-height</a> <a href='../081print.mu.html#L4'>screen</a>
+<span id="L363" class="LineNr"> 363 </span>  i:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
+<span id="L364" class="LineNr"> 364 </span>  len:num <span class="Special">&lt;-</span> length *s
+<span id="L365" class="LineNr"> 365 </span>  <span class="Delimiter">{</span>
+<span id="L366" class="LineNr"> 366 </span><span class="Constant">  </span><span class="Conceal">¦</span><span class="Constant"> +next-character</span>
+<span id="L367" class="LineNr"> 367 </span>  <span class="Conceal">¦</span> done?:bool <span class="Special">&lt;-</span> greater-or-equal i, len
+<span id="L368" class="LineNr"> 368 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> done?
+<span id="L369" class="LineNr"> 369 </span>  <span class="Conceal">¦</span> done? <span class="Special">&lt;-</span> greater-or-equal row, <a href='../081print.mu.html#L725'>screen-height</a>
+<span id="L370" class="LineNr"> 370 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> done?
+<span id="L371" class="LineNr"> 371 </span>  <span class="Conceal">¦</span> c:char <span class="Special">&lt;-</span> index *s, i
+<span id="L372" class="LineNr"> 372 </span>  <span class="Conceal">¦</span> <span class="Delimiter">{</span>
+<span id="L373" class="LineNr"> 373 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment"># newline? move to left rather than 0</span>
+<span id="L374" class="LineNr"> 374 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> newline?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">10/newline</span>
+<span id="L375" class="LineNr"> 375 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="muControl">break-unless</span> newline?
+<span id="L376" class="LineNr"> 376 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment"># clear rest of line in this window</span>
+<span id="L377" class="LineNr"> 377 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">{</span>
+<span id="L378" class="LineNr"> 378 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> done?:bool <span class="Special">&lt;-</span> greater-than column, right
+<span id="L379" class="LineNr"> 379 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> done?
+<span id="L380" class="LineNr"> 380 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> space:char <span class="Special">&lt;-</span> copy <span class="Constant">32/space</span>
+<span id="L381" class="LineNr"> 381 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> print <a href='../081print.mu.html#L4'>screen</a>, space
+<span id="L382" class="LineNr"> 382 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> column <span class="Special">&lt;-</span> add column,<span class="Constant"> 1</span>
+<span id="L383" class="LineNr"> 383 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="muControl">loop</span>
+<span id="L384" class="LineNr"> 384 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
+<span id="L385" class="LineNr"> 385 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> row <span class="Special">&lt;-</span> add row,<span class="Constant"> 1</span>
+<span id="L386" class="LineNr"> 386 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> column <span class="Special">&lt;-</span> copy left
+<span id="L387" class="LineNr"> 387 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='../081print.mu.html#L4'>screen</a> <span class="Special">&lt;-</span> <a href='../081print.mu.html#L573'>move-cursor</a> <a href='../081print.mu.html#L4'>screen</a>, row, column
+<span id="L388" class="LineNr"> 388 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> i <span class="Special">&lt;-</span> add i,<span class="Constant"> 1</span>
+<span id="L389" class="LineNr"> 389 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="muControl">loop</span> <span class="Constant">+next-character</span>
+<span id="L390" class="LineNr"> 390 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
+<span id="L391" class="LineNr"> 391 </span>  <span class="Conceal">¦</span> <span class="Delimiter">{</span>
+<span id="L392" class="LineNr"> 392 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment"># at right? wrap.</span>
+<span id="L393" class="LineNr"> 393 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> at-right?:bool <span class="Special">&lt;-</span> equal column, right
+<span id="L394" class="LineNr"> 394 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="muControl">break-unless</span> at-right?
+<span id="L395" class="LineNr"> 395 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment"># print wrap icon</span>
+<span id="L396" class="LineNr"> 396 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> wrap-icon:char <span class="Special">&lt;-</span> copy <span class="Constant">8617/loop-back-to-left</span>
+<span id="L397" class="LineNr"> 397 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> print <a href='../081print.mu.html#L4'>screen</a>, wrap-icon, <span class="Constant">245/grey</span>
+<span id="L398" class="LineNr"> 398 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> column <span class="Special">&lt;-</span> copy left
+<span id="L399" class="LineNr"> 399 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> row <span class="Special">&lt;-</span> add row,<span class="Constant"> 1</span>
+<span id="L400" class="LineNr"> 400 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='../081print.mu.html#L4'>screen</a> <span class="Special">&lt;-</span> <a href='../081print.mu.html#L573'>move-cursor</a> <a href='../081print.mu.html#L4'>screen</a>, row, column
+<span id="L401" class="LineNr"> 401 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment"># don't increment i</span>
+<span id="L402" class="LineNr"> 402 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="muControl">loop</span> <span class="Constant">+next-character</span>
+<span id="L403" class="LineNr"> 403 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
+<span id="L404" class="LineNr"> 404 </span>  <span class="Conceal">¦</span> i <span class="Special">&lt;-</span> add i,<span class="Constant"> 1</span>
+<span id="L405" class="LineNr"> 405 </span>  <span class="Conceal">¦</span> print <a href='../081print.mu.html#L4'>screen</a>, c, color
+<span id="L406" class="LineNr"> 406 </span>  <span class="Conceal">¦</span> column <span class="Special">&lt;-</span> add column,<span class="Constant"> 1</span>
+<span id="L407" class="LineNr"> 407 </span>  <span class="Conceal">¦</span> <span class="muControl">loop</span>
+<span id="L408" class="LineNr"> 408 </span>  <span class="Delimiter">}</span>
+<span id="L409" class="LineNr"> 409 </span>  was-at-left?:bool <span class="Special">&lt;-</span> equal column, left
+<span id="L410" class="LineNr"> 410 </span>  <a href='../081print.mu.html#L536'>clear-line-until</a> <a href='../081print.mu.html#L4'>screen</a>, right
+<span id="L411" class="LineNr"> 411 </span>  <span class="Delimiter">{</span>
+<span id="L412" class="LineNr"> 412 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> was-at-left?
+<span id="L413" class="LineNr"> 413 </span>  <span class="Conceal">¦</span> row <span class="Special">&lt;-</span> add row,<span class="Constant"> 1</span>
 <span id="L414" class="LineNr"> 414 </span>  <span class="Delimiter">}</span>
-<span id="L415" class="LineNr"> 415 </span>  was-at-left?:bool <span class="Special">&lt;-</span> equal column, left
-<span id="L416" class="LineNr"> 416 </span>  <a href='../081print.mu.html#L536'>clear-line-until</a> <a href='../081print.mu.html#L4'>screen</a>, right
-<span id="L417" class="LineNr"> 417 </span>  <span class="Delimiter">{</span>
-<span id="L418" class="LineNr"> 418 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> was-at-left?
-<span id="L419" class="LineNr"> 419 </span>  <span class="Conceal">¦</span> row <span class="Special">&lt;-</span> add row,<span class="Constant"> 1</span>
-<span id="L420" class="LineNr"> 420 </span>  <span class="Delimiter">}</span>
-<span id="L421" class="LineNr"> 421 </span>  <a href='../081print.mu.html#L573'>move-cursor</a> <a href='../081print.mu.html#L4'>screen</a>, row, left
-<span id="L422" class="LineNr"> 422 </span>]
-<span id="L423" class="LineNr"> 423 </span>
-<span id="L424" class="LineNr"> 424 </span><span class="muScenario">scenario</span> read-text-wraps-barely-long-lines [
-<span id="L425" class="LineNr"> 425 </span>  <span class="Constant">local-scope</span>
-<span id="L426" class="LineNr"> 426 </span>  assume-screen <span class="Constant">5/width</span>, <span class="Constant">5/height</span>
-<span id="L427" class="LineNr"> 427 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[abcde]</span>
-<span id="L428" class="LineNr"> 428 </span>  run [
-<span id="L429" class="LineNr"> 429 </span>  <span class="Conceal">¦</span> <a href='005-sandbox.mu.html#L362'>render-text</a> <a href='../081print.mu.html#L4'>screen</a>, s, <span class="Constant">0/left</span>, <span class="Constant">4/right</span>, <span class="Constant">7/white</span>, <span class="Constant">1/row</span>
+<span id="L415" class="LineNr"> 415 </span>  <a href='../081print.mu.html#L573'>move-cursor</a> <a href='../081print.mu.html#L4'>screen</a>, row, left
+<span id="L416" class="LineNr"> 416 </span>]
+<span id="L417" class="LineNr"> 417 </span>
+<span id="L418" class="LineNr"> 418 </span><span class="muScenario">scenario</span> read-text-wraps-barely-long-lines [
+<span id="L419" class="LineNr"> 419 </span>  <span class="Constant">local-scope</span>
+<span id="L420" class="LineNr"> 420 </span>  assume-screen <span class="Constant">5/width</span>, <span class="Constant">5/height</span>
+<span id="L421" class="LineNr"> 421 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[abcde]</span>
+<span id="L422" class="LineNr"> 422 </span>  run [
+<span id="L423" class="LineNr"> 423 </span>  <span class="Conceal">¦</span> <a href='005-sandbox.mu.html#L356'>render-text</a> <a href='../081print.mu.html#L4'>screen</a>, s, <span class="Constant">0/left</span>, <span class="Constant">4/right</span>, <span class="Constant">7/white</span>, <span class="Constant">1/row</span>
+<span id="L424" class="LineNr"> 424 </span>  ]
+<span id="L425" class="LineNr"> 425 </span>  screen-should-contain [
+<span id="L426" class="LineNr"> 426 </span>  <span class="Conceal">¦</span><span class="Constant"> .     .</span>
+<span id="L427" class="LineNr"> 427 </span><span class="Constant">  </span><span class="Conceal">¦</span><span class="Constant"> .abcd↩.</span>
+<span id="L428" class="LineNr"> 428 </span>  <span class="Conceal">¦</span><span class="Constant"> .e    .</span>
+<span id="L429" class="LineNr"> 429 </span>  <span class="Conceal">¦</span><span class="Constant"> .     .</span>
 <span id="L430" class="LineNr"> 430 </span>  ]
-<span id="L431" class="LineNr"> 431 </span>  screen-should-contain [
-<span id="L432" class="LineNr"> 432 </span>  <span class="Conceal">¦</span><span class="Constant"> .     .</span>
-<span id="L433" class="LineNr"> 433 </span><span class="Constant">  </span><span class="Conceal">¦</span><span class="Constant"> .abcd↩.</span>
-<span id="L434" class="LineNr"> 434 </span>  <span class="Conceal">¦</span><span class="Constant"> .e    .</span>
-<span id="L435" class="LineNr"> 435 </span>  <span class="Conceal">¦</span><span class="Constant"> .     .</span>
-<span id="L436" class="LineNr"> 436 </span>  ]
-<span id="L437" class="LineNr"> 437 </span>]
-<span id="L438" class="LineNr"> 438 </span>
-<span id="L439" class="LineNr"> 439 </span><span class="Comment"># assumes programming environment has no sandboxes; restores them from previous session</span>
-<span id="L440" class="LineNr"> 440 </span><span class="muRecipe">def</span> <a href='005-sandbox.mu.html#L440'>restore-sandboxes</a> env:&amp;:environment, <a href='../088file.mu.html#L11'>resources</a>:&amp;:<a href='../088file.mu.html#L11'>resources</a><span class="muRecipe"> -&gt; </span>env:&amp;:environment [
-<span id="L441" class="LineNr"> 441 </span>  <span class="Constant">local-scope</span>
-<span id="L442" class="LineNr"> 442 </span>  <span class="Constant">load-ingredients</span>
-<span id="L443" class="LineNr"> 443 </span>  <span class="Comment"># read all scenarios, pushing them to end of a list of scenarios</span>
-<span id="L444" class="LineNr"> 444 </span>  idx:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
-<span id="L445" class="LineNr"> 445 </span>  curr:&amp;:sandbox <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
-<span id="L446" class="LineNr"> 446 </span>  <a href='../065duplex_list.mu.html#L36'>prev</a>:&amp;:sandbox <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
-<span id="L447" class="LineNr"> 447 </span>  <span class="Delimiter">{</span>
-<span id="L448" class="LineNr"> 448 </span>  <span class="Conceal">¦</span> filename:text <span class="Special">&lt;-</span> append <span class="Constant">[lesson/]</span>, idx
-<span id="L449" class="LineNr"> 449 </span>  <span class="Conceal">¦</span> contents:text <span class="Special">&lt;-</span> <a href='../088file.mu.html#L38'>slurp</a> <a href='../088file.mu.html#L11'>resources</a>, filename
-<span id="L450" class="LineNr"> 450 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> contents  <span class="Comment"># stop at first error; assuming file didn't exist</span>
-<span id="L451" class="LineNr"> 451 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span>      <span class="Comment"># todo: handle empty sandbox</span>
-<span id="L452" class="LineNr"> 452 </span>  <span class="Conceal">¦</span> <span class="Comment"># create new sandbox for file</span>
-<span id="L453" class="LineNr"> 453 </span>  <span class="Conceal">¦</span> curr <span class="Special">&lt;-</span> new <span class="Constant">sandbox:type</span>
-<span id="L454" class="LineNr"> 454 </span>  <span class="Conceal">¦</span> *curr <span class="Special">&lt;-</span> put *curr, <span class="Constant">data:offset</span>, contents
-<span id="L455" class="LineNr"> 455 </span><span class="Constant">  </span><span class="Conceal">¦</span><span class="Constant"> <a href='005-sandbox.mu.html#L455'>&lt;end-restore-sandbox&gt;</a></span>
-<span id="L456" class="LineNr"> 456 </span>  <span class="Conceal">¦</span> <span class="Delimiter">{</span>
-<span id="L457" class="LineNr"> 457 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> idx
-<span id="L458" class="LineNr"> 458 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> *env <span class="Special">&lt;-</span> put *env, <span class="Constant">sandbox:offset</span>, curr
-<span id="L459" class="LineNr"> 459 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
-<span id="L460" class="LineNr"> 460 </span>  <span class="Conceal">¦</span> <span class="Delimiter">{</span>
-<span id="L461" class="LineNr"> 461 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="muControl">break-unless</span> idx
-<span id="L462" class="LineNr"> 462 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> *prev <span class="Special">&lt;-</span> put *prev, <span class="Constant">next-sandbox:offset</span>, curr
-<span id="L463" class="LineNr"> 463 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
-<span id="L464" class="LineNr"> 464 </span>  <span class="Conceal">¦</span> idx <span class="Special">&lt;-</span> add idx,<span class="Constant"> 1</span>
-<span id="L465" class="LineNr"> 465 </span>  <span class="Conceal">¦</span> <a href='../065duplex_list.mu.html#L36'>prev</a> <span class="Special">&lt;-</span> copy curr
-<span id="L466" class="LineNr"> 466 </span>  <span class="Conceal">¦</span> <span class="muControl">loop</span>
-<span id="L467" class="LineNr"> 467 </span>  <span class="Delimiter">}</span>
-<span id="L468" class="LineNr"> 468 </span>  <span class="Comment"># update sandbox count</span>
-<span id="L469" class="LineNr"> 469 </span>  *env <span class="Special">&lt;-</span> put *env, <span class="Constant">number-of-sandboxes:offset</span>, idx
-<span id="L470" class="LineNr"> 470 </span>]
-<span id="L471" class="LineNr"> 471 </span>
-<span id="L472" class="LineNr"> 472 </span><span class="Comment"># print the fake sandbox screen to 'screen' with appropriate delimiters</span>
-<span id="L473" class="LineNr"> 473 </span><span class="Comment"># leave cursor at start of next line</span>
-<span id="L474" class="LineNr"> 474 </span><span class="muRecipe">def</span> <a href='005-sandbox.mu.html#L474'>render-screen</a> <a href='../081print.mu.html#L4'>screen</a>:&amp;:<a href='../081print.mu.html#L4'>screen</a>, sandbox-screen:&amp;:<a href='../081print.mu.html#L4'>screen</a>, left:num, right:num, row:num<span class="muRecipe"> -&gt; </span>row:num, <a href='../081print.mu.html#L4'>screen</a>:&amp;:<a href='../081print.mu.html#L4'>screen</a> [
-<span id="L475" class="LineNr"> 475 </span>  <span class="Constant">local-scope</span>
-<span id="L476" class="LineNr"> 476 </span>  <span class="Constant">load-ingredients</span>
-<span id="L477" class="LineNr"> 477 </span>  <span class="muControl">return-unless</span> sandbox-screen
-<span id="L478" class="LineNr"> 478 </span>  <span class="Comment"># print 'screen:'</span>
-<span id="L479" class="LineNr"> 479 </span>  row <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L362'>render-text</a> <a href='../081print.mu.html#L4'>screen</a>, <span class="Constant">[screen:]</span>, left, right, <span class="Constant">245/grey</span>, row
-<span id="L480" class="LineNr"> 480 </span>  <a href='../081print.mu.html#L4'>screen</a> <span class="Special">&lt;-</span> <a href='../081print.mu.html#L573'>move-cursor</a> <a href='../081print.mu.html#L4'>screen</a>, row, left
-<span id="L481" class="LineNr"> 481 </span>  <span class="Comment"># start printing sandbox-screen</span>
-<span id="L482" class="LineNr"> 482 </span>  column:num <span class="Special">&lt;-</span> copy left
-<span id="L483" class="LineNr"> 483 </span>  s-width:num <span class="Special">&lt;-</span> <a href='../081print.mu.html#L712'>screen-width</a> sandbox-screen
-<span id="L484" class="LineNr"> 484 </span>  s-height:num <span class="Special">&lt;-</span> <a href='../081print.mu.html#L725'>screen-height</a> sandbox-screen
-<span id="L485" class="LineNr"> 485 </span>  buf:&amp;:@:<a href='../081print.mu.html#L14'>screen-cell</a> <span class="Special">&lt;-</span> get *sandbox-screen, <span class="Constant">data:offset</span>
-<span id="L486" class="LineNr"> 486 </span>  stop-printing:num <span class="Special">&lt;-</span> add left, s-width,<span class="Constant"> 3</span>
-<span id="L487" class="LineNr"> 487 </span>  max-column:num <span class="Special">&lt;-</span> min stop-printing, right
-<span id="L488" class="LineNr"> 488 </span>  i:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
-<span id="L489" class="LineNr"> 489 </span>  len:num <span class="Special">&lt;-</span> length *buf
-<span id="L490" class="LineNr"> 490 </span>  <a href='../081print.mu.html#L725'>screen-height</a>:num <span class="Special">&lt;-</span> <a href='../081print.mu.html#L725'>screen-height</a> <a href='../081print.mu.html#L4'>screen</a>
-<span id="L491" class="LineNr"> 491 </span>  <span class="Delimiter">{</span>
-<span id="L492" class="LineNr"> 492 </span>  <span class="Conceal">¦</span> done?:bool <span class="Special">&lt;-</span> greater-or-equal i, len
-<span id="L493" class="LineNr"> 493 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> done?
-<span id="L494" class="LineNr"> 494 </span>  <span class="Conceal">¦</span> done? <span class="Special">&lt;-</span> greater-or-equal row, <a href='../081print.mu.html#L725'>screen-height</a>
-<span id="L495" class="LineNr"> 495 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> done?
-<span id="L496" class="LineNr"> 496 </span>  <span class="Conceal">¦</span> column <span class="Special">&lt;-</span> copy left
-<span id="L497" class="LineNr"> 497 </span>  <span class="Conceal">¦</span> <a href='../081print.mu.html#L4'>screen</a> <span class="Special">&lt;-</span> <a href='../081print.mu.html#L573'>move-cursor</a> <a href='../081print.mu.html#L4'>screen</a>, row, column
-<span id="L498" class="LineNr"> 498 </span>  <span class="Conceal">¦</span> <span class="Comment"># initial leader for each row: two spaces and a '.'</span>
-<span id="L499" class="LineNr"> 499 </span>  <span class="Conceal">¦</span> space:char <span class="Special">&lt;-</span> copy <span class="Constant">32/space</span>
-<span id="L500" class="LineNr"> 500 </span>  <span class="Conceal">¦</span> print <a href='../081print.mu.html#L4'>screen</a>, space, <span class="Constant">245/grey</span>
-<span id="L501" class="LineNr"> 501 </span>  <span class="Conceal">¦</span> print <a href='../081print.mu.html#L4'>screen</a>, space, <span class="Constant">245/grey</span>
-<span id="L502" class="LineNr"> 502 </span>  <span class="Conceal">¦</span> full-stop:char <span class="Special">&lt;-</span> copy <span class="Constant">46/period</span>
-<span id="L503" class="LineNr"> 503 </span>  <span class="Conceal">¦</span> print <a href='../081print.mu.html#L4'>screen</a>, full-stop, <span class="Constant">245/grey</span>
-<span id="L504" class="LineNr"> 504 </span>  <span class="Conceal">¦</span> column <span class="Special">&lt;-</span> add left,<span class="Constant"> 3</span>
-<span id="L505" class="LineNr"> 505 </span>  <span class="Conceal">¦</span> <span class="Delimiter">{</span>
-<span id="L506" class="LineNr"> 506 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment"># print row</span>
-<span id="L507" class="LineNr"> 507 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> row-done?:bool <span class="Special">&lt;-</span> greater-or-equal column, max-column
-<span id="L508" class="LineNr"> 508 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> row-done?
-<span id="L509" class="LineNr"> 509 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> curr:<a href='../081print.mu.html#L14'>screen-cell</a> <span class="Special">&lt;-</span> index *buf, i
-<span id="L510" class="LineNr"> 510 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> c:char <span class="Special">&lt;-</span> get curr, <span class="Constant">contents:offset</span>
-<span id="L511" class="LineNr"> 511 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> color:num <span class="Special">&lt;-</span> get curr, <span class="Constant">color:offset</span>
-<span id="L512" class="LineNr"> 512 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">{</span>
-<span id="L513" class="LineNr"> 513 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment"># damp whites down to grey</span>
-<span id="L514" class="LineNr"> 514 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> white?:bool <span class="Special">&lt;-</span> equal color, <span class="Constant">7/white</span>
-<span id="L515" class="LineNr"> 515 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="muControl">break-unless</span> white?
-<span id="L516" class="LineNr"> 516 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> color <span class="Special">&lt;-</span> copy <span class="Constant">245/grey</span>
-<span id="L517" class="LineNr"> 517 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
-<span id="L518" class="LineNr"> 518 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> print <a href='../081print.mu.html#L4'>screen</a>, c, color
-<span id="L519" class="LineNr"> 519 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> column <span class="Special">&lt;-</span> add column,<span class="Constant"> 1</span>
-<span id="L520" class="LineNr"> 520 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> i <span class="Special">&lt;-</span> add i,<span class="Constant"> 1</span>
-<span id="L521" class="LineNr"> 521 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="muControl">loop</span>
-<span id="L522" class="LineNr"> 522 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
-<span id="L523" class="LineNr"> 523 </span>  <span class="Conceal">¦</span> <span class="Comment"># print final '.'</span>
-<span id="L524" class="LineNr"> 524 </span>  <span class="Conceal">¦</span> print <a href='../081print.mu.html#L4'>screen</a>, full-stop, <span class="Constant">245/grey</span>
-<span id="L525" class="LineNr"> 525 </span>  <span class="Conceal">¦</span> column <span class="Special">&lt;-</span> add column,<span class="Constant"> 1</span>
-<span id="L526" class="LineNr"> 526 </span>  <span class="Conceal">¦</span> <span class="Delimiter">{</span>
-<span id="L527" class="LineNr"> 527 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment"># clear rest of current line</span>
-<span id="L528" class="LineNr"> 528 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> line-done?:bool <span class="Special">&lt;-</span> greater-than column, right
-<span id="L529" class="LineNr"> 529 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> line-done?
-<span id="L530" class="LineNr"> 530 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> print <a href='../081print.mu.html#L4'>screen</a>, space
-<span id="L531" class="LineNr"> 531 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> column <span class="Special">&lt;-</span> add column,<span class="Constant"> 1</span>
-<span id="L532" class="LineNr"> 532 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="muControl">loop</span>
-<span id="L533" class="LineNr"> 533 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
-<span id="L534" class="LineNr"> 534 </span>  <span class="Conceal">¦</span> row <span class="Special">&lt;-</span> add row,<span class="Constant"> 1</span>
-<span id="L535" class="LineNr"> 535 </span>  <span class="Conceal">¦</span> <span class="muControl">loop</span>
-<span id="L536" class="LineNr"> 536 </span>  <span class="Delimiter">}</span>
-<span id="L537" class="LineNr"> 537 </span>]
-<span id="L538" class="LineNr"> 538 </span>
-<span id="L539" class="LineNr"> 539 </span><span class="muScenario">scenario</span> run-updates-results [
-<span id="L540" class="LineNr"> 540 </span>  <span class="Constant">local-scope</span>
-<span id="L541" class="LineNr"> 541 </span>  trace-until <span class="Constant">100/app</span>  <span class="Comment"># trace too long</span>
-<span id="L542" class="LineNr"> 542 </span>  assume-screen <span class="Constant">100/width</span>, <span class="Constant">12/height</span>
-<span id="L543" class="LineNr"> 543 </span>  <span class="Comment"># define a recipe (no indent for the 'add' line below so column numbers are more obvious)</span>
-<span id="L544" class="LineNr"> 544 </span>  assume-resources [
-<span id="L545" class="LineNr"> 545 </span>  <span class="Conceal">¦</span> <span class="Constant">[lesson/recipes.mu]</span> <span class="Special">&lt;-</span> [
-<span id="L546" class="LineNr"> 546 </span><span class="Constant">  </span><span class="Conceal">¦</span><span class="Constant"> </span><span class="Conceal">¦</span><span class="Constant"> ||</span>
-<span id="L547" class="LineNr"> 547 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Constant">|recipe</span> foo <span class="Constant">[|</span>
-<span id="L548" class="LineNr"> 548 </span><span class="Constant">  </span><span class="Conceal">¦</span><span class="Constant"> </span><span class="Conceal">¦</span><span class="Constant"> |  local-scope|</span>
-<span id="L549" class="LineNr"> 549 </span><span class="Constant">  </span><span class="Conceal">¦</span><span class="Constant"> </span><span class="Conceal">¦</span><span class="Constant"> |  z:num &lt;- add 2, 2|</span>
-<span id="L550" class="LineNr"> 550 </span><span class="Constant">  </span><span class="Conceal">¦</span><span class="Constant"> </span><span class="Conceal">¦</span><span class="Constant"> |  reply z|</span>
-<span id="L551" class="LineNr"> 551 </span><span class="Constant">  </span><span class="Conceal">¦</span><span class="Constant"> </span><span class="Conceal">¦</span><span class="Constant"> |]</span>|
-<span id="L552" class="LineNr"> 552 </span>  <span class="Conceal">¦</span> ]
+<span id="L431" class="LineNr"> 431 </span>]
+<span id="L432" class="LineNr"> 432 </span>
+<span id="L433" class="LineNr"> 433 </span><span class="Comment"># assumes programming environment has no sandboxes; restores them from previous session</span>
+<span id="L434" class="LineNr"> 434 </span><span class="muRecipe">def</span> <a href='005-sandbox.mu.html#L434'>restore-sandboxes</a> env:&amp;:environment, <a href='../088file.mu.html#L11'>resources</a>:&amp;:<a href='../088file.mu.html#L11'>resources</a><span class="muRecipe"> -&gt; </span>env:&amp;:environment [
+<span id="L435" class="LineNr"> 435 </span>  <span class="Constant">local-scope</span>
+<span id="L436" class="LineNr"> 436 </span>  <span class="Constant">load-ingredients</span>
+<span id="L437" class="LineNr"> 437 </span>  <span class="Comment"># read all scenarios, pushing them to end of a list of scenarios</span>
+<span id="L438" class="LineNr"> 438 </span>  idx:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
+<span id="L439" class="LineNr"> 439 </span>  curr:&amp;:sandbox <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
+<span id="L440" class="LineNr"> 440 </span>  <a href='../065duplex_list.mu.html#L36'>prev</a>:&amp;:sandbox <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
+<span id="L441" class="LineNr"> 441 </span>  <span class="Delimiter">{</span>
+<span id="L442" class="LineNr"> 442 </span>  <span class="Conceal">¦</span> filename:text <span class="Special">&lt;-</span> append <span class="Constant">[lesson/]</span>, idx
+<span id="L443" class="LineNr"> 443 </span>  <span class="Conceal">¦</span> contents:text <span class="Special">&lt;-</span> <a href='../088file.mu.html#L38'>slurp</a> <a href='../088file.mu.html#L11'>resources</a>, filename
+<span id="L444" class="LineNr"> 444 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> contents  <span class="Comment"># stop at first error; assuming file didn't exist</span>
+<span id="L445" class="LineNr"> 445 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span>      <span class="Comment"># todo: handle empty sandbox</span>
+<span id="L446" class="LineNr"> 446 </span>  <span class="Conceal">¦</span> <span class="Comment"># create new sandbox for file</span>
+<span id="L447" class="LineNr"> 447 </span>  <span class="Conceal">¦</span> curr <span class="Special">&lt;-</span> new <span class="Constant">sandbox:type</span>
+<span id="L448" class="LineNr"> 448 </span>  <span class="Conceal">¦</span> *curr <span class="Special">&lt;-</span> put *curr, <span class="Constant">data:offset</span>, contents
+<span id="L449" class="LineNr"> 449 </span><span class="Constant">  </span><span class="Conceal">¦</span><span class="Constant"> <a href='005-sandbox.mu.html#L449'>&lt;end-restore-sandbox&gt;</a></span>
+<span id="L450" class="LineNr"> 450 </span>  <span class="Conceal">¦</span> <span class="Delimiter">{</span>
+<span id="L451" class="LineNr"> 451 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> idx
+<span id="L452" class="LineNr"> 452 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> *env <span class="Special">&lt;-</span> put *env, <span class="Constant">sandbox:offset</span>, curr
+<span id="L453" class="LineNr"> 453 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
+<span id="L454" class="LineNr"> 454 </span>  <span class="Conceal">¦</span> <span class="Delimiter">{</span>
+<span id="L455" class="LineNr"> 455 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="muControl">break-unless</span> idx
+<span id="L456" class="LineNr"> 456 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> *prev <span class="Special">&lt;-</span> put *prev, <span class="Constant">next-sandbox:offset</span>, curr
+<span id="L457" class="LineNr"> 457 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
+<span id="L458" class="LineNr"> 458 </span>  <span class="Conceal">¦</span> idx <span class="Special">&lt;-</span> add idx,<span class="Constant"> 1</span>
+<span id="L459" class="LineNr"> 459 </span>  <span class="Conceal">¦</span> <a href='../065duplex_list.mu.html#L36'>prev</a> <span class="Special">&lt;-</span> copy curr
+<span id="L460" class="LineNr"> 460 </span>  <span class="Conceal">¦</span> <span class="muControl">loop</span>
+<span id="L461" class="LineNr"> 461 </span>  <span class="Delimiter">}</span>
+<span id="L462" class="LineNr"> 462 </span>  <span class="Comment"># update sandbox count</span>
+<span id="L463" class="LineNr"> 463 </span>  *env <span class="Special">&lt;-</span> put *env, <span class="Constant">number-of-sandboxes:offset</span>, idx
+<span id="L464" class="LineNr"> 464 </span>]
+<span id="L465" class="LineNr"> 465 </span>
+<span id="L466" class="LineNr"> 466 </span><span class="Comment"># print the fake sandbox screen to 'screen' with appropriate delimiters</span>
+<span id="L467" class="LineNr"> 467 </span><span class="Comment"># leave cursor at start of next line</span>
+<span id="L468" class="LineNr"> 468 </span><span class="muRecipe">def</span> <a href='005-sandbox.mu.html#L468'>render-screen</a> <a href='../081print.mu.html#L4'>screen</a>:&amp;:<a href='../081print.mu.html#L4'>screen</a>, sandbox-screen:&amp;:<a href='../081print.mu.html#L4'>screen</a>, left:num, right:num, row:num<span class="muRecipe"> -&gt; </span>row:num, <a href='../081print.mu.html#L4'>screen</a>:&amp;:<a href='../081print.mu.html#L4'>screen</a> [
+<span id="L469" class="LineNr"> 469 </span>  <span class="Constant">local-scope</span>
+<span id="L470" class="LineNr"> 470 </span>  <span class="Constant">load-ingredients</span>
+<span id="L471" class="LineNr"> 471 </span>  <span class="muControl">return-unless</span> sandbox-screen
+<span id="L472" class="LineNr"> 472 </span>  <span class="Comment"># print 'screen:'</span>
+<span id="L473" class="LineNr"> 473 </span>  row <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L356'>render-text</a> <a href='../081print.mu.html#L4'>screen</a>, <span class="Constant">[screen:]</span>, left, right, <span class="Constant">245/grey</span>, row
+<span id="L474" class="LineNr"> 474 </span>  <a href='../081print.mu.html#L4'>screen</a> <span class="Special">&lt;-</span> <a href='../081print.mu.html#L573'>move-cursor</a> <a href='../081print.mu.html#L4'>screen</a>, row, left
+<span id="L475" class="LineNr"> 475 </span>  <span class="Comment"># start printing sandbox-screen</span>
+<span id="L476" class="LineNr"> 476 </span>  column:num <span class="Special">&lt;-</span> copy left
+<span id="L477" class="LineNr"> 477 </span>  s-width:num <span class="Special">&lt;-</span> <a href='../081print.mu.html#L712'>screen-width</a> sandbox-screen
+<span id="L478" class="LineNr"> 478 </span>  s-height:num <span class="Special">&lt;-</span> <a href='../081print.mu.html#L725'>screen-height</a> sandbox-screen
+<span id="L479" class="LineNr"> 479 </span>  buf:&amp;:@:<a href='../081print.mu.html#L14'>screen-cell</a> <span class="Special">&lt;-</span> get *sandbox-screen, <span class="Constant">data:offset</span>
+<span id="L480" class="LineNr"> 480 </span>  stop-printing:num <span class="Special">&lt;-</span> add left, s-width,<span class="Constant"> 3</span>
+<span id="L481" class="LineNr"> 481 </span>  max-column:num <span class="Special">&lt;-</span> min stop-printing, right
+<span id="L482" class="LineNr"> 482 </span>  i:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
+<span id="L483" class="LineNr"> 483 </span>  len:num <span class="Special">&lt;-</span> length *buf
+<span id="L484" class="LineNr"> 484 </span>  <a href='../081print.mu.html#L725'>screen-height</a>:num <span class="Special">&lt;-</span> <a href='../081print.mu.html#L725'>screen-height</a> <a href='../081print.mu.html#L4'>screen</a>
+<span id="L485" class="LineNr"> 485 </span>  <span class="Delimiter">{</span>
+<span id="L486" class="LineNr"> 486 </span>  <span class="Conceal">¦</span> done?:bool <span class="Special">&lt;-</span> greater-or-equal i, len
+<span id="L487" class="LineNr"> 487 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> done?
+<span id="L488" class="LineNr"> 488 </span>  <span class="Conceal">¦</span> done? <span class="Special">&lt;-</span> greater-or-equal row, <a href='../081print.mu.html#L725'>screen-height</a>
+<span id="L489" class="LineNr"> 489 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> done?
+<span id="L490" class="LineNr"> 490 </span>  <span class="Conceal">¦</span> column <span class="Special">&lt;-</span> copy left
+<span id="L491" class="LineNr"> 491 </span>  <span class="Conceal">¦</span> <a href='../081print.mu.html#L4'>screen</a> <span class="Special">&lt;-</span> <a href='../081print.mu.html#L573'>move-cursor</a> <a href='../081print.mu.html#L4'>screen</a>, row, column
+<span id="L492" class="LineNr"> 492 </span>  <span class="Conceal">¦</span> <span class="Comment"># initial leader for each row: two spaces and a '.'</span>
+<span id="L493" class="LineNr"> 493 </span>  <span class="Conceal">¦</span> space:char <span class="Special">&lt;-</span> copy <span class="Constant">32/space</span>
+<span id="L494" class="LineNr"> 494 </span>  <span class="Conceal">¦</span> print <a href='../081print.mu.html#L4'>screen</a>, space, <span class="Constant">245/grey</span>
+<span id="L495" class="LineNr"> 495 </span>  <span class="Conceal">¦</span> print <a href='../081print.mu.html#L4'>screen</a>, space, <span class="Constant">245/grey</span>
+<span id="L496" class="LineNr"> 496 </span>  <span class="Conceal">¦</span> full-stop:char <span class="Special">&lt;-</span> copy <span class="Constant">46/period</span>
+<span id="L497" class="LineNr"> 497 </span>  <span class="Conceal">¦</span> print <a href='../081print.mu.html#L4'>screen</a>, full-stop, <span class="Constant">245/grey</span>
+<span id="L498" class="LineNr"> 498 </span>  <span class="Conceal">¦</span> column <span class="Special">&lt;-</span> add left,<span class="Constant"> 3</span>
+<span id="L499" class="LineNr"> 499 </span>  <span class="Conceal">¦</span> <span class="Delimiter">{</span>
+<span id="L500" class="LineNr"> 500 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment"># print row</span>
+<span id="L501" class="LineNr"> 501 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> row-done?:bool <span class="Special">&lt;-</span> greater-or-equal column, max-column
+<span id="L502" class="LineNr"> 502 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> row-done?
+<span id="L503" class="LineNr"> 503 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> curr:<a href='../081print.mu.html#L14'>screen-cell</a> <span class="Special">&lt;-</span> index *buf, i
+<span id="L504" class="LineNr"> 504 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> c:char <span class="Special">&lt;-</span> get curr, <span class="Constant">contents:offset</span>
+<span id="L505" class="LineNr"> 505 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> color:num <span class="Special">&lt;-</span> get curr, <span class="Constant">color:offset</span>
+<span id="L506" class="LineNr"> 506 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">{</span>
+<span id="L507" class="LineNr"> 507 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment"># damp whites down to grey</span>
+<span id="L508" class="LineNr"> 508 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> white?:bool <span class="Special">&lt;-</span> equal color, <span class="Constant">7/white</span>
+<span id="L509" class="LineNr"> 509 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="muControl">break-unless</span> white?
+<span id="L510" class="LineNr"> 510 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> color <span class="Special">&lt;-</span> copy <span class="Constant">245/grey</span>
+<span id="L511" class="LineNr"> 511 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
+<span id="L512" class="LineNr"> 512 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> print <a href='../081print.mu.html#L4'>screen</a>, c, color
+<span id="L513" class="LineNr"> 513 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> column <span class="Special">&lt;-</span> add column,<span class="Constant"> 1</span>
+<span id="L514" class="LineNr"> 514 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> i <span class="Special">&lt;-</span> add i,<span class="Constant"> 1</span>
+<span id="L515" class="LineNr"> 515 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="muControl">loop</span>
+<span id="L516" class="LineNr"> 516 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
+<span id="L517" class="LineNr"> 517 </span>  <span class="Conceal">¦</span> <span class="Comment"># print final '.'</span>
+<span id="L518" class="LineNr"> 518 </span>  <span class="Conceal">¦</span> print <a href='../081print.mu.html#L4'>screen</a>, full-stop, <span class="Constant">245/grey</span>
+<span id="L519" class="LineNr"> 519 </span>  <span class="Conceal">¦</span> column <span class="Special">&lt;-</span> add column,<span class="Constant"> 1</span>
+<span id="L520" class="LineNr"> 520 </span>  <span class="Conceal">¦</span> <span class="Delimiter">{</span>
+<span id="L521" class="LineNr"> 521 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment"># clear rest of current line</span>
+<span id="L522" class="LineNr"> 522 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> line-done?:bool <span class="Special">&lt;-</span> greater-than column, right
+<span id="L523" class="LineNr"> 523 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> line-done?
+<span id="L524" class="LineNr"> 524 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> print <a href='../081print.mu.html#L4'>screen</a>, space
+<span id="L525" class="LineNr"> 525 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> column <span class="Special">&lt;-</span> add column,<span class="Constant"> 1</span>
+<span id="L526" class="LineNr"> 526 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="muControl">loop</span>
+<span id="L527" class="LineNr"> 527 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
+<span id="L528" class="LineNr"> 528 </span>  <span class="Conceal">¦</span> row <span class="Special">&lt;-</span> add row,<span class="Constant"> 1</span>
+<span id="L529" class="LineNr"> 529 </span>  <span class="Conceal">¦</span> <span class="muControl">loop</span>
+<span id="L530" class="LineNr"> 530 </span>  <span class="Delimiter">}</span>
+<span id="L531" class="LineNr"> 531 </span>]
+<span id="L532" class="LineNr"> 532 </span>
+<span id="L533" class="LineNr"> 533 </span><span class="muScenario">scenario</span> run-updates-results [
+<span id="L534" class="LineNr"> 534 </span>  <span class="Constant">local-scope</span>
+<span id="L535" class="LineNr"> 535 </span>  trace-until <span class="Constant">100/app</span>  <span class="Comment"># trace too long</span>
+<span id="L536" class="LineNr"> 536 </span>  assume-screen <span class="Constant">100/width</span>, <span class="Constant">12/height</span>
+<span id="L537" class="LineNr"> 537 </span>  <span class="Comment"># define a recipe (no indent for the 'add' line below so column numbers are more obvious)</span>
+<span id="L538" class="LineNr"> 538 </span>  assume-resources [
+<span id="L539" class="LineNr"> 539 </span>  <span class="Conceal">¦</span> <span class="Constant">[lesson/recipes.mu]</span> <span class="Special">&lt;-</span> [
+<span id="L540" class="LineNr"> 540 </span><span class="Constant">  </span><span class="Conceal">¦</span><span class="Constant"> </span><span class="Conceal">¦</span><span class="Constant"> ||</span>
+<span id="L541" class="LineNr"> 541 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Constant">|recipe</span> foo <span class="Constant">[|</span>
+<span id="L542" class="LineNr"> 542 </span><span class="Constant">  </span><span class="Conceal">¦</span><span class="Constant"> </span><span class="Conceal">¦</span><span class="Constant"> |  local-scope|</span>
+<span id="L543" class="LineNr"> 543 </span><span class="Constant">  </span><span class="Conceal">¦</span><span class="Constant"> </span><span class="Conceal">¦</span><span class="Constant"> |  z:num &lt;- add 2, 2|</span>
+<span id="L544" class="LineNr"> 544 </span><span class="Constant">  </span><span class="Conceal">¦</span><span class="Constant"> </span><span class="Conceal">¦</span><span class="Constant"> |  reply z|</span>
+<span id="L545" class="LineNr"> 545 </span><span class="Constant">  </span><span class="Conceal">¦</span><span class="Constant"> </span><span class="Conceal">¦</span><span class="Constant"> |]</span>|
+<span id="L546" class="LineNr"> 546 </span>  <span class="Conceal">¦</span> ]
+<span id="L547" class="LineNr"> 547 </span>  ]
+<span id="L548" class="LineNr"> 548 </span>  <span class="Comment"># sandbox editor contains an instruction without storing outputs</span>
+<span id="L549" class="LineNr"> 549 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L4'>screen</a>, <span class="Constant">[foo]</span>  <span class="Comment"># contents of sandbox editor</span>
+<span id="L550" class="LineNr"> 550 </span>  <span class="Comment"># run the code in the editors</span>
+<span id="L551" class="LineNr"> 551 </span>  assume-console [
+<span id="L552" class="LineNr"> 552 </span>  <span class="Conceal">¦</span> press F4
 <span id="L553" class="LineNr"> 553 </span>  ]
-<span id="L554" class="LineNr"> 554 </span>  <span class="Comment"># sandbox editor contains an instruction without storing outputs</span>
-<span id="L555" class="LineNr"> 555 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L4'>screen</a>, <span class="Constant">[foo]</span>  <span class="Comment"># contents of sandbox editor</span>
-<span id="L556" class="LineNr"> 556 </span>  <span class="Comment"># run the code in the editors</span>
-<span id="L557" class="LineNr"> 557 </span>  assume-console [
-<span id="L558" class="LineNr"> 558 </span>  <span class="Conceal">¦</span> press F4
-<span id="L559" class="LineNr"> 559 </span>  ]
-<span id="L560" class="LineNr"> 560 </span>  <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
-<span id="L561" class="LineNr"> 561 </span>  screen-should-contain [
-<span id="L562" class="LineNr"> 562 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
+<span id="L554" class="LineNr"> 554 </span>  <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
+<span id="L555" class="LineNr"> 555 </span>  screen-should-contain [
+<span id="L556" class="LineNr"> 556 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
+<span id="L557" class="LineNr"> 557 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
+<span id="L558" class="LineNr"> 558 </span>  <span class="Conceal">¦</span><span class="Constant"> .recipe foo [                                      ╎─────────────────────────────────────────────────.</span>
+<span id="L559" class="LineNr"> 559 </span>  <span class="Conceal">¦</span><span class="Constant"> .  local-scope                                     ╎0   edit          copy            delete         .</span>
+<span id="L560" class="LineNr"> 560 </span>  <span class="Conceal">¦</span><span class="Constant"> .  z:num &lt;- add 2, 2                               ╎foo                                              .</span>
+<span id="L561" class="LineNr"> 561 </span>  <span class="Conceal">¦</span><span class="Constant"> .  reply z                                         ╎4                                                .</span>
+<span id="L562" class="LineNr"> 562 </span>  <span class="Conceal">¦</span><span class="Constant"> .]                                                 ╎─────────────────────────────────────────────────.</span>
 <span id="L563" class="LineNr"> 563 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
-<span id="L564" class="LineNr"> 564 </span>  <span class="Conceal">¦</span><span class="Constant"> .recipe foo [                                      ╎─────────────────────────────────────────────────.</span>
-<span id="L565" class="LineNr"> 565 </span>  <span class="Conceal">¦</span><span class="Constant"> .  local-scope                                     ╎0   edit          copy            delete         .</span>
-<span id="L566" class="LineNr"> 566 </span>  <span class="Conceal">¦</span><span class="Constant"> .  z:num &lt;- add 2, 2                               ╎foo                                              .</span>
-<span id="L567" class="LineNr"> 567 </span>  <span class="Conceal">¦</span><span class="Constant"> .  reply z                                         ╎4                                                .</span>
-<span id="L568" class="LineNr"> 568 </span>  <span class="Conceal">¦</span><span class="Constant"> .]                                                 ╎─────────────────────────────────────────────────.</span>
-<span id="L569" class="LineNr"> 569 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
-<span id="L570" class="LineNr"> 570 </span>  <span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎                                                 .</span>
-<span id="L571" class="LineNr"> 571 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
-<span id="L572" class="LineNr"> 572 </span>  ]
-<span id="L573" class="LineNr"> 573 </span>  <span class="Comment"># make a change (incrementing one of the args to 'add'), then rerun</span>
-<span id="L574" class="LineNr"> 574 </span>  assume-console [
-<span id="L575" class="LineNr"> 575 </span>  <span class="Conceal">¦</span> left-click<span class="Constant"> 4</span>,<span class="Constant"> 28</span>  <span class="Comment"># one past the value of the second arg</span>
-<span id="L576" class="LineNr"> 576 </span>  <span class="Conceal">¦</span> press backspace
-<span id="L577" class="LineNr"> 577 </span>  <span class="Conceal">¦</span> type <span class="Constant">[3]</span>
-<span id="L578" class="LineNr"> 578 </span>  <span class="Conceal">¦</span> press F4
-<span id="L579" class="LineNr"> 579 </span>  ]
-<span id="L580" class="LineNr"> 580 </span>  run [
-<span id="L581" class="LineNr"> 581 </span>  <span class="Conceal">¦</span> <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
-<span id="L582" class="LineNr"> 582 </span>  ]
-<span id="L583" class="LineNr"> 583 </span>  <span class="Comment"># check that screen updates the result on the right</span>
-<span id="L584" class="LineNr"> 584 </span>  screen-should-contain [
-<span id="L585" class="LineNr"> 585 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
+<span id="L564" class="LineNr"> 564 </span>  <span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎                                                 .</span>
+<span id="L565" class="LineNr"> 565 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
+<span id="L566" class="LineNr"> 566 </span>  ]
+<span id="L567" class="LineNr"> 567 </span>  <span class="Comment"># make a change (incrementing one of the args to 'add'), then rerun</span>
+<span id="L568" class="LineNr"> 568 </span>  assume-console [
+<span id="L569" class="LineNr"> 569 </span>  <span class="Conceal">¦</span> left-click<span class="Constant"> 4</span>,<span class="Constant"> 28</span>  <span class="Comment"># one past the value of the second arg</span>
+<span id="L570" class="LineNr"> 570 </span>  <span class="Conceal">¦</span> press backspace
+<span id="L571" class="LineNr"> 571 </span>  <span class="Conceal">¦</span> type <span class="Constant">[3]</span>
+<span id="L572" class="LineNr"> 572 </span>  <span class="Conceal">¦</span> press F4
+<span id="L573" class="LineNr"> 573 </span>  ]
+<span id="L574" class="LineNr"> 574 </span>  run [
+<span id="L575" class="LineNr"> 575 </span>  <span class="Conceal">¦</span> <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
+<span id="L576" class="LineNr"> 576 </span>  ]
+<span id="L577" class="LineNr"> 577 </span>  <span class="Comment"># check that screen updates the result on the right</span>
+<span id="L578" class="LineNr"> 578 </span>  screen-should-contain [
+<span id="L579" class="LineNr"> 579 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
+<span id="L580" class="LineNr"> 580 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
+<span id="L581" class="LineNr"> 581 </span>  <span class="Conceal">¦</span><span class="Constant"> .recipe foo [                                      ╎─────────────────────────────────────────────────.</span>
+<span id="L582" class="LineNr"> 582 </span>  <span class="Conceal">¦</span><span class="Constant"> .  local-scope                                     ╎0   edit          copy            delete         .</span>
+<span id="L583" class="LineNr"> 583 </span>  <span class="Conceal">¦</span><span class="Constant"> .  z:num &lt;- add 2, 3                               ╎foo                                              .</span>
+<span id="L584" class="LineNr"> 584 </span>  <span class="Conceal">¦</span><span class="Constant"> .  reply z                                         ╎5                                                .</span>
+<span id="L585" class="LineNr"> 585 </span>  <span class="Conceal">¦</span><span class="Constant"> .]                                                 ╎─────────────────────────────────────────────────.</span>
 <span id="L586" class="LineNr"> 586 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
-<span id="L587" class="LineNr"> 587 </span>  <span class="Conceal">¦</span><span class="Constant"> .recipe foo [                                      ╎─────────────────────────────────────────────────.</span>
-<span id="L588" class="LineNr"> 588 </span>  <span class="Conceal">¦</span><span class="Constant"> .  local-scope                                     ╎0   edit          copy            delete         .</span>
-<span id="L589" class="LineNr"> 589 </span>  <span class="Conceal">¦</span><span class="Constant"> .  z:num &lt;- add 2, 3                               ╎foo                                              .</span>
-<span id="L590" class="LineNr"> 590 </span>  <span class="Conceal">¦</span><span class="Constant"> .  reply z                                         ╎5                                                .</span>
-<span id="L591" class="LineNr"> 591 </span>  <span class="Conceal">¦</span><span class="Constant"> .]                                                 ╎─────────────────────────────────────────────────.</span>
-<span id="L592" class="LineNr"> 592 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
-<span id="L593" class="LineNr"> 593 </span>  <span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎                                                 .</span>
-<span id="L594" class="LineNr"> 594 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
-<span id="L595" class="LineNr"> 595 </span>  ]
-<span id="L596" class="LineNr"> 596 </span>]
-<span id="L597" class="LineNr"> 597 </span>
-<span id="L598" class="LineNr"> 598 </span><span class="muScenario">scenario</span> run-instruction-manages-screen-per-sandbox [
-<span id="L599" class="LineNr"> 599 </span>  <span class="Constant">local-scope</span>
-<span id="L600" class="LineNr"> 600 </span>  trace-until <span class="Constant">100/app</span>  <span class="Comment"># trace too long</span>
-<span id="L601" class="LineNr"> 601 </span>  assume-screen <span class="Constant">100/width</span>, <span class="Constant">20/height</span>
-<span id="L602" class="LineNr"> 602 </span>  <span class="Comment"># empty recipes</span>
-<span id="L603" class="LineNr"> 603 </span>  assume-resources [
+<span id="L587" class="LineNr"> 587 </span>  <span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎                                                 .</span>
+<span id="L588" class="LineNr"> 588 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
+<span id="L589" class="LineNr"> 589 </span>  ]
+<span id="L590" class="LineNr"> 590 </span>]
+<span id="L591" class="LineNr"> 591 </span>
+<span id="L592" class="LineNr"> 592 </span><span class="muScenario">scenario</span> run-instruction-manages-screen-per-sandbox [
+<span id="L593" class="LineNr"> 593 </span>  <span class="Constant">local-scope</span>
+<span id="L594" class="LineNr"> 594 </span>  trace-until <span class="Constant">100/app</span>  <span class="Comment"># trace too long</span>
+<span id="L595" class="LineNr"> 595 </span>  assume-screen <span class="Constant">100/width</span>, <span class="Constant">20/height</span>
+<span id="L596" class="LineNr"> 596 </span>  <span class="Comment"># empty recipes</span>
+<span id="L597" class="LineNr"> 597 </span>  assume-resources [
+<span id="L598" class="LineNr"> 598 </span>  ]
+<span id="L599" class="LineNr"> 599 </span>  <span class="Comment"># sandbox editor contains an instruction</span>
+<span id="L600" class="LineNr"> 600 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L4'>screen</a>, <span class="Constant">[print <a href='../081print.mu.html#L4'>screen</a>, 4]</span>  <span class="Comment"># contents of sandbox editor</span>
+<span id="L601" class="LineNr"> 601 </span>  <span class="Comment"># run the code in the editor</span>
+<span id="L602" class="LineNr"> 602 </span>  assume-console [
+<span id="L603" class="LineNr"> 603 </span>  <span class="Conceal">¦</span> press F4
 <span id="L604" class="LineNr"> 604 </span>  ]
-<span id="L605" class="LineNr"> 605 </span>  <span class="Comment"># sandbox editor contains an instruction</span>
-<span id="L606" class="LineNr"> 606 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L4'>screen</a>, <span class="Constant">[print <a href='../081print.mu.html#L4'>screen</a>, 4]</span>  <span class="Comment"># contents of sandbox editor</span>
-<span id="L607" class="LineNr"> 607 </span>  <span class="Comment"># run the code in the editor</span>
-<span id="L608" class="LineNr"> 608 </span>  assume-console [
-<span id="L609" class="LineNr"> 609 </span>  <span class="Conceal">¦</span> press F4
-<span id="L610" class="LineNr"> 610 </span>  ]
-<span id="L611" class="LineNr"> 611 </span>  run [
-<span id="L612" class="LineNr"> 612 </span>  <span class="Conceal">¦</span> <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
-<span id="L613" class="LineNr"> 613 </span>  ]
-<span id="L614" class="LineNr"> 614 </span>  <span class="Comment"># check that it prints a little toy screen</span>
-<span id="L615" class="LineNr"> 615 </span>  screen-should-contain [
-<span id="L616" class="LineNr"> 616 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
-<span id="L617" class="LineNr"> 617 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
-<span id="L618" class="LineNr"> 618 </span><span class="Constant">  </span><span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎─────────────────────────────────────────────────.</span>
-<span id="L619" class="LineNr"> 619 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎0   edit          copy            delete         .</span>
-<span id="L620" class="LineNr"> 620 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎print <a href='../081print.mu.html#L4'>screen</a>, 4                                  .</span>
-<span id="L621" class="LineNr"> 621 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎screen:                                          .</span>
-<span id="L622" class="LineNr"> 622 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎  .4                             .               .</span>
-<span id="L623" class="LineNr"> 623 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎  .                              .               .</span>
-<span id="L624" class="LineNr"> 624 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎  .                              .               .</span>
-<span id="L625" class="LineNr"> 625 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎  .                              .               .</span>
-<span id="L626" class="LineNr"> 626 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎  .                              .               .</span>
-<span id="L627" class="LineNr"> 627 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
-<span id="L628" class="LineNr"> 628 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
-<span id="L629" class="LineNr"> 629 </span>  ]
-<span id="L630" class="LineNr"> 630 </span>]
-<span id="L631" class="LineNr"> 631 </span>
-<span id="L632" class="LineNr"> 632 </span><span class="muRecipe">def</span> <a href='005-sandbox.mu.html#L632'>editor-contents</a> editor:&amp;:editor<span class="muRecipe"> -&gt; </span>result:text [
-<span id="L633" class="LineNr"> 633 </span>  <span class="Constant">local-scope</span>
-<span id="L634" class="LineNr"> 634 </span>  <span class="Constant">load-ingredients</span>
-<span id="L635" class="LineNr"> 635 </span>  buf:&amp;:<a href='../061text.mu.html#L126'>buffer</a>:char <span class="Special">&lt;-</span> <a href='../061text.mu.html#L131'>new-buffer</a><span class="Constant"> 80</span>
-<span id="L636" class="LineNr"> 636 </span>  curr:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">data:offset</span>
-<span id="L637" class="LineNr"> 637 </span>  <span class="Comment"># skip § sentinel</span>
-<span id="L638" class="LineNr"> 638 </span>  assert curr, <span class="Constant">[editor without data is illegal; must have at least a sentinel]</span>
-<span id="L639" class="LineNr"> 639 </span>  curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L29'>next</a> curr
-<span id="L640" class="LineNr"> 640 </span>  <span class="muControl">return-unless</span> curr,<span class="Constant"> 0</span>
-<span id="L641" class="LineNr"> 641 </span>  <span class="Delimiter">{</span>
-<span id="L642" class="LineNr"> 642 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> curr
-<span id="L643" class="LineNr"> 643 </span>  <span class="Conceal">¦</span> c:char <span class="Special">&lt;-</span> get *curr, <span class="Constant">value:offset</span>
-<span id="L644" class="LineNr"> 644 </span>  <span class="Conceal">¦</span> buf <span class="Special">&lt;-</span> append buf, c
-<span id="L645" class="LineNr"> 645 </span>  <span class="Conceal">¦</span> curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L29'>next</a> curr
-<span id="L646" class="LineNr"> 646 </span>  <span class="Conceal">¦</span> <span class="muControl">loop</span>
-<span id="L647" class="LineNr"> 647 </span>  <span class="Delimiter">}</span>
-<span id="L648" class="LineNr"> 648 </span>  result <span class="Special">&lt;-</span> <a href='../061text.mu.html#L353'>buffer-to-array</a> buf
-<span id="L649" class="LineNr"> 649 </span>]
-<span id="L650" class="LineNr"> 650 </span>
-<span id="L651" class="LineNr"> 651 </span><span class="muScenario">scenario</span> editor-provides-edited-contents [
-<span id="L652" class="LineNr"> 652 </span>  <span class="Constant">local-scope</span>
-<span id="L653" class="LineNr"> 653 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">5/height</span>
-<span id="L654" class="LineNr"> 654 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> <span class="Constant">[abc]</span>, <span class="Constant">0/left</span>, <span class="Constant">10/right</span>
-<span id="L655" class="LineNr"> 655 </span>  assume-console [
-<span id="L656" class="LineNr"> 656 </span>  <span class="Conceal">¦</span> left-click<span class="Constant"> 1</span>,<span class="Constant"> 2</span>
-<span id="L657" class="LineNr"> 657 </span>  <span class="Conceal">¦</span> type <span class="Constant">[def]</span>
-<span id="L658" class="LineNr"> 658 </span>  ]
-<span id="L659" class="LineNr"> 659 </span>  run [
-<span id="L660" class="LineNr"> 660 </span>  <span class="Conceal">¦</span> <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L661" class="LineNr"> 661 </span>  <span class="Conceal">¦</span> s:text <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L632'>editor-contents</a> e
-<span id="L662" class="LineNr"> 662 </span>  <span class="Conceal">¦</span> 1:@:char/<span class="Special">raw</span> <span class="Special">&lt;-</span> copy *s
-<span id="L663" class="LineNr"> 663 </span>  ]
-<span id="L664" class="LineNr"> 664 </span>  memory-should-contain [
-<span id="L665" class="LineNr"> 665 </span>  <span class="Conceal">¦</span> 1:array:character <span class="Special">&lt;-</span> <span class="Constant">[abdefc]</span>
-<span id="L666" class="LineNr"> 666 </span>  ]
-<span id="L667" class="LineNr"> 667 </span>]
-<span id="L668" class="LineNr"> 668 </span>
-<span id="L669" class="LineNr"> 669 </span><span class="Comment"># keep the bottom of recipes from scrolling off the screen</span>
-<span id="L670" class="LineNr"> 670 </span>
-<span id="L671" class="LineNr"> 671 </span><span class="muScenario">scenario</span> scrolling-down-past-bottom-of-recipe-editor [
-<span id="L672" class="LineNr"> 672 </span>  <span class="Constant">local-scope</span>
-<span id="L673" class="LineNr"> 673 </span>  trace-until <span class="Constant">100/app</span>
-<span id="L674" class="LineNr"> 674 </span>  assume-screen <span class="Constant">100/width</span>, <span class="Constant">10/height</span>
-<span id="L675" class="LineNr"> 675 </span>  assume-resources [
+<span id="L605" class="LineNr"> 605 </span>  run [
+<span id="L606" class="LineNr"> 606 </span>  <span class="Conceal">¦</span> <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
+<span id="L607" class="LineNr"> 607 </span>  ]
+<span id="L608" class="LineNr"> 608 </span>  <span class="Comment"># check that it prints a little toy screen</span>
+<span id="L609" class="LineNr"> 609 </span>  screen-should-contain [
+<span id="L610" class="LineNr"> 610 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
+<span id="L611" class="LineNr"> 611 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
+<span id="L612" class="LineNr"> 612 </span><span class="Constant">  </span><span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎─────────────────────────────────────────────────.</span>
+<span id="L613" class="LineNr"> 613 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎0   edit          copy            delete         .</span>
+<span id="L614" class="LineNr"> 614 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎print <a href='../081print.mu.html#L4'>screen</a>, 4                                  .</span>
+<span id="L615" class="LineNr"> 615 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎screen:                                          .</span>
+<span id="L616" class="LineNr"> 616 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎  .4                             .               .</span>
+<span id="L617" class="LineNr"> 617 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎  .                              .               .</span>
+<span id="L618" class="LineNr"> 618 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎  .                              .               .</span>
+<span id="L619" class="LineNr"> 619 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎  .                              .               .</span>
+<span id="L620" class="LineNr"> 620 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎  .                              .               .</span>
+<span id="L621" class="LineNr"> 621 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
+<span id="L622" class="LineNr"> 622 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
+<span id="L623" class="LineNr"> 623 </span>  ]
+<span id="L624" class="LineNr"> 624 </span>]
+<span id="L625" class="LineNr"> 625 </span>
+<span id="L626" class="LineNr"> 626 </span><span class="muRecipe">def</span> <a href='005-sandbox.mu.html#L626'>editor-contents</a> editor:&amp;:editor<span class="muRecipe"> -&gt; </span>result:text [
+<span id="L627" class="LineNr"> 627 </span>  <span class="Constant">local-scope</span>
+<span id="L628" class="LineNr"> 628 </span>  <span class="Constant">load-ingredients</span>
+<span id="L629" class="LineNr"> 629 </span>  buf:&amp;:<a href='../061text.mu.html#L126'>buffer</a>:char <span class="Special">&lt;-</span> <a href='../061text.mu.html#L131'>new-buffer</a><span class="Constant"> 80</span>
+<span id="L630" class="LineNr"> 630 </span>  curr:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">data:offset</span>
+<span id="L631" class="LineNr"> 631 </span>  <span class="Comment"># skip § sentinel</span>
+<span id="L632" class="LineNr"> 632 </span>  assert curr, <span class="Constant">[editor without data is illegal; must have at least a sentinel]</span>
+<span id="L633" class="LineNr"> 633 </span>  curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L29'>next</a> curr
+<span id="L634" class="LineNr"> 634 </span>  <span class="muControl">return-unless</span> curr,<span class="Constant"> 0</span>
+<span id="L635" class="LineNr"> 635 </span>  <span class="Delimiter">{</span>
+<span id="L636" class="LineNr"> 636 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> curr
+<span id="L637" class="LineNr"> 637 </span>  <span class="Conceal">¦</span> c:char <span class="Special">&lt;-</span> get *curr, <span class="Constant">value:offset</span>
+<span id="L638" class="LineNr"> 638 </span>  <span class="Conceal">¦</span> buf <span class="Special">&lt;-</span> append buf, c
+<span id="L639" class="LineNr"> 639 </span>  <span class="Conceal">¦</span> curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L29'>next</a> curr
+<span id="L640" class="LineNr"> 640 </span>  <span class="Conceal">¦</span> <span class="muControl">loop</span>
+<span id="L641" class="LineNr"> 641 </span>  <span class="Delimiter">}</span>
+<span id="L642" class="LineNr"> 642 </span>  result <span class="Special">&lt;-</span> <a href='../061text.mu.html#L353'>buffer-to-array</a> buf
+<span id="L643" class="LineNr"> 643 </span>]
+<span id="L644" class="LineNr"> 644 </span>
+<span id="L645" class="LineNr"> 645 </span><span class="muScenario">scenario</span> editor-provides-edited-contents [
+<span id="L646" class="LineNr"> 646 </span>  <span class="Constant">local-scope</span>
+<span id="L647" class="LineNr"> 647 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">5/height</span>
+<span id="L648" class="LineNr"> 648 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> <span class="Constant">[abc]</span>, <span class="Constant">0/left</span>, <span class="Constant">10/right</span>
+<span id="L649" class="LineNr"> 649 </span>  assume-console [
+<span id="L650" class="LineNr"> 650 </span>  <span class="Conceal">¦</span> left-click<span class="Constant"> 1</span>,<span class="Constant"> 2</span>
+<span id="L651" class="LineNr"> 651 </span>  <span class="Conceal">¦</span> type <span class="Constant">[def]</span>
+<span id="L652" class="LineNr"> 652 </span>  ]
+<span id="L653" class="LineNr"> 653 </span>  run [
+<span id="L654" class="LineNr"> 654 </span>  <span class="Conceal">¦</span> <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L655" class="LineNr"> 655 </span>  <span class="Conceal">¦</span> s:text <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L626'>editor-contents</a> e
+<span id="L656" class="LineNr"> 656 </span>  <span class="Conceal">¦</span> 1:@:char/<span class="Special">raw</span> <span class="Special">&lt;-</span> copy *s
+<span id="L657" class="LineNr"> 657 </span>  ]
+<span id="L658" class="LineNr"> 658 </span>  memory-should-contain [
+<span id="L659" class="LineNr"> 659 </span>  <span class="Conceal">¦</span> 1:array:character <span class="Special">&lt;-</span> <span class="Constant">[abdefc]</span>
+<span id="L660" class="LineNr"> 660 </span>  ]
+<span id="L661" class="LineNr"> 661 </span>]
+<span id="L662" class="LineNr"> 662 </span>
+<span id="L663" class="LineNr"> 663 </span><span class="Comment"># keep the bottom of recipes from scrolling off the screen</span>
+<span id="L664" class="LineNr"> 664 </span>
+<span id="L665" class="LineNr"> 665 </span><span class="muScenario">scenario</span> scrolling-down-past-bottom-of-recipe-editor [
+<span id="L666" class="LineNr"> 666 </span>  <span class="Constant">local-scope</span>
+<span id="L667" class="LineNr"> 667 </span>  trace-until <span class="Constant">100/app</span>
+<span id="L668" class="LineNr"> 668 </span>  assume-screen <span class="Constant">100/width</span>, <span class="Constant">10/height</span>
+<span id="L669" class="LineNr"> 669 </span>  assume-resources [
+<span id="L670" class="LineNr"> 670 </span>  ]
+<span id="L671" class="LineNr"> 671 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L4'>screen</a>, <span class="Constant">[]</span>
+<span id="L672" class="LineNr"> 672 </span>  <a href='004-programming-environment.mu.html#L400'>render-all</a> <a href='../081print.mu.html#L4'>screen</a>, env, <a href='001-editor.mu.html#L122'>render</a>
+<span id="L673" class="LineNr"> 673 </span>  assume-console [
+<span id="L674" class="LineNr"> 674 </span>  <span class="Conceal">¦</span> press enter
+<span id="L675" class="LineNr"> 675 </span>  <span class="Conceal">¦</span> press down-arrow
 <span id="L676" class="LineNr"> 676 </span>  ]
-<span id="L677" class="LineNr"> 677 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L4'>screen</a>, <span class="Constant">[]</span>
-<span id="L678" class="LineNr"> 678 </span>  <a href='004-programming-environment.mu.html#L400'>render-all</a> <a href='../081print.mu.html#L4'>screen</a>, env, <a href='001-editor.mu.html#L122'>render</a>
-<span id="L679" class="LineNr"> 679 </span>  assume-console [
-<span id="L680" class="LineNr"> 680 </span>  <span class="Conceal">¦</span> press enter
-<span id="L681" class="LineNr"> 681 </span>  <span class="Conceal">¦</span> press down-arrow
-<span id="L682" class="LineNr"> 682 </span>  ]
-<span id="L683" class="LineNr"> 683 </span>  <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
-<span id="L684" class="LineNr"> 684 </span>  <span class="Comment"># no scroll</span>
-<span id="L685" class="LineNr"> 685 </span>  screen-should-contain [
-<span id="L686" class="LineNr"> 686 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
-<span id="L687" class="LineNr"> 687 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
-<span id="L688" class="LineNr"> 688 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
-<span id="L689" class="LineNr"> 689 </span>  <span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎                                                 .</span>
-<span id="L690" class="LineNr"> 690 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
-<span id="L691" class="LineNr"> 691 </span>  ]
-<span id="L692" class="LineNr"> 692 </span>]
-<span id="L693" class="LineNr"> 693 </span>
-<span id="L694" class="LineNr"> 694 </span><span class="muScenario">scenario</span> cursor-down-in-recipe-editor [
-<span id="L695" class="LineNr"> 695 </span>  <span class="Constant">local-scope</span>
-<span id="L696" class="LineNr"> 696 </span>  trace-until <span class="Constant">100/app</span>
-<span id="L697" class="LineNr"> 697 </span>  assume-screen <span class="Constant">100/width</span>, <span class="Constant">10/height</span>
-<span id="L698" class="LineNr"> 698 </span>  assume-resources [
-<span id="L699" class="LineNr"> 699 </span>  ]
-<span id="L700" class="LineNr"> 700 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L4'>screen</a>, <span class="Constant">[]</span>
-<span id="L701" class="LineNr"> 701 </span>  <a href='004-programming-environment.mu.html#L400'>render-all</a> <a href='../081print.mu.html#L4'>screen</a>, env, <a href='001-editor.mu.html#L122'>render</a>
-<span id="L702" class="LineNr"> 702 </span>  assume-console [
-<span id="L703" class="LineNr"> 703 </span>  <span class="Conceal">¦</span> press enter
-<span id="L704" class="LineNr"> 704 </span>  <span class="Conceal">¦</span> press up-arrow
-<span id="L705" class="LineNr"> 705 </span>  <span class="Conceal">¦</span> press down-arrow  <span class="Comment"># while cursor isn't at bottom</span>
-<span id="L706" class="LineNr"> 706 </span>  ]
-<span id="L707" class="LineNr"> 707 </span>  <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
-<span id="L708" class="LineNr"> 708 </span>  cursor:char <span class="Special">&lt;-</span> copy <span class="Constant">9251/␣</span>
-<span id="L709" class="LineNr"> 709 </span>  print <a href='../081print.mu.html#L4'>screen</a>, cursor
-<span id="L710" class="LineNr"> 710 </span>  <span class="Comment"># cursor moves back to bottom</span>
-<span id="L711" class="LineNr"> 711 </span>  screen-should-contain [
-<span id="L712" class="LineNr"> 712 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
-<span id="L713" class="LineNr"> 713 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
-<span id="L714" class="LineNr"> 714 </span>  <span class="Conceal">¦</span><span class="Constant"> .␣                                                 ╎─────────────────────────────────────────────────.</span>
-<span id="L715" class="LineNr"> 715 </span>  <span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎                                                 .</span>
-<span id="L716" class="LineNr"> 716 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
-<span id="L717" class="LineNr"> 717 </span>  ]
-<span id="L718" class="LineNr"> 718 </span>]
-<span id="L719" class="LineNr"> 719 </span>
-<span id="L720" class="LineNr"> 720 </span><span class="Comment"># we'll not use the recipe-editor's 'bottom' element directly, because later</span>
-<span id="L721" class="LineNr"> 721 </span><span class="Comment"># layers will add other stuff to the left side below the editor (error messages)</span>
-<span id="L722" class="LineNr"> 722 </span>
-<span id="L723" class="LineNr"> 723 </span><span class="muData">container</span> environment [
-<span id="L724" class="LineNr"> 724 </span>  recipe-bottom:num
-<span id="L725" class="LineNr"> 725 </span>]
-<span id="L726" class="LineNr"> 726 </span>
-<span id="L727" class="LineNr"> 727 </span><span class="muRecipe">after</span> <span class="Constant"><a href='004-programming-environment.mu.html#L443'>&lt;render-recipe-components-end&gt;</a></span> [
-<span id="L728" class="LineNr"> 728 </span>  *env <span class="Special">&lt;-</span> put *env, <span class="Constant">recipe-bottom:offset</span>, row
-<span id="L729" class="LineNr"> 729 </span>]
-<span id="L730" class="LineNr"> 730 </span>
-<span id="L731" class="LineNr"> 731 </span><span class="muRecipe">after</span> <span class="Constant"><a href='004-programming-environment.mu.html#L62'>&lt;global-keypress&gt;</a></span> [
-<span id="L732" class="LineNr"> 732 </span>  <span class="Delimiter">{</span>
-<span id="L733" class="LineNr"> 733 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> sandbox-in-focus?
-<span id="L734" class="LineNr"> 734 </span>  <span class="Conceal">¦</span> down-arrow?:bool <span class="Special">&lt;-</span> equal k, <span class="Constant">65516/down-arrow</span>
-<span id="L735" class="LineNr"> 735 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> down-arrow?
-<span id="L736" class="LineNr"> 736 </span>  <span class="Conceal">¦</span> recipe-editor:&amp;:editor <span class="Special">&lt;-</span> get *env, <span class="Constant">recipes:offset</span>
-<span id="L737" class="LineNr"> 737 </span>  <span class="Conceal">¦</span> recipe-cursor-row:num <span class="Special">&lt;-</span> get *recipe-editor, <span class="Constant">cursor-row:offset</span>
-<span id="L738" class="LineNr"> 738 </span>  <span class="Conceal">¦</span> recipe-editor-bottom:num <span class="Special">&lt;-</span> get *recipe-editor, <span class="Constant">bottom:offset</span>
-<span id="L739" class="LineNr"> 739 </span>  <span class="Conceal">¦</span> at-bottom-of-editor?:bool <span class="Special">&lt;-</span> greater-or-equal recipe-cursor-row, recipe-editor-bottom
-<span id="L740" class="LineNr"> 740 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> at-bottom-of-editor?
-<span id="L741" class="LineNr"> 741 </span>  <span class="Conceal">¦</span> <a href='005-sandbox.mu.html#L766'>more-to-scroll?</a>:bool <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L766'>more-to-scroll?</a> env, <a href='../081print.mu.html#L4'>screen</a>
-<span id="L742" class="LineNr"> 742 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> <a href='005-sandbox.mu.html#L766'>more-to-scroll?</a>
-<span id="L743" class="LineNr"> 743 </span>  <span class="Conceal">¦</span> <span class="muControl">loop</span> <span class="Constant">+next-event</span>
-<span id="L744" class="LineNr"> 744 </span>  <span class="Delimiter">}</span>
-<span id="L745" class="LineNr"> 745 </span>  <span class="Delimiter">{</span>
-<span id="L746" class="LineNr"> 746 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> sandbox-in-focus?
-<span id="L747" class="LineNr"> 747 </span>  <span class="Conceal">¦</span> page-down?:bool <span class="Special">&lt;-</span> equal k, <span class="Constant">65518/page-down</span>
-<span id="L748" class="LineNr"> 748 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> page-down?
-<span id="L749" class="LineNr"> 749 </span>  <span class="Conceal">¦</span> <a href='005-sandbox.mu.html#L766'>more-to-scroll?</a>:bool <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L766'>more-to-scroll?</a> env, <a href='../081print.mu.html#L4'>screen</a>
-<span id="L750" class="LineNr"> 750 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> <a href='005-sandbox.mu.html#L766'>more-to-scroll?</a>
-<span id="L751" class="LineNr"> 751 </span>  <span class="Conceal">¦</span> <span class="muControl">loop</span> <span class="Constant">+next-event</span>
-<span id="L752" class="LineNr"> 752 </span>  <span class="Delimiter">}</span>
-<span id="L753" class="LineNr"> 753 </span>]
-<span id="L754" class="LineNr"> 754 </span>
-<span id="L755" class="LineNr"> 755 </span><span class="muRecipe">after</span> <span class="Constant"><a href='004-programming-environment.mu.html#L67'>&lt;global-type&gt;</a></span> [
-<span id="L756" class="LineNr"> 756 </span>  <span class="Delimiter">{</span>
-<span id="L757" class="LineNr"> 757 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> sandbox-in-focus?
-<span id="L758" class="LineNr"> 758 </span>  <span class="Conceal">¦</span> page-down?:bool <span class="Special">&lt;-</span> equal k, <span class="Constant">6/ctrl-f</span>
-<span id="L759" class="LineNr"> 759 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> page-down?
-<span id="L760" class="LineNr"> 760 </span>  <span class="Conceal">¦</span> <a href='005-sandbox.mu.html#L766'>more-to-scroll?</a>:bool <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L766'>more-to-scroll?</a> env, <a href='../081print.mu.html#L4'>screen</a>
-<span id="L761" class="LineNr"> 761 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> <a href='005-sandbox.mu.html#L766'>more-to-scroll?</a>
-<span id="L762" class="LineNr"> 762 </span>  <span class="Conceal">¦</span> <span class="muControl">loop</span> <span class="Constant">+next-event</span>
-<span id="L763" class="LineNr"> 763 </span>  <span class="Delimiter">}</span>
-<span id="L764" class="LineNr"> 764 </span>]
-<span id="L765" class="LineNr"> 765 </span>
-<span id="L766" class="LineNr"> 766 </span><span class="muRecipe">def</span> <a href='005-sandbox.mu.html#L766'>more-to-scroll?</a> env:&amp;:environment, <a href='../081print.mu.html#L4'>screen</a>:&amp;:<a href='../081print.mu.html#L4'>screen</a><span class="muRecipe"> -&gt; </span>result:bool [
-<span id="L767" class="LineNr"> 767 </span>  <span class="Constant">local-scope</span>
-<span id="L768" class="LineNr"> 768 </span>  <span class="Constant">load-ingredients</span>
-<span id="L769" class="LineNr"> 769 </span>  recipe-bottom:num <span class="Special">&lt;-</span> get *env, <span class="Constant">recipe-bottom:offset</span>
-<span id="L770" class="LineNr"> 770 </span>  height:num <span class="Special">&lt;-</span> <a href='../081print.mu.html#L725'>screen-height</a> <a href='../081print.mu.html#L4'>screen</a>
-<span id="L771" class="LineNr"> 771 </span>  result <span class="Special">&lt;-</span> greater-or-equal recipe-bottom, height
-<span id="L772" class="LineNr"> 772 </span>]
-<span id="L773" class="LineNr"> 773 </span>
-<span id="L774" class="LineNr"> 774 </span><span class="muScenario">scenario</span> scrolling-down-past-bottom-of-recipe-editor-2 [
-<span id="L775" class="LineNr"> 775 </span>  <span class="Constant">local-scope</span>
-<span id="L776" class="LineNr"> 776 </span>  trace-until <span class="Constant">100/app</span>
-<span id="L777" class="LineNr"> 777 </span>  assume-screen <span class="Constant">100/width</span>, <span class="Constant">10/height</span>
-<span id="L778" class="LineNr"> 778 </span>  assume-resources [
-<span id="L779" class="LineNr"> 779 </span>  ]
-<span id="L780" class="LineNr"> 780 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L4'>screen</a>, <span class="Constant">[]</span>
-<span id="L781" class="LineNr"> 781 </span>  <a href='004-programming-environment.mu.html#L400'>render-all</a> <a href='../081print.mu.html#L4'>screen</a>, env, <a href='001-editor.mu.html#L122'>render</a>
-<span id="L782" class="LineNr"> 782 </span>  assume-console [
-<span id="L783" class="LineNr"> 783 </span>  <span class="Conceal">¦</span> <span class="Comment"># add a line</span>
-<span id="L784" class="LineNr"> 784 </span>  <span class="Conceal">¦</span> press enter
-<span id="L785" class="LineNr"> 785 </span>  <span class="Conceal">¦</span> <span class="Comment"># cursor back to top line</span>
-<span id="L786" class="LineNr"> 786 </span>  <span class="Conceal">¦</span> press up-arrow
-<span id="L787" class="LineNr"> 787 </span>  <span class="Conceal">¦</span> <span class="Comment"># try to scroll</span>
-<span id="L788" class="LineNr"> 788 </span>  <span class="Conceal">¦</span> press <a href='003-shortcuts.mu.html#L2981'>page-down</a>  <span class="Comment"># or ctrl-f</span>
-<span id="L789" class="LineNr"> 789 </span>  ]
-<span id="L790" class="LineNr"> 790 </span>  <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
-<span id="L791" class="LineNr"> 791 </span>  <span class="Comment"># no scroll, and cursor remains at top line</span>
-<span id="L792" class="LineNr"> 792 </span>  screen-should-contain [
-<span id="L793" class="LineNr"> 793 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
-<span id="L794" class="LineNr"> 794 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
-<span id="L795" class="LineNr"> 795 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
-<span id="L796" class="LineNr"> 796 </span>  <span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎                                                 .</span>
-<span id="L797" class="LineNr"> 797 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
-<span id="L798" class="LineNr"> 798 </span>  ]
-<span id="L799" class="LineNr"> 799 </span>]
-<span id="L800" class="LineNr"> 800 </span>
-<span id="L801" class="LineNr"> 801 </span><span class="muScenario">scenario</span> scrolling-down-past-bottom-of-recipe-editor-3 [
-<span id="L802" class="LineNr"> 802 </span>  <span class="Constant">local-scope</span>
-<span id="L803" class="LineNr"> 803 </span>  trace-until <span class="Constant">100/app</span>
-<span id="L804" class="LineNr"> 804 </span>  assume-screen <span class="Constant">100/width</span>, <span class="Constant">10/height</span>
-<span id="L805" class="LineNr"> 805 </span>  assume-resources [
-<span id="L806" class="LineNr"> 806 </span>  ]
-<span id="L807" class="LineNr"> 807 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L4'>screen</a>, <span class="Constant">[ab</span>
-<span id="L808" class="LineNr"> 808 </span><span class="Constant">cd]</span>
-<span id="L809" class="LineNr"> 809 </span>  <a href='004-programming-environment.mu.html#L400'>render-all</a> <a href='../081print.mu.html#L4'>screen</a>, env, <a href='001-editor.mu.html#L122'>render</a>
-<span id="L810" class="LineNr"> 810 </span>  assume-console [
-<span id="L811" class="LineNr"> 811 </span>  <span class="Conceal">¦</span> <span class="Comment"># add a line</span>
-<span id="L812" class="LineNr"> 812 </span>  <span class="Conceal">¦</span> press enter
-<span id="L813" class="LineNr"> 813 </span>  <span class="Conceal">¦</span> <span class="Comment"># switch to sandbox</span>
-<span id="L814" class="LineNr"> 814 </span>  <span class="Conceal">¦</span> press ctrl-n
-<span id="L815" class="LineNr"> 815 </span>  <span class="Conceal">¦</span> <span class="Comment"># move cursor</span>
-<span id="L816" class="LineNr"> 816 </span>  <span class="Conceal">¦</span> press down-arrow
-<span id="L817" class="LineNr"> 817 </span>  ]
-<span id="L818" class="LineNr"> 818 </span>  <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
-<span id="L819" class="LineNr"> 819 </span>  cursor:char <span class="Special">&lt;-</span> copy <span class="Constant">9251/␣</span>
-<span id="L820" class="LineNr"> 820 </span>  print <a href='../081print.mu.html#L4'>screen</a>, cursor
-<span id="L821" class="LineNr"> 821 </span>  <span class="Comment"># no scroll on recipe side, cursor moves on sandbox side</span>
-<span id="L822" class="LineNr"> 822 </span>  screen-should-contain [
-<span id="L823" class="LineNr"> 823 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
-<span id="L824" class="LineNr"> 824 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎ab                                               .</span>
-<span id="L825" class="LineNr"> 825 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎␣d                                               .</span>
-<span id="L826" class="LineNr"> 826 </span><span class="Constant">  </span><span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎─────────────────────────────────────────────────.</span>
-<span id="L827" class="LineNr"> 827 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
-<span id="L828" class="LineNr"> 828 </span>  ]
-<span id="L829" class="LineNr"> 829 </span>]
-<span id="L830" class="LineNr"> 830 </span>
-<span id="L831" class="LineNr"> 831 </span><span class="Comment"># scrolling through sandboxes</span>
-<span id="L832" class="LineNr"> 832 </span>
-<span id="L833" class="LineNr"> 833 </span><span class="muScenario">scenario</span> scrolling-down-past-bottom-of-sandbox-editor [
-<span id="L834" class="LineNr"> 834 </span>  <span class="Constant">local-scope</span>
-<span id="L835" class="LineNr"> 835 </span>  trace-until <span class="Constant">100/app</span>  <span class="Comment"># trace too long</span>
-<span id="L836" class="LineNr"> 836 </span>  assume-screen <span class="Constant">100/width</span>, <span class="Constant">10/height</span>
-<span id="L837" class="LineNr"> 837 </span>  <span class="Comment"># initialize</span>
-<span id="L838" class="LineNr"> 838 </span>  assume-resources [
+<span id="L677" class="LineNr"> 677 </span>  <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
+<span id="L678" class="LineNr"> 678 </span>  <span class="Comment"># no scroll</span>
+<span id="L679" class="LineNr"> 679 </span>  screen-should-contain [
+<span id="L680" class="LineNr"> 680 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
+<span id="L681" class="LineNr"> 681 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
+<span id="L682" class="LineNr"> 682 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
+<span id="L683" class="LineNr"> 683 </span>  <span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎                                                 .</span>
+<span id="L684" class="LineNr"> 684 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
+<span id="L685" class="LineNr"> 685 </span>  ]
+<span id="L686" class="LineNr"> 686 </span>]
+<span id="L687" class="LineNr"> 687 </span>
+<span id="L688" class="LineNr"> 688 </span><span class="muScenario">scenario</span> cursor-down-in-recipe-editor [
+<span id="L689" class="LineNr"> 689 </span>  <span class="Constant">local-scope</span>
+<span id="L690" class="LineNr"> 690 </span>  trace-until <span class="Constant">100/app</span>
+<span id="L691" class="LineNr"> 691 </span>  assume-screen <span class="Constant">100/width</span>, <span class="Constant">10/height</span>
+<span id="L692" class="LineNr"> 692 </span>  assume-resources [
+<span id="L693" class="LineNr"> 693 </span>  ]
+<span id="L694" class="LineNr"> 694 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L4'>screen</a>, <span class="Constant">[]</span>
+<span id="L695" class="LineNr"> 695 </span>  <a href='004-programming-environment.mu.html#L400'>render-all</a> <a href='../081print.mu.html#L4'>screen</a>, env, <a href='001-editor.mu.html#L122'>render</a>
+<span id="L696" class="LineNr"> 696 </span>  assume-console [
+<span id="L697" class="LineNr"> 697 </span>  <span class="Conceal">¦</span> press enter
+<span id="L698" class="LineNr"> 698 </span>  <span class="Conceal">¦</span> press up-arrow
+<span id="L699" class="LineNr"> 699 </span>  <span class="Conceal">¦</span> press down-arrow  <span class="Comment"># while cursor isn't at bottom</span>
+<span id="L700" class="LineNr"> 700 </span>  ]
+<span id="L701" class="LineNr"> 701 </span>  <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
+<span id="L702" class="LineNr"> 702 </span>  cursor:char <span class="Special">&lt;-</span> copy <span class="Constant">9251/␣</span>
+<span id="L703" class="LineNr"> 703 </span>  print <a href='../081print.mu.html#L4'>screen</a>, cursor
+<span id="L704" class="LineNr"> 704 </span>  <span class="Comment"># cursor moves back to bottom</span>
+<span id="L705" class="LineNr"> 705 </span>  screen-should-contain [
+<span id="L706" class="LineNr"> 706 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
+<span id="L707" class="LineNr"> 707 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
+<span id="L708" class="LineNr"> 708 </span>  <span class="Conceal">¦</span><span class="Constant"> .␣                                                 ╎─────────────────────────────────────────────────.</span>
+<span id="L709" class="LineNr"> 709 </span>  <span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎                                                 .</span>
+<span id="L710" class="LineNr"> 710 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
+<span id="L711" class="LineNr"> 711 </span>  ]
+<span id="L712" class="LineNr"> 712 </span>]
+<span id="L713" class="LineNr"> 713 </span>
+<span id="L714" class="LineNr"> 714 </span><span class="Comment"># we'll not use the recipe-editor's 'bottom' element directly, because later</span>
+<span id="L715" class="LineNr"> 715 </span><span class="Comment"># layers will add other stuff to the left side below the editor (error messages)</span>
+<span id="L716" class="LineNr"> 716 </span>
+<span id="L717" class="LineNr"> 717 </span><span class="muData">container</span> environment [
+<span id="L718" class="LineNr"> 718 </span>  recipe-bottom:num
+<span id="L719" class="LineNr"> 719 </span>]
+<span id="L720" class="LineNr"> 720 </span>
+<span id="L721" class="LineNr"> 721 </span><span class="muRecipe">after</span> <span class="Constant"><a href='004-programming-environment.mu.html#L443'>&lt;render-recipe-components-end&gt;</a></span> [
+<span id="L722" class="LineNr"> 722 </span>  *env <span class="Special">&lt;-</span> put *env, <span class="Constant">recipe-bottom:offset</span>, row
+<span id="L723" class="LineNr"> 723 </span>]
+<span id="L724" class="LineNr"> 724 </span>
+<span id="L725" class="LineNr"> 725 </span><span class="muRecipe">after</span> <span class="Constant"><a href='004-programming-environment.mu.html#L62'>&lt;global-keypress&gt;</a></span> [
+<span id="L726" class="LineNr"> 726 </span>  <span class="Delimiter">{</span>
+<span id="L727" class="LineNr"> 727 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> sandbox-in-focus?
+<span id="L728" class="LineNr"> 728 </span>  <span class="Conceal">¦</span> down-arrow?:bool <span class="Special">&lt;-</span> equal k, <span class="Constant">65516/down-arrow</span>
+<span id="L729" class="LineNr"> 729 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> down-arrow?
+<span id="L730" class="LineNr"> 730 </span>  <span class="Conceal">¦</span> recipe-editor:&amp;:editor <span class="Special">&lt;-</span> get *env, <span class="Constant">recipes:offset</span>
+<span id="L731" class="LineNr"> 731 </span>  <span class="Conceal">¦</span> recipe-cursor-row:num <span class="Special">&lt;-</span> get *recipe-editor, <span class="Constant">cursor-row:offset</span>
+<span id="L732" class="LineNr"> 732 </span>  <span class="Conceal">¦</span> recipe-editor-bottom:num <span class="Special">&lt;-</span> get *recipe-editor, <span class="Constant">bottom:offset</span>
+<span id="L733" class="LineNr"> 733 </span>  <span class="Conceal">¦</span> at-bottom-of-editor?:bool <span class="Special">&lt;-</span> greater-or-equal recipe-cursor-row, recipe-editor-bottom
+<span id="L734" class="LineNr"> 734 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> at-bottom-of-editor?
+<span id="L735" class="LineNr"> 735 </span>  <span class="Conceal">¦</span> <a href='005-sandbox.mu.html#L760'>more-to-scroll?</a>:bool <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L760'>more-to-scroll?</a> env, <a href='../081print.mu.html#L4'>screen</a>
+<span id="L736" class="LineNr"> 736 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> <a href='005-sandbox.mu.html#L760'>more-to-scroll?</a>
+<span id="L737" class="LineNr"> 737 </span>  <span class="Conceal">¦</span> <span class="muControl">loop</span> <span class="Constant">+next-event</span>
+<span id="L738" class="LineNr"> 738 </span>  <span class="Delimiter">}</span>
+<span id="L739" class="LineNr"> 739 </span>  <span class="Delimiter">{</span>
+<span id="L740" class="LineNr"> 740 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> sandbox-in-focus?
+<span id="L741" class="LineNr"> 741 </span>  <span class="Conceal">¦</span> page-down?:bool <span class="Special">&lt;-</span> equal k, <span class="Constant">65518/page-down</span>
+<span id="L742" class="LineNr"> 742 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> page-down?
+<span id="L743" class="LineNr"> 743 </span>  <span class="Conceal">¦</span> <a href='005-sandbox.mu.html#L760'>more-to-scroll?</a>:bool <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L760'>more-to-scroll?</a> env, <a href='../081print.mu.html#L4'>screen</a>
+<span id="L744" class="LineNr"> 744 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> <a href='005-sandbox.mu.html#L760'>more-to-scroll?</a>
+<span id="L745" class="LineNr"> 745 </span>  <span class="Conceal">¦</span> <span class="muControl">loop</span> <span class="Constant">+next-event</span>
+<span id="L746" class="LineNr"> 746 </span>  <span class="Delimiter">}</span>
+<span id="L747" class="LineNr"> 747 </span>]
+<span id="L748" class="LineNr"> 748 </span>
+<span id="L749" class="LineNr"> 749 </span><span class="muRecipe">after</span> <span class="Constant"><a href='004-programming-environment.mu.html#L67'>&lt;global-type&gt;</a></span> [
+<span id="L750" class="LineNr"> 750 </span>  <span class="Delimiter">{</span>
+<span id="L751" class="LineNr"> 751 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> sandbox-in-focus?
+<span id="L752" class="LineNr"> 752 </span>  <span class="Conceal">¦</span> page-down?:bool <span class="Special">&lt;-</span> equal k, <span class="Constant">6/ctrl-f</span>
+<span id="L753" class="LineNr"> 753 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> page-down?
+<span id="L754" class="LineNr"> 754 </span>  <span class="Conceal">¦</span> <a href='005-sandbox.mu.html#L760'>more-to-scroll?</a>:bool <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L760'>more-to-scroll?</a> env, <a href='../081print.mu.html#L4'>screen</a>
+<span id="L755" class="LineNr"> 755 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> <a href='005-sandbox.mu.html#L760'>more-to-scroll?</a>
+<span id="L756" class="LineNr"> 756 </span>  <span class="Conceal">¦</span> <span class="muControl">loop</span> <span class="Constant">+next-event</span>
+<span id="L757" class="LineNr"> 757 </span>  <span class="Delimiter">}</span>
+<span id="L758" class="LineNr"> 758 </span>]
+<span id="L759" class="LineNr"> 759 </span>
+<span id="L760" class="LineNr"> 760 </span><span class="muRecipe">def</span> <a href='005-sandbox.mu.html#L760'>more-to-scroll?</a> env:&amp;:environment, <a href='../081print.mu.html#L4'>screen</a>:&amp;:<a href='../081print.mu.html#L4'>screen</a><span class="muRecipe"> -&gt; </span>result:bool [
+<span id="L761" class="LineNr"> 761 </span>  <span class="Constant">local-scope</span>
+<span id="L762" class="LineNr"> 762 </span>  <span class="Constant">load-ingredients</span>
+<span id="L763" class="LineNr"> 763 </span>  recipe-bottom:num <span class="Special">&lt;-</span> get *env, <span class="Constant">recipe-bottom:offset</span>
+<span id="L764" class="LineNr"> 764 </span>  height:num <span class="Special">&lt;-</span> <a href='../081print.mu.html#L725'>screen-height</a> <a href='../081print.mu.html#L4'>screen</a>
+<span id="L765" class="LineNr"> 765 </span>  result <span class="Special">&lt;-</span> greater-or-equal recipe-bottom, height
+<span id="L766" class="LineNr"> 766 </span>]
+<span id="L767" class="LineNr"> 767 </span>
+<span id="L768" class="LineNr"> 768 </span><span class="muScenario">scenario</span> scrolling-down-past-bottom-of-recipe-editor-2 [
+<span id="L769" class="LineNr"> 769 </span>  <span class="Constant">local-scope</span>
+<span id="L770" class="LineNr"> 770 </span>  trace-until <span class="Constant">100/app</span>
+<span id="L771" class="LineNr"> 771 </span>  assume-screen <span class="Constant">100/width</span>, <span class="Constant">10/height</span>
+<span id="L772" class="LineNr"> 772 </span>  assume-resources [
+<span id="L773" class="LineNr"> 773 </span>  ]
+<span id="L774" class="LineNr"> 774 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L4'>screen</a>, <span class="Constant">[]</span>
+<span id="L775" class="LineNr"> 775 </span>  <a href='004-programming-environment.mu.html#L400'>render-all</a> <a href='../081print.mu.html#L4'>screen</a>, env, <a href='001-editor.mu.html#L122'>render</a>
+<span id="L776" class="LineNr"> 776 </span>  assume-console [
+<span id="L777" class="LineNr"> 777 </span>  <span class="Conceal">¦</span> <span class="Comment"># add a line</span>
+<span id="L778" class="LineNr"> 778 </span>  <span class="Conceal">¦</span> press enter
+<span id="L779" class="LineNr"> 779 </span>  <span class="Conceal">¦</span> <span class="Comment"># cursor back to top line</span>
+<span id="L780" class="LineNr"> 780 </span>  <span class="Conceal">¦</span> press up-arrow
+<span id="L781" class="LineNr"> 781 </span>  <span class="Conceal">¦</span> <span class="Comment"># try to scroll</span>
+<span id="L782" class="LineNr"> 782 </span>  <span class="Conceal">¦</span> press <a href='003-shortcuts.mu.html#L2981'>page-down</a>  <span class="Comment"># or ctrl-f</span>
+<span id="L783" class="LineNr"> 783 </span>  ]
+<span id="L784" class="LineNr"> 784 </span>  <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
+<span id="L785" class="LineNr"> 785 </span>  <span class="Comment"># no scroll, and cursor remains at top line</span>
+<span id="L786" class="LineNr"> 786 </span>  screen-should-contain [
+<span id="L787" class="LineNr"> 787 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
+<span id="L788" class="LineNr"> 788 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
+<span id="L789" class="LineNr"> 789 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
+<span id="L790" class="LineNr"> 790 </span>  <span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎                                                 .</span>
+<span id="L791" class="LineNr"> 791 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
+<span id="L792" class="LineNr"> 792 </span>  ]
+<span id="L793" class="LineNr"> 793 </span>]
+<span id="L794" class="LineNr"> 794 </span>
+<span id="L795" class="LineNr"> 795 </span><span class="muScenario">scenario</span> scrolling-down-past-bottom-of-recipe-editor-3 [
+<span id="L796" class="LineNr"> 796 </span>  <span class="Constant">local-scope</span>
+<span id="L797" class="LineNr"> 797 </span>  trace-until <span class="Constant">100/app</span>
+<span id="L798" class="LineNr"> 798 </span>  assume-screen <span class="Constant">100/width</span>, <span class="Constant">10/height</span>
+<span id="L799" class="LineNr"> 799 </span>  assume-resources [
+<span id="L800" class="LineNr"> 800 </span>  ]
+<span id="L801" class="LineNr"> 801 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L4'>screen</a>, <span class="Constant">[ab</span>
+<span id="L802" class="LineNr"> 802 </span><span class="Constant">cd]</span>
+<span id="L803" class="LineNr"> 803 </span>  <a href='004-programming-environment.mu.html#L400'>render-all</a> <a href='../081print.mu.html#L4'>screen</a>, env, <a href='001-editor.mu.html#L122'>render</a>
+<span id="L804" class="LineNr"> 804 </span>  assume-console [
+<span id="L805" class="LineNr"> 805 </span>  <span class="Conceal">¦</span> <span class="Comment"># add a line</span>
+<span id="L806" class="LineNr"> 806 </span>  <span class="Conceal">¦</span> press enter
+<span id="L807" class="LineNr"> 807 </span>  <span class="Conceal">¦</span> <span class="Comment"># switch to sandbox</span>
+<span id="L808" class="LineNr"> 808 </span>  <span class="Conceal">¦</span> press ctrl-n
+<span id="L809" class="LineNr"> 809 </span>  <span class="Conceal">¦</span> <span class="Comment"># move cursor</span>
+<span id="L810" class="LineNr"> 810 </span>  <span class="Conceal">¦</span> press down-arrow
+<span id="L811" class="LineNr"> 811 </span>  ]
+<span id="L812" class="LineNr"> 812 </span>  <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
+<span id="L813" class="LineNr"> 813 </span>  cursor:char <span class="Special">&lt;-</span> copy <span class="Constant">9251/␣</span>
+<span id="L814" class="LineNr"> 814 </span>  print <a href='../081print.mu.html#L4'>screen</a>, cursor
+<span id="L815" class="LineNr"> 815 </span>  <span class="Comment"># no scroll on recipe side, cursor moves on sandbox side</span>
+<span id="L816" class="LineNr"> 816 </span>  screen-should-contain [
+<span id="L817" class="LineNr"> 817 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
+<span id="L818" class="LineNr"> 818 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎ab                                               .</span>
+<span id="L819" class="LineNr"> 819 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎␣d                                               .</span>
+<span id="L820" class="LineNr"> 820 </span><span class="Constant">  </span><span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎─────────────────────────────────────────────────.</span>
+<span id="L821" class="LineNr"> 821 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
+<span id="L822" class="LineNr"> 822 </span>  ]
+<span id="L823" class="LineNr"> 823 </span>]
+<span id="L824" class="LineNr"> 824 </span>
+<span id="L825" class="LineNr"> 825 </span><span class="Comment"># scrolling through sandboxes</span>
+<span id="L826" class="LineNr"> 826 </span>
+<span id="L827" class="LineNr"> 827 </span><span class="muScenario">scenario</span> scrolling-down-past-bottom-of-sandbox-editor [
+<span id="L828" class="LineNr"> 828 </span>  <span class="Constant">local-scope</span>
+<span id="L829" class="LineNr"> 829 </span>  trace-until <span class="Constant">100/app</span>  <span class="Comment"># trace too long</span>
+<span id="L830" class="LineNr"> 830 </span>  assume-screen <span class="Constant">100/width</span>, <span class="Constant">10/height</span>
+<span id="L831" class="LineNr"> 831 </span>  <span class="Comment"># initialize</span>
+<span id="L832" class="LineNr"> 832 </span>  assume-resources [
+<span id="L833" class="LineNr"> 833 </span>  ]
+<span id="L834" class="LineNr"> 834 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L4'>screen</a>, <span class="Constant">[add 2, 2]</span>
+<span id="L835" class="LineNr"> 835 </span>  <a href='004-programming-environment.mu.html#L400'>render-all</a> <a href='../081print.mu.html#L4'>screen</a>, env, <a href='001-editor.mu.html#L122'>render</a>
+<span id="L836" class="LineNr"> 836 </span>  assume-console [
+<span id="L837" class="LineNr"> 837 </span>  <span class="Conceal">¦</span> <span class="Comment"># create a sandbox</span>
+<span id="L838" class="LineNr"> 838 </span>  <span class="Conceal">¦</span> press F4
 <span id="L839" class="LineNr"> 839 </span>  ]
-<span id="L840" class="LineNr"> 840 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L4'>screen</a>, <span class="Constant">[add 2, 2]</span>
-<span id="L841" class="LineNr"> 841 </span>  <a href='004-programming-environment.mu.html#L400'>render-all</a> <a href='../081print.mu.html#L4'>screen</a>, env, <a href='001-editor.mu.html#L122'>render</a>
-<span id="L842" class="LineNr"> 842 </span>  assume-console [
-<span id="L843" class="LineNr"> 843 </span>  <span class="Conceal">¦</span> <span class="Comment"># create a sandbox</span>
-<span id="L844" class="LineNr"> 844 </span>  <span class="Conceal">¦</span> press F4
-<span id="L845" class="LineNr"> 845 </span>  ]
-<span id="L846" class="LineNr"> 846 </span>  <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
-<span id="L847" class="LineNr"> 847 </span>  screen-should-contain [
-<span id="L848" class="LineNr"> 848 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
-<span id="L849" class="LineNr"> 849 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
-<span id="L850" class="LineNr"> 850 </span><span class="Constant">  </span><span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎─────────────────────────────────────────────────.</span>
-<span id="L851" class="LineNr"> 851 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎0   edit          copy            delete         .</span>
-<span id="L852" class="LineNr"> 852 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎add 2, 2                                         .</span>
-<span id="L853" class="LineNr"> 853 </span>  ]
-<span id="L854" class="LineNr"> 854 </span>  <span class="Comment"># switch to sandbox window and hit 'page-down'</span>
-<span id="L855" class="LineNr"> 855 </span>  assume-console [
-<span id="L856" class="LineNr"> 856 </span>  <span class="Conceal">¦</span> press ctrl-n
-<span id="L857" class="LineNr"> 857 </span>  <span class="Conceal">¦</span> press <a href='003-shortcuts.mu.html#L2981'>page-down</a>
-<span id="L858" class="LineNr"> 858 </span>  ]
-<span id="L859" class="LineNr"> 859 </span>  run [
-<span id="L860" class="LineNr"> 860 </span>  <span class="Conceal">¦</span> <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
-<span id="L861" class="LineNr"> 861 </span>  <span class="Conceal">¦</span> cursor:char <span class="Special">&lt;-</span> copy <span class="Constant">9251/␣</span>
-<span id="L862" class="LineNr"> 862 </span>  <span class="Conceal">¦</span> print <a href='../081print.mu.html#L4'>screen</a>, cursor
-<span id="L863" class="LineNr"> 863 </span>  ]
-<span id="L864" class="LineNr"> 864 </span>  <span class="Comment"># sandbox editor hidden; first sandbox displayed</span>
-<span id="L865" class="LineNr"> 865 </span>  <span class="Comment"># cursor moves to first sandbox</span>
-<span id="L866" class="LineNr"> 866 </span>  screen-should-contain [
-<span id="L867" class="LineNr"> 867 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
-<span id="L868" class="LineNr"> 868 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
-<span id="L869" class="LineNr"> 869 </span>  <span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎␣   edit          copy            delete         .</span>
-<span id="L870" class="LineNr"> 870 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎add 2, 2                                         .</span>
-<span id="L871" class="LineNr"> 871 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎4                                                .</span>
-<span id="L872" class="LineNr"> 872 </span>  ]
-<span id="L873" class="LineNr"> 873 </span>  <span class="Comment"># hit 'page-up'</span>
-<span id="L874" class="LineNr"> 874 </span>  assume-console [
-<span id="L875" class="LineNr"> 875 </span>  <span class="Conceal">¦</span> press <a href='003-shortcuts.mu.html#L3179'>page-up</a>
-<span id="L876" class="LineNr"> 876 </span>  ]
-<span id="L877" class="LineNr"> 877 </span>  run [
-<span id="L878" class="LineNr"> 878 </span>  <span class="Conceal">¦</span> <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
-<span id="L879" class="LineNr"> 879 </span>  <span class="Conceal">¦</span> cursor:char <span class="Special">&lt;-</span> copy <span class="Constant">9251/␣</span>
-<span id="L880" class="LineNr"> 880 </span>  <span class="Conceal">¦</span> print <a href='../081print.mu.html#L4'>screen</a>, cursor
-<span id="L881" class="LineNr"> 881 </span>  ]
-<span id="L882" class="LineNr"> 882 </span>  <span class="Comment"># sandbox editor displays again, cursor is in editor</span>
-<span id="L883" class="LineNr"> 883 </span>  screen-should-contain [
-<span id="L884" class="LineNr"> 884 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
-<span id="L885" class="LineNr"> 885 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎␣                                                .</span>
-<span id="L886" class="LineNr"> 886 </span><span class="Constant">  </span><span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎─────────────────────────────────────────────────.</span>
-<span id="L887" class="LineNr"> 887 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎0   edit          copy            delete         .</span>
-<span id="L888" class="LineNr"> 888 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎add 2, 2                                         .</span>
-<span id="L889" class="LineNr"> 889 </span>  ]
-<span id="L890" class="LineNr"> 890 </span>]
-<span id="L891" class="LineNr"> 891 </span>
-<span id="L892" class="LineNr"> 892 </span><span class="Comment"># page-down on sandbox side updates render-from to scroll sandboxes</span>
-<span id="L893" class="LineNr"> 893 </span><span class="muRecipe">after</span> <span class="Constant"><a href='004-programming-environment.mu.html#L62'>&lt;global-keypress&gt;</a></span> [
-<span id="L894" class="LineNr"> 894 </span>  <span class="Delimiter">{</span>
-<span id="L895" class="LineNr"> 895 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> sandbox-in-focus?
-<span id="L896" class="LineNr"> 896 </span>  <span class="Conceal">¦</span> page-down?:bool <span class="Special">&lt;-</span> equal k, <span class="Constant">65518/page-down</span>
-<span id="L897" class="LineNr"> 897 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> page-down?
-<span id="L898" class="LineNr"> 898 </span>  <span class="Conceal">¦</span> sandbox:&amp;:sandbox <span class="Special">&lt;-</span> get *env, <span class="Constant">sandbox:offset</span>
-<span id="L899" class="LineNr"> 899 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> sandbox
-<span id="L900" class="LineNr"> 900 </span>  <span class="Conceal">¦</span> <span class="Comment"># slide down if possible</span>
-<span id="L901" class="LineNr"> 901 </span>  <span class="Conceal">¦</span> <span class="Delimiter">{</span>
-<span id="L902" class="LineNr"> 902 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> render-from:num <span class="Special">&lt;-</span> get *env, <span class="Constant">render-from:offset</span>
-<span id="L903" class="LineNr"> 903 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> number-of-sandboxes:num <span class="Special">&lt;-</span> get *env, <span class="Constant">number-of-sandboxes:offset</span>
-<span id="L904" class="LineNr"> 904 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> max:num <span class="Special">&lt;-</span> subtract number-of-sandboxes,<span class="Constant"> 1</span>
-<span id="L905" class="LineNr"> 905 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> at-end?:bool <span class="Special">&lt;-</span> greater-or-equal render-from, max
-<span id="L906" class="LineNr"> 906 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="muControl">loop-if</span> at-end?, <span class="Constant">+next-event</span>  <span class="Comment"># render nothing</span>
-<span id="L907" class="LineNr"> 907 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> render-from <span class="Special">&lt;-</span> add render-from,<span class="Constant"> 1</span>
-<span id="L908" class="LineNr"> 908 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> *env <span class="Special">&lt;-</span> put *env, <span class="Constant">render-from:offset</span>, render-from
-<span id="L909" class="LineNr"> 909 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
-<span id="L910" class="LineNr"> 910 </span>  <span class="Conceal">¦</span> <a href='../081print.mu.html#L4'>screen</a> <span class="Special">&lt;-</span> render-sandbox-side <a href='../081print.mu.html#L4'>screen</a>, env, <a href='001-editor.mu.html#L122'>render</a>
-<span id="L911" class="LineNr"> 911 </span>  <span class="Conceal">¦</span> <a href='../081print.mu.html#L4'>screen</a> <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L466'>update-cursor</a> <a href='../081print.mu.html#L4'>screen</a>, recipes, current-sandbox, sandbox-in-focus?, env
-<span id="L912" class="LineNr"> 912 </span>  <span class="Conceal">¦</span> <span class="muControl">loop</span> <span class="Constant">+next-event</span>
-<span id="L913" class="LineNr"> 913 </span>  <span class="Delimiter">}</span>
-<span id="L914" class="LineNr"> 914 </span>]
-<span id="L915" class="LineNr"> 915 </span>
-<span id="L916" class="LineNr"> 916 </span><span class="Comment"># update-cursor takes render-from into account</span>
-<span id="L917" class="LineNr"> 917 </span><span class="muRecipe">after</span> <span class="Constant"><a href='004-programming-environment.mu.html#L469'>&lt;update-cursor-special-cases&gt;</a></span> [
-<span id="L918" class="LineNr"> 918 </span>  <span class="Delimiter">{</span>
-<span id="L919" class="LineNr"> 919 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> sandbox-in-focus?
-<span id="L920" class="LineNr"> 920 </span>  <span class="Conceal">¦</span> render-from:num <span class="Special">&lt;-</span> get *env, <span class="Constant">render-from:offset</span>
-<span id="L921" class="LineNr"> 921 </span>  <span class="Conceal">¦</span> scrolling?:bool <span class="Special">&lt;-</span> greater-or-equal render-from,<span class="Constant"> 0</span>
-<span id="L922" class="LineNr"> 922 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> scrolling?
-<span id="L923" class="LineNr"> 923 </span>  <span class="Conceal">¦</span> cursor-column:num <span class="Special">&lt;-</span> get *current-sandbox, <span class="Constant">left:offset</span>
-<span id="L924" class="LineNr"> 924 </span>  <span class="Conceal">¦</span> <a href='../081print.mu.html#L4'>screen</a> <span class="Special">&lt;-</span> <a href='../081print.mu.html#L573'>move-cursor</a> <a href='../081print.mu.html#L4'>screen</a>, <span class="Constant">2/row</span>, cursor-column  <span class="Comment"># highlighted sandbox will always start at row 2</span>
-<span id="L925" class="LineNr"> 925 </span>  <span class="Conceal">¦</span> <span class="muControl">return</span>
-<span id="L926" class="LineNr"> 926 </span>  <span class="Delimiter">}</span>
-<span id="L927" class="LineNr"> 927 </span>]
-<span id="L928" class="LineNr"> 928 </span>
-<span id="L929" class="LineNr"> 929 </span><span class="Comment"># 'page-up' on sandbox side is like 'page-down': updates render-from when necessary</span>
-<span id="L930" class="LineNr"> 930 </span><span class="muRecipe">after</span> <span class="Constant"><a href='004-programming-environment.mu.html#L62'>&lt;global-keypress&gt;</a></span> [
-<span id="L931" class="LineNr"> 931 </span>  <span class="Delimiter">{</span>
-<span id="L932" class="LineNr"> 932 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> sandbox-in-focus?
-<span id="L933" class="LineNr"> 933 </span>  <span class="Conceal">¦</span> page-up?:bool <span class="Special">&lt;-</span> equal k, <span class="Constant">65519/page-up</span>
-<span id="L934" class="LineNr"> 934 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> page-up?
-<span id="L935" class="LineNr"> 935 </span>  <span class="Conceal">¦</span> render-from:num <span class="Special">&lt;-</span> get *env, <span class="Constant">render-from:offset</span>
-<span id="L936" class="LineNr"> 936 </span>  <span class="Conceal">¦</span> at-beginning?:bool <span class="Special">&lt;-</span> equal render-from,<span class="Constant"> -1</span>
-<span id="L937" class="LineNr"> 937 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> at-beginning?
-<span id="L938" class="LineNr"> 938 </span>  <span class="Conceal">¦</span> render-from <span class="Special">&lt;-</span> subtract render-from,<span class="Constant"> 1</span>
-<span id="L939" class="LineNr"> 939 </span>  <span class="Conceal">¦</span> *env <span class="Special">&lt;-</span> put *env, <span class="Constant">render-from:offset</span>, render-from
-<span id="L940" class="LineNr"> 940 </span>  <span class="Conceal">¦</span> <a href='../081print.mu.html#L4'>screen</a> <span class="Special">&lt;-</span> render-sandbox-side <a href='../081print.mu.html#L4'>screen</a>, env, <a href='001-editor.mu.html#L122'>render</a>
-<span id="L941" class="LineNr"> 941 </span>  <span class="Conceal">¦</span> <a href='../081print.mu.html#L4'>screen</a> <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L466'>update-cursor</a> <a href='../081print.mu.html#L4'>screen</a>, recipes, current-sandbox, sandbox-in-focus?, env
-<span id="L942" class="LineNr"> 942 </span>  <span class="Conceal">¦</span> <span class="muControl">loop</span> <span class="Constant">+next-event</span>
-<span id="L943" class="LineNr"> 943 </span>  <span class="Delimiter">}</span>
-<span id="L944" class="LineNr"> 944 </span>]
-<span id="L945" class="LineNr"> 945 </span>
-<span id="L946" class="LineNr"> 946 </span><span class="Comment"># sandbox belonging to 'env' whose next-sandbox is 'in'</span>
-<span id="L947" class="LineNr"> 947 </span><span class="Comment"># return 0 if there's no such sandbox, either because 'in' doesn't exist in 'env', or because it's the first sandbox</span>
-<span id="L948" class="LineNr"> 948 </span><span class="muRecipe">def</span> <a href='005-sandbox.mu.html#L948'>previous-sandbox</a> env:&amp;:environment, in:&amp;:sandbox<span class="muRecipe"> -&gt; </span>out:&amp;:sandbox [
-<span id="L949" class="LineNr"> 949 </span>  <span class="Constant">local-scope</span>
-<span id="L950" class="LineNr"> 950 </span>  <span class="Constant">load-ingredients</span>
-<span id="L951" class="LineNr"> 951 </span>  curr:&amp;:sandbox <span class="Special">&lt;-</span> get *env, <span class="Constant">sandbox:offset</span>
-<span id="L952" class="LineNr"> 952 </span>  <span class="muControl">return-unless</span> curr, <span class="Constant">0/nil</span>
-<span id="L953" class="LineNr"> 953 </span>  <a href='../065duplex_list.mu.html#L29'>next</a>:&amp;:sandbox <span class="Special">&lt;-</span> get *curr, <span class="Constant">next-sandbox:offset</span>
-<span id="L954" class="LineNr"> 954 </span>  <span class="Delimiter">{</span>
-<span id="L955" class="LineNr"> 955 </span>  <span class="Conceal">¦</span> <span class="muControl">return-unless</span> <a href='../065duplex_list.mu.html#L29'>next</a>, <span class="Constant">0/nil</span>
-<span id="L956" class="LineNr"> 956 </span>  <span class="Conceal">¦</span> found?:bool <span class="Special">&lt;-</span> equal <a href='../065duplex_list.mu.html#L29'>next</a>, in
-<span id="L957" class="LineNr"> 957 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> found?
-<span id="L958" class="LineNr"> 958 </span>  <span class="Conceal">¦</span> curr <span class="Special">&lt;-</span> copy <a href='../065duplex_list.mu.html#L29'>next</a>
-<span id="L959" class="LineNr"> 959 </span>  <span class="Conceal">¦</span> <a href='../065duplex_list.mu.html#L29'>next</a> <span class="Special">&lt;-</span> get *curr, <span class="Constant">next-sandbox:offset</span>
-<span id="L960" class="LineNr"> 960 </span>  <span class="Conceal">¦</span> <span class="muControl">loop</span>
-<span id="L961" class="LineNr"> 961 </span>  <span class="Delimiter">}</span>
-<span id="L962" class="LineNr"> 962 </span>  <span class="muControl">return</span> curr
-<span id="L963" class="LineNr"> 963 </span>]
-<span id="L964" class="LineNr"> 964 </span>
-<span id="L965" class="LineNr"> 965 </span><span class="muScenario">scenario</span> scrolling-down-past-bottom-on-recipe-side [
-<span id="L966" class="LineNr"> 966 </span>  <span class="Constant">local-scope</span>
-<span id="L967" class="LineNr"> 967 </span>  trace-until <span class="Constant">100/app</span>  <span class="Comment"># trace too long</span>
-<span id="L968" class="LineNr"> 968 </span>  assume-screen <span class="Constant">100/width</span>, <span class="Constant">10/height</span>
-<span id="L969" class="LineNr"> 969 </span>  <span class="Comment"># initialize sandbox side and create a sandbox</span>
-<span id="L970" class="LineNr"> 970 </span>  assume-resources [
-<span id="L971" class="LineNr"> 971 </span>  <span class="Conceal">¦</span> <span class="Constant">[lesson/recipes.mu]</span> <span class="Special">&lt;-</span> [
-<span id="L972" class="LineNr"> 972 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Constant">||</span>  <span class="Comment"># file containing just a newline</span>
-<span id="L973" class="LineNr"> 973 </span>  <span class="Conceal">¦</span> ]
+<span id="L840" class="LineNr"> 840 </span>  <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
+<span id="L841" class="LineNr"> 841 </span>  screen-should-contain [
+<span id="L842" class="LineNr"> 842 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
+<span id="L843" class="LineNr"> 843 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
+<span id="L844" class="LineNr"> 844 </span><span class="Constant">  </span><span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎─────────────────────────────────────────────────.</span>
+<span id="L845" class="LineNr"> 845 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎0   edit          copy            delete         .</span>
+<span id="L846" class="LineNr"> 846 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎add 2, 2                                         .</span>
+<span id="L847" class="LineNr"> 847 </span>  ]
+<span id="L848" class="LineNr"> 848 </span>  <span class="Comment"># switch to sandbox window and hit 'page-down'</span>
+<span id="L849" class="LineNr"> 849 </span>  assume-console [
+<span id="L850" class="LineNr"> 850 </span>  <span class="Conceal">¦</span> press ctrl-n
+<span id="L851" class="LineNr"> 851 </span>  <span class="Conceal">¦</span> press <a href='003-shortcuts.mu.html#L2981'>page-down</a>
+<span id="L852" class="LineNr"> 852 </span>  ]
+<span id="L853" class="LineNr"> 853 </span>  run [
+<span id="L854" class="LineNr"> 854 </span>  <span class="Conceal">¦</span> <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
+<span id="L855" class="LineNr"> 855 </span>  <span class="Conceal">¦</span> cursor:char <span class="Special">&lt;-</span> copy <span class="Constant">9251/␣</span>
+<span id="L856" class="LineNr"> 856 </span>  <span class="Conceal">¦</span> print <a href='../081print.mu.html#L4'>screen</a>, cursor
+<span id="L857" class="LineNr"> 857 </span>  ]
+<span id="L858" class="LineNr"> 858 </span>  <span class="Comment"># sandbox editor hidden; first sandbox displayed</span>
+<span id="L859" class="LineNr"> 859 </span>  <span class="Comment"># cursor moves to first sandbox</span>
+<span id="L860" class="LineNr"> 860 </span>  screen-should-contain [
+<span id="L861" class="LineNr"> 861 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
+<span id="L862" class="LineNr"> 862 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
+<span id="L863" class="LineNr"> 863 </span>  <span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎␣   edit          copy            delete         .</span>
+<span id="L864" class="LineNr"> 864 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎add 2, 2                                         .</span>
+<span id="L865" class="LineNr"> 865 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎4                                                .</span>
+<span id="L866" class="LineNr"> 866 </span>  ]
+<span id="L867" class="LineNr"> 867 </span>  <span class="Comment"># hit 'page-up'</span>
+<span id="L868" class="LineNr"> 868 </span>  assume-console [
+<span id="L869" class="LineNr"> 869 </span>  <span class="Conceal">¦</span> press <a href='003-shortcuts.mu.html#L3179'>page-up</a>
+<span id="L870" class="LineNr"> 870 </span>  ]
+<span id="L871" class="LineNr"> 871 </span>  run [
+<span id="L872" class="LineNr"> 872 </span>  <span class="Conceal">¦</span> <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
+<span id="L873" class="LineNr"> 873 </span>  <span class="Conceal">¦</span> cursor:char <span class="Special">&lt;-</span> copy <span class="Constant">9251/␣</span>
+<span id="L874" class="LineNr"> 874 </span>  <span class="Conceal">¦</span> print <a href='../081print.mu.html#L4'>screen</a>, cursor
+<span id="L875" class="LineNr"> 875 </span>  ]
+<span id="L876" class="LineNr"> 876 </span>  <span class="Comment"># sandbox editor displays again, cursor is in editor</span>
+<span id="L877" class="LineNr"> 877 </span>  screen-should-contain [
+<span id="L878" class="LineNr"> 878 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
+<span id="L879" class="LineNr"> 879 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎␣                                                .</span>
+<span id="L880" class="LineNr"> 880 </span><span class="Constant">  </span><span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎─────────────────────────────────────────────────.</span>
+<span id="L881" class="LineNr"> 881 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎0   edit          copy            delete         .</span>
+<span id="L882" class="LineNr"> 882 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎add 2, 2                                         .</span>
+<span id="L883" class="LineNr"> 883 </span>  ]
+<span id="L884" class="LineNr"> 884 </span>]
+<span id="L885" class="LineNr"> 885 </span>
+<span id="L886" class="LineNr"> 886 </span><span class="Comment"># page-down on sandbox side updates render-from to scroll sandboxes</span>
+<span id="L887" class="LineNr"> 887 </span><span class="muRecipe">after</span> <span class="Constant"><a href='004-programming-environment.mu.html#L62'>&lt;global-keypress&gt;</a></span> [
+<span id="L888" class="LineNr"> 888 </span>  <span class="Delimiter">{</span>
+<span id="L889" class="LineNr"> 889 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> sandbox-in-focus?
+<span id="L890" class="LineNr"> 890 </span>  <span class="Conceal">¦</span> page-down?:bool <span class="Special">&lt;-</span> equal k, <span class="Constant">65518/page-down</span>
+<span id="L891" class="LineNr"> 891 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> page-down?
+<span id="L892" class="LineNr"> 892 </span>  <span class="Conceal">¦</span> sandbox:&amp;:sandbox <span class="Special">&lt;-</span> get *env, <span class="Constant">sandbox:offset</span>
+<span id="L893" class="LineNr"> 893 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> sandbox
+<span id="L894" class="LineNr"> 894 </span>  <span class="Conceal">¦</span> <span class="Comment"># slide down if possible</span>
+<span id="L895" class="LineNr"> 895 </span>  <span class="Conceal">¦</span> <span class="Delimiter">{</span>
+<span id="L896" class="LineNr"> 896 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> render-from:num <span class="Special">&lt;-</span> get *env, <span class="Constant">render-from:offset</span>
+<span id="L897" class="LineNr"> 897 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> number-of-sandboxes:num <span class="Special">&lt;-</span> get *env, <span class="Constant">number-of-sandboxes:offset</span>
+<span id="L898" class="LineNr"> 898 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> max:num <span class="Special">&lt;-</span> subtract number-of-sandboxes,<span class="Constant"> 1</span>
+<span id="L899" class="LineNr"> 899 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> at-end?:bool <span class="Special">&lt;-</span> greater-or-equal render-from, max
+<span id="L900" class="LineNr"> 900 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="muControl">loop-if</span> at-end?, <span class="Constant">+next-event</span>  <span class="Comment"># render nothing</span>
+<span id="L901" class="LineNr"> 901 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> render-from <span class="Special">&lt;-</span> add render-from,<span class="Constant"> 1</span>
+<span id="L902" class="LineNr"> 902 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> *env <span class="Special">&lt;-</span> put *env, <span class="Constant">render-from:offset</span>, render-from
+<span id="L903" class="LineNr"> 903 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
+<span id="L904" class="LineNr"> 904 </span>  <span class="Conceal">¦</span> <a href='../081print.mu.html#L4'>screen</a> <span class="Special">&lt;-</span> render-sandbox-side <a href='../081print.mu.html#L4'>screen</a>, env, <a href='001-editor.mu.html#L122'>render</a>
+<span id="L905" class="LineNr"> 905 </span>  <span class="Conceal">¦</span> <a href='../081print.mu.html#L4'>screen</a> <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L466'>update-cursor</a> <a href='../081print.mu.html#L4'>screen</a>, recipes, current-sandbox, sandbox-in-focus?, env
+<span id="L906" class="LineNr"> 906 </span>  <span class="Conceal">¦</span> <span class="muControl">loop</span> <span class="Constant">+next-event</span>
+<span id="L907" class="LineNr"> 907 </span>  <span class="Delimiter">}</span>
+<span id="L908" class="LineNr"> 908 </span>]
+<span id="L909" class="LineNr"> 909 </span>
+<span id="L910" class="LineNr"> 910 </span><span class="Comment"># update-cursor takes render-from into account</span>
+<span id="L911" class="LineNr"> 911 </span><span class="muRecipe">after</span> <span class="Constant"><a href='004-programming-environment.mu.html#L469'>&lt;update-cursor-special-cases&gt;</a></span> [
+<span id="L912" class="LineNr"> 912 </span>  <span class="Delimiter">{</span>
+<span id="L913" class="LineNr"> 913 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> sandbox-in-focus?
+<span id="L914" class="LineNr"> 914 </span>  <span class="Conceal">¦</span> render-from:num <span class="Special">&lt;-</span> get *env, <span class="Constant">render-from:offset</span>
+<span id="L915" class="LineNr"> 915 </span>  <span class="Conceal">¦</span> scrolling?:bool <span class="Special">&lt;-</span> greater-or-equal render-from,<span class="Constant"> 0</span>
+<span id="L916" class="LineNr"> 916 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> scrolling?
+<span id="L917" class="LineNr"> 917 </span>  <span class="Conceal">¦</span> cursor-column:num <span class="Special">&lt;-</span> get *current-sandbox, <span class="Constant">left:offset</span>
+<span id="L918" class="LineNr"> 918 </span>  <span class="Conceal">¦</span> <a href='../081print.mu.html#L4'>screen</a> <span class="Special">&lt;-</span> <a href='../081print.mu.html#L573'>move-cursor</a> <a href='../081print.mu.html#L4'>screen</a>, <span class="Constant">2/row</span>, cursor-column  <span class="Comment"># highlighted sandbox will always start at row 2</span>
+<span id="L919" class="LineNr"> 919 </span>  <span class="Conceal">¦</span> <span class="muControl">return</span>
+<span id="L920" class="LineNr"> 920 </span>  <span class="Delimiter">}</span>
+<span id="L921" class="LineNr"> 921 </span>]
+<span id="L922" class="LineNr"> 922 </span>
+<span id="L923" class="LineNr"> 923 </span><span class="Comment"># 'page-up' on sandbox side is like 'page-down': updates render-from when necessary</span>
+<span id="L924" class="LineNr"> 924 </span><span class="muRecipe">after</span> <span class="Constant"><a href='004-programming-environment.mu.html#L62'>&lt;global-keypress&gt;</a></span> [
+<span id="L925" class="LineNr"> 925 </span>  <span class="Delimiter">{</span>
+<span id="L926" class="LineNr"> 926 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> sandbox-in-focus?
+<span id="L927" class="LineNr"> 927 </span>  <span class="Conceal">¦</span> page-up?:bool <span class="Special">&lt;-</span> equal k, <span class="Constant">65519/page-up</span>
+<span id="L928" class="LineNr"> 928 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> page-up?
+<span id="L929" class="LineNr"> 929 </span>  <span class="Conceal">¦</span> render-from:num <span class="Special">&lt;-</span> get *env, <span class="Constant">render-from:offset</span>
+<span id="L930" class="LineNr"> 930 </span>  <span class="Conceal">¦</span> at-beginning?:bool <span class="Special">&lt;-</span> equal render-from,<span class="Constant"> -1</span>
+<span id="L931" class="LineNr"> 931 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> at-beginning?
+<span id="L932" class="LineNr"> 932 </span>  <span class="Conceal">¦</span> render-from <span class="Special">&lt;-</span> subtract render-from,<span class="Constant"> 1</span>
+<span id="L933" class="LineNr"> 933 </span>  <span class="Conceal">¦</span> *env <span class="Special">&lt;-</span> put *env, <span class="Constant">render-from:offset</span>, render-from
+<span id="L934" class="LineNr"> 934 </span>  <span class="Conceal">¦</span> <a href='../081print.mu.html#L4'>screen</a> <span class="Special">&lt;-</span> render-sandbox-side <a href='../081print.mu.html#L4'>screen</a>, env, <a href='001-editor.mu.html#L122'>render</a>
+<span id="L935" class="LineNr"> 935 </span>  <span class="Conceal">¦</span> <a href='../081print.mu.html#L4'>screen</a> <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L466'>update-cursor</a> <a href='../081print.mu.html#L4'>screen</a>, recipes, current-sandbox, sandbox-in-focus?, env
+<span id="L936" class="LineNr"> 936 </span>  <span class="Conceal">¦</span> <span class="muControl">loop</span> <span class="Constant">+next-event</span>
+<span id="L937" class="LineNr"> 937 </span>  <span class="Delimiter">}</span>
+<span id="L938" class="LineNr"> 938 </span>]
+<span id="L939" class="LineNr"> 939 </span>
+<span id="L940" class="LineNr"> 940 </span><span class="Comment"># sandbox belonging to 'env' whose next-sandbox is 'in'</span>
+<span id="L941" class="LineNr"> 941 </span><span class="Comment"># return 0 if there's no such sandbox, either because 'in' doesn't exist in 'env', or because it's the first sandbox</span>
+<span id="L942" class="LineNr"> 942 </span><span class="muRecipe">def</span> <a href='005-sandbox.mu.html#L942'>previous-sandbox</a> env:&amp;:environment, in:&amp;:sandbox<span class="muRecipe"> -&gt; </span>out:&amp;:sandbox [
+<span id="L943" class="LineNr"> 943 </span>  <span class="Constant">local-scope</span>
+<span id="L944" class="LineNr"> 944 </span>  <span class="Constant">load-ingredients</span>
+<span id="L945" class="LineNr"> 945 </span>  curr:&amp;:sandbox <span class="Special">&lt;-</span> get *env, <span class="Constant">sandbox:offset</span>
+<span id="L946" class="LineNr"> 946 </span>  <span class="muControl">return-unless</span> curr, <span class="Constant">0/nil</span>
+<span id="L947" class="LineNr"> 947 </span>  <a href='../065duplex_list.mu.html#L29'>next</a>:&amp;:sandbox <span class="Special">&lt;-</span> get *curr, <span class="Constant">next-sandbox:offset</span>
+<span id="L948" class="LineNr"> 948 </span>  <span class="Delimiter">{</span>
+<span id="L949" class="LineNr"> 949 </span>  <span class="Conceal">¦</span> <span class="muControl">return-unless</span> <a href='../065duplex_list.mu.html#L29'>next</a>, <span class="Constant">0/nil</span>
+<span id="L950" class="LineNr"> 950 </span>  <span class="Conceal">¦</span> found?:bool <span class="Special">&lt;-</span> equal <a href='../065duplex_list.mu.html#L29'>next</a>, in
+<span id="L951" class="LineNr"> 951 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> found?
+<span id="L952" class="LineNr"> 952 </span>  <span class="Conceal">¦</span> curr <span class="Special">&lt;-</span> copy <a href='../065duplex_list.mu.html#L29'>next</a>
+<span id="L953" class="LineNr"> 953 </span>  <span class="Conceal">¦</span> <a href='../065duplex_list.mu.html#L29'>next</a> <span class="Special">&lt;-</span> get *curr, <span class="Constant">next-sandbox:offset</span>
+<span id="L954" class="LineNr"> 954 </span>  <span class="Conceal">¦</span> <span class="muControl">loop</span>
+<span id="L955" class="LineNr"> 955 </span>  <span class="Delimiter">}</span>
+<span id="L956" class="LineNr"> 956 </span>  <span class="muControl">return</span> curr
+<span id="L957" class="LineNr"> 957 </span>]
+<span id="L958" class="LineNr"> 958 </span>
+<span id="L959" class="LineNr"> 959 </span><span class="muScenario">scenario</span> scrolling-down-past-bottom-on-recipe-side [
+<span id="L960" class="LineNr"> 960 </span>  <span class="Constant">local-scope</span>
+<span id="L961" class="LineNr"> 961 </span>  trace-until <span class="Constant">100/app</span>  <span class="Comment"># trace too long</span>
+<span id="L962" class="LineNr"> 962 </span>  assume-screen <span class="Constant">100/width</span>, <span class="Constant">10/height</span>
+<span id="L963" class="LineNr"> 963 </span>  <span class="Comment"># initialize sandbox side and create a sandbox</span>
+<span id="L964" class="LineNr"> 964 </span>  assume-resources [
+<span id="L965" class="LineNr"> 965 </span>  <span class="Conceal">¦</span> <span class="Constant">[lesson/recipes.mu]</span> <span class="Special">&lt;-</span> [
+<span id="L966" class="LineNr"> 966 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Constant">||</span>  <span class="Comment"># file containing just a newline</span>
+<span id="L967" class="LineNr"> 967 </span>  <span class="Conceal">¦</span> ]
+<span id="L968" class="LineNr"> 968 </span>  ]
+<span id="L969" class="LineNr"> 969 </span>  <span class="Comment"># create a sandbox</span>
+<span id="L970" class="LineNr"> 970 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L4'>screen</a>, <span class="Constant">[add 2, 2]</span>
+<span id="L971" class="LineNr"> 971 </span>  <a href='004-programming-environment.mu.html#L400'>render-all</a> <a href='../081print.mu.html#L4'>screen</a>, env, <a href='001-editor.mu.html#L122'>render</a>
+<span id="L972" class="LineNr"> 972 </span>  assume-console [
+<span id="L973" class="LineNr"> 973 </span>  <span class="Conceal">¦</span> press F4
 <span id="L974" class="LineNr"> 974 </span>  ]
-<span id="L975" class="LineNr"> 975 </span>  <span class="Comment"># create a sandbox</span>
-<span id="L976" class="LineNr"> 976 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L4'>screen</a>, <span class="Constant">[add 2, 2]</span>
-<span id="L977" class="LineNr"> 977 </span>  <a href='004-programming-environment.mu.html#L400'>render-all</a> <a href='../081print.mu.html#L4'>screen</a>, env, <a href='001-editor.mu.html#L122'>render</a>
-<span id="L978" class="LineNr"> 978 </span>  assume-console [
-<span id="L979" class="LineNr"> 979 </span>  <span class="Conceal">¦</span> press F4
-<span id="L980" class="LineNr"> 980 </span>  ]
-<span id="L981" class="LineNr"> 981 </span>  <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
-<span id="L982" class="LineNr"> 982 </span>  <span class="Comment"># hit 'down' in recipe editor</span>
-<span id="L983" class="LineNr"> 983 </span>  assume-console [
-<span id="L984" class="LineNr"> 984 </span>  <span class="Conceal">¦</span> press <a href='003-shortcuts.mu.html#L2981'>page-down</a>
-<span id="L985" class="LineNr"> 985 </span>  ]
-<span id="L986" class="LineNr"> 986 </span>  run [
-<span id="L987" class="LineNr"> 987 </span>  <span class="Conceal">¦</span> <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
-<span id="L988" class="LineNr"> 988 </span>  <span class="Conceal">¦</span> cursor:char <span class="Special">&lt;-</span> copy <span class="Constant">9251/␣</span>
-<span id="L989" class="LineNr"> 989 </span>  <span class="Conceal">¦</span> print <a href='../081print.mu.html#L4'>screen</a>, cursor
-<span id="L990" class="LineNr"> 990 </span>  ]
-<span id="L991" class="LineNr"> 991 </span>  <span class="Comment"># cursor doesn't move when the end is already on-screen</span>
-<span id="L992" class="LineNr"> 992 </span>  screen-should-contain [
-<span id="L993" class="LineNr"> 993 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
-<span id="L994" class="LineNr"> 994 </span>  <span class="Conceal">¦</span><span class="Constant"> .␣                                                 ╎                                                 .</span>
-<span id="L995" class="LineNr"> 995 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
-<span id="L996" class="LineNr"> 996 </span>  <span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎0   edit          copy            delete         .</span>
-<span id="L997" class="LineNr"> 997 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎add 2, 2                                         .</span>
-<span id="L998" class="LineNr"> 998 </span>  ]
-<span id="L999" class="LineNr"> 999 </span>]
-<span id="L1000" class="LineNr">1000 </span>
-<span id="L1001" class="LineNr">1001 </span><span class="muScenario">scenario</span> scrolling-through-multiple-sandboxes [
-<span id="L1002" class="LineNr">1002 </span>  <span class="Constant">local-scope</span>
-<span id="L1003" class="LineNr">1003 </span>  trace-until <span class="Constant">100/app</span>  <span class="Comment"># trace too long</span>
-<span id="L1004" class="LineNr">1004 </span>  assume-screen <span class="Constant">100/width</span>, <span class="Constant">10/height</span>
-<span id="L1005" class="LineNr">1005 </span>  <span class="Comment"># initialize environment</span>
-<span id="L1006" class="LineNr">1006 </span>  assume-resources [
-<span id="L1007" class="LineNr">1007 </span>  ]
-<span id="L1008" class="LineNr">1008 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L4'>screen</a>, <span class="Constant">[]</span>
-<span id="L1009" class="LineNr">1009 </span>  <a href='004-programming-environment.mu.html#L400'>render-all</a> <a href='../081print.mu.html#L4'>screen</a>, env, <a href='001-editor.mu.html#L122'>render</a>
-<span id="L1010" class="LineNr">1010 </span>  <span class="Comment"># create 2 sandboxes</span>
-<span id="L1011" class="LineNr">1011 </span>  assume-console [
-<span id="L1012" class="LineNr">1012 </span>  <span class="Conceal">¦</span> press ctrl-n
-<span id="L1013" class="LineNr">1013 </span>  <span class="Conceal">¦</span> type <span class="Constant">[add 2, 2]</span>
-<span id="L1014" class="LineNr">1014 </span>  <span class="Conceal">¦</span> press F4
-<span id="L1015" class="LineNr">1015 </span>  <span class="Conceal">¦</span> type <span class="Constant">[add 1, 1]</span>
-<span id="L1016" class="LineNr">1016 </span>  <span class="Conceal">¦</span> press F4
-<span id="L1017" class="LineNr">1017 </span>  ]
-<span id="L1018" class="LineNr">1018 </span>  <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
-<span id="L1019" class="LineNr">1019 </span>  cursor:char <span class="Special">&lt;-</span> copy <span class="Constant">9251/␣</span>
-<span id="L1020" class="LineNr">1020 </span>  print <a href='../081print.mu.html#L4'>screen</a>, cursor
-<span id="L1021" class="LineNr">1021 </span>  screen-should-contain [
-<span id="L1022" class="LineNr">1022 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
-<span id="L1023" class="LineNr">1023 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎␣                                                .</span>
-<span id="L1024" class="LineNr">1024 </span><span class="Constant">  </span><span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎─────────────────────────────────────────────────.</span>
-<span id="L1025" class="LineNr">1025 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎0   edit          copy            delete         .</span>
-<span id="L1026" class="LineNr">1026 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎add 1, 1                                         .</span>
-<span id="L1027" class="LineNr">1027 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎2                                                .</span>
-<span id="L1028" class="LineNr">1028 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
-<span id="L1029" class="LineNr">1029 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎1   edit          copy            delete         .</span>
-<span id="L1030" class="LineNr">1030 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎add 2, 2                                         .</span>
-<span id="L1031" class="LineNr">1031 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎4                                                .</span>
-<span id="L1032" class="LineNr">1032 </span>  ]
-<span id="L1033" class="LineNr">1033 </span>  <span class="Comment"># hit 'page-down'</span>
-<span id="L1034" class="LineNr">1034 </span>  assume-console [
-<span id="L1035" class="LineNr">1035 </span>  <span class="Conceal">¦</span> press <a href='003-shortcuts.mu.html#L2981'>page-down</a>
-<span id="L1036" class="LineNr">1036 </span>  ]
-<span id="L1037" class="LineNr">1037 </span>  run [
-<span id="L1038" class="LineNr">1038 </span>  <span class="Conceal">¦</span> <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
-<span id="L1039" class="LineNr">1039 </span>  <span class="Conceal">¦</span> cursor:char <span class="Special">&lt;-</span> copy <span class="Constant">9251/␣</span>
-<span id="L1040" class="LineNr">1040 </span>  <span class="Conceal">¦</span> print <a href='../081print.mu.html#L4'>screen</a>, cursor
-<span id="L1041" class="LineNr">1041 </span>  ]
-<span id="L1042" class="LineNr">1042 </span>  <span class="Comment"># sandbox editor hidden; first sandbox displayed</span>
-<span id="L1043" class="LineNr">1043 </span>  <span class="Comment"># cursor moves to first sandbox</span>
-<span id="L1044" class="LineNr">1044 </span>  screen-should-contain [
-<span id="L1045" class="LineNr">1045 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
-<span id="L1046" class="LineNr">1046 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
-<span id="L1047" class="LineNr">1047 </span>  <span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎␣   edit          copy            delete         .</span>
-<span id="L1048" class="LineNr">1048 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎add 1, 1                                         .</span>
-<span id="L1049" class="LineNr">1049 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎2                                                .</span>
-<span id="L1050" class="LineNr">1050 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
-<span id="L1051" class="LineNr">1051 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎1   edit          copy            delete         .</span>
-<span id="L1052" class="LineNr">1052 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎add 2, 2                                         .</span>
-<span id="L1053" class="LineNr">1053 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎4                                                .</span>
-<span id="L1054" class="LineNr">1054 </span>  ]
-<span id="L1055" class="LineNr">1055 </span>  <span class="Comment"># hit 'page-down' again</span>
-<span id="L1056" class="LineNr">1056 </span>  assume-console [
-<span id="L1057" class="LineNr">1057 </span>  <span class="Conceal">¦</span> press <a href='003-shortcuts.mu.html#L2981'>page-down</a>
-<span id="L1058" class="LineNr">1058 </span>  ]
-<span id="L1059" class="LineNr">1059 </span>  run [
-<span id="L1060" class="LineNr">1060 </span>  <span class="Conceal">¦</span> <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
-<span id="L1061" class="LineNr">1061 </span>  ]
-<span id="L1062" class="LineNr">1062 </span>  <span class="Comment"># just second sandbox displayed</span>
-<span id="L1063" class="LineNr">1063 </span>  screen-should-contain [
-<span id="L1064" class="LineNr">1064 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
-<span id="L1065" class="LineNr">1065 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
-<span id="L1066" class="LineNr">1066 </span>  <span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎1   edit          copy            delete         .</span>
-<span id="L1067" class="LineNr">1067 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎add 2, 2                                         .</span>
-<span id="L1068" class="LineNr">1068 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎4                                                .</span>
-<span id="L1069" class="LineNr">1069 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
-<span id="L1070" class="LineNr">1070 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
-<span id="L1071" class="LineNr">1071 </span>  ]
-<span id="L1072" class="LineNr">1072 </span>  <span class="Comment"># hit 'page-down' again</span>
-<span id="L1073" class="LineNr">1073 </span>  assume-console [
-<span id="L1074" class="LineNr">1074 </span>  <span class="Conceal">¦</span> press <a href='003-shortcuts.mu.html#L2981'>page-down</a>
-<span id="L1075" class="LineNr">1075 </span>  ]
-<span id="L1076" class="LineNr">1076 </span>  run [
-<span id="L1077" class="LineNr">1077 </span>  <span class="Conceal">¦</span> <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
-<span id="L1078" class="LineNr">1078 </span>  ]
-<span id="L1079" class="LineNr">1079 </span>  <span class="Comment"># no change</span>
-<span id="L1080" class="LineNr">1080 </span>  screen-should-contain [
-<span id="L1081" class="LineNr">1081 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
-<span id="L1082" class="LineNr">1082 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
-<span id="L1083" class="LineNr">1083 </span>  <span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎1   edit          copy            delete         .</span>
-<span id="L1084" class="LineNr">1084 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎add 2, 2                                         .</span>
-<span id="L1085" class="LineNr">1085 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎4                                                .</span>
-<span id="L1086" class="LineNr">1086 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
-<span id="L1087" class="LineNr">1087 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
-<span id="L1088" class="LineNr">1088 </span>  ]
-<span id="L1089" class="LineNr">1089 </span>  <span class="Comment"># hit 'page-up'</span>
-<span id="L1090" class="LineNr">1090 </span>  assume-console [
-<span id="L1091" class="LineNr">1091 </span>  <span class="Conceal">¦</span> press <a href='003-shortcuts.mu.html#L3179'>page-up</a>
-<span id="L1092" class="LineNr">1092 </span>  ]
-<span id="L1093" class="LineNr">1093 </span>  run [
-<span id="L1094" class="LineNr">1094 </span>  <span class="Conceal">¦</span> <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
-<span id="L1095" class="LineNr">1095 </span>  ]
-<span id="L1096" class="LineNr">1096 </span>  <span class="Comment"># back to displaying both sandboxes without editor</span>
-<span id="L1097" class="LineNr">1097 </span>  screen-should-contain [
-<span id="L1098" class="LineNr">1098 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
-<span id="L1099" class="LineNr">1099 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
-<span id="L1100" class="LineNr">1100 </span>  <span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎0   edit          copy            delete         .</span>
-<span id="L1101" class="LineNr">1101 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎add 1, 1                                         .</span>
-<span id="L1102" class="LineNr">1102 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎2                                                .</span>
-<span id="L1103" class="LineNr">1103 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
-<span id="L1104" class="LineNr">1104 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎1   edit          copy            delete         .</span>
-<span id="L1105" class="LineNr">1105 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎add 2, 2                                         .</span>
-<span id="L1106" class="LineNr">1106 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎4                                                .</span>
-<span id="L1107" class="LineNr">1107 </span>  ]
-<span id="L1108" class="LineNr">1108 </span>  <span class="Comment"># hit 'page-up' again</span>
-<span id="L1109" class="LineNr">1109 </span>  assume-console [
-<span id="L1110" class="LineNr">1110 </span>  <span class="Conceal">¦</span> press <a href='003-shortcuts.mu.html#L3179'>page-up</a>
-<span id="L1111" class="LineNr">1111 </span>  ]
-<span id="L1112" class="LineNr">1112 </span>  run [
-<span id="L1113" class="LineNr">1113 </span>  <span class="Conceal">¦</span> <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
-<span id="L1114" class="LineNr">1114 </span>  <span class="Conceal">¦</span> cursor:char <span class="Special">&lt;-</span> copy <span class="Constant">9251/␣</span>
-<span id="L1115" class="LineNr">1115 </span>  <span class="Conceal">¦</span> print <a href='../081print.mu.html#L4'>screen</a>, cursor
-<span id="L1116" class="LineNr">1116 </span>  ]
-<span id="L1117" class="LineNr">1117 </span>  <span class="Comment"># back to displaying both sandboxes as well as editor</span>
-<span id="L1118" class="LineNr">1118 </span>  screen-should-contain [
-<span id="L1119" class="LineNr">1119 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
-<span id="L1120" class="LineNr">1120 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎␣                                                .</span>
-<span id="L1121" class="LineNr">1121 </span><span class="Constant">  </span><span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎─────────────────────────────────────────────────.</span>
-<span id="L1122" class="LineNr">1122 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎0   edit          copy            delete         .</span>
-<span id="L1123" class="LineNr">1123 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎add 1, 1                                         .</span>
-<span id="L1124" class="LineNr">1124 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎2                                                .</span>
-<span id="L1125" class="LineNr">1125 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
-<span id="L1126" class="LineNr">1126 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎1   edit          copy            delete         .</span>
-<span id="L1127" class="LineNr">1127 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎add 2, 2                                         .</span>
-<span id="L1128" class="LineNr">1128 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎4                                                .</span>
-<span id="L1129" class="LineNr">1129 </span>  ]
-<span id="L1130" class="LineNr">1130 </span>  <span class="Comment"># hit 'page-up' again</span>
-<span id="L1131" class="LineNr">1131 </span>  assume-console [
-<span id="L1132" class="LineNr">1132 </span>  <span class="Conceal">¦</span> press <a href='003-shortcuts.mu.html#L3179'>page-up</a>
-<span id="L1133" class="LineNr">1133 </span>  ]
-<span id="L1134" class="LineNr">1134 </span>  run [
-<span id="L1135" class="LineNr">1135 </span>  <span class="Conceal">¦</span> <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
-<span id="L1136" class="LineNr">1136 </span>  <span class="Conceal">¦</span> cursor:char <span class="Special">&lt;-</span> copy <span class="Constant">9251/␣</span>
-<span id="L1137" class="LineNr">1137 </span>  <span class="Conceal">¦</span> print <a href='../081print.mu.html#L4'>screen</a>, cursor
-<span id="L1138" class="LineNr">1138 </span>  ]
-<span id="L1139" class="LineNr">1139 </span>  <span class="Comment"># no change</span>
-<span id="L1140" class="LineNr">1140 </span>  screen-should-contain [
-<span id="L1141" class="LineNr">1141 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
-<span id="L1142" class="LineNr">1142 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎␣                                                .</span>
-<span id="L1143" class="LineNr">1143 </span><span class="Constant">  </span><span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎─────────────────────────────────────────────────.</span>
-<span id="L1144" class="LineNr">1144 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎0   edit          copy            delete         .</span>
-<span id="L1145" class="LineNr">1145 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎add 1, 1                                         .</span>
-<span id="L1146" class="LineNr">1146 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎2                                                .</span>
-<span id="L1147" class="LineNr">1147 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
-<span id="L1148" class="LineNr">1148 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎1   edit          copy            delete         .</span>
-<span id="L1149" class="LineNr">1149 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎add 2, 2                                         .</span>
-<span id="L1150" class="LineNr">1150 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎4                                                .</span>
-<span id="L1151" class="LineNr">1151 </span>  ]
-<span id="L1152" class="LineNr">1152 </span>]
-<span id="L1153" class="LineNr">1153 </span>
-<span id="L1154" class="LineNr">1154 </span><span class="muScenario">scenario</span> scrolling-manages-sandbox-index-correctly [
-<span id="L1155" class="LineNr">1155 </span>  <span class="Constant">local-scope</span>
-<span id="L1156" class="LineNr">1156 </span>  trace-until <span class="Constant">100/app</span>  <span class="Comment"># trace too long</span>
-<span id="L1157" class="LineNr">1157 </span>  assume-screen <span class="Constant">100/width</span>, <span class="Constant">10/height</span>
-<span id="L1158" class="LineNr">1158 </span>  <span class="Comment"># initialize environment</span>
-<span id="L1159" class="LineNr">1159 </span>  assume-resources [
-<span id="L1160" class="LineNr">1160 </span>  ]
-<span id="L1161" class="LineNr">1161 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L4'>screen</a>, <span class="Constant">[]</span>
-<span id="L1162" class="LineNr">1162 </span>  <a href='004-programming-environment.mu.html#L400'>render-all</a> <a href='../081print.mu.html#L4'>screen</a>, env, <a href='001-editor.mu.html#L122'>render</a>
-<span id="L1163" class="LineNr">1163 </span>  <span class="Comment"># create a sandbox</span>
-<span id="L1164" class="LineNr">1164 </span>  assume-console [
-<span id="L1165" class="LineNr">1165 </span>  <span class="Conceal">¦</span> press ctrl-n
-<span id="L1166" class="LineNr">1166 </span>  <span class="Conceal">¦</span> type <span class="Constant">[add 1, 1]</span>
-<span id="L1167" class="LineNr">1167 </span>  <span class="Conceal">¦</span> press F4
-<span id="L1168" class="LineNr">1168 </span>  ]
-<span id="L1169" class="LineNr">1169 </span>  <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
-<span id="L1170" class="LineNr">1170 </span>  screen-should-contain [
-<span id="L1171" class="LineNr">1171 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
+<span id="L975" class="LineNr"> 975 </span>  <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
+<span id="L976" class="LineNr"> 976 </span>  <span class="Comment"># hit 'down' in recipe editor</span>
+<span id="L977" class="LineNr"> 977 </span>  assume-console [
+<span id="L978" class="LineNr"> 978 </span>  <span class="Conceal">¦</span> press <a href='003-shortcuts.mu.html#L2981'>page-down</a>
+<span id="L979" class="LineNr"> 979 </span>  ]
+<span id="L980" class="LineNr"> 980 </span>  run [
+<span id="L981" class="LineNr"> 981 </span>  <span class="Conceal">¦</span> <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
+<span id="L982" class="LineNr"> 982 </span>  <span class="Conceal">¦</span> cursor:char <span class="Special">&lt;-</span> copy <span class="Constant">9251/␣</span>
+<span id="L983" class="LineNr"> 983 </span>  <span class="Conceal">¦</span> print <a href='../081print.mu.html#L4'>screen</a>, cursor
+<span id="L984" class="LineNr"> 984 </span>  ]
+<span id="L985" class="LineNr"> 985 </span>  <span class="Comment"># cursor doesn't move when the end is already on-screen</span>
+<span id="L986" class="LineNr"> 986 </span>  screen-should-contain [
+<span id="L987" class="LineNr"> 987 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
+<span id="L988" class="LineNr"> 988 </span>  <span class="Conceal">¦</span><span class="Constant"> .␣                                                 ╎                                                 .</span>
+<span id="L989" class="LineNr"> 989 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
+<span id="L990" class="LineNr"> 990 </span>  <span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎0   edit          copy            delete         .</span>
+<span id="L991" class="LineNr"> 991 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎add 2, 2                                         .</span>
+<span id="L992" class="LineNr"> 992 </span>  ]
+<span id="L993" class="LineNr"> 993 </span>]
+<span id="L994" class="LineNr"> 994 </span>
+<span id="L995" class="LineNr"> 995 </span><span class="muScenario">scenario</span> scrolling-through-multiple-sandboxes [
+<span id="L996" class="LineNr"> 996 </span>  <span class="Constant">local-scope</span>
+<span id="L997" class="LineNr"> 997 </span>  trace-until <span class="Constant">100/app</span>  <span class="Comment"># trace too long</span>
+<span id="L998" class="LineNr"> 998 </span>  assume-screen <span class="Constant">100/width</span>, <span class="Constant">10/height</span>
+<span id="L999" class="LineNr"> 999 </span>  <span class="Comment"># initialize environment</span>
+<span id="L1000" class="LineNr">1000 </span>  assume-resources [
+<span id="L1001" class="LineNr">1001 </span>  ]
+<span id="L1002" class="LineNr">1002 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L4'>screen</a>, <span class="Constant">[]</span>
+<span id="L1003" class="LineNr">1003 </span>  <a href='004-programming-environment.mu.html#L400'>render-all</a> <a href='../081print.mu.html#L4'>screen</a>, env, <a href='001-editor.mu.html#L122'>render</a>
+<span id="L1004" class="LineNr">1004 </span>  <span class="Comment"># create 2 sandboxes</span>
+<span id="L1005" class="LineNr">1005 </span>  assume-console [
+<span id="L1006" class="LineNr">1006 </span>  <span class="Conceal">¦</span> press ctrl-n
+<span id="L1007" class="LineNr">1007 </span>  <span class="Conceal">¦</span> type <span class="Constant">[add 2, 2]</span>
+<span id="L1008" class="LineNr">1008 </span>  <span class="Conceal">¦</span> press F4
+<span id="L1009" class="LineNr">1009 </span>  <span class="Conceal">¦</span> type <span class="Constant">[add 1, 1]</span>
+<span id="L1010" class="LineNr">1010 </span>  <span class="Conceal">¦</span> press F4
+<span id="L1011" class="LineNr">1011 </span>  ]
+<span id="L1012" class="LineNr">1012 </span>  <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
+<span id="L1013" class="LineNr">1013 </span>  cursor:char <span class="Special">&lt;-</span> copy <span class="Constant">9251/␣</span>
+<span id="L1014" class="LineNr">1014 </span>  print <a href='../081print.mu.html#L4'>screen</a>, cursor
+<span id="L1015" class="LineNr">1015 </span>  screen-should-contain [
+<span id="L1016" class="LineNr">1016 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
+<span id="L1017" class="LineNr">1017 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎␣                                                .</span>
+<span id="L1018" class="LineNr">1018 </span><span class="Constant">  </span><span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎─────────────────────────────────────────────────.</span>
+<span id="L1019" class="LineNr">1019 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎0   edit          copy            delete         .</span>
+<span id="L1020" class="LineNr">1020 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎add 1, 1                                         .</span>
+<span id="L1021" class="LineNr">1021 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎2                                                .</span>
+<span id="L1022" class="LineNr">1022 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
+<span id="L1023" class="LineNr">1023 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎1   edit          copy            delete         .</span>
+<span id="L1024" class="LineNr">1024 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎add 2, 2                                         .</span>
+<span id="L1025" class="LineNr">1025 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎4                                                .</span>
+<span id="L1026" class="LineNr">1026 </span>  ]
+<span id="L1027" class="LineNr">1027 </span>  <span class="Comment"># hit 'page-down'</span>
+<span id="L1028" class="LineNr">1028 </span>  assume-console [
+<span id="L1029" class="LineNr">1029 </span>  <span class="Conceal">¦</span> press <a href='003-shortcuts.mu.html#L2981'>page-down</a>
+<span id="L1030" class="LineNr">1030 </span>  ]
+<span id="L1031" class="LineNr">1031 </span>  run [
+<span id="L1032" class="LineNr">1032 </span>  <span class="Conceal">¦</span> <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
+<span id="L1033" class="LineNr">1033 </span>  <span class="Conceal">¦</span> cursor:char <span class="Special">&lt;-</span> copy <span class="Constant">9251/␣</span>
+<span id="L1034" class="LineNr">1034 </span>  <span class="Conceal">¦</span> print <a href='../081print.mu.html#L4'>screen</a>, cursor
+<span id="L1035" class="LineNr">1035 </span>  ]
+<span id="L1036" class="LineNr">1036 </span>  <span class="Comment"># sandbox editor hidden; first sandbox displayed</span>
+<span id="L1037" class="LineNr">1037 </span>  <span class="Comment"># cursor moves to first sandbox</span>
+<span id="L1038" class="LineNr">1038 </span>  screen-should-contain [
+<span id="L1039" class="LineNr">1039 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
+<span id="L1040" class="LineNr">1040 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
+<span id="L1041" class="LineNr">1041 </span>  <span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎␣   edit          copy            delete         .</span>
+<span id="L1042" class="LineNr">1042 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎add 1, 1                                         .</span>
+<span id="L1043" class="LineNr">1043 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎2                                                .</span>
+<span id="L1044" class="LineNr">1044 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
+<span id="L1045" class="LineNr">1045 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎1   edit          copy            delete         .</span>
+<span id="L1046" class="LineNr">1046 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎add 2, 2                                         .</span>
+<span id="L1047" class="LineNr">1047 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎4                                                .</span>
+<span id="L1048" class="LineNr">1048 </span>  ]
+<span id="L1049" class="LineNr">1049 </span>  <span class="Comment"># hit 'page-down' again</span>
+<span id="L1050" class="LineNr">1050 </span>  assume-console [
+<span id="L1051" class="LineNr">1051 </span>  <span class="Conceal">¦</span> press <a href='003-shortcuts.mu.html#L2981'>page-down</a>
+<span id="L1052" class="LineNr">1052 </span>  ]
+<span id="L1053" class="LineNr">1053 </span>  run [
+<span id="L1054" class="LineNr">1054 </span>  <span class="Conceal">¦</span> <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
+<span id="L1055" class="LineNr">1055 </span>  ]
+<span id="L1056" class="LineNr">1056 </span>  <span class="Comment"># just second sandbox displayed</span>
+<span id="L1057" class="LineNr">1057 </span>  screen-should-contain [
+<span id="L1058" class="LineNr">1058 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
+<span id="L1059" class="LineNr">1059 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
+<span id="L1060" class="LineNr">1060 </span>  <span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎1   edit          copy            delete         .</span>
+<span id="L1061" class="LineNr">1061 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎add 2, 2                                         .</span>
+<span id="L1062" class="LineNr">1062 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎4                                                .</span>
+<span id="L1063" class="LineNr">1063 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
+<span id="L1064" class="LineNr">1064 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
+<span id="L1065" class="LineNr">1065 </span>  ]
+<span id="L1066" class="LineNr">1066 </span>  <span class="Comment"># hit 'page-down' again</span>
+<span id="L1067" class="LineNr">1067 </span>  assume-console [
+<span id="L1068" class="LineNr">1068 </span>  <span class="Conceal">¦</span> press <a href='003-shortcuts.mu.html#L2981'>page-down</a>
+<span id="L1069" class="LineNr">1069 </span>  ]
+<span id="L1070" class="LineNr">1070 </span>  run [
+<span id="L1071" class="LineNr">1071 </span>  <span class="Conceal">¦</span> <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
+<span id="L1072" class="LineNr">1072 </span>  ]
+<span id="L1073" class="LineNr">1073 </span>  <span class="Comment"># no change</span>
+<span id="L1074" class="LineNr">1074 </span>  screen-should-contain [
+<span id="L1075" class="LineNr">1075 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
+<span id="L1076" class="LineNr">1076 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
+<span id="L1077" class="LineNr">1077 </span>  <span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎1   edit          copy            delete         .</span>
+<span id="L1078" class="LineNr">1078 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎add 2, 2                                         .</span>
+<span id="L1079" class="LineNr">1079 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎4                                                .</span>
+<span id="L1080" class="LineNr">1080 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
+<span id="L1081" class="LineNr">1081 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
+<span id="L1082" class="LineNr">1082 </span>  ]
+<span id="L1083" class="LineNr">1083 </span>  <span class="Comment"># hit 'page-up'</span>
+<span id="L1084" class="LineNr">1084 </span>  assume-console [
+<span id="L1085" class="LineNr">1085 </span>  <span class="Conceal">¦</span> press <a href='003-shortcuts.mu.html#L3179'>page-up</a>
+<span id="L1086" class="LineNr">1086 </span>  ]
+<span id="L1087" class="LineNr">1087 </span>  run [
+<span id="L1088" class="LineNr">1088 </span>  <span class="Conceal">¦</span> <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
+<span id="L1089" class="LineNr">1089 </span>  ]
+<span id="L1090" class="LineNr">1090 </span>  <span class="Comment"># back to displaying both sandboxes without editor</span>
+<span id="L1091" class="LineNr">1091 </span>  screen-should-contain [
+<span id="L1092" class="LineNr">1092 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
+<span id="L1093" class="LineNr">1093 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
+<span id="L1094" class="LineNr">1094 </span>  <span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎0   edit          copy            delete         .</span>
+<span id="L1095" class="LineNr">1095 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎add 1, 1                                         .</span>
+<span id="L1096" class="LineNr">1096 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎2                                                .</span>
+<span id="L1097" class="LineNr">1097 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
+<span id="L1098" class="LineNr">1098 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎1   edit          copy            delete         .</span>
+<span id="L1099" class="LineNr">1099 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎add 2, 2                                         .</span>
+<span id="L1100" class="LineNr">1100 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎4                                                .</span>
+<span id="L1101" class="LineNr">1101 </span>  ]
+<span id="L1102" class="LineNr">1102 </span>  <span class="Comment"># hit 'page-up' again</span>
+<span id="L1103" class="LineNr">1103 </span>  assume-console [
+<span id="L1104" class="LineNr">1104 </span>  <span class="Conceal">¦</span> press <a href='003-shortcuts.mu.html#L3179'>page-up</a>
+<span id="L1105" class="LineNr">1105 </span>  ]
+<span id="L1106" class="LineNr">1106 </span>  run [
+<span id="L1107" class="LineNr">1107 </span>  <span class="Conceal">¦</span> <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
+<span id="L1108" class="LineNr">1108 </span>  <span class="Conceal">¦</span> cursor:char <span class="Special">&lt;-</span> copy <span class="Constant">9251/␣</span>
+<span id="L1109" class="LineNr">1109 </span>  <span class="Conceal">¦</span> print <a href='../081print.mu.html#L4'>screen</a>, cursor
+<span id="L1110" class="LineNr">1110 </span>  ]
+<span id="L1111" class="LineNr">1111 </span>  <span class="Comment"># back to displaying both sandboxes as well as editor</span>
+<span id="L1112" class="LineNr">1112 </span>  screen-should-contain [
+<span id="L1113" class="LineNr">1113 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
+<span id="L1114" class="LineNr">1114 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎␣                                                .</span>
+<span id="L1115" class="LineNr">1115 </span><span class="Constant">  </span><span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎─────────────────────────────────────────────────.</span>
+<span id="L1116" class="LineNr">1116 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎0   edit          copy            delete         .</span>
+<span id="L1117" class="LineNr">1117 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎add 1, 1                                         .</span>
+<span id="L1118" class="LineNr">1118 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎2                                                .</span>
+<span id="L1119" class="LineNr">1119 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
+<span id="L1120" class="LineNr">1120 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎1   edit          copy            delete         .</span>
+<span id="L1121" class="LineNr">1121 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎add 2, 2                                         .</span>
+<span id="L1122" class="LineNr">1122 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎4                                                .</span>
+<span id="L1123" class="LineNr">1123 </span>  ]
+<span id="L1124" class="LineNr">1124 </span>  <span class="Comment"># hit 'page-up' again</span>
+<span id="L1125" class="LineNr">1125 </span>  assume-console [
+<span id="L1126" class="LineNr">1126 </span>  <span class="Conceal">¦</span> press <a href='003-shortcuts.mu.html#L3179'>page-up</a>
+<span id="L1127" class="LineNr">1127 </span>  ]
+<span id="L1128" class="LineNr">1128 </span>  run [
+<span id="L1129" class="LineNr">1129 </span>  <span class="Conceal">¦</span> <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
+<span id="L1130" class="LineNr">1130 </span>  <span class="Conceal">¦</span> cursor:char <span class="Special">&lt;-</span> copy <span class="Constant">9251/␣</span>
+<span id="L1131" class="LineNr">1131 </span>  <span class="Conceal">¦</span> print <a href='../081print.mu.html#L4'>screen</a>, cursor
+<span id="L1132" class="LineNr">1132 </span>  ]
+<span id="L1133" class="LineNr">1133 </span>  <span class="Comment"># no change</span>
+<span id="L1134" class="LineNr">1134 </span>  screen-should-contain [
+<span id="L1135" class="LineNr">1135 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
+<span id="L1136" class="LineNr">1136 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎␣                                                .</span>
+<span id="L1137" class="LineNr">1137 </span><span class="Constant">  </span><span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎─────────────────────────────────────────────────.</span>
+<span id="L1138" class="LineNr">1138 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎0   edit          copy            delete         .</span>
+<span id="L1139" class="LineNr">1139 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎add 1, 1                                         .</span>
+<span id="L1140" class="LineNr">1140 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎2                                                .</span>
+<span id="L1141" class="LineNr">1141 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
+<span id="L1142" class="LineNr">1142 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎1   edit          copy            delete         .</span>
+<span id="L1143" class="LineNr">1143 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎add 2, 2                                         .</span>
+<span id="L1144" class="LineNr">1144 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎4                                                .</span>
+<span id="L1145" class="LineNr">1145 </span>  ]
+<span id="L1146" class="LineNr">1146 </span>]
+<span id="L1147" class="LineNr">1147 </span>
+<span id="L1148" class="LineNr">1148 </span><span class="muScenario">scenario</span> scrolling-manages-sandbox-index-correctly [
+<span id="L1149" class="LineNr">1149 </span>  <span class="Constant">local-scope</span>
+<span id="L1150" class="LineNr">1150 </span>  trace-until <span class="Constant">100/app</span>  <span class="Comment"># trace too long</span>
+<span id="L1151" class="LineNr">1151 </span>  assume-screen <span class="Constant">100/width</span>, <span class="Constant">10/height</span>
+<span id="L1152" class="LineNr">1152 </span>  <span class="Comment"># initialize environment</span>
+<span id="L1153" class="LineNr">1153 </span>  assume-resources [
+<span id="L1154" class="LineNr">1154 </span>  ]
+<span id="L1155" class="LineNr">1155 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L4'>screen</a>, <span class="Constant">[]</span>
+<span id="L1156" class="LineNr">1156 </span>  <a href='004-programming-environment.mu.html#L400'>render-all</a> <a href='../081print.mu.html#L4'>screen</a>, env, <a href='001-editor.mu.html#L122'>render</a>
+<span id="L1157" class="LineNr">1157 </span>  <span class="Comment"># create a sandbox</span>
+<span id="L1158" class="LineNr">1158 </span>  assume-console [
+<span id="L1159" class="LineNr">1159 </span>  <span class="Conceal">¦</span> press ctrl-n
+<span id="L1160" class="LineNr">1160 </span>  <span class="Conceal">¦</span> type <span class="Constant">[add 1, 1]</span>
+<span id="L1161" class="LineNr">1161 </span>  <span class="Conceal">¦</span> press F4
+<span id="L1162" class="LineNr">1162 </span>  ]
+<span id="L1163" class="LineNr">1163 </span>  <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
+<span id="L1164" class="LineNr">1164 </span>  screen-should-contain [
+<span id="L1165" class="LineNr">1165 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
+<span id="L1166" class="LineNr">1166 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
+<span id="L1167" class="LineNr">1167 </span><span class="Constant">  </span><span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎─────────────────────────────────────────────────.</span>
+<span id="L1168" class="LineNr">1168 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎0   edit          copy            delete         .</span>
+<span id="L1169" class="LineNr">1169 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎add 1, 1                                         .</span>
+<span id="L1170" class="LineNr">1170 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎2                                                .</span>
+<span id="L1171" class="LineNr">1171 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
 <span id="L1172" class="LineNr">1172 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
-<span id="L1173" class="LineNr">1173 </span><span class="Constant">  </span><span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎─────────────────────────────────────────────────.</span>
-<span id="L1174" class="LineNr">1174 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎0   edit          copy            delete         .</span>
-<span id="L1175" class="LineNr">1175 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎add 1, 1                                         .</span>
-<span id="L1176" class="LineNr">1176 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎2                                                .</span>
-<span id="L1177" class="LineNr">1177 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
-<span id="L1178" class="LineNr">1178 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
-<span id="L1179" class="LineNr">1179 </span>  ]
-<span id="L1180" class="LineNr">1180 </span>  <span class="Comment"># hit 'page-down' and 'page-up' a couple of times. sandbox index should be stable</span>
-<span id="L1181" class="LineNr">1181 </span>  assume-console [
-<span id="L1182" class="LineNr">1182 </span>  <span class="Conceal">¦</span> press <a href='003-shortcuts.mu.html#L2981'>page-down</a>
-<span id="L1183" class="LineNr">1183 </span>  ]
-<span id="L1184" class="LineNr">1184 </span>  run [
-<span id="L1185" class="LineNr">1185 </span>  <span class="Conceal">¦</span> <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
-<span id="L1186" class="LineNr">1186 </span>  ]
-<span id="L1187" class="LineNr">1187 </span>  <span class="Comment"># sandbox editor hidden; first sandbox displayed</span>
-<span id="L1188" class="LineNr">1188 </span>  <span class="Comment"># cursor moves to first sandbox</span>
-<span id="L1189" class="LineNr">1189 </span>  screen-should-contain [
-<span id="L1190" class="LineNr">1190 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
-<span id="L1191" class="LineNr">1191 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
-<span id="L1192" class="LineNr">1192 </span>  <span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎0   edit          copy            delete         .</span>
-<span id="L1193" class="LineNr">1193 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎add 1, 1                                         .</span>
-<span id="L1194" class="LineNr">1194 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎2                                                .</span>
-<span id="L1195" class="LineNr">1195 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
-<span id="L1196" class="LineNr">1196 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
-<span id="L1197" class="LineNr">1197 </span>  ]
-<span id="L1198" class="LineNr">1198 </span>  <span class="Comment"># hit 'page-up' again</span>
-<span id="L1199" class="LineNr">1199 </span>  assume-console [
-<span id="L1200" class="LineNr">1200 </span>  <span class="Conceal">¦</span> press <a href='003-shortcuts.mu.html#L3179'>page-up</a>
-<span id="L1201" class="LineNr">1201 </span>  ]
-<span id="L1202" class="LineNr">1202 </span>  run [
-<span id="L1203" class="LineNr">1203 </span>  <span class="Conceal">¦</span> <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
-<span id="L1204" class="LineNr">1204 </span>  ]
-<span id="L1205" class="LineNr">1205 </span>  <span class="Comment"># back to displaying both sandboxes as well as editor</span>
-<span id="L1206" class="LineNr">1206 </span>  screen-should-contain [
-<span id="L1207" class="LineNr">1207 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
+<span id="L1173" class="LineNr">1173 </span>  ]
+<span id="L1174" class="LineNr">1174 </span>  <span class="Comment"># hit 'page-down' and 'page-up' a couple of times. sandbox index should be stable</span>
+<span id="L1175" class="LineNr">1175 </span>  assume-console [
+<span id="L1176" class="LineNr">1176 </span>  <span class="Conceal">¦</span> press <a href='003-shortcuts.mu.html#L2981'>page-down</a>
+<span id="L1177" class="LineNr">1177 </span>  ]
+<span id="L1178" class="LineNr">1178 </span>  run [
+<span id="L1179" class="LineNr">1179 </span>  <span class="Conceal">¦</span> <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
+<span id="L1180" class="LineNr">1180 </span>  ]
+<span id="L1181" class="LineNr">1181 </span>  <span class="Comment"># sandbox editor hidden; first sandbox displayed</span>
+<span id="L1182" class="LineNr">1182 </span>  <span class="Comment"># cursor moves to first sandbox</span>
+<span id="L1183" class="LineNr">1183 </span>  screen-should-contain [
+<span id="L1184" class="LineNr">1184 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
+<span id="L1185" class="LineNr">1185 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
+<span id="L1186" class="LineNr">1186 </span>  <span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎0   edit          copy            delete         .</span>
+<span id="L1187" class="LineNr">1187 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎add 1, 1                                         .</span>
+<span id="L1188" class="LineNr">1188 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎2                                                .</span>
+<span id="L1189" class="LineNr">1189 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
+<span id="L1190" class="LineNr">1190 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
+<span id="L1191" class="LineNr">1191 </span>  ]
+<span id="L1192" class="LineNr">1192 </span>  <span class="Comment"># hit 'page-up' again</span>
+<span id="L1193" class="LineNr">1193 </span>  assume-console [
+<span id="L1194" class="LineNr">1194 </span>  <span class="Conceal">¦</span> press <a href='003-shortcuts.mu.html#L3179'>page-up</a>
+<span id="L1195" class="LineNr">1195 </span>  ]
+<span id="L1196" class="LineNr">1196 </span>  run [
+<span id="L1197" class="LineNr">1197 </span>  <span class="Conceal">¦</span> <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
+<span id="L1198" class="LineNr">1198 </span>  ]
+<span id="L1199" class="LineNr">1199 </span>  <span class="Comment"># back to displaying both sandboxes as well as editor</span>
+<span id="L1200" class="LineNr">1200 </span>  screen-should-contain [
+<span id="L1201" class="LineNr">1201 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
+<span id="L1202" class="LineNr">1202 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
+<span id="L1203" class="LineNr">1203 </span><span class="Constant">  </span><span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎─────────────────────────────────────────────────.</span>
+<span id="L1204" class="LineNr">1204 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎0   edit          copy            delete         .</span>
+<span id="L1205" class="LineNr">1205 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎add 1, 1                                         .</span>
+<span id="L1206" class="LineNr">1206 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎2                                                .</span>
+<span id="L1207" class="LineNr">1207 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
 <span id="L1208" class="LineNr">1208 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
-<span id="L1209" class="LineNr">1209 </span><span class="Constant">  </span><span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎─────────────────────────────────────────────────.</span>
-<span id="L1210" class="LineNr">1210 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎0   edit          copy            delete         .</span>
-<span id="L1211" class="LineNr">1211 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎add 1, 1                                         .</span>
-<span id="L1212" class="LineNr">1212 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎2                                                .</span>
-<span id="L1213" class="LineNr">1213 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
-<span id="L1214" class="LineNr">1214 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
-<span id="L1215" class="LineNr">1215 </span>  ]
-<span id="L1216" class="LineNr">1216 </span>  <span class="Comment"># hit 'page-down'</span>
-<span id="L1217" class="LineNr">1217 </span>  assume-console [
-<span id="L1218" class="LineNr">1218 </span>  <span class="Conceal">¦</span> press <a href='003-shortcuts.mu.html#L2981'>page-down</a>
-<span id="L1219" class="LineNr">1219 </span>  ]
-<span id="L1220" class="LineNr">1220 </span>  run [
-<span id="L1221" class="LineNr">1221 </span>  <span class="Conceal">¦</span> <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
-<span id="L1222" class="LineNr">1222 </span>  ]
-<span id="L1223" class="LineNr">1223 </span>  <span class="Comment"># sandbox editor hidden; first sandbox displayed</span>
-<span id="L1224" class="LineNr">1224 </span>  <span class="Comment"># cursor moves to first sandbox</span>
-<span id="L1225" class="LineNr">1225 </span>  screen-should-contain [
-<span id="L1226" class="LineNr">1226 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
-<span id="L1227" class="LineNr">1227 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
-<span id="L1228" class="LineNr">1228 </span>  <span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎0   edit          copy            delete         .</span>
-<span id="L1229" class="LineNr">1229 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎add 1, 1                                         .</span>
-<span id="L1230" class="LineNr">1230 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎2                                                .</span>
-<span id="L1231" class="LineNr">1231 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
-<span id="L1232" class="LineNr">1232 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
-<span id="L1233" class="LineNr">1233 </span>  ]
-<span id="L1234" class="LineNr">1234 </span>]
+<span id="L1209" class="LineNr">1209 </span>  ]
+<span id="L1210" class="LineNr">1210 </span>  <span class="Comment"># hit 'page-down'</span>
+<span id="L1211" class="LineNr">1211 </span>  assume-console [
+<span id="L1212" class="LineNr">1212 </span>  <span class="Conceal">¦</span> press <a href='003-shortcuts.mu.html#L2981'>page-down</a>
+<span id="L1213" class="LineNr">1213 </span>  ]
+<span id="L1214" class="LineNr">1214 </span>  run [
+<span id="L1215" class="LineNr">1215 </span>  <span class="Conceal">¦</span> <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L4'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
+<span id="L1216" class="LineNr">1216 </span>  ]
+<span id="L1217" class="LineNr">1217 </span>  <span class="Comment"># sandbox editor hidden; first sandbox displayed</span>
+<span id="L1218" class="LineNr">1218 </span>  <span class="Comment"># cursor moves to first sandbox</span>
+<span id="L1219" class="LineNr">1219 </span>  screen-should-contain [
+<span id="L1220" class="LineNr">1220 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                                                 run (F4)           .</span>
+<span id="L1221" class="LineNr">1221 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
+<span id="L1222" class="LineNr">1222 </span>  <span class="Conceal">¦</span><span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎0   edit          copy            delete         .</span>
+<span id="L1223" class="LineNr">1223 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎add 1, 1                                         .</span>
+<span id="L1224" class="LineNr">1224 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎2                                                .</span>
+<span id="L1225" class="LineNr">1225 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
+<span id="L1226" class="LineNr">1226 </span>  <span class="Conceal">¦</span><span class="Constant"> .                                                  ╎                                                 .</span>
+<span id="L1227" class="LineNr">1227 </span>  ]
+<span id="L1228" class="LineNr">1228 </span>]
 </pre>
 </body>
 </html>
diff --git a/html/edit/006-sandbox-copy.mu.html b/html/edit/006-sandbox-copy.mu.html
index 688c496b..1fba95c1 100644
--- a/html/edit/006-sandbox-copy.mu.html
+++ b/html/edit/006-sandbox-copy.mu.html
@@ -208,7 +208,7 @@ if ('onhashchange' in window) {
 <span id="L146" class="LineNr">146 </span>  assert first-sandbox, <span class="Constant">[!!]</span>
 <span id="L147" class="LineNr">147 </span>  sandbox-left-margin:num <span class="Special">&lt;-</span> get *first-sandbox, <span class="Constant">left:offset</span>
 <span id="L148" class="LineNr">148 </span>  sandbox-right-margin:num <span class="Special">&lt;-</span> get *first-sandbox, <span class="Constant">right:offset</span>
-<span id="L149" class="LineNr">149 </span>  _, _, copy-button-left:num, copy-button-right:num, _ <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L344'>sandbox-menu-columns</a> sandbox-left-margin, sandbox-right-margin
+<span id="L149" class="LineNr">149 </span>  _, _, copy-button-left:num, copy-button-right:num, _ <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L338'>sandbox-menu-columns</a> sandbox-left-margin, sandbox-right-margin
 <span id="L150" class="LineNr">150 </span>  copy-button-vertical-area?:bool <span class="Special">&lt;-</span> <a href='006-sandbox-copy.mu.html#L209'>within-range?</a> click-column, copy-button-left, copy-button-right
 <span id="L151" class="LineNr">151 </span>  <span class="muControl">return-unless</span> copy-button-vertical-area?, <span class="Constant">0/false</span>
 <span id="L152" class="LineNr">152 </span>  <span class="Comment"># finally, is sandbox editor empty?</span>
diff --git a/html/edit/007-sandbox-delete.mu.html b/html/edit/007-sandbox-delete.mu.html
index 06446263..ef975375 100644
--- a/html/edit/007-sandbox-delete.mu.html
+++ b/html/edit/007-sandbox-delete.mu.html
@@ -152,7 +152,7 @@ if ('onhashchange' in window) {
 <span id="L90" class="LineNr"> 90 </span>  assert first-sandbox, <span class="Constant">[!!]</span>
 <span id="L91" class="LineNr"> 91 </span>  sandbox-left-margin:num <span class="Special">&lt;-</span> get *first-sandbox, <span class="Constant">left:offset</span>
 <span id="L92" class="LineNr"> 92 </span>  sandbox-right-margin:num <span class="Special">&lt;-</span> get *first-sandbox, <span class="Constant">right:offset</span>
-<span id="L93" class="LineNr"> 93 </span>  _, _, _, _, delete-button-left:num <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L344'>sandbox-menu-columns</a> sandbox-left-margin, sandbox-right-margin
+<span id="L93" class="LineNr"> 93 </span>  _, _, _, _, delete-button-left:num <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L338'>sandbox-menu-columns</a> sandbox-left-margin, sandbox-right-margin
 <span id="L94" class="LineNr"> 94 </span>  result <span class="Special">&lt;-</span> <a href='006-sandbox-copy.mu.html#L209'>within-range?</a> click-column, delete-button-left, sandbox-right-margin
 <span id="L95" class="LineNr"> 95 </span>]
 <span id="L96" class="LineNr"> 96 </span>
diff --git a/html/edit/008-sandbox-edit.mu.html b/html/edit/008-sandbox-edit.mu.html
index 64abe297..99fe4400 100644
--- a/html/edit/008-sandbox-edit.mu.html
+++ b/html/edit/008-sandbox-edit.mu.html
@@ -191,7 +191,7 @@ if ('onhashchange' in window) {
 <span id="L129" class="LineNr">129 </span>  assert first-sandbox, <span class="Constant">[!!]</span>
 <span id="L130" class="LineNr">130 </span>  sandbox-left-margin:num <span class="Special">&lt;-</span> get *first-sandbox, <span class="Constant">left:offset</span>
 <span id="L131" class="LineNr">131 </span>  sandbox-right-margin:num <span class="Special">&lt;-</span> get *first-sandbox, <span class="Constant">right:offset</span>
-<span id="L132" class="LineNr">132 </span>  edit-button-left:num, edit-button-right:num, _ <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L344'>sandbox-menu-columns</a> sandbox-left-margin, sandbox-right-margin
+<span id="L132" class="LineNr">132 </span>  edit-button-left:num, edit-button-right:num, _ <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L338'>sandbox-menu-columns</a> sandbox-left-margin, sandbox-right-margin
 <span id="L133" class="LineNr">133 </span>  edit-button-vertical-area?:bool <span class="Special">&lt;-</span> <a href='006-sandbox-copy.mu.html#L209'>within-range?</a> click-column, edit-button-left, edit-button-right
 <span id="L134" class="LineNr">134 </span>  <span class="muControl">return-unless</span> edit-button-vertical-area?, <span class="Constant">0/false</span>
 <span id="L135" class="LineNr">135 </span>  <span class="Comment"># finally, is sandbox editor empty?</span>
diff --git a/html/edit/009-sandbox-test.mu.html b/html/edit/009-sandbox-test.mu.html
index b813f0f0..76c915d4 100644
--- a/html/edit/009-sandbox-test.mu.html
+++ b/html/edit/009-sandbox-test.mu.html
@@ -164,7 +164,7 @@ if ('onhashchange' in window) {
 <span id="L101" class="LineNr">101 </span>  <span class="Delimiter">}</span>
 <span id="L102" class="LineNr">102 </span>]
 <span id="L103" class="LineNr">103 </span>
-<span id="L104" class="LineNr">104 </span><span class="muRecipe">before</span> <span class="Constant"><a href='005-sandbox.mu.html#L455'>&lt;end-restore-sandbox&gt;</a></span> [
+<span id="L104" class="LineNr">104 </span><span class="muRecipe">before</span> <span class="Constant"><a href='005-sandbox.mu.html#L449'>&lt;end-restore-sandbox&gt;</a></span> [
 <span id="L105" class="LineNr">105 </span>  <span class="Delimiter">{</span>
 <span id="L106" class="LineNr">106 </span>  <span class="Conceal">¦</span> filename <span class="Special">&lt;-</span> append filename, <span class="Constant">[.out]</span>
 <span id="L107" class="LineNr">107 </span>  <span class="Conceal">¦</span> contents <span class="Special">&lt;-</span> <a href='../088file.mu.html#L38'>slurp</a> <a href='../088file.mu.html#L11'>resources</a>, filename
@@ -252,11 +252,11 @@ if ('onhashchange' in window) {
 <span id="L189" class="LineNr">189 </span>  <span class="Conceal">¦</span> response-is-expected?:bool <span class="Special">&lt;-</span> equal expected-response, sandbox-response
 <span id="L190" class="LineNr">190 </span>  <span class="Conceal">¦</span> <span class="Delimiter">{</span>
 <span id="L191" class="LineNr">191 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> response-is-expected?:bool
-<span id="L192" class="LineNr">192 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> row, <a href='../081print.mu.html#L4'>screen</a> <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L362'>render-text</a> <a href='../081print.mu.html#L4'>screen</a>, sandbox-response, left, right, <span class="Constant">1/red</span>, row
+<span id="L192" class="LineNr">192 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> row, <a href='../081print.mu.html#L4'>screen</a> <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L356'>render-text</a> <a href='../081print.mu.html#L4'>screen</a>, sandbox-response, left, right, <span class="Constant">1/red</span>, row
 <span id="L193" class="LineNr">193 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
 <span id="L194" class="LineNr">194 </span>  <span class="Conceal">¦</span> <span class="Delimiter">{</span>
 <span id="L195" class="LineNr">195 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="muControl">break-unless</span> response-is-expected?:bool
-<span id="L196" class="LineNr">196 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> row, <a href='../081print.mu.html#L4'>screen</a> <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L362'>render-text</a> <a href='../081print.mu.html#L4'>screen</a>, sandbox-response, left, right, <span class="Constant">2/green</span>, row
+<span id="L196" class="LineNr">196 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> row, <a href='../081print.mu.html#L4'>screen</a> <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L356'>render-text</a> <a href='../081print.mu.html#L4'>screen</a>, sandbox-response, left, right, <span class="Constant">2/green</span>, row
 <span id="L197" class="LineNr">197 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
 <span id="L198" class="LineNr">198 </span>  <span class="Conceal">¦</span> <span class="muControl">jump</span> <span class="Constant">+render-sandbox-end</span>
 <span id="L199" class="LineNr">199 </span>  <span class="Delimiter">}</span>
diff --git a/html/edit/010-sandbox-trace.mu.html b/html/edit/010-sandbox-trace.mu.html
index dfec896c..5bb31998 100644
--- a/html/edit/010-sandbox-trace.mu.html
+++ b/html/edit/010-sandbox-trace.mu.html
@@ -307,7 +307,7 @@ if ('onhashchange' in window) {
 <span id="L244" class="LineNr">244 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> display-trace?
 <span id="L245" class="LineNr">245 </span>  <span class="Conceal">¦</span> sandbox-trace:text <span class="Special">&lt;-</span> get *sandbox, <span class="Constant">trace:offset</span>
 <span id="L246" class="LineNr">246 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> sandbox-trace  <span class="Comment"># nothing to print; move on</span>
-<span id="L247" class="LineNr">247 </span>  <span class="Conceal">¦</span> row, <a href='../081print.mu.html#L4'>screen</a> <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L362'>render-text</a> <a href='../081print.mu.html#L4'>screen</a>, sandbox-trace, left, right, <span class="Constant">245/grey</span>, row
+<span id="L247" class="LineNr">247 </span>  <span class="Conceal">¦</span> row, <a href='../081print.mu.html#L4'>screen</a> <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L356'>render-text</a> <a href='../081print.mu.html#L4'>screen</a>, sandbox-trace, left, right, <span class="Constant">245/grey</span>, row
 <span id="L248" class="LineNr">248 </span>  <span class="Delimiter">}</span>
 <span id="L249" class="LineNr">249 </span><span class="Constant">  <a href='010-sandbox-trace.mu.html#L249'>&lt;render-sandbox-trace-done&gt;</a></span>
 <span id="L250" class="LineNr">250 </span>]
diff --git a/html/edit/011-errors.mu.html b/html/edit/011-errors.mu.html
index 8f2b2427..18baf52f 100644
--- a/html/edit/011-errors.mu.html
+++ b/html/edit/011-errors.mu.html
@@ -72,7 +72,7 @@ if ('onhashchange' in window) {
 <span id="L9" class="LineNr">  9 </span>  <span class="Constant">local-scope</span>
 <span id="L10" class="LineNr"> 10 </span>  <span class="Constant">load-ingredients</span>
 <span id="L11" class="LineNr"> 11 </span>  recipes:&amp;:editor <span class="Special">&lt;-</span> get *env, <span class="Constant">recipes:offset</span>
-<span id="L12" class="LineNr"> 12 </span>  in:text <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L632'>editor-contents</a> recipes
+<span id="L12" class="LineNr"> 12 </span>  in:text <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L626'>editor-contents</a> recipes
 <span id="L13" class="LineNr"> 13 </span>  <a href='../088file.mu.html#L11'>resources</a> <span class="Special">&lt;-</span> <a href='../088file.mu.html#L127'>dump</a> <a href='../088file.mu.html#L11'>resources</a>, <span class="Constant">[lesson/recipes.mu]</span>, in
 <span id="L14" class="LineNr"> 14 </span>  recipe-errors:text <span class="Special">&lt;-</span> reload in
 <span id="L15" class="LineNr"> 15 </span>  *env <span class="Special">&lt;-</span> put *env, <span class="Constant">recipe-errors:offset</span>, recipe-errors
@@ -99,7 +99,7 @@ if ('onhashchange' in window) {
 <span id="L36" class="LineNr"> 36 </span>  <span class="Delimiter">{</span>
 <span id="L37" class="LineNr"> 37 </span>  <span class="Conceal">¦</span> recipe-errors:text <span class="Special">&lt;-</span> get *env, <span class="Constant">recipe-errors:offset</span>
 <span id="L38" class="LineNr"> 38 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> recipe-errors
-<span id="L39" class="LineNr"> 39 </span>  <span class="Conceal">¦</span> row, <a href='../081print.mu.html#L4'>screen</a> <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L362'>render-text</a> <a href='../081print.mu.html#L4'>screen</a>, recipe-errors, left, right, <span class="Constant">1/red</span>, row
+<span id="L39" class="LineNr"> 39 </span>  <span class="Conceal">¦</span> row, <a href='../081print.mu.html#L4'>screen</a> <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L356'>render-text</a> <a href='../081print.mu.html#L4'>screen</a>, recipe-errors, left, right, <span class="Constant">1/red</span>, row
 <span id="L40" class="LineNr"> 40 </span>  <span class="Delimiter">}</span>
 <span id="L41" class="LineNr"> 41 </span>]
 <span id="L42" class="LineNr"> 42 </span>
@@ -171,7 +171,7 @@ if ('onhashchange' in window) {
 <span id="L108" class="LineNr">108 </span>  <span class="Conceal">¦</span> sandbox-errors:text <span class="Special">&lt;-</span> get *sandbox, <span class="Constant">errors:offset</span>
 <span id="L109" class="LineNr">109 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> sandbox-errors
 <span id="L110" class="LineNr">110 </span>  <span class="Conceal">¦</span> *sandbox <span class="Special">&lt;-</span> put *sandbox, <span class="Constant">response-starting-row-on-screen:offset</span>,<span class="Constant"> 0</span>  <span class="Comment"># no response</span>
-<span id="L111" class="LineNr">111 </span>  <span class="Conceal">¦</span> row, <a href='../081print.mu.html#L4'>screen</a> <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L362'>render-text</a> <a href='../081print.mu.html#L4'>screen</a>, sandbox-errors, left, right, <span class="Constant">1/red</span>, row
+<span id="L111" class="LineNr">111 </span>  <span class="Conceal">¦</span> row, <a href='../081print.mu.html#L4'>screen</a> <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L356'>render-text</a> <a href='../081print.mu.html#L4'>screen</a>, sandbox-errors, left, right, <span class="Constant">1/red</span>, row
 <span id="L112" class="LineNr">112 </span>  <span class="Conceal">¦</span> <span class="Comment"># don't try to print anything more for this sandbox</span>
 <span id="L113" class="LineNr">113 </span>  <span class="Conceal">¦</span> <span class="muControl">jump</span> <span class="Constant">+render-sandbox-end</span>
 <span id="L114" class="LineNr">114 </span>  <span class="Delimiter">}</span>