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