File tree Expand file tree Collapse file tree 1 file changed +32
-7
lines changed Expand file tree Collapse file tree 1 file changed +32
-7
lines changed Original file line number Diff line number Diff line change @@ -88,6 +88,7 @@ type Writer struct {
88
88
althandle syscall.Handle
89
89
oldattr word
90
90
oldpos coord
91
+ rest bytes.Buffer
91
92
}
92
93
93
94
// NewColorable return new instance of Writer which handle escape sequence from File.
@@ -419,7 +420,17 @@ func (w *Writer) Write(data []byte) (n int, err error) {
419
420
procGetConsoleScreenBufferInfo .Call (uintptr (w .handle ), uintptr (unsafe .Pointer (& csbi )))
420
421
421
422
handle := w .handle
422
- er := bytes .NewReader (data )
423
+
424
+ var er * bytes.Reader
425
+ if w .rest .Len () > 0 {
426
+ var rest bytes.Buffer
427
+ w .rest .WriteTo (& rest )
428
+ w .rest .Reset ()
429
+ rest .Write (data )
430
+ er = bytes .NewReader (rest .Bytes ())
431
+ } else {
432
+ er = bytes .NewReader (data )
433
+ }
423
434
var bw [1 ]byte
424
435
loop:
425
436
for {
@@ -438,28 +449,42 @@ loop:
438
449
}
439
450
440
451
if c2 == ']' {
441
- if err := doTitleSequence (er ); err != nil {
452
+ w .rest .WriteByte (c1 )
453
+ w .rest .WriteByte (c2 )
454
+ er .WriteTo (& w .rest )
455
+ if bytes .IndexByte (w .rest .Bytes (), 0x07 ) == - 1 {
456
+ break loop
457
+ }
458
+ er = bytes .NewReader (w .rest .Bytes ()[2 :])
459
+ err := doTitleSequence (er )
460
+ if err != nil {
442
461
break loop
443
462
}
463
+ w .rest .Reset ()
444
464
continue
445
465
}
446
466
if c2 != 0x5b {
447
467
continue
448
468
}
449
469
470
+ w .rest .WriteByte (c1 )
471
+ w .rest .WriteByte (c2 )
472
+ er .WriteTo (& w .rest )
473
+
450
474
var buf bytes.Buffer
451
475
var m byte
452
- for {
453
- c , err := er .ReadByte ()
454
- if err != nil {
455
- break loop
456
- }
476
+ for i , c := range w .rest .Bytes ()[2 :] {
457
477
if ('a' <= c && c <= 'z' ) || ('A' <= c && c <= 'Z' ) || c == '@' {
458
478
m = c
479
+ er = bytes .NewReader (w .rest .Bytes ()[2 + i + 1 :])
480
+ w .rest .Reset ()
459
481
break
460
482
}
461
483
buf .Write ([]byte (string (c )))
462
484
}
485
+ if m == 0 {
486
+ break loop
487
+ }
463
488
464
489
switch m {
465
490
case 'A' :
You can’t perform that action at this time.
0 commit comments