okami.mom/ultraviolet
git clone https://git.nkp.pet/okami.mom/ultraviolet
e6a488b
main
1//go:build darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos 2// +build darwin dragonfly freebsd linux netbsd openbsd solaris zos 3 4package uv 5 6import ( 7"os/signal" 8"syscall" 9 10"github.com/charmbracelet/x/term" 11"github.com/charmbracelet/x/termios" 12) 13 14func (n * SizeNotifier )start ()error { 15n .m .Lock () 16defer n .m .Unlock () 17if n .f == nil || ! term .IsTerminal (n .f .Fd ()) { 18return ErrNotTerminal 19 } 20 21signal .Notify (n .sig ,syscall .SIGWINCH ) 22return nil 23} 24 25func (n * SizeNotifier )stop ()error { 26n .m .Lock () 27signal .Stop (n .sig ) 28n .m .Unlock () 29return nil 30} 31 32func (n * SizeNotifier )getWindowSize () (cells Size ,pixels Size ,err error ) { 33n .m .Lock () 34defer n .m .Unlock () 35 36winsize ,err := termios .GetWinsize (int (n .f .Fd ())) 37if err != nil { 38return Size {},Size {},err //nolint:wrapcheck 39 } 40 41cells = Size { 42Width :int (winsize .Col ), 43Height :int (winsize .Row ), 44 } 45pixels = Size { 46Width :int (winsize .Xpixel ), 47Height :int (winsize .Ypixel ), 48 } 49return cells ,pixels ,nil 50}