| 366 | } |
| 367 | |
| 368 | func (s *IOStreams) StartAlternateScreenBuffer() { |
| 369 | if s.alternateScreenBufferEnabled { |
| 370 | s.alternateScreenBufferMu.Lock() |
| 371 | defer s.alternateScreenBufferMu.Unlock() |
| 372 | |
| 373 | if _, err := fmt.Fprint(s.Out, "\x1b[?1049h"); err == nil { |
| 374 | s.alternateScreenBufferActive = true |
| 375 | |
| 376 | ch := make(chan os.Signal, 1) |
| 377 | signal.Notify(ch, os.Interrupt) |
| 378 | |
| 379 | go func() { |
| 380 | <-ch |
| 381 | s.StopAlternateScreenBuffer() |
| 382 | |
| 383 | os.Exit(1) |
| 384 | }() |
| 385 | } |
| 386 | } |
| 387 | } |
| 388 | |
| 389 | func (s *IOStreams) StopAlternateScreenBuffer() { |
| 390 | s.alternateScreenBufferMu.Lock() |