| 378 | } |
| 379 | |
| 380 | func (s *IOStreams) StartAlternateScreenBuffer() { |
| 381 | if s.alternateScreenBufferEnabled { |
| 382 | s.alternateScreenBufferMu.Lock() |
| 383 | defer s.alternateScreenBufferMu.Unlock() |
| 384 | |
| 385 | if _, err := fmt.Fprint(s.Out, "\x1b[?1049h"); err == nil { |
| 386 | s.alternateScreenBufferActive = true |
| 387 | |
| 388 | ch := make(chan os.Signal, 1) |
| 389 | signal.Notify(ch, os.Interrupt) |
| 390 | |
| 391 | go func() { |
| 392 | <-ch |
| 393 | s.StopAlternateScreenBuffer() |
| 394 | |
| 395 | os.Exit(1) |
| 396 | }() |
| 397 | } |
| 398 | } |
| 399 | } |
| 400 | |
| 401 | func (s *IOStreams) StopAlternateScreenBuffer() { |
| 402 | s.alternateScreenBufferMu.Lock() |