Function to drain controlling tty
This commit is contained in:
parent
a009d6b258
commit
cc1f0bc3fe
@ -315,3 +315,25 @@ func DebugPrintln(a ...any) {
|
||||
term.DebugPrintln(a...)
|
||||
}
|
||||
}
|
||||
|
||||
func DrainControllingTTY(wait_for time.Duration) {
|
||||
tty, err := OpenControllingTerm(SetRaw, SetNoEcho)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
sel := utils.CreateSelect(1)
|
||||
sel.RegisterRead(tty.Fd())
|
||||
for {
|
||||
n, err := sel.Wait(wait_for)
|
||||
if err == unix.EINTR {
|
||||
continue
|
||||
}
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
if n > 0 && sel.IsReadyToRead(tty.Fd()) {
|
||||
tty.Read(make([]byte, 256))
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
@ -7,6 +7,8 @@ import (
|
||||
"io"
|
||||
"os"
|
||||
|
||||
"golang.org/x/sys/unix"
|
||||
|
||||
"kitty/tools/tty"
|
||||
"kitty/tools/utils"
|
||||
)
|
||||
@ -56,7 +58,7 @@ func read_from_tty(pipe_r *os.File, term *tty.Term, results_channel chan<- []byt
|
||||
wait_for_read_available := func() {
|
||||
for {
|
||||
n, err := selector.WaitForever()
|
||||
if err != nil {
|
||||
if err != nil && err != unix.EINTR {
|
||||
err_channel <- err
|
||||
keep_going = false
|
||||
return
|
||||
|
||||
@ -8,6 +8,8 @@ import (
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"golang.org/x/sys/unix"
|
||||
|
||||
"kitty/tools/tty"
|
||||
"kitty/tools/utils"
|
||||
)
|
||||
@ -143,7 +145,7 @@ func write_to_tty(
|
||||
wait_for_write_available := func() {
|
||||
for {
|
||||
n, err := selector.WaitForever()
|
||||
if err != nil {
|
||||
if err != nil && err != unix.EINTR {
|
||||
err_channel <- err
|
||||
keep_going = false
|
||||
return
|
||||
|
||||
@ -75,7 +75,7 @@ func (self *Selector) Wait(timeout time.Duration) (num_ready int, err error) {
|
||||
self.read_set.Zero()
|
||||
self.write_set.Zero()
|
||||
self.err_set.Zero()
|
||||
return 0, nil
|
||||
return 0, err
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user