Compare commits
No commits in common. "572af746fa4698f3c998cae12370ee9ae6238042" and "5a4c207159f0c23796362ecc74e352868051973b" have entirely different histories.
572af746fa
...
5a4c207159
@ -68,17 +68,6 @@ var (
|
|||||||
"RSUPER": RSUPER,
|
"RSUPER": RSUPER,
|
||||||
"NONE": NONE,
|
"NONE": NONE,
|
||||||
}
|
}
|
||||||
AllModifiers = []string{
|
|
||||||
"LSHIFT",
|
|
||||||
"LCTRL",
|
|
||||||
"LALT",
|
|
||||||
"LSUPER",
|
|
||||||
"RSHIFT",
|
|
||||||
"RCTRL",
|
|
||||||
"RALT",
|
|
||||||
"RSUPER",
|
|
||||||
"NONE",
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewKeyboard(Modifiers map[string]byte, kemapOrder []string, KeymapPath string, hidg0 io.Writer) *Keyboard {
|
func NewKeyboard(Modifiers map[string]byte, kemapOrder []string, KeymapPath string, hidg0 io.Writer) *Keyboard {
|
||||||
@ -262,7 +251,7 @@ func (k *Keyboard) Hold(press [8]byte, file io.Writer) error {
|
|||||||
func (k *Keyboard) keymapto0() error {
|
func (k *Keyboard) keymapto0() error {
|
||||||
if len(k.KeymapOrder) > 1 {
|
if len(k.KeymapOrder) > 1 {
|
||||||
for i := 0; i < len(k.KeymapOrder)-(k.currentKeyMap); i++ {
|
for i := 0; i < len(k.KeymapOrder)-(k.currentKeyMap); i++ {
|
||||||
err := k.Press(k.KeymapShortcut, k.Hidg0)
|
err := k.Press([8]byte{LALT, 0x00, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00}, k.Hidg0)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
120
ghid/keys.go
120
ghid/keys.go
@ -1,120 +0,0 @@
|
|||||||
package hid
|
|
||||||
|
|
||||||
var (
|
|
||||||
StandardKeys = map[string]byte{
|
|
||||||
"␀": 0x00,
|
|
||||||
"a": 0x04,
|
|
||||||
"A": 0x04,
|
|
||||||
"b": 0x05,
|
|
||||||
"B": 0x05,
|
|
||||||
"c": 0x06,
|
|
||||||
"C": 0x06,
|
|
||||||
"d": 0x07,
|
|
||||||
"D": 0x07,
|
|
||||||
"e": 0x08,
|
|
||||||
"E": 0x08,
|
|
||||||
"f": 0x09,
|
|
||||||
"F": 0x09,
|
|
||||||
"g": 0x0A,
|
|
||||||
"G": 0x0A,
|
|
||||||
"h": 0x0B,
|
|
||||||
"H": 0x0B,
|
|
||||||
"i": 0x0C,
|
|
||||||
"I": 0x0C,
|
|
||||||
"j": 0x0D,
|
|
||||||
"J": 0x0D,
|
|
||||||
"k": 0x0E,
|
|
||||||
"K": 0x0E,
|
|
||||||
"l": 0x0F,
|
|
||||||
"L": 0x0F,
|
|
||||||
"m": 0x10,
|
|
||||||
"M": 0x10,
|
|
||||||
"n": 0x11,
|
|
||||||
"N": 0x11,
|
|
||||||
"o": 0x12,
|
|
||||||
"O": 0x12,
|
|
||||||
"p": 0x13,
|
|
||||||
"P": 0x13,
|
|
||||||
"q": 0x14,
|
|
||||||
"Q": 0x14,
|
|
||||||
"r": 0x15,
|
|
||||||
"R": 0x15,
|
|
||||||
"s": 0x16,
|
|
||||||
"S": 0x16,
|
|
||||||
"t": 0x17,
|
|
||||||
"T": 0x17,
|
|
||||||
"u": 0x18,
|
|
||||||
"U": 0x18,
|
|
||||||
"v": 0x19,
|
|
||||||
"V": 0x19,
|
|
||||||
"w": 0x1A,
|
|
||||||
"W": 0x1A,
|
|
||||||
"x": 0x1B,
|
|
||||||
"X": 0x1B,
|
|
||||||
"y": 0x1C,
|
|
||||||
"Y": 0x1C,
|
|
||||||
"z": 0x1D,
|
|
||||||
"Z": 0x1D,
|
|
||||||
"!": 0x1E,
|
|
||||||
"1": 0x1E,
|
|
||||||
"2": 0x1F,
|
|
||||||
"@": 0x1F,
|
|
||||||
"#": 0x20,
|
|
||||||
"3": 0x20,
|
|
||||||
"$": 0x21,
|
|
||||||
"4": 0x21,
|
|
||||||
"%": 0x22,
|
|
||||||
"5": 0x22,
|
|
||||||
"6": 0x23,
|
|
||||||
"^": 0x23,
|
|
||||||
"&": 0x24,
|
|
||||||
"7": 0x24,
|
|
||||||
"*": 0x25,
|
|
||||||
"8": 0x25,
|
|
||||||
"(": 0x26,
|
|
||||||
"9": 0x26,
|
|
||||||
")": 0x27,
|
|
||||||
"0": 0x27,
|
|
||||||
"\n": 0x28,
|
|
||||||
"⎋": 0x29, // esc
|
|
||||||
"␛": 0x29, // esc
|
|
||||||
"⌫": 0x2A, // backspace
|
|
||||||
"\t": 0x2B,
|
|
||||||
" ": 0x2C,
|
|
||||||
"-": 0x2D,
|
|
||||||
"_": 0x2D,
|
|
||||||
"+": 0x2E,
|
|
||||||
"=": 0x2E,
|
|
||||||
"[": 0x2F,
|
|
||||||
"{": 0x2F,
|
|
||||||
"]": 0x30,
|
|
||||||
"}": 0x30,
|
|
||||||
"\\": 0x31,
|
|
||||||
"|": 0x31,
|
|
||||||
":": 0x33,
|
|
||||||
";": 0x33,
|
|
||||||
"'": 0x34,
|
|
||||||
"\"": 0x34,
|
|
||||||
"`": 0x35,
|
|
||||||
"~": 0x35,
|
|
||||||
",": 0x36,
|
|
||||||
"<": 0x36,
|
|
||||||
".": 0x37,
|
|
||||||
">": 0x37,
|
|
||||||
"/": 0x38,
|
|
||||||
"?": 0x38,
|
|
||||||
"⇪": 0x39,
|
|
||||||
"⎙": 0x46,
|
|
||||||
"⏸️": 0x48,
|
|
||||||
"⎀": 0x49,
|
|
||||||
"↖": 0x4A,
|
|
||||||
"⇞": 0x4B,
|
|
||||||
"⌦": 0x4C,
|
|
||||||
"↘": 0x4D,
|
|
||||||
"⇟": 0x4E,
|
|
||||||
"→": 0x4F,
|
|
||||||
"←": 0x50,
|
|
||||||
"↑": 0x51,
|
|
||||||
"↓": 0x52,
|
|
||||||
}
|
|
||||||
)
|
|
2
go.mod
2
go.mod
@ -1,3 +1,3 @@
|
|||||||
module gitea.narnian.us/lordwelch/hid
|
module github.com/lordwelch/hid
|
||||||
|
|
||||||
go 1.18
|
go 1.18
|
||||||
|
67
main.go
67
main.go
@ -1,57 +1,16 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
"strings"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
hid "gitea.narnian.us/lordwelch/hid/ghid"
|
hid "github.com/lordwelch/hid/ghid"
|
||||||
)
|
)
|
||||||
|
|
||||||
func contains(str string, find []string) bool {
|
|
||||||
str = strings.ToLower(str)
|
|
||||||
for _, s := range find {
|
|
||||||
if strings.Contains(str, strings.ToLower(s)) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
func parse_shortcut(shortcut string) ([8]byte, error) {
|
|
||||||
var (
|
|
||||||
modifiers = []string{}
|
|
||||||
key = ""
|
|
||||||
curModifier byte = 0
|
|
||||||
curKey byte = 0
|
|
||||||
)
|
|
||||||
strs := strings.SplitN(strings.ToLower(shortcut), " ", 2)
|
|
||||||
if len(strs) > 1 {
|
|
||||||
if contains(strs[0], hid.AllModifiers) {
|
|
||||||
modifiers = strings.Split(strs[0], "|")
|
|
||||||
} else {
|
|
||||||
key = strings.TrimSpace(strs[0])
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
modifiers = strings.Split(strs[0], "|")
|
|
||||||
key = strings.TrimSpace(strs[1])
|
|
||||||
}
|
|
||||||
for _, v := range modifiers {
|
|
||||||
curModifier |= hid.Modifiers[strings.TrimSpace(v)]
|
|
||||||
}
|
|
||||||
if id, ok := hid.StandardKeys[key]; ok {
|
|
||||||
curKey = id
|
|
||||||
} else {
|
|
||||||
return [8]byte{}, errors.New("Key not found")
|
|
||||||
}
|
|
||||||
return [8]byte{curModifier, 0x0, curKey}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
var (
|
var (
|
||||||
Shortcut string
|
Shortcut string
|
||||||
@ -64,13 +23,12 @@ func main() {
|
|||||||
ghid *os.File
|
ghid *os.File
|
||||||
tmp *os.File
|
tmp *os.File
|
||||||
keyboard *hid.Keyboard
|
keyboard *hid.Keyboard
|
||||||
keymaps []string
|
|
||||||
)
|
)
|
||||||
if _, exists := os.LookupEnv("XDG_CONFIG_HOME"); !exists {
|
if _, exists := os.LookupEnv("XDG_CONFIG_HOME"); !exists {
|
||||||
_ = os.Setenv("XDG_CONFIG_HOME", path.Join(os.ExpandEnv("$HOME"), ".config"))
|
_ = os.Setenv("XDG_CONFIG_HOME", path.Join(os.ExpandEnv("$HOME"), ".config"))
|
||||||
}
|
}
|
||||||
flag.StringVar(&Shortcut, "shortcut", "", "Keymap cycle shortcut")
|
flag.StringVar(&Shortcut, "shortcut", "", "Keymap cycle shortcut")
|
||||||
flag.StringVar(&Shortcut, "s", "LALT ⇪", "Keymap cycle shortcut")
|
flag.StringVar(&Shortcut, "s", "", "Keymap cycle shortcut")
|
||||||
flag.StringVar(&keymapPath, "path", path.Join(os.ExpandEnv("$XDG_CONFIG_HOME"), "hid"), "Path to config dir default: $XDG_CONFIG_HOME")
|
flag.StringVar(&keymapPath, "path", path.Join(os.ExpandEnv("$XDG_CONFIG_HOME"), "hid"), "Path to config dir default: $XDG_CONFIG_HOME")
|
||||||
flag.StringVar(&keymapPath, "p", path.Join(os.ExpandEnv("$XDG_CONFIG_HOME"), "hid"), "Path to config dir default: $XDG_CONFIG_HOME")
|
flag.StringVar(&keymapPath, "p", path.Join(os.ExpandEnv("$XDG_CONFIG_HOME"), "hid"), "Path to config dir default: $XDG_CONFIG_HOME")
|
||||||
flag.StringVar(&filePath, "f", "-", "The file to read content from. Defaults to stdin")
|
flag.StringVar(&filePath, "f", "-", "The file to read content from. Defaults to stdin")
|
||||||
@ -85,21 +43,6 @@ func main() {
|
|||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
fmt.Println(keymapPath)
|
fmt.Println(keymapPath)
|
||||||
dirs, err := os.ReadDir(keymapPath)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
keymap:
|
|
||||||
for _, requestedKeymap := range flag.Args() {
|
|
||||||
for _, dir := range dirs {
|
|
||||||
if strings.HasPrefix(strings.ToLower(dir.Name()), strings.ToLower(requestedKeymap)) {
|
|
||||||
keymaps = append(keymaps, dir.Name())
|
|
||||||
break keymap
|
|
||||||
}
|
|
||||||
}
|
|
||||||
panic(fmt.Sprintf("Keymap %q not found", requestedKeymap))
|
|
||||||
}
|
|
||||||
|
|
||||||
if filePath != "-" {
|
if filePath != "-" {
|
||||||
tmp, err = os.Open(path.Clean(filePath))
|
tmp, err = os.Open(path.Clean(filePath))
|
||||||
@ -115,13 +58,9 @@ keymap:
|
|||||||
}
|
}
|
||||||
defer ghid.Close()
|
defer ghid.Close()
|
||||||
|
|
||||||
keyboard = hid.NewKeyboard(hid.Modifiers, keymaps, keymapPath, ghid)
|
keyboard = hid.NewKeyboard(hid.Modifiers, flag.Args(), keymapPath, ghid)
|
||||||
keyboard.PressDelay = pressDelay
|
keyboard.PressDelay = pressDelay
|
||||||
keyboard.ReleaseDelay = releaseDelay
|
keyboard.ReleaseDelay = releaseDelay
|
||||||
keyboard.KeymapShortcut, err = parse_shortcut(Shortcut)
|
|
||||||
if err != nil {
|
|
||||||
panic(fmt.Errorf("error parsing shortcut: %w", err))
|
|
||||||
}
|
|
||||||
|
|
||||||
_, err = io.Copy(keyboard, os.Stdin)
|
_, err = io.Copy(keyboard, os.Stdin)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user