@@ -167,26 +167,40 @@ class Terminal {
167167 }
168168 }
169169
170- addText ( data ) {
171- const { lines, pointerLine, pointerColumn, trimCount, maxLines } = this . state ;
172- const line = lines [ pointerLine ] || '' ;
173- if ( pointerColumn < line . length ) {
174- const start = line . slice ( 0 , pointerColumn ) ;
175- const end = line . slice ( pointerColumn ) ;
176- lines [ pointerLine ] = start + data + end ;
177- } else if ( pointerColumn > line . length ) {
178- lines [ pointerLine ] = _ . padRight ( line , pointerColumn ) + data ;
179- } else {
180- lines [ pointerLine ] = line + data ;
170+ addText ( newText ) {
171+ const { lines, lineWrap, trimCount, maxLines } = this . state ;
172+
173+ let { pointerColumn, pointerLine } = this . state ;
174+
175+ while ( newText . length > 0 ) {
176+ let oldLine = lines [ pointerLine ] || '' ;
177+ let initial = _ . padRight ( oldLine . slice ( 0 , pointerColumn ) , pointerColumn ) ;
178+
179+ let insert = newText . slice ( 0 , Math . max ( lineWrap - initial . length , 0 ) ) ;
180+
181+ let remainder = oldLine . slice ( insert . length + initial . length ) ;
182+
183+ let leftOver = newText . slice ( insert . length ) ;
184+
185+ lines [ pointerLine ] = initial + insert + remainder ;
186+
187+ newText = leftOver ;
188+ if ( newText . length > 0 ) {
189+ pointerLine ++ ;
190+ pointerColumn = 0 ;
191+ } else {
192+ pointerColumn = initial . length + insert . length ;
193+ }
181194 }
182195
183196 if ( lines . length > maxLines ) {
184197 const newLines = lines . slice ( trimCount ) ;
185198 this . state . lines = newLines ;
186199 this . state . pointerLine = Math . max ( 0 , pointerLine - trimCount ) ;
187- this . state . pointerColumn = pointerColumn + data . length ;
200+ this . state . pointerColumn = pointerColumn ;
188201 } else {
189- this . state . pointerColumn = pointerColumn + data . length ;
202+ this . state . pointerLine = pointerLine ;
203+ this . state . pointerColumn = pointerColumn ;
190204 }
191205 }
192206
0 commit comments