Skip to content

Commit

Permalink
fix(go): golang stage
Browse files Browse the repository at this point in the history
  • Loading branch information
snomiao committed Dec 20, 2022
1 parent 89df2fb commit 3a67fe9
Show file tree
Hide file tree
Showing 3 changed files with 226 additions and 36 deletions.
187 changes: 154 additions & 33 deletions DevTools/go/clx.go
@@ -1,50 +1,171 @@
package main

import (
"log"
"sync"
"fmt"
"time"

"github.com/go-vgo/robotgo"
"golang.design/x/hotkey"
"golang.design/x/hotkey/mainthread"
)

func main() { mainthread.Init(fn) }
func fn() {
wg := sync.WaitGroup{}
wg.Add(2)
go func() {
defer wg.Done()
func main() { mainthread.Init(mainThread) }
func mainThread() {
space()
// hk := hotkey.New([]hotkey.Modifier{}, hotkey.key)
// hk.Register()
}
func space() {
space := reg(hotkey.KeySpace)
// space.Unregister()
for range space.Keydown() {
fmt.Println("space pressed")

err := listenHotkey(hotkey.KeyS, hotkey.ModCtrl, hotkey.ModShift)
if err != nil {
log.Println(err)
func() {
clx := make(chan int)
act := false
go func() {
<-clx
act = true
}()
go func() {
time.Sleep(200 * time.Millisecond)
for !act {
robotgo.KeyTap("space")
time.Sleep(120 * time.Millisecond)
}
}()
//
go keyToKey(clx, hotkey.KeyT, "delete")
go keyToKey(clx, hotkey.KeyG, "enter")
//
go keyToKey(clx, hotkey.KeyH, "left")
go keyToKey(clx, hotkey.KeyJ, "down")
go keyToKey(clx, hotkey.KeyK, "up")
go keyToKey(clx, hotkey.KeyL, "right")
//
go keyToKey(clx, hotkey.KeyY, "home")
go keyToKey(clx, hotkey.KeyO, "end")
go keyToKey(clx, hotkey.KeyU, "pagedown")
go keyToKey(clx, hotkey.KeyI, "pageup")
// hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
<-space.Keyup()

if !act {
robotgo.KeyTap("space")
}
close(clx)
// fmt.Println("space unreg")
}()
}
}
func keyToKey(clx chan int, i hotkey.Key, o string) {
hk := reg(i)
fmt.Println(" ", o, " is waiting")
go func() {
for range hk.Keydown() {
clx <- int(i)
tap := make(chan int)
stopTap := false
go func() {
for range tap {
robotgo.KeyTap(o)
}
}()
go func() {
for !stopTap {
tap <- 1
time.Sleep(100 * time.Millisecond)
}
}()
<-hk.Keyup()
stopTap = true
close(tap)
fmt.Println(" ", o, " released")
}
}()
go func() {
defer wg.Done()
for range clx {
time.Sleep(0 * time.Millisecond)
}
fmt.Println(" ", o, " is not waiting")
hk.Unregister()
}

err := listenHotkey(hotkey.KeyA, hotkey.ModCtrl, hotkey.ModShift)
if err != nil {
log.Println(err)
func keyToMouse(clx chan int, i hotkey.Key, o string) {
keydown, keyup, down := reg(i)
fmt.Println(" ", o, " is waiting")
go func() {
for range hk.Keydown() {
tap := make(chan int)
stopTap := false
go func() {
for range tap {
robotgo.KeyTap(o)
}
}()
go func() {
for !stopTap {
tap <- 1
time.Sleep(100 * time.Millisecond)
}
}()
<-hk.Keyup()
stopTap = true
close(tap)
fmt.Println(" ", o, " released")
}
}()
wg.Wait()
for range clx {
time.Sleep(0 * time.Millisecond)
}
fmt.Println(" ", o, " is not waiting")
hk.Unregister()
}
func reg(key chan int, i hotkey.Key) (*hotkey.Hotkey, *hotkey.Hotkey) {
keydown := make(chan int)
keyup := make(chan int)
hk := hotkey.New([]hotkey.Modifier{}, i)
hka := hotkey.New([]hotkey.Modifier{hotkey.ModOption}, i)
hkc := hotkey.New([]hotkey.Modifier{hotkey.ModCtrl}, i)
hks := hotkey.New([]hotkey.Modifier{hotkey.ModShift}, i)
hkm := hotkey.New([]hotkey.Modifier{hotkey.ModCmd}, i)
hk.Register()
hka.Register()
hkc.Register()
hks.Register()
hkm.Register()

func listenHotkey(key hotkey.Key, mods ...hotkey.Modifier) (err error) {
ms := []hotkey.Modifier{}
ms = append(ms, mods...)
hk := hotkey.New(ms, key)

err = hk.Register()
if err != nil {
return
select {
case <-hk.Keydown():
keydown <- int(i)
<- hk.Keyup()
keyup <- int(i)
case <-hka.Keydown():
keydown <- int(i)
<- hka.Keyup()
keyup <- int(i)
case <-hkc.Keydown():
keydown <- int(i)
<- hkc.Keyup()
keyup <- int(i)
case <-hks.Keydown():
keydown <- int(i)
<- hks.Keyup()
keyup <- int(i)
case <-hkm.Keydown():
keydown <- int(i)
<- hkm.Keyup()
keyup <- int(i)
}

// Blocks until the hokey is triggered.
<-hk.Keydown()
log.Printf("hotkey: %v is down\n", hk)
<-hk.Keyup()
log.Printf("hotkey: %v is up\n", hk)
hk.Unregister()
return
key <- hk.Keyup()
for range clx {
}
return keydown, keyup
}

// func ticker() {
// for {
// time.Sleep(1000 * time.Millisecond)
// fmt.Println("tick")
// }
// }
25 changes: 23 additions & 2 deletions DevTools/go/go.mod
Expand Up @@ -2,6 +2,27 @@ module clx

go 1.19

require golang.design/x/hotkey v0.4.0
require (
github.com/go-vgo/robotgo v0.100.10
golang.design/x/hotkey v0.4.0
)

require golang.design/x/mainthread v0.3.0 // indirect
require (
github.com/StackExchange/wmi v1.2.1 // indirect
github.com/go-ole/go-ole v1.2.6 // indirect
github.com/lxn/win v0.0.0-20210218163916-a377121e959e // indirect
github.com/otiai10/gosseract v2.2.1+incompatible // indirect
github.com/robotn/gohook v0.31.3 // indirect
github.com/robotn/xgb v0.0.0-20190912153532-2cb92d044934 // indirect
github.com/robotn/xgbutil v0.0.0-20190912154524-c861d6f87770 // indirect
github.com/shirou/gopsutil v3.21.10+incompatible // indirect
github.com/tklauser/go-sysconf v0.3.9 // indirect
github.com/tklauser/numcpus v0.3.0 // indirect
github.com/vcaesar/gops v0.21.3 // indirect
github.com/vcaesar/imgo v0.30.0 // indirect
github.com/vcaesar/keycode v0.10.0 // indirect
github.com/vcaesar/tt v0.20.0 // indirect
golang.design/x/mainthread v0.3.0 // indirect
golang.org/x/image v0.0.0-20211028202545-6944b10bf410 // indirect
golang.org/x/sys v0.0.0-20211123173158-ef496fb156ab // indirect
)
50 changes: 49 additions & 1 deletion DevTools/go/go.sum
@@ -1,6 +1,54 @@
github.com/BurntSushi/freetype-go v0.0.0-20160129220410-b763ddbfe298/go.mod h1:D+QujdIlUNfa0igpNMk6UIvlb6C252URs4yupRUV4lQ=
github.com/BurntSushi/graphics-go v0.0.0-20160129215708-b43f31a4a966/go.mod h1:Mid70uvE93zn9wgF92A/r5ixgnvX8Lh68fxp9KQBaI0=
github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA=
github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
github.com/go-vgo/robotgo v0.100.10 h1:bZe7AslG6oq5ops1SWUxsPfM9Z3QQvlqfA3ezxLFNO4=
github.com/go-vgo/robotgo v0.100.10/go.mod h1:7QeIpSHX7bjeXWRPxvQeKSx9mHI+3l80Ahq+CQF0C68=
github.com/lxn/win v0.0.0-20210218163916-a377121e959e h1:H+t6A/QJMbhCSEH5rAuRxh+CtW96g0Or0Fxa9IKr4uc=
github.com/lxn/win v0.0.0-20210218163916-a377121e959e/go.mod h1:KxxjdtRkfNoYDCUP5ryK7XJJNTnpC8atvtmTheChOtk=
github.com/otiai10/gosseract v2.2.1+incompatible h1:Ry5ltVdpdp4LAa2bMjsSJH34XHVOV7XMi41HtzL8X2I=
github.com/otiai10/gosseract v2.2.1+incompatible/go.mod h1:XrzWItCzCpFRZ35n3YtVTgq5bLAhFIkascoRo8G32QE=
github.com/otiai10/mint v1.3.0 h1:Ady6MKVezQwHBkGzLFbrsywyp09Ah7rkmfjV3Bcr5uc=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/robotn/gohook v0.31.3 h1:kGX8iukJ9ensVRwRKnTtdojAMQOpa6KFnXDi4OA4RaI=
github.com/robotn/gohook v0.31.3/go.mod h1:wyGik0yb4iwCfJjDprtNkTyxkgQWuKoVPQ3hkz6+6js=
github.com/robotn/xgb v0.0.0-20190912153532-2cb92d044934 h1:2lhSR8N3T6I30q096DT7/5AKEIcf1vvnnWAmS0wfnNY=
github.com/robotn/xgb v0.0.0-20190912153532-2cb92d044934/go.mod h1:SxQhJskUJ4rleVU44YvnrdvxQr0tKy5SRSigBrCgyyQ=
github.com/robotn/xgbutil v0.0.0-20190912154524-c861d6f87770 h1:2uX8QRLkkxn2EpAQ6I3KhA79BkdRZfvugJUzJadiJwk=
github.com/robotn/xgbutil v0.0.0-20190912154524-c861d6f87770/go.mod h1:svkDXUDQjUiWzLrA0OZgHc4lbOts3C+uRfP6/yjwYnU=
github.com/shirou/gopsutil v3.21.10+incompatible h1:AL2kpVykjkqeN+MFe1WcwSBVUjGjvdU8/ubvCuXAjrU=
github.com/shirou/gopsutil v3.21.10+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
github.com/tklauser/go-sysconf v0.3.9 h1:JeUVdAOWhhxVcU6Eqr/ATFHgXk/mmiItdKeJPev3vTo=
github.com/tklauser/go-sysconf v0.3.9/go.mod h1:11DU/5sG7UexIrp/O6g35hrWzu0JxlwQ3LSFUzyeuhs=
github.com/tklauser/numcpus v0.3.0 h1:ILuRUQBtssgnxw0XXIjKUC56fgnOrFoQQ/4+DeU2biQ=
github.com/tklauser/numcpus v0.3.0/go.mod h1:yFGUr7TUHQRAhyqBcEg0Ge34zDBAsIvJJcyE6boqnA8=
github.com/vcaesar/gops v0.21.3 h1:VR7amkxVv9CQfsotkXrmMyT19dVuNTa1PM/oopJeIc0=
github.com/vcaesar/gops v0.21.3/go.mod h1:3e2EnlZTI9/44bqzRwkeZ3s0ZQwK2Cn4QPLx8Ii8Agk=
github.com/vcaesar/imgo v0.30.0 h1:ODQVX0EFJEh+WkKahCBtE0SqcDCIjl/kjiOplR0Ouh8=
github.com/vcaesar/imgo v0.30.0/go.mod h1:8TGnt5hjaMgwDByvMFIzUDSh5uSea4n1tAbSvnhvA6U=
github.com/vcaesar/keycode v0.10.0 h1:Qx5QE8ZXHyRyjoA2QOxBp25OKMKB+zxMVqm0FWGV0d4=
github.com/vcaesar/keycode v0.10.0/go.mod h1:JNlY7xbKsh+LAGfY2j4M3znVrGEm5W1R8s/Uv6BJcfQ=
github.com/vcaesar/tt v0.20.0 h1:9t2Ycb9RNHcP0WgQgIaRKJBB+FrRdejuaL6uWIHuoBA=
github.com/vcaesar/tt v0.20.0/go.mod h1:GHPxQYhn+7OgKakRusH7KJ0M5MhywoeLb8Fcffs/Gtg=
golang.design/x/hotkey v0.4.0 h1:jmY6QJdakEdYn0KBm48IZRw3emBpDXRhIWUHqPVsWBY=
golang.design/x/hotkey v0.4.0/go.mod h1:M8SGcwFYHnKRa83FpTFQoZvPO5vVT+kWPztFqTQKmXA=
golang.design/x/mainthread v0.3.0 h1:UwFus0lcPodNpMOGoQMe87jSFwbSsEY//CA7yVmu4j8=
golang.design/x/mainthread v0.3.0/go.mod h1:vYX7cF2b3pTJMGM/hc13NmN6kblKnf4/IyvHeu259L0=
golang.org/x/sys v0.0.0-20201022201747-fb209a7c41cd h1:WgqgiQvkiZWz7XLhphjt2GI2GcGCTIZs9jqXMWmH+oc=
golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM=
golang.org/x/image v0.0.0-20211028202545-6944b10bf410 h1:hTftEOvwiOq2+O8k2D5/Q7COC7k5Qcrgc2TFURJYnvQ=
golang.org/x/image v0.0.0-20211028202545-6944b10bf410/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM=
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b h1:uwuIcX0g4Yl1NC5XAz37xsr2lTtcqevgzYNVt49waME=
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201018230417-eeed37f84f13/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201022201747-fb209a7c41cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210816074244-15123e1e1f71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211123173158-ef496fb156ab h1:rfJ1bsoJQQIAoAxTxB7bme+vHrNkRw8CqfsYh9w54cw=
golang.org/x/sys v0.0.0-20211123173158-ef496fb156ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=

0 comments on commit 3a67fe9

Please sign in to comment.