Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3 changed files
with
226 additions
and
36 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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") | ||
// } | ||
// } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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= |