42 lines
728 B
Go
42 lines
728 B
Go
//go:build !windows
|
|
|
|
package cli
|
|
|
|
import (
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
|
|
"golang.org/x/term"
|
|
|
|
"pxmon/internal/cluster"
|
|
)
|
|
|
|
func installWinchHandler(fd int, resize chan<- cluster.InteractiveShellSize) chan os.Signal {
|
|
sigCh := make(chan os.Signal, 4)
|
|
signal.Notify(sigCh, syscall.SIGWINCH)
|
|
go func() {
|
|
for range sigCh {
|
|
w, h, err := term.GetSize(fd)
|
|
if err != nil || w <= 0 || h <= 0 {
|
|
continue
|
|
}
|
|
select {
|
|
case resize <- cluster.InteractiveShellSize{Width: w, Height: h}:
|
|
default:
|
|
}
|
|
}
|
|
}()
|
|
return sigCh
|
|
}
|
|
|
|
func closeWinchHandler(sigCh chan os.Signal, resize chan cluster.InteractiveShellSize) {
|
|
if sigCh != nil {
|
|
signal.Stop(sigCh)
|
|
close(sigCh)
|
|
}
|
|
if resize != nil {
|
|
close(resize)
|
|
}
|
|
}
|