terminal_unix.go

 1//go:build darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || aix || zos
 2// +build darwin dragonfly freebsd linux netbsd openbsd solaris aix zos
 3
 4package uv
 5
 6import (
 7	"github.com/charmbracelet/x/term"
 8	"golang.org/x/sys/unix"
 9)
10
11func (t *Terminal) makeRaw() error {
12	var err error
13
14	if t.inTty == nil && t.outTty == nil {
15		return ErrNotTerminal
16	}
17
18	// Check if we have a terminal.
19	for _, f := range []term.File{t.inTty, t.outTty} {
20		if f == nil {
21			continue
22		}
23		t.inTtyState, err = term.MakeRaw(f.Fd())
24		if err == nil {
25			break
26		}
27	}
28
29	if err != nil {
30		return err
31	}
32
33	return nil
34}
35
36func (t *Terminal) getSize() (w, h int, err error) {
37	// Try both inTty and outTty to get the size.
38	err = ErrNotTerminal
39	for _, f := range []term.File{t.inTty, t.outTty} {
40		if f == nil {
41			continue
42		}
43		w, h, err = term.GetSize(f.Fd())
44		if err == nil {
45			return
46		}
47	}
48	return
49}
50
51func (t *Terminal) optimizeMovements() {
52	// Try both inTty and outTty to get the size.
53	var state *term.State
54	var err error
55	for _, f := range []term.File{t.inTty, t.outTty} {
56		if f == nil {
57			continue
58		}
59		state, err = term.GetState(f.Fd())
60		if err == nil {
61			break
62		}
63	}
64	if state == nil {
65		return
66	}
67	t.useTabs = state.Oflag&unix.TABDLY == unix.TAB0
68	t.useBspace = state.Lflag&unix.BSDLY == unix.BS0
69}
70
71func (*Terminal) enableWindowsMouse() error  { return nil }
72func (*Terminal) disableWindowsMouse() error { return nil }