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...)
|
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"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
|
"golang.org/x/sys/unix"
|
||||||
|
|
||||||
"kitty/tools/tty"
|
"kitty/tools/tty"
|
||||||
"kitty/tools/utils"
|
"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() {
|
wait_for_read_available := func() {
|
||||||
for {
|
for {
|
||||||
n, err := selector.WaitForever()
|
n, err := selector.WaitForever()
|
||||||
if err != nil {
|
if err != nil && err != unix.EINTR {
|
||||||
err_channel <- err
|
err_channel <- err
|
||||||
keep_going = false
|
keep_going = false
|
||||||
return
|
return
|
||||||
|
|||||||
@ -8,6 +8,8 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"golang.org/x/sys/unix"
|
||||||
|
|
||||||
"kitty/tools/tty"
|
"kitty/tools/tty"
|
||||||
"kitty/tools/utils"
|
"kitty/tools/utils"
|
||||||
)
|
)
|
||||||
@ -143,7 +145,7 @@ func write_to_tty(
|
|||||||
wait_for_write_available := func() {
|
wait_for_write_available := func() {
|
||||||
for {
|
for {
|
||||||
n, err := selector.WaitForever()
|
n, err := selector.WaitForever()
|
||||||
if err != nil {
|
if err != nil && err != unix.EINTR {
|
||||||
err_channel <- err
|
err_channel <- err
|
||||||
keep_going = false
|
keep_going = false
|
||||||
return
|
return
|
||||||
|
|||||||
@ -75,7 +75,7 @@ func (self *Selector) Wait(timeout time.Duration) (num_ready int, err error) {
|
|||||||
self.read_set.Zero()
|
self.read_set.Zero()
|
||||||
self.write_set.Zero()
|
self.write_set.Zero()
|
||||||
self.err_set.Zero()
|
self.err_set.Zero()
|
||||||
return 0, nil
|
return 0, err
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user