Evan
a839fe4655
commit 6172ea4fdf435d7125697d40af2c17ae5ff3a8c6 Author: Shuhei Kubota <kubota.shuhei+github@gmail.com> Date: Sat Nov 4 15:30:11 2023 +0900 build: same config as csv2xlsx commit 6c522e8ca857f7218db476153ffd06e8b7d2bdde Author: Shuhei Kubota <kubota.shuhei+github@gmail.com> Date: Sat Nov 4 15:11:53 2023 +0900 change: debug output commit 4cec3963cdc20c781bbacde8be927591145b95ca Author: Shuhei Kubota <kubota.shuhei+github@gmail.com> Date: Sat Nov 4 15:10:26 2023 +0900 chore: use gli/v2 commit 958c93d6256bbb4611f21f870087c074a783001b Author: Shuhei Kubota <kubota.shuhei+github@gmail.com> Date: Fri Nov 3 20:45:57 2023 +0900 fix(alpha): improve output, variable name commit 8bc79c6bd2c4a93c087e8fea7c2e306e7028466c Author: Shuhei Kubota <kubota.shuhei+github@gmail.com> Date: Fri Nov 3 20:18:34 2023 +0900 refactor: remove unused code commit 7a14926dd7f83dd6a41f3baa6c905b7c81191a93 Author: Shuhei Kubota <kubota.shuhei+github@gmail.com> Date: Fri Nov 3 20:18:59 2023 +0900 build: go 1.21 commit 40007434e6fdbc3ad485862b3d2785d7ba7263a8 Author: Shuhei Kubota <kubota.shuhei+github@gmail.com> Date: Fri Nov 3 20:18:15 2023 +0900 fix: call cancel finally commit 5b02edacd34942adedf38d089737d3c8130d52e3 Author: Shuhei Kubota <kubota.shuhei+github@gmail.com> Date: Fri Nov 3 20:16:34 2023 +0900 fix: typo
83 lines
1.4 KiB
Go
83 lines
1.4 KiB
Go
//go:build windows
|
|
// +build windows
|
|
|
|
package vvin
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"fmt"
|
|
"os"
|
|
"os/signal"
|
|
"strings"
|
|
"syscall"
|
|
"time"
|
|
)
|
|
|
|
type waitCmd struct {
|
|
_ struct{} `help:"[--close] {Title}"`
|
|
|
|
Closed bool `help:"wait until the window is closed"`
|
|
Interval time.Duration `cli:"interval,i=DURATION" default:"1s"`
|
|
Timeout time.Duration `cli:"timeout=DURATION" default:"0s" help:"zero value means ininite"`
|
|
}
|
|
|
|
func (c waitCmd) Run(args []string) error {
|
|
if len(args) != 1 {
|
|
return errors.New("not one target")
|
|
}
|
|
|
|
an := ancestors()
|
|
t := strings.ToLower(args[0])
|
|
|
|
var ctx context.Context
|
|
var cancel func()
|
|
|
|
if c.Timeout == 0 {
|
|
ctx = context.Background()
|
|
cancel = func() {}
|
|
} else {
|
|
ctx, cancel = context.WithTimeout(context.Background(), c.Timeout)
|
|
}
|
|
|
|
signalChan := make(chan os.Signal, 1)
|
|
signal.Notify(signalChan, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT, os.Interrupt)
|
|
|
|
fmt.Println("Press Ctrl+C to cancel.")
|
|
|
|
waitLoop:
|
|
for {
|
|
wins, err := listAllWindows()
|
|
if err != nil {
|
|
cancel()
|
|
return err
|
|
}
|
|
|
|
win := findFirstTarget(t, wins, an)
|
|
if c.Closed {
|
|
if win == nil {
|
|
break
|
|
}
|
|
} else {
|
|
if win != nil {
|
|
break
|
|
}
|
|
}
|
|
|
|
select {
|
|
case <-signalChan:
|
|
fmt.Fprintln(os.Stderr, "cancelled")
|
|
break waitLoop
|
|
case <-ctx.Done():
|
|
fmt.Fprintln(os.Stderr, "cancelled (timeout)")
|
|
break waitLoop
|
|
default:
|
|
//nop
|
|
}
|
|
|
|
time.Sleep(c.Interval)
|
|
}
|
|
cancel()
|
|
|
|
return nil
|
|
}
|