New API to suspend a loop

This commit is contained in:
Kovid Goyal
2023-02-14 22:27:41 +05:30
parent 9aaca33f15
commit 67436a48cd
3 changed files with 41 additions and 7 deletions

View File

@@ -209,20 +209,30 @@ func (self *Term) RestoreAndClose() error {
return self.Close()
}
func (self *Term) SuspendAndRun(callback func() error) error {
func (self *Term) Suspend() (resume func() error, err error) {
var state unix.Termios
err := self.Tcgetattr(&state)
err = self.Tcgetattr(&state)
if err != nil {
return err
return nil, err
}
if len(self.states) > 0 {
err := self.Tcsetattr(TCSANOW, &self.states[0])
if err != nil {
return err
return nil, err
}
}
defer self.Tcsetattr(TCSANOW, &state)
return callback()
return func() error { return self.Tcsetattr(TCSANOW, &state) }, nil
}
func (self *Term) SuspendAndRun(callback func() error) error {
resume, err := self.Suspend()
if err != nil {
return err
}
err = callback()
resume()
return err
}
func clamp(v, lo, hi int64) int64 {