From 3ea092f2a755c78b56345cb341d714a748b73a13 Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Fri, 19 May 2017 17:55:10 -0700 Subject: 3867 --- html/edit/003-shortcuts.mu.html | 526 ++++++++++++++++++++-------------------- 1 file changed, 263 insertions(+), 263 deletions(-) (limited to 'html/edit/003-shortcuts.mu.html') diff --git a/html/edit/003-shortcuts.mu.html b/html/edit/003-shortcuts.mu.html index 8e3bc675..4d03527e 100644 --- a/html/edit/003-shortcuts.mu.html +++ b/html/edit/003-shortcuts.mu.html @@ -72,12 +72,12 @@ if ('onhashchange' in window) { 10 # just one character in final line 11 s:text <- new [ab 12 cd] - 13 e:&:editor <- new-editor s, 0/left, 5/right + 13 e:&:editor <- new-editor s, 0/left, 5/right 14 assume-console [ 15 ¦ press tab 16 ] 17 run [ - 18 ¦ editor-event-loop screen, console, e + 18 ¦ editor-event-loop screen, console, e 19 ] 20 screen-should-contain [ 21 ¦ . . @@ -86,13 +86,13 @@ if ('onhashchange' in window) { 24 ] 25 ] 26 - 27 after <handle-special-character> [ + 27 after <handle-special-character> [ 28 { 29 ¦ tab?:bool <- equal c, 9/tab 30 ¦ break-unless tab? 31 ¦ <insert-character-begin> - 32 ¦ insert-at-cursor editor, 32/space, screen - 33 ¦ insert-at-cursor editor, 32/space, screen + 32 ¦ insert-at-cursor editor, 32/space, screen + 33 ¦ insert-at-cursor editor, 32/space, screen 34 ¦ <insert-character-end> 35 ¦ return 1/go-render 36 } @@ -103,15 +103,15 @@ if ('onhashchange' in window) { 41 scenario editor-handles-backspace-key [ 42 local-scope 43 assume-screen 10/width, 5/height - 44 e:&:editor <- new-editor [abc], 0/left, 10/right - 45 editor-render screen, e + 44 e:&:editor <- new-editor [abc], 0/left, 10/right + 45 editor-render screen, e 46 $clear-trace 47 assume-console [ 48 ¦ left-click 1, 1 49 ¦ press backspace 50 ] 51 run [ - 52 ¦ editor-event-loop screen, console, e + 52 ¦ editor-event-loop screen, console, e 53 ¦ 4:num/raw <- get *e, cursor-row:offset 54 ¦ 5:num/raw <- get *e, cursor-column:offset 55 ] @@ -128,7 +128,7 @@ if ('onhashchange' in window) { 66 check-trace-count-for-label 3, [print-character] # length of original line to overwrite 67 ] 68 - 69 after <handle-special-character> [ + 69 after <handle-special-character> [ 70 { 71 ¦ delete-previous-character?:bool <- equal c, 8/backspace 72 ¦ break-unless delete-previous-character? @@ -158,7 +158,7 @@ if ('onhashchange' in window) { 96 before-cursor <- copy prev 97 *editor <- put *editor, before-cursor:offset, before-cursor 98 return-if scroll?, 1/go-render - 99 screen-width:num <- screen-width screen + 99 screen-width:num <- screen-width screen 100 cursor-row:num <- get *editor, cursor-row:offset 101 cursor-column:num <- get *editor, cursor-column:offset 102 # did we just backspace over a newline? @@ -167,7 +167,7 @@ if ('onhashchange' in window) { 105 left:num <- get *editor, left:offset 106 right:num <- get *editor, right:offset 107 curr:&:duplex-list:char <- next before-cursor - 108 screen <- move-cursor screen, cursor-row, cursor-column + 108 screen <- move-cursor screen, cursor-row, cursor-column 109 curr-column:num <- copy cursor-column 110 { 111 ¦ # hit right margin? give up and let caller render @@ -278,13 +278,13 @@ if ('onhashchange' in window) { 216 # just one character in final line 217 s:text <- new [ab 218 cd] - 219 e:&:editor <- new-editor s, 0/left, 10/right + 219 e:&:editor <- new-editor s, 0/left, 10/right 220 assume-console [ 221 ¦ left-click 2, 0 # cursor at only character in final line 222 ¦ press backspace 223 ] 224 run [ - 225 ¦ editor-event-loop screen, console, e + 225 ¦ editor-event-loop screen, console, e 226 ¦ 4:num/raw <- get *e, cursor-row:offset 227 ¦ 5:num/raw <- get *e, cursor-column:offset 228 ] @@ -306,8 +306,8 @@ if ('onhashchange' in window) { 244 # initialize editor with two long-ish but non-wrapping lines 245 s:text <- new [abc def 246 ghi jkl] - 247 e:&:editor <- new-editor s, 0/left, 10/right - 248 editor-render screen, e + 247 e:&:editor <- new-editor s, 0/left, 10/right + 248 editor-render screen, e 249 $clear-trace 250 # position the cursor at the start of the second and hit backspace 251 assume-console [ @@ -315,7 +315,7 @@ if ('onhashchange' in window) { 253 ¦ press backspace 254 ] 255 run [ - 256 ¦ editor-event-loop screen, console, e + 256 ¦ editor-event-loop screen, console, e 257 ] 258 # resulting single line should wrap correctly 259 screen-should-contain [ @@ -331,8 +331,8 @@ if ('onhashchange' in window) { 269 local-scope 270 assume-screen 10/width, 5/height 271 # initialize editor in part of the screen with a long line - 272 e:&:editor <- new-editor [abc def ghij], 0/left, 8/right - 273 editor-render screen, e + 272 e:&:editor <- new-editor [abc def ghij], 0/left, 8/right + 273 editor-render screen, e 274 # confirm that it wraps 275 screen-should-contain [ 276 ¦ . . @@ -347,7 +347,7 @@ if ('onhashchange' in window) { 285 ¦ press backspace 286 ] 287 run [ - 288 ¦ editor-event-loop screen, console, e + 288 ¦ editor-event-loop screen, console, e 289 ] 290 # resulting single line should wrap correctly and not overflow its bounds 291 screen-should-contain [ @@ -364,14 +364,14 @@ if ('onhashchange' in window) { 302 scenario editor-handles-delete-key [ 303 local-scope 304 assume-screen 10/width, 5/height - 305 e:&:editor <- new-editor [abc], 0/left, 10/right - 306 editor-render screen, e + 305 e:&:editor <- new-editor [abc], 0/left, 10/right + 306 editor-render screen, e 307 $clear-trace 308 assume-console [ 309 ¦ press delete 310 ] 311 run [ - 312 ¦ editor-event-loop screen, console, e + 312 ¦ editor-event-loop screen, console, e 313 ] 314 screen-should-contain [ 315 ¦ . . @@ -385,7 +385,7 @@ if ('onhashchange' in window) { 323 ¦ press delete 324 ] 325 run [ - 326 ¦ editor-event-loop screen, console, e + 326 ¦ editor-event-loop screen, console, e 327 ] 328 screen-should-contain [ 329 ¦ . . @@ -396,7 +396,7 @@ if ('onhashchange' in window) { 334 check-trace-count-for-label 2, [print-character] # new length to overwrite 335 ] 336 - 337 after <handle-special-key> [ + 337 after <handle-special-key> [ 338 { 339 ¦ delete-next-character?:bool <- equal k, 65522/delete 340 ¦ break-unless delete-next-character? @@ -422,12 +422,12 @@ if ('onhashchange' in window) { 360 curr:&:duplex-list:char <- next before-cursor # refresh after remove above 361 cursor-row:num <- get *editor, cursor-row:offset 362 cursor-column:num <- get *editor, cursor-column:offset - 363 screen <- move-cursor screen, cursor-row, cursor-column + 363 screen <- move-cursor screen, cursor-row, cursor-column 364 curr-column:num <- copy cursor-column - 365 screen-width:num <- screen-width screen + 365 screen-width:num <- screen-width screen 366 { 367 ¦ # hit right margin? give up and let caller render - 368 ¦ at-right?:bool <- greater-or-equal curr-column, screen-width + 368 ¦ at-right?:bool <- greater-or-equal curr-column, screen-width 369 ¦ return-if at-right?, 1/go-render 370 ¦ break-unless curr 371 ¦ # newline? done. @@ -450,15 +450,15 @@ if ('onhashchange' in window) { 388 scenario editor-moves-cursor-right-with-key [ 389 local-scope 390 assume-screen 10/width, 5/height - 391 e:&:editor <- new-editor [abc], 0/left, 10/right - 392 editor-render screen, e + 391 e:&:editor <- new-editor [abc], 0/left, 10/right + 392 editor-render screen, e 393 $clear-trace 394 assume-console [ 395 ¦ press right-arrow 396 ¦ type [0] 397 ] 398 run [ - 399 ¦ editor-event-loop screen, console, e + 399 ¦ editor-event-loop screen, console, e 400 ] 401 screen-should-contain [ 402 ¦ . . @@ -469,7 +469,7 @@ if ('onhashchange' in window) { 407 check-trace-count-for-label 3, [print-character] # 0 and following characters 408 ] 409 - 410 after <handle-special-key> [ + 410 after <handle-special-key> [ 411 { 412 ¦ move-to-next-character?:bool <- equal k, 65514/right-arrow 413 ¦ break-unless move-to-next-character? @@ -480,15 +480,15 @@ if ('onhashchange' in window) { 418 ¦ <move-cursor-begin> 419 ¦ before-cursor <- copy next-cursor 420 ¦ *editor <- put *editor, before-cursor:offset, before-cursor - 421 ¦ go-render?:bool <- move-cursor-coordinates-right editor, screen-height - 422 ¦ screen <- move-cursor screen, cursor-row, cursor-column + 421 ¦ go-render?:bool <- move-cursor-coordinates-right editor, screen-height + 422 ¦ screen <- move-cursor screen, cursor-row, cursor-column 423 ¦ undo-coalesce-tag:num <- copy 2/right-arrow 424 ¦ <move-cursor-end> 425 ¦ return 426 } 427 ] 428 - 429 def move-cursor-coordinates-right editor:&:editor, screen-height:num -> go-render?:bool, editor:&:editor [ + 429 def move-cursor-coordinates-right editor:&:editor, screen-height:num -> go-render?:bool, editor:&:editor [ 430 local-scope 431 load-ingredients 432 before-cursor:&:duplex-list:char <- get *editor before-cursor:offset @@ -505,7 +505,7 @@ if ('onhashchange' in window) { 443 ¦ *editor <- put *editor, cursor-row:offset, cursor-row 444 ¦ cursor-column <- copy left 445 ¦ *editor <- put *editor, cursor-column:offset, cursor-column - 446 ¦ below-screen?:bool <- greater-or-equal cursor-row, screen-height # must be equal + 446 ¦ below-screen?:bool <- greater-or-equal cursor-row, screen-height # must be equal 447 ¦ return-unless below-screen?, 0/don't-render 448 ¦ <scroll-down> 449 ¦ cursor-row <- subtract cursor-row, 1 # bring back into screen range @@ -528,7 +528,7 @@ if ('onhashchange' in window) { 466 ¦ *editor <- put *editor, cursor-row:offset, cursor-row 467 ¦ cursor-column <- copy left 468 ¦ *editor <- put *editor, cursor-column:offset, cursor-column - 469 ¦ below-screen?:bool <- greater-or-equal cursor-row, screen-height # must be equal + 469 ¦ below-screen?:bool <- greater-or-equal cursor-row, screen-height # must be equal 470 ¦ return-unless below-screen?, 0/no-more-render 471 ¦ <scroll-down> 472 ¦ cursor-row <- subtract cursor-row, 1 # bring back into screen range @@ -546,8 +546,8 @@ if ('onhashchange' in window) { 484 assume-screen 10/width, 5/height 485 s:text <- new [abc 486 d] - 487 e:&:editor <- new-editor s, 0/left, 10/right - 488 editor-render screen, e + 487 e:&:editor <- new-editor s, 0/left, 10/right + 488 editor-render screen, e 489 $clear-trace 490 # type right-arrow a few times to get to start of second line 491 assume-console [ @@ -557,7 +557,7 @@ if ('onhashchange' in window) { 495 ¦ press right-arrow # next line 496 ] 497 run [ - 498 ¦ editor-event-loop screen, console, e + 498 ¦ editor-event-loop screen, console, e 499 ] 500 check-trace-count-for-label 0, [print-character] 501 # type something and ensure it goes where it should @@ -565,7 +565,7 @@ if ('onhashchange' in window) { 503 ¦ type [0] 504 ] 505 run [ - 506 ¦ editor-event-loop screen, console, e + 506 ¦ editor-event-loop screen, console, e 507 ] 508 screen-should-contain [ 509 ¦ . . @@ -582,8 +582,8 @@ if ('onhashchange' in window) { 520 assume-screen 10/width, 5/height 521 s:text <- new [abc 522 d] - 523 e:&:editor <- new-editor s, 1/left, 10/right - 524 editor-render screen, e + 523 e:&:editor <- new-editor s, 1/left, 10/right + 524 editor-render screen, e 525 assume-console [ 526 ¦ press right-arrow 527 ¦ press right-arrow @@ -592,7 +592,7 @@ if ('onhashchange' in window) { 530 ¦ type [0] 531 ] 532 run [ - 533 ¦ editor-event-loop screen, console, e + 533 ¦ editor-event-loop screen, console, e 534 ] 535 screen-should-contain [ 536 ¦ . . @@ -606,15 +606,15 @@ if ('onhashchange' in window) { 544 scenario editor-moves-cursor-to-next-wrapped-line-with-right-arrow [ 545 local-scope 546 assume-screen 10/width, 5/height - 547 e:&:editor <- new-editor [abcdef], 0/left, 5/right - 548 editor-render screen, e + 547 e:&:editor <- new-editor [abcdef], 0/left, 5/right + 548 editor-render screen, e 549 $clear-trace 550 assume-console [ 551 ¦ left-click 1, 3 552 ¦ press right-arrow 553 ] 554 run [ - 555 ¦ editor-event-loop screen, console, e + 555 ¦ editor-event-loop screen, console, e 556 ¦ 3:num/raw <- get *e, cursor-row:offset 557 ¦ 4:num/raw <- get *e, cursor-column:offset 558 ] @@ -636,8 +636,8 @@ if ('onhashchange' in window) { 574 local-scope 575 assume-screen 10/width, 5/height 576 # line just barely wrapping - 577 e:&:editor <- new-editor [abcde], 0/left, 5/right - 578 editor-render screen, e + 577 e:&:editor <- new-editor [abcde], 0/left, 5/right + 578 editor-render screen, e 579 $clear-trace 580 # position cursor at last character before wrap and hit right-arrow 581 assume-console [ @@ -645,7 +645,7 @@ if ('onhashchange' in window) { 583 ¦ press right-arrow 584 ] 585 run [ - 586 ¦ editor-event-loop screen, console, e + 586 ¦ editor-event-loop screen, console, e 587 ¦ 3:num/raw <- get *e, cursor-row:offset 588 ¦ 4:num/raw <- get *e, cursor-column:offset 589 ] @@ -658,7 +658,7 @@ if ('onhashchange' in window) { 596 ¦ press right-arrow 597 ] 598 run [ - 599 ¦ editor-event-loop screen, console, e + 599 ¦ editor-event-loop screen, console, e 600 ¦ 3:num/raw <- get *e, cursor-row:offset 601 ¦ 4:num/raw <- get *e, cursor-column:offset 602 ] @@ -672,15 +672,15 @@ if ('onhashchange' in window) { 610 scenario editor-moves-cursor-to-next-wrapped-line-with-right-arrow-3 [ 611 local-scope 612 assume-screen 10/width, 5/height - 613 e:&:editor <- new-editor [abcdef], 1/left, 6/right - 614 editor-render screen, e + 613 e:&:editor <- new-editor [abcdef], 1/left, 6/right + 614 editor-render screen, e 615 $clear-trace 616 assume-console [ 617 ¦ left-click 1, 4 618 ¦ press right-arrow 619 ] 620 run [ - 621 ¦ editor-event-loop screen, console, e + 621 ¦ editor-event-loop screen, console, e 622 ¦ 3:num/raw <- get *e, cursor-row:offset 623 ¦ 4:num/raw <- get *e, cursor-column:offset 624 ] @@ -703,8 +703,8 @@ if ('onhashchange' in window) { 641 assume-screen 10/width, 5/height 642 s:text <- new [abc 643 d] - 644 e:&:editor <- new-editor s, 0/left, 10/right - 645 editor-render screen, e + 644 e:&:editor <- new-editor s, 0/left, 10/right + 645 editor-render screen, e 646 $clear-trace 647 # move to end of line, press right-arrow, type a character 648 assume-console [ @@ -713,7 +713,7 @@ if ('onhashchange' in window) { 651 ¦ type [0] 652 ] 653 run [ - 654 ¦ editor-event-loop screen, console, e + 654 ¦ editor-event-loop screen, console, e 655 ] 656 # new character should be in next line 657 screen-should-contain [ @@ -733,8 +733,8 @@ if ('onhashchange' in window) { 671 scenario editor-moves-cursor-left-with-key [ 672 local-scope 673 assume-screen 10/width, 5/height - 674 e:&:editor <- new-editor [abc], 0/left, 10/right - 675 editor-render screen, e + 674 e:&:editor <- new-editor [abc], 0/left, 10/right + 675 editor-render screen, e 676 $clear-trace 677 assume-console [ 678 ¦ left-click 1, 2 @@ -742,7 +742,7 @@ if ('onhashchange' in window) { 680 ¦ type [0] 681 ] 682 run [ - 683 ¦ editor-event-loop screen, console, e + 683 ¦ editor-event-loop screen, console, e 684 ] 685 screen-should-contain [ 686 ¦ . . @@ -753,7 +753,7 @@ if ('onhashchange' in window) { 691 check-trace-count-for-label 3, [print-character] 692 ] 693 - 694 after <handle-special-key> [ + 694 after <handle-special-key> [ 695 { 696 ¦ move-to-previous-character?:bool <- equal k, 65515/left-arrow 697 ¦ break-unless move-to-previous-character? @@ -777,8 +777,8 @@ if ('onhashchange' in window) { 715 # initialize editor with two lines 716 s:text <- new [abc 717 d] - 718 e:&:editor <- new-editor s, 0/left, 10/right - 719 editor-render screen, e + 718 e:&:editor <- new-editor s, 0/left, 10/right + 719 editor-render screen, e 720 $clear-trace 721 # position cursor at start of second line (so there's no previous newline) 722 assume-console [ @@ -786,7 +786,7 @@ if ('onhashchange' in window) { 724 ¦ press left-arrow 725 ] 726 run [ - 727 ¦ editor-event-loop screen, console, e + 727 ¦ editor-event-loop screen, console, e 728 ¦ 3:num/raw <- get *e, cursor-row:offset 729 ¦ 4:num/raw <- get *e, cursor-column:offset 730 ] @@ -804,8 +804,8 @@ if ('onhashchange' in window) { 742 s:text <- new [abc 743 def 744 g] - 745 e:&:editor <- new-editor s:text, 0/left, 10/right - 746 editor-render screen, e + 745 e:&:editor <- new-editor s:text, 0/left, 10/right + 746 editor-render screen, e 747 $clear-trace 748 # position cursor further down (so there's a newline before the character at 749 # the cursor) @@ -815,7 +815,7 @@ if ('onhashchange' in window) { 753 ¦ type [0] 754 ] 755 run [ - 756 ¦ editor-event-loop screen, console, e + 756 ¦ editor-event-loop screen, console, e 757 ] 758 screen-should-contain [ 759 ¦ . . @@ -833,8 +833,8 @@ if ('onhashchange' in window) { 771 s:text <- new [abc 772 def 773 g] - 774 e:&:editor <- new-editor s, 0/left, 10/right - 775 editor-render screen, e + 774 e:&:editor <- new-editor s, 0/left, 10/right + 775 editor-render screen, e 776 $clear-trace 777 # position cursor at start of text, press left-arrow, then type a character 778 assume-console [ @@ -843,7 +843,7 @@ if ('onhashchange' in window) { 781 ¦ type [0] 782 ] 783 run [ - 784 ¦ editor-event-loop screen, console, e + 784 ¦ editor-event-loop screen, console, e 785 ] 786 # left-arrow should have had no effect 787 screen-should-contain [ @@ -863,8 +863,8 @@ if ('onhashchange' in window) { 801 s:text <- new [abc 802 803 d] - 804 e:&:editor <- new-editor s, 0/left, 10/right - 805 editor-render screen, e:&:editor + 804 e:&:editor <- new-editor s, 0/left, 10/right + 805 editor-render screen, e:&:editor 806 $clear-trace 807 # position cursor right after empty line 808 assume-console [ @@ -873,7 +873,7 @@ if ('onhashchange' in window) { 811 ¦ type [0] 812 ] 813 run [ - 814 ¦ editor-event-loop screen, console, e + 814 ¦ editor-event-loop screen, console, e 815 ] 816 screen-should-contain [ 817 ¦ . . @@ -889,8 +889,8 @@ if ('onhashchange' in window) { 827 local-scope 828 assume-screen 10/width, 5/height 829 # initialize editor with a wrapping line - 830 e:&:editor <- new-editor [abcdef], 0/left, 5/right - 831 editor-render screen, e + 830 e:&:editor <- new-editor [abcdef], 0/left, 5/right + 831 editor-render screen, e 832 $clear-trace 833 screen-should-contain [ 834 ¦ . . @@ -905,7 +905,7 @@ if ('onhashchange' in window) { 843 ¦ press left-arrow 844 ] 845 run [ - 846 ¦ editor-event-loop screen, console, e + 846 ¦ editor-event-loop screen, console, e 847 ¦ 3:num/raw <- get *e, cursor-row:offset 848 ¦ 4:num/raw <- get *e, cursor-column:offset 849 ] @@ -922,8 +922,8 @@ if ('onhashchange' in window) { 860 # initialize editor with a wrapping line followed by a second line 861 s:text <- new [abcdef 862 g] - 863 e:&:editor <- new-editor s, 0/left, 5/right - 864 editor-render screen, e + 863 e:&:editor <- new-editor s, 0/left, 5/right + 864 editor-render screen, e 865 $clear-trace 866 screen-should-contain [ 867 ¦ . . @@ -938,7 +938,7 @@ if ('onhashchange' in window) { 876 ¦ press left-arrow 877 ] 878 run [ - 879 ¦ editor-event-loop screen, console, e + 879 ¦ editor-event-loop screen, console, e 880 ¦ 3:num/raw <- get *e, cursor-row:offset 881 ¦ 4:num/raw <- get *e, cursor-column:offset 882 ] @@ -955,8 +955,8 @@ if ('onhashchange' in window) { 893 # initialize editor with a line on the verge of wrapping, followed by a second line 894 s:text <- new [abcd 895 e] - 896 e:&:editor <- new-editor s, 0/left, 5/right - 897 editor-render screen, e + 896 e:&:editor <- new-editor s, 0/left, 5/right + 897 editor-render screen, e 898 $clear-trace 899 screen-should-contain [ 900 ¦ . . @@ -971,7 +971,7 @@ if ('onhashchange' in window) { 909 ¦ press left-arrow 910 ] 911 run [ - 912 ¦ editor-event-loop screen, console, e + 912 ¦ editor-event-loop screen, console, e 913 ¦ 3:num/raw <- get *e, cursor-row:offset 914 ¦ 4:num/raw <- get *e, cursor-column:offset 915 ] @@ -991,15 +991,15 @@ if ('onhashchange' in window) { 929 assume-screen 10/width, 5/height 930 s:text <- new [abc 931 def] - 932 e:&:editor <- new-editor s, 0/left, 10/right - 933 editor-render screen, e + 932 e:&:editor <- new-editor s, 0/left, 10/right + 933 editor-render screen, e 934 $clear-trace 935 assume-console [ 936 ¦ left-click 2, 1 937 ¦ press up-arrow 938 ] 939 run [ - 940 ¦ editor-event-loop screen, console, e + 940 ¦ editor-event-loop screen, console, e 941 ¦ 3:num/raw <- get *e, cursor-row:offset 942 ¦ 4:num/raw <- get *e, cursor-column:offset 943 ] @@ -1012,7 +1012,7 @@ if ('onhashchange' in window) { 950 ¦ type [0] 951 ] 952 run [ - 953 ¦ editor-event-loop screen, console, e + 953 ¦ editor-event-loop screen, console, e 954 ] 955 screen-should-contain [ 956 ¦ . . @@ -1023,7 +1023,7 @@ if ('onhashchange' in window) { 961 ] 962 ] 963 - 964 after <handle-special-key> [ + 964 after <handle-special-key> [ 965 { 966 ¦ move-to-previous-line?:bool <- equal k, 65517/up-arrow 967 ¦ break-unless move-to-previous-line? @@ -1105,15 +1105,15 @@ if ('onhashchange' in window) { 1043 assume-screen 10/width, 5/height 1044 s:text <- new [ab 1045 def] -1046 e:&:editor <- new-editor s, 0/left, 10/right -1047 editor-render screen, e +1046 e:&:editor <- new-editor s, 0/left, 10/right +1047 editor-render screen, e 1048 $clear-trace 1049 assume-console [ 1050 ¦ left-click 2, 3 1051 ¦ press up-arrow 1052 ] 1053 run [ -1054 ¦ editor-event-loop screen, console, e +1054 ¦ editor-event-loop screen, console, e 1055 ¦ 3:num/raw <- get *e, cursor-row:offset 1056 ¦ 4:num/raw <- get *e, cursor-column:offset 1057 ] @@ -1126,7 +1126,7 @@ if ('onhashchange' in window) { 1064 ¦ type [0] 1065 ] 1066 run [ -1067 ¦ editor-event-loop screen, console, e +1067 ¦ editor-event-loop screen, console, e 1068 ] 1069 screen-should-contain [ 1070 ¦ . . @@ -1142,15 +1142,15 @@ if ('onhashchange' in window) { 1080 assume-screen 10/width, 5/height 1081 s:text <- new [ 1082 def] -1083 e:&:editor <- new-editor s, 0/left, 10/right -1084 editor-render screen, e +1083 e:&:editor <- new-editor s, 0/left, 10/right +1084 editor-render screen, e 1085 $clear-trace 1086 assume-console [ 1087 ¦ left-click 2, 3 1088 ¦ press up-arrow 1089 ] 1090 run [ -1091 ¦ editor-event-loop screen, console, e +1091 ¦ editor-event-loop screen, console, e 1092 ¦ 3:num/raw <- get *e, cursor-row:offset 1093 ¦ 4:num/raw <- get *e, cursor-column:offset 1094 ] @@ -1163,7 +1163,7 @@ if ('onhashchange' in window) { 1101 ¦ type [0] 1102 ] 1103 run [ -1104 ¦ editor-event-loop screen, console, e +1104 ¦ editor-event-loop screen, console, e 1105 ] 1106 screen-should-contain [ 1107 ¦ . . @@ -1181,8 +1181,8 @@ if ('onhashchange' in window) { 1119 s:text <- new [abc 1120 def 1121 ghi] -1122 e:&:editor <- new-editor s, 0/left, 10/right -1123 editor-render screen, e +1122 e:&:editor <- new-editor s, 0/left, 10/right +1123 editor-render screen, e 1124 $clear-trace 1125 # click on the third line and hit up-arrow, so you end up just after a newline 1126 assume-console [ @@ -1190,7 +1190,7 @@ if ('onhashchange' in window) { 1128 ¦ press up-arrow 1129 ] 1130 run [ -1131 ¦ editor-event-loop screen, console, e +1131 ¦ editor-event-loop screen, console, e 1132 ¦ 3:num/raw <- get *e, cursor-row:offset 1133 ¦ 4:num/raw <- get *e, cursor-column:offset 1134 ] @@ -1203,7 +1203,7 @@ if ('onhashchange' in window) { 1141 ¦ type [0] 1142 ] 1143 run [ -1144 ¦ editor-event-loop screen, console, e +1144 ¦ editor-event-loop screen, console, e 1145 ] 1146 screen-should-contain [ 1147 ¦ . . @@ -1221,15 +1221,15 @@ if ('onhashchange' in window) { 1159 assume-screen 10/width, 5/height 1160 s:text <- new [abc 1161 def] -1162 e:&:editor <- new-editor s, 0/left, 10/right -1163 editor-render screen, e +1162 e:&:editor <- new-editor s, 0/left, 10/right +1163 editor-render screen, e 1164 $clear-trace 1165 # cursor starts out at (1, 0) 1166 assume-console [ 1167 ¦ press down-arrow 1168 ] 1169 run [ -1170 ¦ editor-event-loop screen, console, e +1170 ¦ editor-event-loop screen, console, e 1171 ¦ 3:num/raw <- get *e, cursor-row:offset 1172 ¦ 4:num/raw <- get *e, cursor-column:offset 1173 ] @@ -1243,7 +1243,7 @@ if ('onhashchange' in window) { 1181 ¦ type [0] 1182 ] 1183 run [ -1184 ¦ editor-event-loop screen, console, e +1184 ¦ editor-event-loop screen, console, e 1185 ] 1186 screen-should-contain [ 1187 ¦ . . @@ -1254,19 +1254,19 @@ if ('onhashchange' in window) { 1192 ] 1193 ] 1194 -1195 after <handle-special-key> [ +1195 after <handle-special-key> [ 1196 { 1197 ¦ move-to-next-line?:bool <- equal k, 65516/down-arrow 1198 ¦ break-unless move-to-next-line? 1199 ¦ <move-cursor-begin> -1200 ¦ go-render? <- move-to-next-line editor, screen-height +1200 ¦ go-render? <- move-to-next-line editor, screen-height 1201 ¦ undo-coalesce-tag:num <- copy 4/down-arrow 1202 ¦ <move-cursor-end> 1203 ¦ return 1204 } 1205 ] 1206 -1207 def move-to-next-line editor:&:editor, screen-height:num -> go-render?:bool, editor:&:editor [ +1207 def move-to-next-line editor:&:editor, screen-height:num -> go-render?:bool, editor:&:editor [ 1208 local-scope 1209 load-ingredients 1210 cursor-row:num <- get *editor, cursor-row:offset @@ -1274,7 +1274,7 @@ if ('onhashchange' in window) { 1212 before-cursor:&:duplex-list:char <- get *editor, before-cursor:offset 1213 left:num <- get *editor, left:offset 1214 right:num <- get *editor, right:offset -1215 last-line:num <- subtract screen-height, 1 +1215 last-line:num <- subtract screen-height, 1 1216 already-at-bottom?:bool <- greater-or-equal cursor-row, last-line 1217 { 1218 ¦ # if cursor not at bottom, move it @@ -1325,15 +1325,15 @@ if ('onhashchange' in window) { 1263 assume-screen 10/width, 5/height 1264 s:text <- new [abc 1265 de] -1266 e:&:editor <- new-editor s, 0/left, 10/right -1267 editor-render screen, e +1266 e:&:editor <- new-editor s, 0/left, 10/right +1267 editor-render screen, e 1268 $clear-trace 1269 assume-console [ 1270 ¦ left-click 1, 3 1271 ¦ press down-arrow 1272 ] 1273 run [ -1274 ¦ editor-event-loop screen, console, e +1274 ¦ editor-event-loop screen, console, e 1275 ¦ 3:num/raw <- get *e, cursor-row:offset 1276 ¦ 4:num/raw <- get *e, cursor-column:offset 1277 ] @@ -1346,7 +1346,7 @@ if ('onhashchange' in window) { 1284 ¦ type [0] 1285 ] 1286 run [ -1287 ¦ editor-event-loop screen, console, e +1287 ¦ editor-event-loop screen, console, e 1288 ] 1289 screen-should-contain [ 1290 ¦ . . @@ -1364,8 +1364,8 @@ if ('onhashchange' in window) { 1302 assume-screen 10/width, 5/height 1303 s:text <- new [123 1304 456] -1305 e:&:editor <- new-editor s, 0/left, 10/right -1306 editor-render screen, e +1305 e:&:editor <- new-editor s, 0/left, 10/right +1306 editor-render screen, e 1307 $clear-trace 1308 # start on second line, press ctrl-a 1309 assume-console [ @@ -1373,7 +1373,7 @@ if ('onhashchange' in window) { 1311 ¦ press ctrl-a 1312 ] 1313 run [ -1314 ¦ editor-event-loop screen, console, e +1314 ¦ editor-event-loop screen, console, e 1315 ¦ 4:num/raw <- get *e, cursor-row:offset 1316 ¦ 5:num/raw <- get *e, cursor-column:offset 1317 ] @@ -1385,7 +1385,7 @@ if ('onhashchange' in window) { 1323 check-trace-count-for-label 0, [print-character] 1324 ] 1325 -1326 after <handle-special-character> [ +1326 after <handle-special-character> [ 1327 { 1328 ¦ move-to-start-of-line?:bool <- equal c, 1/ctrl-a 1329 ¦ break-unless move-to-start-of-line? @@ -1397,7 +1397,7 @@ if ('onhashchange' in window) { 1335 } 1336 ] 1337 -1338 after <handle-special-key> [ +1338 after <handle-special-key> [ 1339 { 1340 ¦ move-to-start-of-line?:bool <- equal k, 65521/home 1341 ¦ break-unless move-to-start-of-line? @@ -1438,8 +1438,8 @@ if ('onhashchange' in window) { 1376 assume-screen 10/width, 5/height 1377 s:text <- new [123 1378 456] -1379 e:&:editor <- new-editor s, 0/left, 10/right -1380 editor-render screen, e +1379 e:&:editor <- new-editor s, 0/left, 10/right +1380 editor-render screen, e 1381 $clear-trace 1382 # start on first line (no newline before), press ctrl-a 1383 assume-console [ @@ -1447,7 +1447,7 @@ if ('onhashchange' in window) { 1385 ¦ press ctrl-a 1386 ] 1387 run [ -1388 ¦ editor-event-loop screen, console, e +1388 ¦ editor-event-loop screen, console, e 1389 ¦ 4:num/raw <- get *e, cursor-row:offset 1390 ¦ 5:num/raw <- get *e, cursor-column:offset 1391 ] @@ -1464,7 +1464,7 @@ if ('onhashchange' in window) { 1402 assume-screen 10/width, 5/height 1403 s:text <- new [123 1404 456] -1405 e:&:editor <- new-editor s, 0/left, 10/right +1405 e:&:editor <- new-editor s, 0/left, 10/right 1406 $clear-trace 1407 # start on second line, press 'home' 1408 assume-console [ @@ -1472,7 +1472,7 @@ if ('onhashchange' in window) { 1410 ¦ press home 1411 ] 1412 run [ -1413 ¦ editor-event-loop screen, console, e +1413 ¦ editor-event-loop screen, console, e 1414 ¦ 3:num/raw <- get *e, cursor-row:offset 1415 ¦ 4:num/raw <- get *e, cursor-column:offset 1416 ] @@ -1489,8 +1489,8 @@ if ('onhashchange' in window) { 1427 assume-screen 10/width, 5/height 1428 s:text <- new [123 1429 456] -1430 e:&:editor <- new-editor s, 0/left, 10/right -1431 editor-render screen, e +1430 e:&:editor <- new-editor s, 0/left, 10/right +1431 editor-render screen, e 1432 $clear-trace 1433 # start on first line (no newline before), press 'home' 1434 assume-console [ @@ -1498,7 +1498,7 @@ if ('onhashchange' in window) { 1436 ¦ press home 1437 ] 1438 run [ -1439 ¦ editor-event-loop screen, console, e +1439 ¦ editor-event-loop screen, console, e 1440 ¦ 3:num/raw <- get *e, cursor-row:offset 1441 ¦ 4:num/raw <- get *e, cursor-column:offset 1442 ] @@ -1517,8 +1517,8 @@ if ('onhashchange' in window) { 1455 assume-screen 10/width, 5/height 1456 s:text <- new [123 1457 456] -1458 e:&:editor <- new-editor s, 0/left, 10/right -1459 editor-render screen, e +1458 e:&:editor <- new-editor s, 0/left, 10/right +1459 editor-render screen, e 1460 $clear-trace 1461 # start on first line, press ctrl-e 1462 assume-console [ @@ -1526,7 +1526,7 @@ if ('onhashchange' in window) { 1464 ¦ press ctrl-e 1465 ] 1466 run [ -1467 ¦ editor-event-loop screen, console, e +1467 ¦ editor-event-loop screen, console, e 1468 ¦ 4:num/raw <- get *e, cursor-row:offset 1469 ¦ 5:num/raw <- get *e, cursor-column:offset 1470 ] @@ -1541,7 +1541,7 @@ if ('onhashchange' in window) { 1479 ¦ type [z] 1480 ] 1481 run [ -1482 ¦ editor-event-loop screen, console, e +1482 ¦ editor-event-loop screen, console, e 1483 ¦ 4:num/raw <- get *e, cursor-row:offset 1484 ¦ 5:num/raw <- get *e, cursor-column:offset 1485 ] @@ -1559,7 +1559,7 @@ if ('onhashchange' in window) { 1497 check-trace-count-for-label 1, [print-character] 1498 ] 1499 -1500 after <handle-special-character> [ +1500 after <handle-special-character> [ 1501 { 1502 ¦ move-to-end-of-line?:bool <- equal c, 5/ctrl-e 1503 ¦ break-unless move-to-end-of-line? @@ -1571,7 +1571,7 @@ if ('onhashchange' in window) { 1509 } 1510 ] 1511 -1512 after <handle-special-key> [ +1512 after <handle-special-key> [ 1513 { 1514 ¦ move-to-end-of-line?:bool <- equal k, 65520/end 1515 ¦ break-unless move-to-end-of-line? @@ -1608,8 +1608,8 @@ if ('onhashchange' in window) { 1546 assume-screen 10/width, 5/height 1547 s:text <- new [123 1548 456] -1549 e:&:editor <- new-editor s, 0/left, 10/right -1550 editor-render screen, e +1549 e:&:editor <- new-editor s, 0/left, 10/right +1550 editor-render screen, e 1551 $clear-trace 1552 # start on second line (no newline after), press ctrl-e 1553 assume-console [ @@ -1617,7 +1617,7 @@ if ('onhashchange' in window) { 1555 ¦ press ctrl-e 1556 ] 1557 run [ -1558 ¦ editor-event-loop screen, console, e +1558 ¦ editor-event-loop screen, console, e 1559 ¦ 4:num/raw <- get *e, cursor-row:offset 1560 ¦ 5:num/raw <- get *e, cursor-column:offset 1561 ] @@ -1634,8 +1634,8 @@ if ('onhashchange' in window) { 1572 assume-screen 10/width, 5/height 1573 s:text <- new [123 1574 456] -1575 e:&:editor <- new-editor s, 0/left, 10/right -1576 editor-render screen, e +1575 e:&:editor <- new-editor s, 0/left, 10/right +1576 editor-render screen, e 1577 $clear-trace 1578 # start on first line, press 'end' 1579 assume-console [ @@ -1643,7 +1643,7 @@ if ('onhashchange' in window) { 1581 ¦ press end 1582 ] 1583 run [ -1584 ¦ editor-event-loop screen, console, e +1584 ¦ editor-event-loop screen, console, e 1585 ¦ 3:num/raw <- get *e, cursor-row:offset 1586 ¦ 4:num/raw <- get *e, cursor-column:offset 1587 ] @@ -1660,8 +1660,8 @@ if ('onhashchange' in window) { 1598 assume-screen 10/width, 5/height 1599 s:text <- new [123 1600 456] -1601 e:&:editor <- new-editor s, 0/left, 10/right -1602 editor-render screen, e +1601 e:&:editor <- new-editor s, 0/left, 10/right +1602 editor-render screen, e 1603 $clear-trace 1604 # start on second line (no newline after), press 'end' 1605 assume-console [ @@ -1669,7 +1669,7 @@ if ('onhashchange' in window) { 1607 ¦ press end 1608 ] 1609 run [ -1610 ¦ editor-event-loop screen, console, e +1610 ¦ editor-event-loop screen, console, e 1611 ¦ 3:num/raw <- get *e, cursor-row:offset 1612 ¦ 4:num/raw <- get *e, cursor-column:offset 1613 ] @@ -1688,14 +1688,14 @@ if ('onhashchange' in window) { 1626 assume-screen 10/width, 5/height 1627 s:text <- new [123 1628 456] -1629 e:&:editor <- new-editor s, 0/left, 10/right +1629 e:&:editor <- new-editor s, 0/left, 10/right 1630 # start on second line, press ctrl-u 1631 assume-console [ 1632 ¦ left-click 2, 2 1633 ¦ press ctrl-u 1634 ] 1635 run [ -1636 ¦ editor-event-loop screen, console, e +1636 ¦ editor-event-loop screen, console, e 1637 ] 1638 # cursor deletes to start of line 1639 screen-should-contain [ @@ -1707,7 +1707,7 @@ if ('onhashchange' in window) { 1645 ] 1646 ] 1647 -1648 after <handle-special-character> [ +1648 after <handle-special-character> [ 1649 { 1650 ¦ delete-to-start-of-line?:bool <- equal c, 21/ctrl-u 1651 ¦ break-unless delete-to-start-of-line? @@ -1751,14 +1751,14 @@ if ('onhashchange' in window) { 1689 assume-screen 10/width, 5/height 1690 s:text <- new [123 1691 456] -1692 e:&:editor <- new-editor s, 0/left, 10/right +1692 e:&:editor <- new-editor s, 0/left, 10/right 1693 # start on first line (no newline before), press ctrl-u 1694 assume-console [ 1695 ¦ left-click 1, 2 1696 ¦ press ctrl-u 1697 ] 1698 run [ -1699 ¦ editor-event-loop screen, console, e +1699 ¦ editor-event-loop screen, console, e 1700 ] 1701 # cursor deletes to start of line 1702 screen-should-contain [ @@ -1775,14 +1775,14 @@ if ('onhashchange' in window) { 1713 assume-screen 10/width, 5/height 1714 s:text <- new [123 1715 456] -1716 e:&:editor <- new-editor s, 0/left, 10/right +1716 e:&:editor <- new-editor s, 0/left, 10/right 1717 # start past end of line, press ctrl-u 1718 assume-console [ 1719 ¦ left-click 1, 3 1720 ¦ press ctrl-u 1721 ] 1722 run [ -1723 ¦ editor-event-loop screen, console, e +1723 ¦ editor-event-loop screen, console, e 1724 ] 1725 # cursor deletes to start of line 1726 screen-should-contain [ @@ -1799,14 +1799,14 @@ if ('onhashchange' in window) { 1737 assume-screen 10/width, 5/height 1738 s:text <- new [123 1739 456] -1740 e:&:editor <- new-editor s, 0/left, 10/right +1740 e:&:editor <- new-editor s, 0/left, 10/right 1741 # start past end of final line, press ctrl-u 1742 assume-console [ 1743 ¦ left-click 2, 3 1744 ¦ press ctrl-u 1745 ] 1746 run [ -1747 ¦ editor-event-loop screen, console, e +1747 ¦ editor-event-loop screen, console, e 1748 ] 1749 # cursor deletes to start of line 1750 screen-should-contain [ @@ -1825,14 +1825,14 @@ if ('onhashchange' in window) { 1763 assume-screen 10/width, 5/height 1764 s:text <- new [123 1765 456] -1766 e:&:editor <- new-editor s, 0/left, 10/right +1766 e:&:editor <- new-editor s, 0/left, 10/right 1767 # start on first line, press ctrl-k 1768 assume-console [ 1769 ¦ left-click 1, 1 1770 ¦ press ctrl-k 1771 ] 1772 run [ -1773 ¦ editor-event-loop screen, console, e +1773 ¦ editor-event-loop screen, console, e 1774 ] 1775 # cursor deletes to end of line 1776 screen-should-contain [ @@ -1844,7 +1844,7 @@ if ('onhashchange' in window) { 1782 ] 1783 ] 1784 -1785 after <handle-special-character> [ +1785 after <handle-special-character> [ 1786 { 1787 ¦ delete-to-end-of-line?:bool <- equal c, 11/ctrl-k 1788 ¦ break-unless delete-to-end-of-line? @@ -1880,14 +1880,14 @@ if ('onhashchange' in window) { 1818 assume-screen 10/width, 5/height 1819 s:text <- new [123 1820 456] -1821 e:&:editor <- new-editor s, 0/left, 10/right +1821 e:&:editor <- new-editor s, 0/left, 10/right 1822 # start on second line (no newline after), press ctrl-k 1823 assume-console [ 1824 ¦ left-click 2, 1 1825 ¦ press ctrl-k 1826 ] 1827 run [ -1828 ¦ editor-event-loop screen, console, e +1828 ¦ editor-event-loop screen, console, e 1829 ] 1830 # cursor deletes to end of line 1831 screen-should-contain [ @@ -1904,14 +1904,14 @@ if ('onhashchange' in window) { 1842 assume-screen 10/width, 5/height 1843 s:text <- new [123 1844 456] -1845 e:&:editor <- new-editor s, 0/left, 10/right +1845 e:&:editor <- new-editor s, 0/left, 10/right 1846 # start at end of line 1847 assume-console [ 1848 ¦ left-click 1, 2 1849 ¦ press ctrl-k 1850 ] 1851 run [ -1852 ¦ editor-event-loop screen, console, e +1852 ¦ editor-event-loop screen, console, e 1853 ] 1854 # cursor deletes just last character 1855 screen-should-contain [ @@ -1928,14 +1928,14 @@ if ('onhashchange' in window) { 1866 assume-screen 10/width, 5/height 1867 s:text <- new [123 1868 456] -1869 e:&:editor <- new-editor s, 0/left, 10/right +1869 e:&:editor <- new-editor s, 0/left, 10/right 1870 # start past end of line 1871 assume-console [ 1872 ¦ left-click 1, 3 1873 ¦ press ctrl-k 1874 ] 1875 run [ -1876 ¦ editor-event-loop screen, console, e +1876 ¦ editor-event-loop screen, console, e 1877 ] 1878 # cursor deletes nothing 1879 screen-should-contain [ @@ -1952,14 +1952,14 @@ if ('onhashchange' in window) { 1890 assume-screen 10/width, 5/height 1891 s:text <- new [123 1892 456] -1893 e:&:editor <- new-editor s, 0/left, 10/right +1893 e:&:editor <- new-editor s, 0/left, 10/right 1894 # start at end of text 1895 assume-console [ 1896 ¦ left-click 2, 2 1897 ¦ press ctrl-k 1898 ] 1899 run [ -1900 ¦ editor-event-loop screen, console, e +1900 ¦ editor-event-loop screen, console, e 1901 ] 1902 # cursor deletes just the final character 1903 screen-should-contain [ @@ -1976,14 +1976,14 @@ if ('onhashchange' in window) { 1914 assume-screen 10/width, 5/height 1915 s:text <- new [123 1916 456] -1917 e:&:editor <- new-editor s, 0/left, 10/right +1917 e:&:editor <- new-editor s, 0/left, 10/right 1918 # start past end of text 1919 assume-console [ 1920 ¦ left-click 2, 3 1921 ¦ press ctrl-k 1922 ] 1923 run [ -1924 ¦ editor-event-loop screen, console, e +1924 ¦ editor-event-loop screen, console, e 1925 ] 1926 # cursor deletes nothing 1927 screen-should-contain [ @@ -2006,8 +2006,8 @@ if ('onhashchange' in window) { 1944 b 1945 c 1946 d] -1947 e:&:editor <- new-editor s, 0/left, 10/right -1948 editor-render screen, e +1947 e:&:editor <- new-editor s, 0/left, 10/right +1948 editor-render screen, e 1949 screen-should-contain [ 1950 ¦ . . 1951 ¦ .a . @@ -2020,7 +2020,7 @@ if ('onhashchange' in window) { 1958 ¦ press down-arrow 1959 ] 1960 run [ -1961 ¦ editor-event-loop screen, console, e +1961 ¦ editor-event-loop screen, console, e 1962 ] 1963 # screen slides by one line 1964 screen-should-contain [ @@ -2085,8 +2085,8 @@ if ('onhashchange' in window) { 2023 g 2024 h 2025 i] -2026 e:&:editor <- new-editor s, 0/left, 5/right -2027 editor-render screen, e +2026 e:&:editor <- new-editor s, 0/left, 5/right +2027 editor-render screen, e 2028 screen-should-contain [ 2029 ¦ . . 2030 ¦ .abcd↩ . @@ -2099,7 +2099,7 @@ if ('onhashchange' in window) { 2037 ¦ press down-arrow 2038 ] 2039 run [ -2040 ¦ editor-event-loop screen, console, e +2040 ¦ editor-event-loop screen, console, e 2041 ] 2042 # screen shows partial wrapped line 2043 screen-should-contain [ @@ -2119,14 +2119,14 @@ if ('onhashchange' in window) { 2057 k 2058 l 2059 m] -2060 e:&:editor <- new-editor s, 0/left, 5/right +2060 e:&:editor <- new-editor s, 0/left, 5/right 2061 # position cursor at last line, then try to move further down 2062 assume-console [ 2063 ¦ left-click 3, 0 2064 ¦ press down-arrow 2065 ] 2066 run [ -2067 ¦ editor-event-loop screen, console, e +2067 ¦ editor-event-loop screen, console, e 2068 ] 2069 # screen shows partial wrapped line containing a wrap icon 2070 screen-should-contain [ @@ -2140,7 +2140,7 @@ if ('onhashchange' in window) { 2078 ¦ press down-arrow 2079 ] 2080 run [ -2081 ¦ editor-event-loop screen, console, e +2081 ¦ editor-event-loop screen, console, e 2082 ] 2083 # screen shows partial wrapped line 2084 screen-should-contain [ @@ -2159,14 +2159,14 @@ if ('onhashchange' in window) { 2097 s:text <- new [a 2098 b 2099 cdef] -2100 e:&:editor <- new-editor s, 0/left, 5/right +2100 e:&:editor <- new-editor s, 0/left, 5/right 2101 # position cursor at end, type a character 2102 assume-console [ 2103 ¦ left-click 3, 4 2104 ¦ type [g] 2105 ] 2106 run [ -2107 ¦ editor-event-loop screen, console, e +2107 ¦ editor-event-loop screen, console, e 2108 ¦ 3:num/raw <- get *e, cursor-row:offset 2109 ¦ 4:num/raw <- get *e, cursor-column:offset 2110 ] @@ -2190,14 +2190,14 @@ if ('onhashchange' in window) { 2128 s:text <- new [a 2129 b 2130 c] -2131 e:&:editor <- new-editor s, 0/left, 5/right +2131 e:&:editor <- new-editor s, 0/left, 5/right 2132 assume-console [ 2133 ¦ left-click 3, 4 2134 ¦ type [ 2135 ] 2136 ] 2137 run [ -2138 ¦ editor-event-loop screen, console, e +2138 ¦ editor-event-loop screen, console, e 2139 ¦ 3:num/raw <- get *e, cursor-row:offset 2140 ¦ 4:num/raw <- get *e, cursor-column:offset 2141 ] @@ -2222,14 +2222,14 @@ if ('onhashchange' in window) { 2160 s:text <- new [a 2161 b 2162 cdefgh] -2163 e:&:editor <- new-editor s, 0/left, 5/right +2163 e:&:editor <- new-editor s, 0/left, 5/right 2164 # position cursor at end of screen and try to move right 2165 assume-console [ 2166 ¦ left-click 3, 3 2167 ¦ press right-arrow 2168 ] 2169 run [ -2170 ¦ editor-event-loop screen, console, e +2170 ¦ editor-event-loop screen, console, e 2171 ¦ 3:num/raw <- get *e, cursor-row:offset 2172 ¦ 4:num/raw <- get *e, cursor-column:offset 2173 ] @@ -2255,14 +2255,14 @@ if ('onhashchange' in window) { 2193 b 2194 c 2195 d] -2196 e:&:editor <- new-editor s, 0/left, 5/right +2196 e:&:editor <- new-editor s, 0/left, 5/right 2197 # position cursor at end of screen and try to move right 2198 assume-console [ 2199 ¦ left-click 3, 3 2200 ¦ press right-arrow 2201 ] 2202 run [ -2203 ¦ editor-event-loop screen, console, e +2203 ¦ editor-event-loop screen, console, e 2204 ¦ 3:num/raw <- get *e, cursor-row:offset 2205 ¦ 4:num/raw <- get *e, cursor-column:offset 2206 ] @@ -2284,8 +2284,8 @@ if ('onhashchange' in window) { 2222 assume-screen 10/width, 5/height 2223 s:text <- new [abc 2224 de] -2225 e:&:editor <- new-editor s, 0/left, 10/right -2226 editor-render screen, e +2225 e:&:editor <- new-editor s, 0/left, 10/right +2226 editor-render screen, e 2227 $clear-trace 2228 # try to move down past end of text 2229 assume-console [ @@ -2293,7 +2293,7 @@ if ('onhashchange' in window) { 2231 ¦ press down-arrow 2232 ] 2233 run [ -2234 ¦ editor-event-loop screen, console, e +2234 ¦ editor-event-loop screen, console, e 2235 ¦ 3:num/raw <- get *e, cursor-row:offset 2236 ¦ 4:num/raw <- get *e, cursor-column:offset 2237 ] @@ -2306,7 +2306,7 @@ if ('onhashchange' in window) { 2244 ¦ type [0] 2245 ] 2246 run [ -2247 ¦ editor-event-loop screen, console, e +2247 ¦ editor-event-loop screen, console, e 2248 ] 2249 screen-should-contain [ 2250 ¦ . . @@ -2321,7 +2321,7 @@ if ('onhashchange' in window) { 2259 ¦ press down-arrow 2260 ] 2261 run [ -2262 ¦ editor-event-loop screen, console, e +2262 ¦ editor-event-loop screen, console, e 2263 ¦ 3:num/raw <- get *e, cursor-row:offset 2264 ¦ 4:num/raw <- get *e, cursor-column:offset 2265 ] @@ -2335,7 +2335,7 @@ if ('onhashchange' in window) { 2273 ¦ type [1] 2274 ] 2275 run [ -2276 ¦ editor-event-loop screen, console, e +2276 ¦ editor-event-loop screen, console, e 2277 ] 2278 screen-should-contain [ 2279 ¦ . . @@ -2357,8 +2357,8 @@ if ('onhashchange' in window) { 2295 e 2296 f 2297 g] -2298 e:&:editor <- new-editor s, 0/left, 5/right -2299 editor-render screen, e +2298 e:&:editor <- new-editor s, 0/left, 5/right +2299 editor-render screen, e 2300 # scroll down one page and one line 2301 assume-console [ 2302 ¦ press page-down @@ -2366,7 +2366,7 @@ if ('onhashchange' in window) { 2304 ¦ press down-arrow 2305 ] 2306 run [ -2307 ¦ editor-event-loop screen, console, e +2307 ¦ editor-event-loop screen, console, e 2308 ] 2309 # screen scrolls down 3 lines 2310 screen-should-contain [ @@ -2388,8 +2388,8 @@ if ('onhashchange' in window) { 2326 b 2327 c 2328 d] -2329 e:&:editor <- new-editor s, 0/left, 10/right -2330 editor-render screen, e +2329 e:&:editor <- new-editor s, 0/left, 10/right +2330 editor-render screen, e 2331 screen-should-contain [ 2332 ¦ . . 2333 ¦ .a . @@ -2402,7 +2402,7 @@ if ('onhashchange' in window) { 2340 ¦ press up-arrow 2341 ] 2342 run [ -2343 ¦ editor-event-loop screen, console, e +2343 ¦ editor-event-loop screen, console, e 2344 ] 2345 # screen slides by one line 2346 screen-should-contain [ @@ -2477,8 +2477,8 @@ if ('onhashchange' in window) { 2415 g 2416 h 2417 i] -2418 e:&:editor <- new-editor s, 0/left, 5/right -2419 editor-render screen, e +2418 e:&:editor <- new-editor s, 0/left, 5/right +2419 editor-render screen, e 2420 screen-should-contain [ 2421 ¦ . . 2422 ¦ .abcd↩ . @@ -2490,7 +2490,7 @@ if ('onhashchange' in window) { 2428 ¦ press page-down 2429 ] 2430 run [ -2431 ¦ editor-event-loop screen, console, e +2431 ¦ editor-event-loop screen, console, e 2432 ] 2433 screen-should-contain [ 2434 ¦ . . @@ -2503,7 +2503,7 @@ if ('onhashchange' in window) { 2441 ¦ press up-arrow 2442 ] 2443 run [ -2444 ¦ editor-event-loop screen, console, e +2444 ¦ editor-event-loop screen, console, e 2445 ] 2446 # screen shows partial wrapped line 2447 screen-should-contain [ @@ -2523,14 +2523,14 @@ if ('onhashchange' in window) { 2461 k 2462 l 2463 m] -2464 e:&:editor <- new-editor s, 0/left, 5/right -2465 editor-render screen, e +2464 e:&:editor <- new-editor s, 0/left, 5/right +2465 editor-render screen, e 2466 # position cursor at top of second page 2467 assume-console [ 2468 ¦ press page-down 2469 ] 2470 run [ -2471 ¦ editor-event-loop screen, console, e +2471 ¦ editor-event-loop screen, console, e 2472 ] 2473 screen-should-contain [ 2474 ¦ . . @@ -2544,7 +2544,7 @@ if ('onhashchange' in window) { 2482 ¦ press up-arrow 2483 ] 2484 run [ -2485 ¦ editor-event-loop screen, console, e +2485 ¦ editor-event-loop screen, console, e 2486 ] 2487 # screen shows partial wrapped line 2488 screen-should-contain [ @@ -2559,7 +2559,7 @@ if ('onhashchange' in window) { 2497 ¦ press up-arrow 2498 ] 2499 run [ -2500 ¦ editor-event-loop screen, console, e +2500 ¦ editor-event-loop screen, console, e 2501 ] 2502 # screen shows partial wrapped line 2503 screen-should-contain [ @@ -2574,7 +2574,7 @@ if ('onhashchange' in window) { 2512 ¦ press up-arrow 2513 ] 2514 run [ -2515 ¦ editor-event-loop screen, console, e +2515 ¦ editor-event-loop screen, console, e 2516 ] 2517 # screen shows partial wrapped line 2518 screen-should-contain [ @@ -2598,8 +2598,8 @@ if ('onhashchange' in window) { 2536 g 2537 h 2538 i] -2539 e:&:editor <- new-editor s, 0/left, 6/right -2540 editor-render screen, e +2539 e:&:editor <- new-editor s, 0/left, 6/right +2540 editor-render screen, e 2541 screen-should-contain [ 2542 ¦ . . 2543 ¦ .abcde↩ . @@ -2611,7 +2611,7 @@ if ('onhashchange' in window) { 2549 ¦ press page-down 2550 ] 2551 run [ -2552 ¦ editor-event-loop screen, console, e +2552 ¦ editor-event-loop screen, console, e 2553 ] 2554 screen-should-contain [ 2555 ¦ . . @@ -2624,7 +2624,7 @@ if ('onhashchange' in window) { 2562 ¦ press up-arrow 2563 ] 2564 run [ -2565 ¦ editor-event-loop screen, console, e +2565 ¦ editor-event-loop screen, console, e 2566 ] 2567 # screen shows partial wrapped line 2568 screen-should-contain [ @@ -2646,13 +2646,13 @@ if ('onhashchange' in window) { 2584 c 2585 d 2586 e] -2587 e:&:editor <- new-editor s, 0/left, 6/right -2588 editor-render screen, e +2587 e:&:editor <- new-editor s, 0/left, 6/right +2588 editor-render screen, e 2589 assume-console [ 2590 ¦ press page-down 2591 ] 2592 run [ -2593 ¦ editor-event-loop screen, console, e +2593 ¦ editor-event-loop screen, console, e 2594 ] 2595 screen-should-contain [ 2596 ¦ . . @@ -2664,7 +2664,7 @@ if ('onhashchange' in window) { 2602 ¦ press page-down 2603 ] 2604 run [ -2605 ¦ editor-event-loop screen, console, e +2605 ¦ editor-event-loop screen, console, e 2606 ] 2607 screen-should-contain [ 2608 ¦ . . @@ -2676,7 +2676,7 @@ if ('onhashchange' in window) { 2614 ¦ press page-up 2615 ] 2616 run [ -2617 ¦ editor-event-loop screen, console, e +2617 ¦ editor-event-loop screen, console, e 2618 ] 2619 screen-should-contain [ 2620 ¦ . . @@ -2696,14 +2696,14 @@ if ('onhashchange' in window) { 2634 c 2635 d 2636 e] -2637 e:&:editor <- new-editor s, 0/left, 5/right -2638 editor-render screen, e +2637 e:&:editor <- new-editor s, 0/left, 5/right +2638 editor-render screen, e 2639 # position cursor at top of second page 2640 assume-console [ 2641 ¦ press page-down 2642 ] 2643 run [ -2644 ¦ editor-event-loop screen, console, e +2644 ¦ editor-event-loop screen, console, e 2645 ] 2646 screen-should-contain [ 2647 ¦ . . @@ -2716,7 +2716,7 @@ if ('onhashchange' in window) { 2654 ¦ press left-arrow 2655 ] 2656 run [ -2657 ¦ editor-event-loop screen, console, e +2657 ¦ editor-event-loop screen, console, e 2658 ¦ 3:num/raw <- get *e, cursor-row:offset 2659 ¦ 4:num/raw <- get *e, cursor-column:offset 2660 ] @@ -2742,8 +2742,8 @@ if ('onhashchange' in window) { 2680 b 2681 c 2682 d] -2683 e:&:editor <- new-editor s, 0/left, 10/right -2684 editor-render screen, e +2683 e:&:editor <- new-editor s, 0/left, 10/right +2684 editor-render screen, e 2685 screen-should-contain [ 2686 ¦ . . 2687 ¦ .a . @@ -2758,7 +2758,7 @@ if ('onhashchange' in window) { 2696 ¦ press up-arrow 2697 ] 2698 run [ -2699 ¦ editor-event-loop screen, console, e +2699 ¦ editor-event-loop screen, console, e 2700 ] 2701 # screen slides by one line 2702 screen-should-contain [ @@ -2772,7 +2772,7 @@ if ('onhashchange' in window) { 2710 ¦ press up-arrow 2711 ] 2712 run [ -2713 ¦ editor-event-loop screen, console, e +2713 ¦ editor-event-loop screen, console, e 2714 ] 2715 # screen remains unchanged 2716 screen-should-contain [ @@ -2792,8 +2792,8 @@ if ('onhashchange' in window) { 2730 b 2731 c 2732 d] -2733 e:&:editor <- new-editor s, 0/left, 10/right -2734 editor-render screen, e +2733 e:&:editor <- new-editor s, 0/left, 10/right +2734 editor-render screen, e 2735 screen-should-contain [ 2736 ¦ . . 2737 ¦ .a . @@ -2805,7 +2805,7 @@ if ('onhashchange' in window) { 2743 ¦ press page-down 2744 ] 2745 run [ -2746 ¦ editor-event-loop screen, console, e +2746 ¦ editor-event-loop screen, console, e 2747 ] 2748 # screen shows next page 2749 screen-should-contain [ @@ -2816,7 +2816,7 @@ if ('onhashchange' in window) { 2754 ] 2755 ] 2756 -2757 after <handle-special-character> [ +2757 after <handle-special-character> [ 2758 { 2759 ¦ page-down?:bool <- equal c, 6/ctrl-f 2760 ¦ break-unless page-down? @@ -2831,7 +2831,7 @@ if ('onhashchange' in window) { 2769 } 2770 ] 2771 -2772 after <handle-special-key> [ +2772 after <handle-special-key> [ 2773 { 2774 ¦ page-down?:bool <- equal k, 65518/page-down 2775 ¦ break-unless page-down? @@ -2877,8 +2877,8 @@ if ('onhashchange' in window) { 2815 assume-screen 10/width, 4/height 2816 s:text <- new [a 2817 b] -2818 e:&:editor <- new-editor s, 0/left, 10/right -2819 editor-render screen, e +2818 e:&:editor <- new-editor s, 0/left, 10/right +2819 editor-render screen, e 2820 screen-should-contain [ 2821 ¦ . . 2822 ¦ .a . @@ -2890,7 +2890,7 @@ if ('onhashchange' in window) { 2828 ¦ press page-down 2829 ] 2830 run [ -2831 ¦ editor-event-loop screen, console, e +2831 ¦ editor-event-loop screen, console, e 2832 ] 2833 # screen remains unmodified 2834 screen-should-contain [ @@ -2910,8 +2910,8 @@ if ('onhashchange' in window) { 2848 b 2849 cdefgh] 2850 # editor screen triggers wrap of last line -2851 e:&:editor <- new-editor s, 0/left, 4/right -2852 editor-render screen, e +2851 e:&:editor <- new-editor s, 0/left, 4/right +2852 editor-render screen, e 2853 # some part of last line is not displayed 2854 screen-should-contain [ 2855 ¦ . . @@ -2924,7 +2924,7 @@ if ('onhashchange' in window) { 2862 ¦ press page-down 2863 ] 2864 run [ -2865 ¦ editor-event-loop screen, console, e +2865 ¦ editor-event-loop screen, console, e 2866 ] 2867 # screen shows entire wrapped line 2868 screen-should-contain [ @@ -2943,8 +2943,8 @@ if ('onhashchange' in window) { 2881 # and still has something left over 2882 s:text <- new [a 2883 bcdefgh] -2884 e:&:editor <- new-editor s, 0/left, 4/right -2885 editor-render screen, e +2884 e:&:editor <- new-editor s, 0/left, 4/right +2885 editor-render screen, e 2886 # some part of last line is not displayed 2887 screen-should-contain [ 2888 ¦ . . @@ -2957,7 +2957,7 @@ if ('onhashchange' in window) { 2895 ¦ press page-down 2896 ] 2897 run [ -2898 ¦ editor-event-loop screen, console, e +2898 ¦ editor-event-loop screen, console, e 2899 ] 2900 # screen shows entire wrapped line 2901 screen-should-contain [ @@ -2977,8 +2977,8 @@ if ('onhashchange' in window) { 2915 b 2916 c 2917 d] -2918 e:&:editor <- new-editor s, 0/left, 10/right -2919 editor-render screen, e +2918 e:&:editor <- new-editor s, 0/left, 10/right +2919 editor-render screen, e 2920 screen-should-contain [ 2921 ¦ . . 2922 ¦ .a . @@ -2990,7 +2990,7 @@ if ('onhashchange' in window) { 2928 ¦ press page-down 2929 ] 2930 run [ -2931 ¦ editor-event-loop screen, console, e +2931 ¦ editor-event-loop screen, console, e 2932 ] 2933 # screen shows next page 2934 screen-should-contain [ @@ -3004,7 +3004,7 @@ if ('onhashchange' in window) { 2942 ¦ press page-up 2943 ] 2944 run [ -2945 ¦ editor-event-loop screen, console, e +2945 ¦ editor-event-loop screen, console, e 2946 ] 2947 # screen shows original page again 2948 screen-should-contain [ @@ -3015,13 +3015,13 @@ if ('onhashchange' in window) { 2953 ] 2954 ] 2955 -2956 after <handle-special-character> [ +2956 after <handle-special-character> [ 2957 { 2958 ¦ page-up?:bool <- equal c, 2/ctrl-b 2959 ¦ break-unless page-up? 2960 ¦ old-top:&:duplex-list:char <- get *editor, top-of-screen:offset 2961 ¦ <move-cursor-begin> -2962 ¦ editor <- page-up editor, screen-height +2962 ¦ editor <- page-up editor, screen-height 2963 ¦ undo-coalesce-tag:num <- copy 0/never 2964 ¦ <move-cursor-end> 2965 ¦ top-of-screen:&:duplex-list:char <- get *editor, top-of-screen:offset @@ -3030,13 +3030,13 @@ if ('onhashchange' in window) { 2968 } 2969 ] 2970 -2971 after <handle-special-key> [ +2971 after <handle-special-key> [ 2972 { 2973 ¦ page-up?:bool <- equal k, 65519/page-up 2974 ¦ break-unless page-up? 2975 ¦ old-top:&:duplex-list:char <- get *editor, top-of-screen:offset 2976 ¦ <move-cursor-begin> -2977 ¦ editor <- page-up editor, screen-height +2977 ¦ editor <- page-up editor, screen-height 2978 ¦ undo-coalesce-tag:num <- copy 0/never 2979 ¦ <move-cursor-end> 2980 ¦ top-of-screen:&:duplex-list:char <- get *editor, top-of-screen:offset @@ -3046,10 +3046,10 @@ if ('onhashchange' in window) { 2984 } 2985 ] 2986 -2987 def page-up editor:&:editor, screen-height:num -> editor:&:editor [ +2987 def page-up editor:&:editor, screen-height:num -> editor:&:editor [ 2988 local-scope 2989 load-ingredients -2990 max:num <- subtract screen-height, 1/menu-bar, 1/overlapping-line +2990 max:num <- subtract screen-height, 1/menu-bar, 1/overlapping-line 2991 count:num <- copy 0 2992 top-of-screen:&:duplex-list:char <- get *editor, top-of-screen:offset 2993 { @@ -3077,8 +3077,8 @@ if ('onhashchange' in window) { 3015 f 3016 g 3017 h] -3018 e:&:editor <- new-editor s, 0/left, 10/right -3019 editor-render screen, e +3018 e:&:editor <- new-editor s, 0/left, 10/right +3019 editor-render screen, e 3020 screen-should-contain [ 3021 ¦ . . 3022 ¦ .a . @@ -3091,7 +3091,7 @@ if ('onhashchange' in window) { 3029 ¦ press page-down 3030 ] 3031 run [ -3032 ¦ editor-event-loop screen, console, e +3032 ¦ editor-event-loop screen, console, e 3033 ] 3034 # screen shows third page 3035 screen-should-contain [ @@ -3105,7 +3105,7 @@ if ('onhashchange' in window) { 3043 ¦ press page-up 3044 ] 3045 run [ -3046 ¦ editor-event-loop screen, console, e +3046 ¦ editor-event-loop screen, console, e 3047 ] 3048 # screen shows second page 3049 screen-should-contain [ @@ -3119,7 +3119,7 @@ if ('onhashchange' in window) { 3057 ¦ press page-up 3058 ] 3059 run [ -3060 ¦ editor-event-loop screen, console, e +3060 ¦ editor-event-loop screen, console, e 3061 ] 3062 # screen shows original page again 3063 screen-should-contain [ @@ -3146,8 +3146,8 @@ if ('onhashchange' in window) { 3084 n 3085 o] 3086 # editor screen triggers wrap of last line -3087 e:&:editor <- new-editor s, 0/left, 4/right -3088 editor-render screen, e +3087 e:&:editor <- new-editor s, 0/left, 4/right +3088 editor-render screen, e 3089 # some part of last line is not displayed 3090 screen-should-contain [ 3091 ¦ . . @@ -3164,7 +3164,7 @@ if ('onhashchange' in window) { 3102 ¦ press down-arrow 3103 ] 3104 run [ -3105 ¦ editor-event-loop screen, console, e +3105 ¦ editor-event-loop screen, console, e 3106 ] 3107 # screen shows entire wrapped line 3108 screen-should-contain [ @@ -3180,7 +3180,7 @@ if ('onhashchange' in window) { 3118 ¦ press page-up 3119 ] 3120 run [ -3121 ¦ editor-event-loop screen, console, e +3121 ¦ editor-event-loop screen, console, e 3122 ] 3123 # screen resets 3124 screen-should-contain [ @@ -3201,8 +3201,8 @@ if ('onhashchange' in window) { 3139 # and still has something left over 3140 s:text <- new [a 3141 bcdefgh] -3142 e:&:editor <- new-editor s, 0/left, 4/right -3143 editor-render screen, e +3142 e:&:editor <- new-editor s, 0/left, 4/right +3143 editor-render screen, e 3144 # some part of last line is not displayed 3145 screen-should-contain [ 3146 ¦ . . @@ -3215,7 +3215,7 @@ if ('onhashchange' in window) { 3153 ¦ press page-down 3154 ] 3155 run [ -3156 ¦ editor-event-loop screen, console, e +3156 ¦ editor-event-loop screen, console, e 3157 ] 3158 # screen shows entire wrapped line 3159 screen-should-contain [ @@ -3229,7 +3229,7 @@ if ('onhashchange' in window) { 3167 ¦ press page-up 3168 ] 3169 run [ -3170 ¦ editor-event-loop screen, console, e +3170 ¦ editor-event-loop screen, console, e 3171 ] 3172 # screen resets 3173 screen-should-contain [ @@ -3253,8 +3253,8 @@ if ('onhashchange' in window) { 3191 gxx 3192 hxx 3193 ] -3194 e:&:editor <- new-editor s, 0/left, 4/right -3195 editor-render screen, e +3194 e:&:editor <- new-editor s, 0/left, 4/right +3195 editor-render screen, e 3196 screen-should-contain [ 3197 ¦ . . 3198 ¦ .axx . @@ -3265,7 +3265,7 @@ if ('onhashchange' in window) { 3203 ¦ press page-down 3204 ] 3205 run [ -3206 ¦ editor-event-loop screen, console, e +3206 ¦ editor-event-loop screen, console, e 3207 ] 3208 screen-should-contain [ 3209 ¦ . . @@ -3277,7 +3277,7 @@ if ('onhashchange' in window) { 3215 ¦ press page-down 3216 ] 3217 run [ -3218 ¦ editor-event-loop screen, console, e +3218 ¦ editor-event-loop screen, console, e 3219 ] 3220 screen-should-contain [ 3221 ¦ . . @@ -3290,7 +3290,7 @@ if ('onhashchange' in window) { 3228 ¦ press page-up 3229 ] 3230 run [ -3231 ¦ editor-event-loop screen, console, e +3231 ¦ editor-event-loop screen, console, e 3232 ] 3233 screen-should-contain [ 3234 ¦ . . @@ -3313,8 +3313,8 @@ if ('onhashchange' in window) { 3251 fxy 3252 gxy 3253 ] -3254 e:&:editor <- new-editor s, 0/left, 4/right -3255 editor-render screen, e +3254 e:&:editor <- new-editor s, 0/left, 4/right +3255 editor-render screen, e 3256 screen-should-contain [ 3257 ¦ . . 3258 ¦ .axy . @@ -3325,7 +3325,7 @@ if ('onhashchange' in window) { 3263 ¦ press page-down 3264 ] 3265 run [ -3266 ¦ editor-event-loop screen, console, e +3266 ¦ editor-event-loop screen, console, e 3267 ] 3268 screen-should-contain [ 3269 ¦ . . @@ -3337,7 +3337,7 @@ if ('onhashchange' in window) { 3275 ¦ press page-down 3276 ] 3277 run [ -3278 ¦ editor-event-loop screen, console, e +3278 ¦ editor-event-loop screen, console, e 3279 ] 3280 screen-should-contain [ 3281 ¦ . . @@ -3350,7 +3350,7 @@ if ('onhashchange' in window) { 3288 ¦ press page-up 3289 ] 3290 run [ -3291 ¦ editor-event-loop screen, console, e +3291 ¦ editor-event-loop screen, console, e 3292 ] 3293 screen-should-contain [ 3294 ¦ . . -- cgit 1.4.1-2-gfad0