go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/cli/shell/terminal_posix.go (about)

     1  // Copyright (c) Mondoo, Inc.
     2  // SPDX-License-Identifier: BUSL-1.1
     3  
     4  //go:build !windows
     5  
     6  package shell
     7  
     8  import (
     9  	"os/signal"
    10  	"syscall"
    11  
    12  	"github.com/pkg/term/termios"
    13  	"golang.org/x/sys/unix"
    14  )
    15  
    16  var terminalIos *unix.Termios
    17  
    18  func (s *Shell) backupTerminalSettings() {
    19  	var err error
    20  	terminalIos, err = termios.Tcgetattr(uintptr(syscall.Stdin))
    21  	if err != nil {
    22  		panic(err)
    23  	}
    24  }
    25  
    26  func (s *Shell) restoreTerminalSettings() {
    27  	signal.Reset(syscall.SIGINT,
    28  		syscall.SIGTERM,
    29  		syscall.SIGQUIT,
    30  		syscall.SIGWINCH)
    31  	syscall.SetNonblock(syscall.Stdin, false)
    32  	termios.Tcsetattr(uintptr(syscall.Stdin), termios.TCSANOW, terminalIos)
    33  }
    34  
    35  func (s *Shell) suspend() {
    36  	syscall.Kill(syscall.Getppid(), syscall.SIGTSTP)
    37  }