okami.mom/ultraviolet

git clone https://git.nkp.pet/okami.mom/ultraviolet

Ayman BagabasMerge pull request #52 from charmbracelet/refae6a488b

main
996 B50 linesraw
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 {
15	n.m.Lock()
16	defer n.m.Unlock()
17	if n.f == nil || !term.IsTerminal(n.f.Fd()) {
18		return ErrNotTerminal
19	}
20
21	signal.Notify(n.sig, syscall.SIGWINCH)
22	return nil
23}
24
25func (n *SizeNotifier) stop() error {
26	n.m.Lock()
27	signal.Stop(n.sig)
28	n.m.Unlock()
29	return nil
30}
31
32func (n *SizeNotifier) getWindowSize() (cells Size, pixels Size, err error) {
33	n.m.Lock()
34	defer n.m.Unlock()
35
36	winsize, err := termios.GetWinsize(int(n.f.Fd()))
37	if err != nil {
38		return Size{}, Size{}, err //nolint:wrapcheck
39	}
40
41	cells = Size{
42		Width:  int(winsize.Col),
43		Height: int(winsize.Row),
44	}
45	pixels = Size{
46		Width:  int(winsize.Xpixel),
47		Height: int(winsize.Ypixel),
48	}
49	return cells, pixels, nil
50}