From 389b399e43a89b163a6064026185d4b1225742e2 Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Mon, 17 Aug 2015 18:43:42 -0700 Subject: 2033 - minimal render for appending characters --- edit.mu | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'edit.mu') diff --git a/edit.mu b/edit.mu index 41e09cf3..8c4542b1 100644 --- a/edit.mu +++ b/edit.mu @@ -616,6 +616,8 @@ recipe handle-keyboard-event [ before-cursor:address:address:duplex-list <- get-address *editor, before-cursor:offset cursor-row:address:number <- get-address *editor, cursor-row:offset cursor-column:address:number <- get-address *editor, cursor-column:offset + save-row:number <- copy *cursor-row + save-column:number <- copy *cursor-column # character { c:address:character <- maybe-convert e, text:variant @@ -776,10 +778,26 @@ recipe insert-at-cursor [ cursor-column:address:number <- get-address *editor, cursor-column:offset left:number <- get *editor, left:offset right:number <- get *editor, right:offset + save-row:number <- copy *cursor-row + save-column:number <- copy *cursor-column # occasionally we'll need to mess with the cursor +insert-character-special-case # but mostly we'll just move the cursor right *cursor-column <- add *cursor-column, 1 + { + # at end of line? no need to scroll? just print the character and leave + next:address:duplex-list <- next-duplex *before-cursor + at-end?:boolean <- equal next, 0/null + break-unless at-end? + bottom:number <- subtract screen-height, 1 + at-bottom?:boolean <- equal save-row, bottom + at-right?:boolean <- equal save-column, right + overflow?:boolean <- and at-bottom?, at-right? + break-if overflow? + move-cursor screen, save-row, save-column + print-character screen, c + reply editor/same-as-ingredient:0, screen/same-as-ingredient:2 + } row:number, column:number, screen <- render screen, editor clear-line-delimited screen, column, right row <- add row, 1 @@ -927,6 +945,7 @@ scenario editor-inserts-characters-into-empty-editor [ assume-screen 10/width, 5/height 1:address:array:character <- new [] 2:address:editor-data <- new-editor 1:address:array:character, screen:address, 0/left, 5/right + editor-render screen, 2:address:editor-data assume-console [ type [abc] ] @@ -965,6 +984,8 @@ scenario editor-inserts-characters-at-cursor-2 [ assume-screen 10/width, 5/height 1:address:array:character <- new [abc] 2:address:editor-data <- new-editor 1:address:array:character, screen:address, 0/left, 10/right + editor-render screen, 2:address:editor-data + $clear-trace assume-console [ left-click 1, 5 # right of last line type [d] # should append @@ -978,12 +999,16 @@ scenario editor-inserts-characters-at-cursor-2 [ .┈┈┈┈┈┈┈┈┈┈. . . ] + # performance test: typing characters doesn't usually print more than the + # character being typed + check-trace-count-for-label 1, [print-character] ] scenario editor-inserts-characters-at-cursor-3 [ assume-screen 10/width, 5/height 1:address:array:character <- new [abc] 2:address:editor-data <- new-editor 1:address:array:character, screen:address, 0/left, 10/right + editor-render screen, 2:address:editor-data assume-console [ left-click 3, 5 # below all text type [d] # should append @@ -1004,6 +1029,7 @@ scenario editor-inserts-characters-at-cursor-4 [ 1:address:array:character <- new [abc d] 2:address:editor-data <- new-editor 1:address:array:character, screen:address, 0/left, 10/right + editor-render screen, 2:address:editor-data assume-console [ left-click 3, 5 # below all text type [e] # should append @@ -1025,6 +1051,7 @@ scenario editor-inserts-characters-at-cursor-5 [ 1:address:array:character <- new [abc d] 2:address:editor-data <- new-editor 1:address:array:character, screen:address, 0/left, 10/right + editor-render screen, 2:address:editor-data assume-console [ left-click 3, 5 # below all text type [ef] # should append multiple characters in order @@ -1045,6 +1072,7 @@ scenario editor-moves-cursor-after-inserting-characters [ assume-screen 10/width, 5/height 1:address:array:character <- new [ab] 2:address:editor-data <- new-editor 1:address:array:character, screen:address, 0/left, 5/right + editor-render screen, 2:address:editor-data assume-console [ type [01] ] @@ -1065,6 +1093,7 @@ scenario editor-wraps-line-on-insert [ assume-screen 5/width, 5/height 1:address:array:character <- new [abc] 2:address:editor-data <- new-editor 1:address:array:character, screen:address, 0/left, 5/right + editor-render screen, 2:address:editor-data # type a letter assume-console [ type [e] -- cgit 1.4.1-2-gfad0 href='#n19'>19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42









































                                                                   
='#n81'>81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128