util_solaris.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. //
  2. package pty
  3. import (
  4. "os"
  5. "golang.org/x/sys/unix"
  6. )
  7. const (
  8. TIOCGWINSZ = 21608 // 'T' << 8 | 104
  9. TIOCSWINSZ = 21607 // 'T' << 8 | 103
  10. )
  11. // Winsize describes the terminal size.
  12. type Winsize struct {
  13. Rows uint16 // ws_row: Number of rows (in cells)
  14. Cols uint16 // ws_col: Number of columns (in cells)
  15. X uint16 // ws_xpixel: Width in pixels
  16. Y uint16 // ws_ypixel: Height in pixels
  17. }
  18. // GetsizeFull returns the full terminal size description.
  19. func GetsizeFull(t *os.File) (size *Winsize, err error) {
  20. var wsz *unix.Winsize
  21. wsz, err = unix.IoctlGetWinsize(int(t.Fd()), TIOCGWINSZ)
  22. if err != nil {
  23. return nil, err
  24. } else {
  25. return &Winsize{wsz.Row, wsz.Col, wsz.Xpixel, wsz.Ypixel}, nil
  26. }
  27. }
  28. // Get Windows Size
  29. func Getsize(t *os.File) (rows, cols int, err error) {
  30. var wsz *unix.Winsize
  31. wsz, err = unix.IoctlGetWinsize(int(t.Fd()), TIOCGWINSZ)
  32. if err != nil {
  33. return 80, 25, err
  34. } else {
  35. return int(wsz.Row), int(wsz.Col), nil
  36. }
  37. }
  38. // Setsize resizes t to s.
  39. func Setsize(t *os.File, ws *Winsize) error {
  40. wsz := unix.Winsize{ws.Rows, ws.Cols, ws.X, ws.Y}
  41. return unix.IoctlSetWinsize(int(t.Fd()), TIOCSWINSZ, &wsz)
  42. }