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 }