Compare commits
4 commits
Author | SHA1 | Date | |
---|---|---|---|
|
945a7daede | ||
|
7c0a53ef94 | ||
|
5bc814cb39 | ||
|
b5812c001d |
7 changed files with 23 additions and 11 deletions
|
@ -1,2 +1,2 @@
|
|||
# This allows users in group input to use dotool without root permissions.
|
||||
KERNEL=="uinput", GROUP="input", MODE="0660", OPTIONS+="static_node=uinput"
|
||||
KERNEL=="uinput", GROUP="input", MODE="0620", OPTIONS+="static_node=uinput"
|
||||
|
|
|
@ -2,6 +2,12 @@
|
|||
|
||||
Notable changes to dotool will be documented in this file.
|
||||
|
||||
## [1.5](https://git.sr.ht/~geb/dotool/refs/1.5)
|
||||
|
||||
### Fixed
|
||||
|
||||
- The selecting of the fewest modifiers for simulating keys.
|
||||
|
||||
## [1.4](https://git.sr.ht/~geb/dotool/refs/1.4)
|
||||
|
||||
### Added
|
||||
|
@ -18,7 +24,7 @@ Notable changes to dotool will be documented in this file.
|
|||
|
||||
### Fixed
|
||||
|
||||
- Now prefers the fewest modifiers for simulating keys.
|
||||
- Now prefers the fewest modifiers for simulating keys. (UPDATE: see 1.5)
|
||||
|
||||
## [1.3](https://git.sr.ht/~geb/dotool/refs/1.3)
|
||||
|
||||
|
|
2
build.sh
2
build.sh
|
@ -1,6 +1,6 @@
|
|||
#!/bin/sh
|
||||
# ./build.sh ['install']
|
||||
: "${DOTOOL_VERSION=$(git describe --long --abbrev=12 --tags --dirty 2>/dev/null || echo 1.4)}"
|
||||
: "${DOTOOL_VERSION=$(git describe --long --abbrev=12 --tags --dirty 2>/dev/null || echo 1.5)}"
|
||||
: "${DOTOOL_DESTDIR=}"
|
||||
: "${DOTOOL_BINDIR=usr/local/bin}"
|
||||
: "${DOTOOL_UDEV_RULES_DIR=etc/udev/rules.d}"
|
||||
|
|
|
@ -62,6 +62,8 @@ func log(err error) {
|
|||
type Chord struct {
|
||||
Super, AltGr, Ctrl, Alt, Shift bool
|
||||
Key int
|
||||
|
||||
level uint32 // just for initKeys
|
||||
}
|
||||
|
||||
func parseChord(keymap *xkb.Keymap, chord string) (Chord, error) {
|
||||
|
|
2
go.mod
2
go.mod
|
@ -4,5 +4,5 @@ go 1.19
|
|||
|
||||
require (
|
||||
git.sr.ht/~geb/opt v0.0.0-20230911153257-e72225a1933c
|
||||
github.com/bendahl/uinput v1.6.2
|
||||
github.com/bendahl/uinput v1.7.0
|
||||
)
|
||||
|
|
4
go.sum
4
go.sum
|
@ -1,4 +1,4 @@
|
|||
git.sr.ht/~geb/opt v0.0.0-20230911153257-e72225a1933c h1:gIC1gnCgoasPHks1x6MB+bgDmIWMxKc5HIJPJrsV5Ck=
|
||||
git.sr.ht/~geb/opt v0.0.0-20230911153257-e72225a1933c/go.mod h1:S6h1g8P7DyG7i7YIHZ5IpYbC6lzZB9DYIEl8PyXOmsg=
|
||||
github.com/bendahl/uinput v1.6.2 h1:tIz52QyKDx1i1nObUkts3AZa/bULfLhPA5a+xKGlRPI=
|
||||
github.com/bendahl/uinput v1.6.2/go.mod h1:Np7w3DINc9wB83p12fTAM3DPPhFnAKP0WTXRqCQJ6Z8=
|
||||
github.com/bendahl/uinput v1.7.0 h1:nA4fm8Wu8UYNOPykIZm66nkWEyvxzfmJ8YC02PM40jg=
|
||||
github.com/bendahl/uinput v1.7.0/go.mod h1:Np7w3DINc9wB83p12fTAM3DPPhFnAKP0WTXRqCQJ6Z8=
|
||||
|
|
14
keys.go
14
keys.go
|
@ -607,11 +607,14 @@ var DeadKeyResults = []DeadKeyResult{
|
|||
{"dead_tilde", "Y", 'Ỹ'},
|
||||
}
|
||||
|
||||
func newChord(keymap *xkb.Keymap, mask, code uint32) Chord{
|
||||
func newChord(keymap *xkb.Keymap, code, level uint32) Chord {
|
||||
altGrMask := uint32(1) << keymap.ModGetIndex("Mod5")
|
||||
ctrlMask := uint32(1) << keymap.ModGetIndex(xkb.ModNameCtrl)
|
||||
altMask := uint32(1) << keymap.ModGetIndex(xkb.ModNameAlt)
|
||||
shiftMask := uint32(1) << keymap.ModGetIndex(xkb.ModNameShift)
|
||||
|
||||
// TODO support layouts other than 0
|
||||
mask := keymap.KeyGetMod(code, 0, level)
|
||||
return Chord{
|
||||
false,
|
||||
(mask & altGrMask) != 0,
|
||||
|
@ -619,6 +622,7 @@ func newChord(keymap *xkb.Keymap, mask, code uint32) Chord{
|
|||
(mask & altMask) != 0,
|
||||
(mask & shiftMask) != 0,
|
||||
int(code) - 8,
|
||||
level,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -628,16 +632,16 @@ func initKeys(keymap *xkb.Keymap) {
|
|||
numLevels := keymap.NumLevelsForKey(code, 0)
|
||||
for level := uint32(0); level < numLevels; level++ {
|
||||
for _, sym := range keymap.KeyGetSymsByLevel(code, 0, level) {
|
||||
chord := newChord(keymap, keymap.KeyGetMod(code, 0, level), code)
|
||||
chord := newChord(keymap, code, level)
|
||||
for name, s := range linuxXSyms {
|
||||
if s == sym {
|
||||
if _, ok := LinuxKeys[name]; !ok {
|
||||
if l, ok := LinuxKeys[name]; !ok || level < l.level {
|
||||
LinuxKeys[name] = chord
|
||||
}
|
||||
}
|
||||
}
|
||||
name := xkb.KeysymGetName(sym)
|
||||
if _, ok := XKeys[name]; !ok {
|
||||
if x, ok := XKeys[name]; !ok || level < x.level {
|
||||
XKeys[name] = chord
|
||||
}
|
||||
}
|
||||
|
@ -657,7 +661,7 @@ func getChord(keymap *xkb.Keymap, keysym uint32) Chord {
|
|||
for level := uint32(0); level < numLevels; level++ {
|
||||
for _, sym := range keymap.KeyGetSymsByLevel(code, 0, level) {
|
||||
if sym == keysym {
|
||||
return newChord(keymap, keymap.KeyGetMod(code, 0, level), code)
|
||||
return newChord(keymap, code, level)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue