24 Commits

Author SHA1 Message Date
45f9df45bb cleanup 2018-11-09 17:23:07 -08:00
349cd91f66 Fix typo and fix ReleaseDelay assignment 2018-11-07 18:08:02 -08:00
5fbef47dde remove unused const and ignore single newline directly after delay 2018-11-05 11:47:11 -08:00
0b2415ac40 cleaned up some code
handle delays better
add ability to have comments
add defaults to keymaps
2018-11-04 23:59:13 -08:00
bf090a5b67 verbose + fix delay 2018-10-29 22:31:36 -07:00
cd5638b988 sync 2018-10-29 22:07:51 -07:00
39176aac3c enforce delay and add delay to keymap 2018-10-29 21:57:36 -07:00
02aa4cd6c2 restructure 2018-10-20 16:50:08 -07:00
47d8950fd4 cleanup 2018-10-20 16:49:09 -07:00
9d04ddc8be Restructure to library
Implemented io.Writer interface. Might want to use a different interface
add a delay character
2018-06-22 20:28:21 -07:00
394b44e9df Make report carry as many keys as possible (over 50% speedup)
Need to look into not sending a blank report every time
2018-01-25 22:26:31 -08:00
2697df4352 Fix return keymap to 0
No longer attempts to change keymap when there is only one
Fixed typo in keymap
2018-01-24 14:43:33 -08:00
f882f599ff Make argument required 2018-01-24 12:58:03 -08:00
f264f9c017 Apparently I don't look at my source code before commiting 2018-01-24 12:32:42 -08:00
6b6b3db9cc Changed modifier from string to array of string updated code accordingly
Added tiro keymap
2018-01-24 10:21:44 -08:00
b08c2fa792 Organized qwerty by row
Added tengwar layouts
Made the changeKeymap function actually work
Added keymapto0 so that the app consistently types correctly
2018-01-23 23:12:41 -08:00
8b4a2dc9f9 Do not panic if key is not in keymap 2017-11-24 21:48:21 -07:00
ef46068793 Missed some printfs 2017-11-10 14:35:03 -07:00
7b401e28b8 Forgot to open the correct file 2017-11-10 14:29:40 -07:00
ef37cc4317 Use XDG_CONFIG_HOME
Remove extra output
2017-11-10 14:15:24 -07:00
be99ea3d81 Reduce output
Switch to using A map to get the flag value
2017-11-08 11:15:58 -07:00
4cbe2d8e67 Stop unnecessary panic 2017-11-07 14:57:24 -07:00
586e3d2010 Add tab,newline and space 2017-11-07 14:37:37 -07:00
cd28bee157 Sort and fmt 2017-11-07 11:52:01 -07:00
10 changed files with 2399 additions and 1260 deletions

View File

@ -1,377 +0,0 @@
: {
"modifier": "00000000",
"key": 39
},
: {
"modifier": "00000000",
"key": 30
},
: {
"modifier": "00000000",
"key": 31
},
: {
"modifier": "00000000",
"key": 32
},
: {
"modifier": "00000000",
"key": 33
},
: {
"modifier": "00000000",
"key": 34
},
: {
"modifier": "00000000",
"key": 35
},
: {
"modifier": "00000000",
"key": 36
},
: {
"modifier": "00000000",
"key": 37
},
: {
"modifier": "00000000",
"key": 38
},
: {
"modifier": "00000000",
"key": 53
},
: {
"modifier": "00000000",
"key": 47
},
: {
"modifier": "00000000",
"key": 48
},
: {
"modifier": "00000000",
"key": 52
},
: {
"modifier": "00000000",
"key": 54
},
: {
"modifier": "00000000",
"key": 55
},
: {
"modifier": "00000000",
"key": 19
},
: {
"modifier": "00000000",
"key": 28
},
: {
"modifier": "00000000",
"key": 9
},
: {
"modifier": "00000000",
"key": 10
},
: {
"modifier": "00000000",
"key": 6
},
: {
"modifier": "00000000",
"key": 21
},
: {
"modifier": "00000000",
"key": 15
},
: {
"modifier": "00000000",
"key": 56
},
: {
"modifier": "00000000",
"key": 46
},
: {
"modifier": "00000000",
"key": 49
},
: {
"modifier": "00000000",
"key": 4
},
: {
"modifier": "00000000",
"key": 18
},
: {
"modifier": "00000000",
"key": 8
},
: {
"modifier": "00000000",
"key": 24
},
: {
"modifier": "00000000",
"key": 12
},
: {
"modifier": "00000000",
"key": 7
},
: {
"modifier": "00000000",
"key": 11
},
: {
"modifier": "00000000",
"key": 23
},
: {
"modifier": "00000000",
"key": 17
},
: {
"modifier": "00000000",
"key": 22
},
: {
"modifier": "00000000",
"key": 45
},
: {
"modifier": "00000000",
"key": 51
},
: {
"modifier": "00000000",
"key": 20
},
: {
"modifier": "00000000",
"key": 13
},
: {
"modifier": "00000000",
"key": 14
},
: {
"modifier": "00000000",
"key": 27
},
: {
"modifier": "00000000",
"key": 5
},
: {
"modifier": "00000000",
"key": 16
},
: {
"modifier": "00000000",
"key": 26
},
: {
"modifier": "00000000",
"key": 25
},
: {
"modifier": "00000000",
"key": 29
},
: {
"modifier": "00000010",
"key": 53
},
: {
"modifier": "00000010",
"key": 30
},
: {
"modifier": "00000010",
"key": 31
},
: {
"modifier": "00000010",
"key": 32
},
: {
"modifier": "00000010",
"key": 33
},
: {
"modifier": "00000010",
"key": 34
},
: {
"modifier": "00000010",
"key": 35
},
: {
"modifier": "00000010",
"key": 36
},
: {
"modifier": "00000010",
"key": 37
},
: {
"modifier": "00000010",
"key": 38
},
: {
"modifier": "00000010",
"key": 39
},
: {
"modifier": "00000010",
"key": 47
},
: {
"modifier": "00000010",
"key": 48
},
: {
"modifier": "00000010",
"key": 52
},
: {
"modifier": "00000010",
"key": 54
},
: {
"modifier": "00000010",
"key": 55
},
: {
"modifier": "00000010",
"key": 19
},
: {
"modifier": "00000010",
"key": 28
},
: {
"modifier": "00000010",
"key": 9
},
: {
"modifier": "00000010",
"key": 10
},
: {
"modifier": "00000010",
"key": 6
},
: {
"modifier": "00000010",
"key": 21
},
: {
"modifier": "00000010",
"key": 15
},
: {
"modifier": "00000010",
"key": 56
},
: {
"modifier": "00000010",
"key": 46
},
: {
"modifier": "00000010",
"key": 49
},
: {
"modifier": "00000010",
"key": 4
},
: {
"modifier": "00000010",
"key": 18
},
: {
"modifier": "00000010",
"key": 8
},
: {
"modifier": "00000010",
"key": 24
},
: {
"modifier": "00000010",
"key": 12
},
: {
"modifier": "00000010",
"key": 7
},
: {
"modifier": "00000010",
"key": 11
},
: {
"modifier": "00000010",
"key": 23
},
: {
"modifier": "00000010",
"key": 17
},
: {
"modifier": "00000010",
"key": 22
},
: {
"modifier": "00000010",
"key": 45
},
: {
"modifier": "00000010",
"key": 51
},
: {
"modifier": "00000010",
"key": 20
},
: {
"modifier": "00000010",
"key": 13
},
: {
"modifier": "00000010",
"key": 14
},
: {
"modifier": "00000010",
"key": 27
},
: {
"modifier": "00000010",
"key": 5
},
: {
"modifier": "00000010",
"key": 16
},
: {
"modifier": "00000010",
"key": 26
},
: {
"modifier": "00000010",
"key": 25
},
: {
"modifier": "00000010",
"key": 29
}

View File

@ -1,378 +0,0 @@
{
"0" : {
"modifier": "00000000",
"decimal": 39
},
"1" : {
"modifier": "00000000",
"decimal": 30
},
"2" : {
"modifier": "00000000",
"decimal": 31
},
"3" : {
"modifier": "00000000",
"decimal": 32
},
"4" : {
"modifier": "00000000",
"decimal": 33
},
"5" : {
"modifier": "00000000",
"decimal": 34
},
"6" : {
"modifier": "00000000",
"decimal": 35
},
"7" : {
"modifier": "00000000",
"decimal": 36
},
"8" : {
"modifier": "00000000",
"decimal": 37
},
"9" : {
"modifier": "00000000",
"decimal": 38
},
"`" : {
"modifier": "00000000",
"decimal": 53
},
"/" : {
"modifier": "00000000",
"decimal": 47
},
"=" : {
"modifier": "00000000",
"decimal": 48
},
"-" : {
"modifier": "00000000",
"decimal": 52
},
"w" : {
"modifier": "00000000",
"decimal": 54
},
"v" : {
"modifier": "00000000",
"decimal": 55
},
"l" : {
"modifier": "00000000",
"decimal": 19
},
"f" : {
"modifier": "00000000",
"decimal": 28
},
"u" : {
"modifier": "00000000",
"decimal": 9
},
"i" : {
"modifier": "00000000",
"decimal": 10
},
"j" : {
"modifier": "00000000",
"decimal": 6
},
"p" : {
"modifier": "00000000",
"decimal": 21
},
"n" : {
"modifier": "00000000",
"decimal": 15
},
"z" : {
"modifier": "00000000",
"decimal": 56
},
"]" : {
"modifier": "00000000",
"decimal": 46
},
"\\" : {
"modifier": "00000000",
"decimal": 49
},
"a" : {
"modifier": "00000000",
"decimal": 4
},
"r" : {
"modifier": "00000000",
"decimal": 18
},
"." : {
"modifier": "00000000",
"decimal": 8
},
"g" : {
"modifier": "00000000",
"decimal": 24
},
"c" : {
"modifier": "00000000",
"decimal": 12
},
"e" : {
"modifier": "00000000",
"decimal": 7
},
"d" : {
"modifier": "00000000",
"decimal": 11
},
"y" : {
"modifier": "00000000",
"decimal": 23
},
"b" : {
"modifier": "00000000",
"decimal": 17
},
"o" : {
"modifier": "00000000",
"decimal": 22
},
"[" : {
"modifier": "00000000",
"decimal": 45
},
"s" : {
"modifier": "00000000",
"decimal": 51
},
"'" : {
"modifier": "00000000",
"decimal": 20
},
"h" : {
"modifier": "00000000",
"decimal": 13
},
"t" : {
"modifier": "00000000",
"decimal": 14
},
"q" : {
"modifier": "00000000",
"decimal": 27
},
"x" : {
"modifier": "00000000",
"decimal": 5
},
"m" : {
"modifier": "00000000",
"decimal": 16
},
"," : {
"modifier": "00000000",
"decimal": 26
},
"k" : {
"modifier": "00000000",
"decimal": 25
},
";" : {
"modifier": "00000000",
"decimal": 29
},
"~" : {
"modifier": "00000010",
"decimal": 53
},
"!" : {
"modifier": "00000010",
"decimal": 30
},
"@" : {
"modifier": "00000010",
"decimal": 31
},
"#" : {
"modifier": "00000010",
"decimal": 32
},
"$" : {
"modifier": "00000010",
"decimal": 33
},
"%" : {
"modifier": "00000010",
"decimal": 34
},
"^" : {
"modifier": "00000010",
"decimal": 35
},
"&" : {
"modifier": "00000010",
"decimal": 36
},
"*" : {
"modifier": "00000010",
"decimal": 37
},
"(" : {
"modifier": "00000010",
"decimal": 38
},
")" : {
"modifier": "00000010",
"decimal": 39
},
"?" : {
"modifier": "00000010",
"decimal": 47
},
"+" : {
"modifier": "00000010",
"decimal": 48
},
"_" : {
"modifier": "00000010",
"decimal": 52
},
"W" : {
"modifier": "00000010",
"decimal": 54
},
"V" : {
"modifier": "00000010",
"decimal": 55
},
"L" : {
"modifier": "00000010",
"decimal": 19
},
"F" : {
"modifier": "00000010",
"decimal": 28
},
"U" : {
"modifier": "00000010",
"decimal": 9
},
"I" : {
"modifier": "00000010",
"decimal": 10
},
"J" : {
"modifier": "00000010",
"decimal": 6
},
"P" : {
"modifier": "00000010",
"decimal": 21
},
"N" : {
"modifier": "00000010",
"decimal": 15
},
"Z" : {
"modifier": "00000010",
"decimal": 56
},
"}" : {
"modifier": "00000010",
"decimal": 46
},
"|" : {
"modifier": "00000010",
"decimal": 49
},
"A" : {
"modifier": "00000010",
"decimal": 4
},
"R" : {
"modifier": "00000010",
"decimal": 18
},
">" : {
"modifier": "00000010",
"decimal": 8
},
"G" : {
"modifier": "00000010",
"decimal": 24
},
"C" : {
"modifier": "00000010",
"decimal": 12
},
"E" : {
"modifier": "00000010",
"decimal": 7
},
"D" : {
"modifier": "00000010",
"decimal": 11
},
"Y" : {
"modifier": "00000010",
"decimal": 23
},
"B" : {
"modifier": "00000010",
"decimal": 17
},
"O" : {
"modifier": "00000010",
"decimal": 22
},
"{" : {
"modifier": "00000010",
"decimal": 45
},
"S" : {
"modifier": "00000010",
"decimal": 51
},
"\"" : {
"modifier": "00000010",
"decimal": 20
},
"H" : {
"modifier": "00000010",
"decimal": 13
},
"T" : {
"modifier": "00000010",
"decimal": 14
},
"Q" : {
"modifier": "00000010",
"decimal": 27
},
"X" : {
"modifier": "00000010",
"decimal": 5
},
"M" : {
"modifier": "00000010",
"decimal": 16
},
"<" : {
"modifier": "00000010",
"decimal": 26
},
"K" : {
"modifier": "00000010",
"decimal": 25
},
":" : {
"modifier": "00000010",
"decimal": 29
}
}

274
ghid/keyboard.go Normal file
View File

@ -0,0 +1,274 @@
package hid
import (
"bytes"
"encoding/json"
"fmt"
"io"
"io/ioutil"
"path"
"strconv"
"strings"
"time"
"unicode"
"unicode/utf8"
)
type syncer interface {
Sync() error
}
// A Key is a USB HID value
type Key struct {
Modifier []string `json:"modifier"`
Decimal byte `json:"decimal"`
PressDelayDelimiter bool `json:"pressDelayDelimiter,omitempty"`
ReleaseDelayDelimiter bool `json:"releaseDelayDelimiter,omitempty"`
Comment bool `json:"comment,omitempty"`
}
// A Keymap is a json representation of the unicode rune mapped to its USB HID value
type Keymap map[string]Key
// Keyboard is a type to attach the methods to if someone wants to use it
type Keyboard struct{}
// bit flag of modifier keys
const (
LCTRL byte = 1 << iota
LSHIFT
LALT
LSUPER
RCTRL
RSHIFT
RALT
RSUPER
NONE = 0
)
var (
PressDelay time.Duration // PressDelay is the time in ms to delay before sending a press event
ReleaseDelay time.Duration // ReleaseDelay is the time in ms to wait before sending the release event
KeymapOrder []string // Keymap Order is the order in which the specified keymaps cycle on the computer
KeymapShortcut [8]byte // KeymapShortcut is the key combo that will cycle the current keymap by one
ErrOnUnknownKey bool // ErrOnUnknownKey whether or not to fail if the unicode rune is invalid or is not in the specified keymaps
KeymapPath string // KeymapPath is the pathe to where the keymap files are stored
currentKeyMap int
keys = make(map[string]Keymap)
flags = map[string]byte{
"LSHIFT": LSHIFT,
"LCTRL": LCTRL,
"LALT": LALT,
"LSUPER": LSUPER,
"RSHIFT": RSHIFT,
"RCTRL": RCTRL,
"RALT": RALT,
"RSUPER": RSUPER,
"NONE": NONE,
}
Hidg0 io.Writer
)
func (k Keyboard) Write(p []byte) (n int, err error) {
return write(p)
}
func Write(r io.Reader) error {
_, err := io.Copy(Keyboard{}, r)
return err
}
// io.writer probably isn't the best interface to use for this
func write(p []byte) (n int, err error) {
var index int
for index < len(p) {
var (
r rune
s int
flag byte
report [8]byte
)
press:
for i := 2; i < 8 && index < len(p); i++ {
var (
mod byte
)
r, s = utf8.DecodeRune(p[index:])
if r == utf8.RuneError {
return index, fmt.Errorf("invalid rune: 0x%X", p[index]) // This probably screws things up if the last rune in 'p' is incomplete
}
cur, ok := CurrentKeymap()[string(r)]
if !ok {
if i == 2 { // can't press two keys from different keymaps
if !changeKeymap(r) && ErrOnUnknownKey {
return index, fmt.Errorf("rune not in keymap: %c", r)
}
} else {
break press
}
}
switch {
case cur.PressDelayDelimiter:
var n int
n, PressDelay = parseDelay(p[index+s:])
index += s + n
break press
case cur.ReleaseDelayDelimiter:
var n int
n, ReleaseDelay = parseDelay(p[index+s:])
index += s + n
break press
case cur.Comment:
var n int
n = bytes.Index(p[index+s:], []byte("\n"))
if n < 0 {
n = 0
}
index += s + n
break press
default:
// Calculate next modifier byte
for _, v := range cur.Modifier {
mod = mod | flags[v]
}
// Set the modifier if it is the first key otherwise
// check if the next modifier byte is the same
if i == 2 {
flag = mod
} else if flag != mod {
break press
}
// Check for duplicate key press. You can't press a key if it is already pressed.
for u := 2; u < i; u++ {
if cur.Decimal == report[u] {
break press
}
}
}
report[i] = cur.Decimal
index += s
if PressDelay > 0 {
break press
}
}
report[0] = flag
r, _ = utf8.DecodeRune(p[index-1:])
Press(report, Hidg0)
delay(PressDelay)
}
keymapto0() // To make it reproducible
return index, nil
}
func parseDelay(buffer []byte) (count int, delay time.Duration) {
var index int
sb := strings.Builder{}
for index < len(buffer) {
r, s := utf8.DecodeRune(buffer[index:])
if unicode.IsDigit(r) {
sb.WriteRune(r)
index += s
} else {
if r == '\r' {
index += s
r, s = utf8.DecodeRune(buffer[index:])
}
if r == '\n' {
index += s
}
break
}
}
i, err := strconv.Atoi(sb.String())
if err == nil || err == strconv.ErrRange {
return index, time.Millisecond * time.Duration(i)
}
return 0, 0
}
func delay(Delay time.Duration) {
if Delay > 0 {
if syncCheck, ok := Hidg0.(syncer); ok {
syncCheck.Sync()
}
time.Sleep(Delay)
}
}
func Press(press [8]byte, file io.Writer) {
file.Write(press[:])
delay(ReleaseDelay)
file.Write([]byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00})
}
func Hold(press [8]byte, file io.Writer) {
file.Write(press[:])
}
func keymapto0() {
if len(KeymapOrder) > 1 {
for i := 0; i < len(KeymapOrder)-(currentKeyMap); i++ {
Press([8]byte{LALT, 0x00, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00}, Hidg0)
}
currentKeyMap = 0
}
}
func changeKeymap(r rune) bool {
buf := bytes.NewBuffer(make([]byte, 0, 8*len(KeymapOrder))) // To batch shortcut presses
for i := 0; i < len(KeymapOrder); i++ {
_, ok := CurrentKeymap()[string(r)]
if ok {
Hidg0.Write(buf.Bytes())
return true
}
Press(KeymapShortcut, buf)
if currentKeyMap == len(KeymapOrder)-1 {
currentKeyMap = 0
} else {
currentKeyMap++
}
}
return false
}
func CurrentKeymap() Keymap {
keymap, ok := keys[KeymapOrder[currentKeyMap]]
if ok {
return keymap
}
return LoadKeymap(KeymapOrder[currentKeyMap])
}
func LoadKeymap(keymapName string) Keymap {
var (
err error
content []byte
file = path.Join(path.Join(KeymapPath, "hid"), keymapName+".json")
tmp = make(Keymap, 0)
)
fmt.Println(file)
content, err = ioutil.ReadFile(file)
if err != nil {
return nil
}
err = json.Unmarshal(content, &tmp)
if err != nil {
return nil
}
keys[keymapName] = tmp
return keys[keymapName]
}

405
keymaps/dvorak.json Normal file
View File

@ -0,0 +1,405 @@
{
"0": {
"modifier": ["NONE"],
"decimal": 39
},
"1": {
"modifier": ["NONE"],
"decimal": 30
},
"2": {
"modifier": ["NONE"],
"decimal": 31
},
"3": {
"modifier": ["NONE"],
"decimal": 32
},
"4": {
"modifier": ["NONE"],
"decimal": 33
},
"5": {
"modifier": ["NONE"],
"decimal": 34
},
"6": {
"modifier": ["NONE"],
"decimal": 35
},
"7": {
"modifier": ["NONE"],
"decimal": 36
},
"8": {
"modifier": ["NONE"],
"decimal": 37
},
"9": {
"modifier": ["NONE"],
"decimal": 38
},
"!": {
"modifier": ["LSHIFT"],
"decimal": 30
},
"#": {
"modifier": ["LSHIFT"],
"decimal": 32
},
"$": {
"modifier": ["LSHIFT"],
"decimal": 33
},
"%": {
"modifier": ["LSHIFT"],
"decimal": 34
},
"&": {
"modifier": ["LSHIFT"],
"decimal": 36
},
"'": {
"modifier": ["NONE"],
"decimal": 20
},
"(": {
"modifier": ["LSHIFT"],
"decimal": 38
},
")": {
"modifier": ["LSHIFT"],
"decimal": 39
},
"*": {
"modifier": ["LSHIFT"],
"decimal": 37
},
"+": {
"modifier": ["LSHIFT"],
"decimal": 48
},
",": {
"modifier": ["NONE"],
"decimal": 26
},
"-": {
"modifier": ["NONE"],
"decimal": 52
},
".": {
"modifier": ["NONE"],
"decimal": 8
},
"/": {
"modifier": ["NONE"],
"decimal": 47
},
":": {
"modifier": ["LSHIFT"],
"decimal": 29
},
";": {
"modifier": ["NONE"],
"decimal": 29
},
"<": {
"modifier": ["LSHIFT"],
"decimal": 26
},
"=": {
"modifier": ["NONE"],
"decimal": 48
},
">": {
"modifier": ["LSHIFT"],
"decimal": 8
},
"?": {
"modifier": ["LSHIFT"],
"decimal": 47
},
"@": {
"modifier": ["LSHIFT"],
"decimal": 31
},
"A": {
"modifier": ["LSHIFT"],
"decimal": 4
},
"B": {
"modifier": ["LSHIFT"],
"decimal": 17
},
"C": {
"modifier": ["LSHIFT"],
"decimal": 12
},
"D": {
"modifier": ["LSHIFT"],
"decimal": 11
},
"E": {
"modifier": ["LSHIFT"],
"decimal": 7
},
"F": {
"modifier": ["LSHIFT"],
"decimal": 28
},
"G": {
"modifier": ["LSHIFT"],
"decimal": 24
},
"H": {
"modifier": ["LSHIFT"],
"decimal": 13
},
"I": {
"modifier": ["LSHIFT"],
"decimal": 10
},
"J": {
"modifier": ["LSHIFT"],
"decimal": 6
},
"K": {
"modifier": ["LSHIFT"],
"decimal": 25
},
"L": {
"modifier": ["LSHIFT"],
"decimal": 19
},
"M": {
"modifier": ["LSHIFT"],
"decimal": 16
},
"N": {
"modifier": ["LSHIFT"],
"decimal": 15
},
"O": {
"modifier": ["LSHIFT"],
"decimal": 22
},
"P": {
"modifier": ["LSHIFT"],
"decimal": 21
},
"Q": {
"modifier": ["LSHIFT"],
"decimal": 27
},
"R": {
"modifier": ["LSHIFT"],
"decimal": 18
},
"S": {
"modifier": ["LSHIFT"],
"decimal": 51
},
"T": {
"modifier": ["LSHIFT"],
"decimal": 14
},
"U": {
"modifier": ["LSHIFT"],
"decimal": 9
},
"V": {
"modifier": ["LSHIFT"],
"decimal": 55
},
"W": {
"modifier": ["LSHIFT"],
"decimal": 54
},
"X": {
"modifier": ["LSHIFT"],
"decimal": 5
},
"Y": {
"modifier": ["LSHIFT"],
"decimal": 23
},
"Z": {
"modifier": ["LSHIFT"],
"decimal": 56
},
"[": {
"modifier": ["NONE"],
"decimal": 45
},
"\"": {
"modifier": ["LSHIFT"],
"decimal": 20
},
"\\": {
"modifier": ["NONE"],
"decimal": 49
},
"]": {
"modifier": ["NONE"],
"decimal": 46
},
"^": {
"modifier": ["LSHIFT"],
"decimal": 35
},
"_": {
"modifier": ["LSHIFT"],
"decimal": 52
},
"`": {
"modifier": ["NONE"],
"decimal": 53
},
"a": {
"modifier": ["NONE"],
"decimal": 4
},
"b": {
"modifier": ["NONE"],
"decimal": 17
},
"c": {
"modifier": ["NONE"],
"decimal": 12
},
"d": {
"modifier": ["NONE"],
"decimal": 11
},
"e": {
"modifier": ["NONE"],
"decimal": 7
},
"f": {
"modifier": ["NONE"],
"decimal": 28
},
"g": {
"modifier": ["NONE"],
"decimal": 24
},
"h": {
"modifier": ["NONE"],
"decimal": 13
},
"i": {
"modifier": ["NONE"],
"decimal": 10
},
"j": {
"modifier": ["NONE"],
"decimal": 6
},
"k": {
"modifier": ["NONE"],
"decimal": 25
},
"l": {
"modifier": ["NONE"],
"decimal": 19
},
"m": {
"modifier": ["NONE"],
"decimal": 16
},
"n": {
"modifier": ["NONE"],
"decimal": 15
},
"o": {
"modifier": ["NONE"],
"decimal": 22
},
"p": {
"modifier": ["NONE"],
"decimal": 21
},
"q": {
"modifier": ["NONE"],
"decimal": 27
},
"r": {
"modifier": ["NONE"],
"decimal": 18
},
"s": {
"modifier": ["NONE"],
"decimal": 51
},
"t": {
"modifier": ["NONE"],
"decimal": 14
},
"u": {
"modifier": ["NONE"],
"decimal": 9
},
"v": {
"modifier": ["NONE"],
"decimal": 55
},
"w": {
"modifier": ["NONE"],
"decimal": 54
},
"x": {
"modifier": ["NONE"],
"decimal": 5
},
"y": {
"modifier": ["NONE"],
"decimal": 23
},
"z": {
"modifier": ["NONE"],
"decimal": 56
},
"{": {
"modifier": ["LSHIFT"],
"decimal": 45
},
"|": {
"modifier": ["LSHIFT"],
"decimal": 49
},
"}": {
"modifier": ["LSHIFT"],
"decimal": 46
},
"~": {
"modifier": ["LSHIFT"],
"decimal": 53
},
"\t": {
"modifier": ["NONE"],
"decimal": 43
},
"\n": {
"modifier": ["NONE"],
"decimal": 40
},
" ": {
"modifier": ["NONE"],
"decimal": 44
},
"⏲": {
"modifier": ["NONE"],
"decimal": 0,
"PressDelayDelimiter": true
},
"🐉": {
"modifier": ["NONE"],
"decimal": 0,
"releaseDelayDelimiter": true
},
"⨌": {
"modifier": ["NONE"],
"decimal": 0,
"comment": true
}
}

405
keymaps/qwerty.json Normal file
View File

@ -0,0 +1,405 @@
{
"1": {
"modifier": ["NONE"],
"decimal": 30
},
"2": {
"modifier": ["NONE"],
"decimal": 31
},
"3": {
"modifier": ["NONE"],
"decimal": 32
},
"4": {
"modifier": ["NONE"],
"decimal": 33
},
"5": {
"modifier": ["NONE"],
"decimal": 34
},
"6": {
"modifier": ["NONE"],
"decimal": 35
},
"7": {
"modifier": ["NONE"],
"decimal": 36
},
"8": {
"modifier": ["NONE"],
"decimal": 37
},
"9": {
"modifier": ["NONE"],
"decimal": 38
},
"0": {
"modifier": ["NONE"],
"decimal": 39
},
"-": {
"modifier": ["NONE"],
"decimal": 45
},
"=": {
"modifier": ["NONE"],
"decimal": 46
},
"!": {
"modifier": ["LSHIFT"],
"decimal": 30
},
"@": {
"modifier": ["LSHIFT"],
"decimal": 31
},
"#": {
"modifier": ["LSHIFT"],
"decimal": 32
},
"$": {
"modifier": ["LSHIFT"],
"decimal": 33
},
"%": {
"modifier": ["LSHIFT"],
"decimal": 34
},
"^": {
"modifier": ["LSHIFT"],
"decimal": 35
},
"&": {
"modifier": ["LSHIFT"],
"decimal": 36
},
"*": {
"modifier": ["LSHIFT"],
"decimal": 37
},
"(": {
"modifier": ["LSHIFT"],
"decimal": 38
},
")": {
"modifier": ["LSHIFT"],
"decimal": 39
},
"_": {
"modifier": ["LSHIFT"],
"decimal": 45
},
"+": {
"modifier": ["LSHIFT"],
"decimal": 46
},
"q": {
"modifier": ["NONE"],
"decimal": 20
},
"w": {
"modifier": ["NONE"],
"decimal": 26
},
"e": {
"modifier": ["NONE"],
"decimal": 8
},
"r": {
"modifier": ["NONE"],
"decimal": 21
},
"t": {
"modifier": ["NONE"],
"decimal": 23
},
"y": {
"modifier": ["NONE"],
"decimal": 28
},
"u": {
"modifier": ["NONE"],
"decimal": 24
},
"i": {
"modifier": ["NONE"],
"decimal": 12
},
"o": {
"modifier": ["NONE"],
"decimal": 18
},
"p": {
"modifier": ["NONE"],
"decimal": 19
},
"[": {
"modifier": ["NONE"],
"decimal": 47
},
"]": {
"modifier": ["NONE"],
"decimal": 48
},
"Q": {
"modifier": ["LSHIFT"],
"decimal": 20
},
"W": {
"modifier": ["LSHIFT"],
"decimal": 26
},
"E": {
"modifier": ["LSHIFT"],
"decimal": 8
},
"R": {
"modifier": ["LSHIFT"],
"decimal": 21
},
"T": {
"modifier": ["LSHIFT"],
"decimal": 23
},
"Y": {
"modifier": ["LSHIFT"],
"decimal": 28
},
"U": {
"modifier": ["LSHIFT"],
"decimal": 24
},
"I": {
"modifier": ["LSHIFT"],
"decimal": 12
},
"O": {
"modifier": ["LSHIFT"],
"decimal": 18
},
"P": {
"modifier": ["LSHIFT"],
"decimal": 19
},
"{": {
"modifier": ["LSHIFT"],
"decimal": 47
},
"}": {
"modifier": ["LSHIFT"],
"decimal": 48
},
"a": {
"modifier": ["NONE"],
"decimal": 4
},
"s": {
"modifier": ["NONE"],
"decimal": 22
},
"d": {
"modifier": ["NONE"],
"decimal": 7
},
"f": {
"modifier": ["NONE"],
"decimal": 9
},
"g": {
"modifier": ["NONE"],
"decimal": 10
},
"h": {
"modifier": ["NONE"],
"decimal": 11
},
"j": {
"modifier": ["NONE"],
"decimal": 13
},
"k": {
"modifier": ["NONE"],
"decimal": 14
},
"l": {
"modifier": ["NONE"],
"decimal": 15
},
";": {
"modifier": ["NONE"],
"decimal": 51
},
"'": {
"modifier": ["NONE"],
"decimal": 52
},
"A": {
"modifier": ["LSHIFT"],
"decimal": 4
},
"S": {
"modifier": ["LSHIFT"],
"decimal": 22
},
"D": {
"modifier": ["LSHIFT"],
"decimal": 7
},
"F": {
"modifier": ["LSHIFT"],
"decimal": 9
},
"G": {
"modifier": ["LSHIFT"],
"decimal": 10
},
"H": {
"modifier": ["LSHIFT"],
"decimal": 11
},
"J": {
"modifier": ["LSHIFT"],
"decimal": 13
},
"K": {
"modifier": ["LSHIFT"],
"decimal": 14
},
"L": {
"modifier": ["LSHIFT"],
"decimal": 15
},
":": {
"modifier": ["LSHIFT"],
"decimal": 51
},
"\"": {
"modifier": ["LSHIFT"],
"decimal": 52
},
"z": {
"modifier": ["NONE"],
"decimal": 29
},
"x": {
"modifier": ["NONE"],
"decimal": 27
},
"c": {
"modifier": ["NONE"],
"decimal": 6
},
"v": {
"modifier": ["NONE"],
"decimal": 25
},
"b": {
"modifier": ["NONE"],
"decimal": 5
},
"n": {
"modifier": ["NONE"],
"decimal": 17
},
"m": {
"modifier": ["NONE"],
"decimal": 16
},
",": {
"modifier": ["NONE"],
"decimal": 54
},
".": {
"modifier": ["NONE"],
"decimal": 55
},
"/": {
"modifier": ["NONE"],
"decimal": 56
},
"Z": {
"modifier": ["LSHIFT"],
"decimal": 29
},
"X": {
"modifier": ["LSHIFT"],
"decimal": 27
},
"C": {
"modifier": ["LSHIFT"],
"decimal": 6
},
"V": {
"modifier": ["LSHIFT"],
"decimal": 25
},
"B": {
"modifier": ["LSHIFT"],
"decimal": 5
},
"N": {
"modifier": ["LSHIFT"],
"decimal": 17
},
"M": {
"modifier": ["LSHIFT"],
"decimal": 16
},
"<": {
"modifier": ["LSHIFT"],
"decimal": 54
},
">": {
"modifier": ["LSHIFT"],
"decimal": 55
},
"?": {
"modifier": ["LSHIFT"],
"decimal": 56
},
"\\": {
"modifier": ["NONE"],
"decimal": 49
},
"|": {
"modifier": ["LSHIFT"],
"decimal": 49
},
"`": {
"modifier": ["NONE"],
"decimal": 53
},
"~": {
"modifier": ["LSHIFT"],
"decimal": 53
},
"\t": {
"modifier": ["NONE"],
"decimal": 43
},
"\n": {
"modifier": ["NONE"],
"decimal": 40
},
" ": {
"modifier": ["NONE"],
"decimal": 44
},
"⏲": {
"modifier": ["NONE"],
"decimal": 0,
"PressDelayDelimiter": true
},
"🐉": {
"modifier": ["NONE"],
"decimal": 0,
"releaseDelayDelimiter": true
},
"⨌": {
"modifier": ["NONE"],
"decimal": 0,
"comment": true
}
}

325
keymaps/tengwar-f.json Normal file
View File

@ -0,0 +1,325 @@
{
"": {
"modifier": ["NONE"],
"decimal": 30
},
"": {
"modifier": ["NONE"],
"decimal": 31
},
"": {
"modifier": ["NONE"],
"decimal": 32
},
"": {
"modifier": ["NONE"],
"decimal": 33
},
"": {
"modifier": ["NONE"],
"decimal": 34
},
"": {
"modifier": ["NONE"],
"decimal": 35
},
"": {
"modifier": ["NONE"],
"decimal": 36
},
"": {
"modifier": ["NONE"],
"decimal": 37
},
"": {
"modifier": ["NONE"],
"decimal": 38
},
"": {
"modifier": ["NONE"],
"decimal": 39
},
"": {
"modifier": ["NONE"],
"decimal": 45
},
"": {
"modifier": ["NONE"],
"decimal": 46
},
"": {
"modifier": ["LSHIFT"],
"decimal": 30
},
"": {
"modifier": ["LSHIFT"],
"decimal": 31
},
"": {
"modifier": ["LSHIFT"],
"decimal": 32
},
"": {
"modifier": ["LSHIFT"],
"decimal": 33
},
"": {
"modifier": ["LSHIFT"],
"decimal": 34
},
"": {
"modifier": ["LSHIFT"],
"decimal": 35
},
"": {
"modifier": ["LSHIFT"],
"decimal": 36
},
"*": {
"modifier": ["LSHIFT"],
"decimal": 37
},
"(": {
"modifier": ["LSHIFT"],
"decimal": 38
},
")": {
"modifier": ["LSHIFT"],
"decimal": 39
},
"": {
"modifier": ["LSHIFT"],
"decimal": 45
},
"": {
"modifier": ["LSHIFT"],
"decimal": 46
},
"": {
"modifier": ["NONE"],
"decimal": 20
},
"": {
"modifier": ["NONE"],
"decimal": 26
},
"": {
"modifier": ["NONE"],
"decimal": 8
},
"": {
"modifier": ["NONE"],
"decimal": 21
},
"": {
"modifier": ["NONE"],
"decimal": 23
},
"": {
"modifier": ["NONE"],
"decimal": 28
},
"": {
"modifier": ["NONE"],
"decimal": 24
},
"": {
"modifier": ["NONE"],
"decimal": 12
},
"": {
"modifier": ["NONE"],
"decimal": 18
},
"": {
"modifier": ["NONE"],
"decimal": 19
},
"": {
"modifier": ["NONE"],
"decimal": 47
},
"": {
"modifier": ["NONE"],
"decimal": 48
},
"": {
"modifier": ["LSHIFT"],
"decimal": 20
},
"": {
"modifier": ["LSHIFT"],
"decimal": 26
},
"": {
"modifier": ["LSHIFT"],
"decimal": 8
},
"": {
"modifier": ["LSHIFT"],
"decimal": 21
},
"": {
"modifier": ["LSHIFT"],
"decimal": 23
},
"": {
"modifier": ["LSHIFT"],
"decimal": 28
},
"": {
"modifier": ["LSHIFT"],
"decimal": 24
},
"I": {
"modifier": ["LSHIFT"],
"decimal": 12
},
"": {
"modifier": ["LSHIFT"],
"decimal": 18
},
"": {
"modifier": ["NONE"],
"decimal": 4
},
"": {
"modifier": ["NONE"],
"decimal": 22
},
"": {
"modifier": ["NONE"],
"decimal": 7
},
"": {
"modifier": ["NONE"],
"decimal": 9
},
"": {
"modifier": ["NONE"],
"decimal": 10
},
"": {
"modifier": ["NONE"],
"decimal": 11
},
"": {
"modifier": ["NONE"],
"decimal": 13
},
"": {
"modifier": ["NONE"],
"decimal": 14
},
"": {
"modifier": ["NONE"],
"decimal": 15
},
"": {
"modifier": ["NONE"],
"decimal": 51
},
"": {
"modifier": ["NONE"],
"decimal": 52
},
"": {
"modifier": ["LSHIFT"],
"decimal": 4
},
"": {
"modifier": ["LSHIFT"],
"decimal": 22
},
"": {
"modifier": ["LSHIFT"],
"decimal": 15
},
"": {
"modifier": ["NONE"],
"decimal": 29
},
"": {
"modifier": ["NONE"],
"decimal": 27
},
"": {
"modifier": ["NONE"],
"decimal": 6
},
"": {
"modifier": ["NONE"],
"decimal": 25
},
"": {
"modifier": ["NONE"],
"decimal": 5
},
"": {
"modifier": ["NONE"],
"decimal": 17
},
"": {
"modifier": ["NONE"],
"decimal": 16
},
"": {
"modifier": ["NONE"],
"decimal": 54
},
"": {
"modifier": ["NONE"],
"decimal": 55
},
"": {
"modifier": ["LSHIFT"],
"decimal": 29
},
"": {
"modifier": ["LSHIFT"],
"decimal": 27
},
"": {
"modifier": ["LSHIFT"],
"decimal": 55
},
"": {
"modifier": ["NONE"],
"decimal": 49
},
"": {
"modifier": ["NONE"],
"decimal": 53
},
"": {
"modifier": ["LSHIFT"],
"decimal": 53
},
"\t": {
"modifier": ["NONE"],
"decimal": 43
},
"\n": {
"modifier": ["NONE"],
"decimal": 40
},
" ": {
"modifier": ["NONE"],
"decimal": 44
},
"⏲": {
"modifier": ["NONE"],
"decimal": 0,
"PressDelayDelimiter": true
},
"🐉": {
"modifier": ["NONE"],
"decimal": 0,
"releaseDelayDelimiter": true
},
"⨌": {
"modifier": ["NONE"],
"decimal": 0,
"comment": true
}
}

393
keymaps/tengwar-u.json Normal file
View File

@ -0,0 +1,393 @@
{
"": {
"modifier": ["NONE"],
"decimal": 30
},
"": {
"modifier": ["NONE"],
"decimal": 31
},
"": {
"modifier": ["NONE"],
"decimal": 32
},
"": {
"modifier": ["NONE"],
"decimal": 33
},
"": {
"modifier": ["NONE"],
"decimal": 34
},
"": {
"modifier": ["NONE"],
"decimal": 35
},
"": {
"modifier": ["NONE"],
"decimal": 36
},
"": {
"modifier": ["NONE"],
"decimal": 37
},
"": {
"modifier": ["NONE"],
"decimal": 38
},
"": {
"modifier": ["NONE"],
"decimal": 39
},
"": {
"modifier": ["NONE"],
"decimal": 45
},
"": {
"modifier": ["NONE"],
"decimal": 46
},
"": {
"modifier": ["LSHIFT"],
"decimal": 30
},
"": {
"modifier": ["RALT"],
"decimal": 31
},
"": {
"modifier": ["LSHIFT"],
"decimal": 32
},
"": {
"modifier": ["LSHIFT"],
"decimal": 35
},
"⁊": {
"modifier": ["LSHIFT"],
"decimal": 36
},
"⸭": {
"modifier": ["LSHIFT"],
"decimal": 37
},
"": {
"modifier": ["LSHIFT"],
"decimal": 38
},
"": {
"modifier": ["LSHIFT"],
"decimal": 39
},
"": {
"modifier": ["LSHIFT"],
"decimal": 45
},
"": {
"modifier": ["LSHIFT"],
"decimal": 46
},
"": {
"modifier": ["NONE"],
"decimal": 20
},
"": {
"modifier": ["NONE"],
"decimal": 26
},
"": {
"modifier": ["NONE"],
"decimal": 8
},
"": {
"modifier": ["NONE"],
"decimal": 21
},
"": {
"modifier": ["NONE"],
"decimal": 23
},
"": {
"modifier": ["NONE"],
"decimal": 28
},
"": {
"modifier": ["NONE"],
"decimal": 24
},
"": {
"modifier": ["NONE"],
"decimal": 12
},
"": {
"modifier": ["NONE"],
"decimal": 18
},
"": {
"modifier": ["NONE"],
"decimal": 19
},
"": {
"modifier": ["NONE"],
"decimal": 47
},
"": {
"modifier": ["NONE"],
"decimal": 48
},
"": {
"modifier": ["LSHIFT"],
"decimal": 20
},
"": {
"modifier": ["LSHIFT"],
"decimal": 26
},
"": {
"modifier": ["LSHIFT"],
"decimal": 8
},
"": {
"modifier": ["LSHIFT"],
"decimal": 21
},
"": {
"modifier": ["LSHIFT"],
"decimal": 23
},
"": {
"modifier": ["LSHIFT"],
"decimal": 28
},
"": {
"modifier": ["LSHIFT"],
"decimal": 24
},
"": {
"modifier": ["LSHIFT"],
"decimal": 12
},
"": {
"modifier": ["LSHIFT"],
"decimal": 18
},
"": {
"modifier": ["LSHIFT"],
"decimal": 19
},
"“": {
"modifier": ["RALT"],
"decimal": 47
},
"": {
"modifier": ["RALT"],
"decimal": 48
},
"": {
"modifier": ["NONE"],
"decimal": 4
},
"": {
"modifier": ["NONE"],
"decimal": 22
},
"": {
"modifier": ["NONE"],
"decimal": 7
},
"": {
"modifier": ["NONE"],
"decimal": 9
},
"": {
"modifier": ["NONE"],
"decimal": 10
},
"": {
"modifier": ["NONE"],
"decimal": 11
},
"": {
"modifier": ["NONE"],
"decimal": 13
},
"": {
"modifier": ["NONE"],
"decimal": 14
},
"": {
"modifier": ["NONE"],
"decimal": 15
},
"჻": {
"modifier": ["NONE"],
"decimal": 51
},
"": {
"modifier": ["NONE"],
"decimal": 52
},
"": {
"modifier": ["LSHIFT"],
"decimal": 4
},
"": {
"modifier": ["LSHIFT"],
"decimal": 22
},
"": {
"modifier": ["LSHIFT"],
"decimal": 7
},
"": {
"modifier": ["LSHIFT"],
"decimal": 9
},
"": {
"modifier": ["LSHIFT"],
"decimal": 10
},
"": {
"modifier": ["LSHIFT"],
"decimal": 11
},
"": {
"modifier": ["LSHIFT"],
"decimal": 13
},
"": {
"modifier": ["LSHIFT"],
"decimal": 14
},
"": {
"modifier": ["LSHIFT"],
"decimal": 15
},
"⁝": {
"modifier": ["LSHIFT"],
"decimal": 51
},
"": {
"modifier": ["RALT"],
"decimal": 52
},
"": {
"modifier": ["NONE"],
"decimal": 29
},
"": {
"modifier": ["NONE"],
"decimal": 27
},
"": {
"modifier": ["NONE"],
"decimal": 6
},
"": {
"modifier": ["NONE"],
"decimal": 25
},
"": {
"modifier": ["NONE"],
"decimal": 5
},
"": {
"modifier": ["NONE"],
"decimal": 17
},
"": {
"modifier": ["NONE"],
"decimal": 16
},
"⸱": {
"modifier": ["NONE"],
"decimal": 54
},
"⁘": {
"modifier": ["NONE"],
"decimal": 55
},
"": {
"modifier": ["NONE"],
"decimal": 56
},
"": {
"modifier": ["LSHIFT"],
"decimal": 29
},
"": {
"modifier": ["LSHIFT"],
"decimal": 27
},
"": {
"modifier": ["LSHIFT"],
"decimal": 6
},
"": {
"modifier": ["LSHIFT"],
"decimal": 25
},
"": {
"modifier": ["LSHIFT"],
"decimal": 5
},
"": {
"modifier": ["LSHIFT"],
"decimal": 17
},
"": {
"modifier": ["LSHIFT"],
"decimal": 16
},
":": {
"modifier": ["LSHIFT"],
"decimal": 54
},
"⸬": {
"modifier": ["LSHIFT"],
"decimal": 55
},
"": {
"modifier": ["LSHIFT"],
"decimal": 56
},
"": {
"modifier": ["NONE"],
"decimal": 49
},
"": {
"modifier": ["LSHIFT"],
"decimal": 49
},
"": {
"modifier": ["NONE"],
"decimal": 53
},
"\t": {
"modifier": ["NONE"],
"decimal": 43
},
"\n": {
"modifier": ["NONE"],
"decimal": 40
},
" ": {
"modifier": ["NONE"],
"decimal": 44
},
"⏲": {
"modifier": ["NONE"],
"decimal": 0,
"PressDelayDelimiter": true
},
"🐉": {
"modifier": ["NONE"],
"decimal": 0,
"releaseDelayDelimiter": true
},
"⨌": {
"modifier": ["NONE"],
"decimal": 0,
"comment": true
}
}

577
keymaps/tiro.json Normal file
View File

@ -0,0 +1,577 @@
{
"1": {
"modifier": ["NONE"],
"decimal": 30
},
"2": {
"modifier": ["NONE"],
"decimal": 31
},
"3": {
"modifier": ["NONE"],
"decimal": 32
},
"4": {
"modifier": ["NONE"],
"decimal": 33
},
"5": {
"modifier": ["NONE"],
"decimal": 34
},
"6": {
"modifier": ["NONE"],
"decimal": 35
},
"7": {
"modifier": ["NONE"],
"decimal": 36
},
"8": {
"modifier": ["NONE"],
"decimal": 37
},
"9": {
"modifier": ["NONE"],
"decimal": 38
},
"0": {
"modifier": ["NONE"],
"decimal": 39
},
"־": {
"modifier": ["NONE"],
"decimal": 45
},
"֩": {
"modifier": ["LSHIFT"],
"decimal": 30
},
"֙": {
"modifier": ["LSHIFT"],
"decimal": 31
},
"֒": {
"modifier": ["LSHIFT"],
"decimal": 32
},
"֯": {
"modifier": ["LSHIFT"],
"decimal": 33
},
"ֺ": {
"modifier": ["LSHIFT"],
"decimal": 34
},
"ֹ": {
"modifier": ["LSHIFT"],
"decimal": 35
},
"ֿ": {
"modifier": ["LSHIFT"],
"decimal": 36
},
"ׂ": {
"modifier": ["LSHIFT"],
"decimal": 37
},
"ׁ": {
"modifier": ["LSHIFT"],
"decimal": 38
},
"֝": {
"modifier": ["LSHIFT"],
"decimal": 39
},
"֠": {
"modifier": ["LSHIFT"],
"decimal": 45
},
"ּ": {
"modifier": ["LSHIFT"],
"decimal": 46
},
"₪": {
"modifier": ["RALT"],
"decimal": 33
},
"": {
"modifier": ["RALT"],
"decimal": 34
},
"": {
"modifier": ["RALT"],
"decimal": 35
},
"͏": {
"modifier": ["RALT"],
"decimal": 36
},
"": {
"modifier": ["RALT"],
"decimal": 37
},
"": {
"modifier": ["RALT"],
"decimal": 38
},
"◌": {
"modifier": ["RALT"],
"decimal": 39
},
"-": {
"modifier": ["RALT"],
"decimal": 45
},
"1": {
"modifier": ["RALT","LSHIFT"],
"decimal": 30
},
"2": {
"modifier": ["RALT","LSHIFT"],
"decimal": 31
},
"3": {
"modifier": ["RALT","LSHIFT"],
"decimal": 32
},
"4": {
"modifier": ["RALT","LSHIFT"],
"decimal": 33
},
"5": {
"modifier": ["RALT","LSHIFT"],
"decimal": 34
},
"6": {
"modifier": ["RALT","LSHIFT"],
"decimal": 35
},
"7": {
"modifier": ["RALT","LSHIFT"],
"decimal": 36
},
"8": {
"modifier": ["RALT","LSHIFT"],
"decimal": 37
},
"9": {
"modifier": ["RALT","LSHIFT"],
"decimal": 38
},
"0": {
"modifier": ["RALT","LSHIFT"],
"decimal": 39
},
"_": {
"modifier": ["RALT","LSHIFT"],
"decimal": 45
},
"+": {
"modifier": ["RALT","LSHIFT"],
"decimal": 46
},
"̇": {
"modifier": ["NONE"],
"decimal": 20
},
"׳": {
"modifier": ["NONE"],
"decimal": 26
},
"ק": {
"modifier": ["NONE"],
"decimal": 8
},
"ר": {
"modifier": ["NONE"],
"decimal": 21
},
"א": {
"modifier": ["NONE"],
"decimal": 23
},
"ט": {
"modifier": ["NONE"],
"decimal": 28
},
"ו": {
"modifier": ["NONE"],
"decimal": 24
},
"ן": {
"modifier": ["NONE"],
"decimal": 12
},
"ם": {
"modifier": ["NONE"],
"decimal": 18
},
"פ": {
"modifier": ["NONE"],
"decimal": 19
},
"]": {
"modifier": ["NONE"],
"decimal": 47
},
"[": {
"modifier": ["NONE"],
"decimal": 48
},
"ׄ": {
"modifier": ["LSHIFT"],
"decimal": 20
},
"֬": {
"modifier": ["LSHIFT"],
"decimal": 26
},
"֫": {
"modifier": ["LSHIFT"],
"decimal": 8
},
"֟": {
"modifier": ["LSHIFT"],
"decimal": 21
},
"֓": {
"modifier": ["LSHIFT"],
"decimal": 23
},
"֞": {
"modifier": ["LSHIFT"],
"decimal": 28
},
"֜": {
"modifier": ["LSHIFT"],
"decimal": 24
},
"֡": {
"modifier": ["LSHIFT"],
"decimal": 12
},
"֕": {
"modifier": ["LSHIFT"],
"decimal": 18
},
"֔": {
"modifier": ["LSHIFT"],
"decimal": 19
},
"֗": {
"modifier": ["LSHIFT"],
"decimal": 47
},
"֘": {
"modifier": ["LSHIFT"],
"decimal": 48
},
"̈": {
"modifier": ["RALT"],
"decimal": 20
},
"״": {
"modifier": ["RALT"],
"decimal": 26
},
"€": {
"modifier": ["RALT"],
"decimal": 8
},
"װ": {
"modifier": ["RALT"],
"decimal": 24
},
"ש": {
"modifier": ["NONE"],
"decimal": 4
},
"/": {
"modifier": ["RALT","LSHIFT"],
"decimal": 20
},
"'": {
"modifier": ["RALT","LSHIFT"],
"decimal": 26
},
"}": {
"modifier": ["RALT","LSHIFT"],
"decimal": 47
},
"{": {
"modifier": ["RALT","LSHIFT"],
"decimal": 48
},
"ד": {
"modifier": ["NONE"],
"decimal": 22
},
"ג": {
"modifier": ["NONE"],
"decimal": 7
},
"כ": {
"modifier": ["NONE"],
"decimal": 9
},
"ע": {
"modifier": ["NONE"],
"decimal": 10
},
"י": {
"modifier": ["NONE"],
"decimal": 11
},
"ח": {
"modifier": ["NONE"],
"decimal": 13
},
"ל": {
"modifier": ["NONE"],
"decimal": 14
},
"ך": {
"modifier": ["NONE"],
"decimal": 15
},
"ף": {
"modifier": ["NONE"],
"decimal": 51
},
"֚": {
"modifier": ["NONE"],
"decimal": 52
},
"ֽ": {
"modifier": ["LSHIFT"],
"decimal": 4
},
"ְ": {
"modifier": ["LSHIFT"],
"decimal": 22
},
"ֻ": {
"modifier": ["LSHIFT"],
"decimal": 7
},
"ִ": {
"modifier": ["LSHIFT"],
"decimal": 9
},
"ֱ": {
"modifier": ["LSHIFT"],
"decimal": 10
},
"ֶ": {
"modifier": ["LSHIFT"],
"decimal": 11
},
"ֵ": {
"modifier": ["LSHIFT"],
"decimal": 13
},
"ֳ": {
"modifier": ["LSHIFT"],
"decimal": 14
},
"ָ": {
"modifier": ["LSHIFT"],
"decimal": 15
},
"ֲ": {
"modifier": ["LSHIFT"],
"decimal": 51
},
"ַ": {
"modifier": ["LSHIFT"],
"decimal": 52
},
"ײ": {
"modifier": ["RALT"],
"decimal": 11
},
"ױ": {
"modifier": ["RALT"],
"decimal": 13
},
"ׇ": {
"modifier": ["RALT"],
"decimal": 15
},
",": {
"modifier": ["RALT"],
"decimal": 52
},
":": {
"modifier": ["RALT","LSHIFT"],
"decimal": 51
},
"\"": {
"modifier": ["RALT","LSHIFT"],
"decimal": 52
},
"ז": {
"modifier": ["NONE"],
"decimal": 29
},
"ס": {
"modifier": ["NONE"],
"decimal": 27
},
"ב": {
"modifier": ["NONE"],
"decimal": 6
},
"ה": {
"modifier": ["NONE"],
"decimal": 25
},
"נ": {
"modifier": ["NONE"],
"decimal": 5
},
"מ": {
"modifier": ["NONE"],
"decimal": 17
},
"צ": {
"modifier": ["NONE"],
"decimal": 16
},
"ת": {
"modifier": ["NONE"],
"decimal": 54
},
"ץ": {
"modifier": ["NONE"],
"decimal": 55
},
"֭": {
"modifier": ["NONE"],
"decimal": 56
},
"ׅ": {
"modifier": ["LSHIFT"],
"decimal": 29
},
"֤": {
"modifier": ["LSHIFT"],
"decimal": 27
},
"֪": {
"modifier": ["LSHIFT"],
"decimal": 6
},
"֦": {
"modifier": ["LSHIFT"],
"decimal": 25
},
"֥": {
"modifier": ["LSHIFT"],
"decimal": 5
},
"֧": {
"modifier": ["LSHIFT"],
"decimal": 17
},
"֛": {
"modifier": ["LSHIFT"],
"decimal": 16
},
"֑": {
"modifier": ["LSHIFT"],
"decimal": 54
},
"֖": {
"modifier": ["LSHIFT"],
"decimal": 55
},
"֣": {
"modifier": ["LSHIFT"],
"decimal": 56
},
"֢": {
"modifier": ["RALT"],
"decimal": 6
},
"׆": {
"modifier": ["RALT"],
"decimal": 5
},
".": {
"modifier": ["RALT"],
"decimal": 56
},
">": {
"modifier": ["RALT","LSHIFT"],
"decimal": 54
},
"<": {
"modifier": ["RALT","LSHIFT"],
"decimal": 55
},
"?": {
"modifier": ["RALT","LSHIFT"],
"decimal": 56
},
"׀": {
"modifier": ["NONE"],
"decimal": 49
},
"֨": {
"modifier": ["LSHIFT"],
"decimal": 49
},
"\\": {
"modifier": ["RALT"],
"decimal": 49
},
"|": {
"modifier": ["RALT"],
"decimal": 49
},
"׃": {
"modifier": ["NONE"],
"decimal": 53
},
"֮": {
"modifier": ["LSHIFT"],
"decimal": 53
},
";": {
"modifier": ["RALT"],
"decimal": 53
},
"~": {
"modifier": ["RALT","LSHIFT"],
"decimal": 53
},
"\t": {
"modifier": ["NONE"],
"decimal": 43
},
"\n": {
"modifier": ["NONE"],
"decimal": 40
},
" ": {
"modifier": ["NONE"],
"decimal": 44
},
"⏲": {
"modifier": ["NONE"],
"decimal": 0,
"PressDelayDelimiter": true
},
"🐉": {
"modifier": ["NONE"],
"decimal": 0,
"releaseDelayDelimiter": true
},
"⨌": {
"modifier": ["NONE"],
"decimal": 0,
"comment": true
}
}

147
main.go
View File

@ -1,147 +1,40 @@
package main package main
import ( import (
"bufio" "flag"
"encoding/binary"
"encoding/json"
"fmt" "fmt"
"io"
"io/ioutil"
"os" "os"
"path"
"strings"
"github.com/alexflint/go-arg" "timmy.narnian.us/hid/ghid"
) )
type Key struct {
Modifier string `json:"modifier"`
Decimal int `json:"decimal"`
}
type Keys map[string]Key
type Args struct {
SHORTCUT string `arg:"-S,help:Keymap cycle shortcut"`
ORDER []string `arg:"positional,help:Order of keymaps"`
}
const (
LCTRL byte = 1 << iota
LSHIFT
LALT
LSUPER
RCTRL
RSHIFT
RALT
RSUPER
)
func Press(press [8]byte, file io.Writer) {
binary.Write(file, binary.BigEndian, press[:])
binary.Write(file, binary.BigEndian, [8]byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00})
fmt.Println(press)
fmt.Println([8]byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00})
}
func Hold(press [8]byte, file io.Writer) {
binary.Write(file, binary.BigEndian, press[:])
}
func changeKeymap(r rune, keys map[string]Keys, args Args, hidg0 *os.File, currentKeyMap *int) {
fmt.Println(*currentKeyMap)
fmt.Println(args)
kmap := args.ORDER[(*currentKeyMap)]
fmt.Println(kmap)
for keys[kmap][string(r)].Decimal == 0 {
Press([8]byte{LCTRL, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00}, hidg0)
*currentKeyMap++
if *currentKeyMap == len(keys) {
panic("key not in keymap")
}
}
}
func main() { func main() {
var ( var (
args Args SHORTCUT string
hidg0 *os.File
err error
keymapsF []os.FileInfo
keys = make(map[string]Keys)
cfgPath = "./" //path.Join(os.Getenv("XDG_CONFIG_HOME"), "hid")
stdin = bufio.NewReader(os.Stdin)
currentKeyMap int
) )
arg.MustParse(&args)
keymapsF, err = ioutil.ReadDir(cfgPath) flag.StringVar(&SHORTCUT, "shortcut", "", "Keymap cycle shortcut")
flag.StringVar(&SHORTCUT, "s", "", "Keymap cycle shortcut")
flag.StringVar(&hid.KeymapPath, "path", os.ExpandEnv("$XDG_CONFIG_HOME"), "Path to config dir default: $XDG_CONFIG_HOME")
flag.StringVar(&hid.KeymapPath, "p", os.ExpandEnv("$XDG_CONFIG_HOME"), "Path to config dir default: $XDG_CONFIG_HOME")
flag.Parse()
hid.KeymapOrder = flag.Args()
fmt.Println(hid.KeymapPath)
file, err := os.OpenFile("/dev/hidg0", os.O_APPEND|os.O_WRONLY, 0755)
if err != nil { if err != nil {
panic(err) panic(err)
} }
fmt.Println(cfgPath) hid.Hidg0 = file
fmt.Println(keymapsF) defer file.Close()
hid.Write(os.Stdin)
hidg0, err = os.OpenFile("/dev/hidg0", os.O_WRONLY, os.ModePerm)
if err != nil { if err != nil {
panic(err) panic(err)
} }
for _, file := range keymapsF { fmt.Println("Success!")
var (
ext string
)
ext = path.Ext(file.Name())
fmt.Println(ext)
if strings.ToLower(ext) == ".json" {
var (
tmp Keys
T *os.File
content []byte
)
fmt.Println(file.Name())
T, err = os.Open(file.Name())
if err != nil {
panic(err)
}
content, err = ioutil.ReadAll(T)
if err != nil {
panic(err)
}
err = json.Unmarshal(content, &tmp)
if err != nil {
panic(err)
}
fmt.Println(strings.TrimSuffix(file.Name(), ext))
keys[strings.TrimSuffix(file.Name(), ext)] = tmp
T.Close()
}
}
fmt.Println(keys)
for {
var (
r rune
flag byte
report [6]byte
)
r, _, err = stdin.ReadRune()
fmt.Printf("%s\n", string(r))
if err != nil {
panic(err)
}
changeKeymap(r, keys, args, hidg0, &currentKeyMap)
_, err = fmt.Sscanf(keys[args.ORDER[currentKeyMap]][string(r)].Modifier, "%b", flag)
binary.LittleEndian.PutUint16(report[:], uint16(keys[args.ORDER[currentKeyMap]][string(r)].Decimal))
fmt.Printf("report: % x\n", report)
fmt.Println("decimal: ", keys[args.ORDER[currentKeyMap]][string(r)].Decimal)
Press([8]byte{flag, 0, report[0], report[1], report[2], report[3], report[4], report[5]}, hidg0)
}
hidg0.Close()
} }

View File

@ -1,378 +0,0 @@
{
"0" : {
"modifier": "00000000",
"decimal": 39
},
"1" : {
"modifier": "00000000",
"decimal": 30
},
"2" : {
"modifier": "00000000",
"decimal": 31
},
"3" : {
"modifier": "00000000",
"decimal": 32
},
"4" : {
"modifier": "00000000",
"decimal": 33
},
"5" : {
"modifier": "00000000",
"decimal": 34
},
"6" : {
"modifier": "00000000",
"decimal": 35
},
"7" : {
"modifier": "00000000",
"decimal": 36
},
"8" : {
"modifier": "00000000",
"decimal": 37
},
"9" : {
"modifier": "00000000",
"decimal": 38
},
"`" : {
"modifier": "00000000",
"decimal": 53
},
"[" : {
"modifier": "00000000",
"decimal": 47
},
"]" : {
"modifier": "00000000",
"decimal": 48
},
"'" : {
"modifier": "00000000",
"decimal": 52
},
"," : {
"modifier": "00000000",
"decimal": 54
},
"." : {
"modifier": "00000000",
"decimal": 55
},
"p" : {
"modifier": "00000000",
"decimal": 19
},
"y" : {
"modifier": "00000000",
"decimal": 28
},
"f" : {
"modifier": "00000000",
"decimal": 9
},
"g" : {
"modifier": "00000000",
"decimal": 10
},
"c" : {
"modifier": "00000000",
"decimal": 6
},
"r" : {
"modifier": "00000000",
"decimal": 21
},
"l" : {
"modifier": "00000000",
"decimal": 15
},
"/" : {
"modifier": "00000000",
"decimal": 56
},
"=" : {
"modifier": "00000000",
"decimal": 46
},
"\\" : {
"modifier": "00000000",
"decimal": 49
},
"a" : {
"modifier": "00000000",
"decimal": 4
},
"o" : {
"modifier": "00000000",
"decimal": 18
},
"e" : {
"modifier": "00000000",
"decimal": 8
},
"u" : {
"modifier": "00000000",
"decimal": 24
},
"i" : {
"modifier": "00000000",
"decimal": 12
},
"d" : {
"modifier": "00000000",
"decimal": 7
},
"h" : {
"modifier": "00000000",
"decimal": 11
},
"t" : {
"modifier": "00000000",
"decimal": 23
},
"n" : {
"modifier": "00000000",
"decimal": 17
},
"s" : {
"modifier": "00000000",
"decimal": 22
},
"-" : {
"modifier": "00000000",
"decimal": 45
},
";" : {
"modifier": "00000000",
"decimal": 51
},
"q" : {
"modifier": "00000000",
"decimal": 20
},
"j" : {
"modifier": "00000000",
"decimal": 13
},
"k" : {
"modifier": "00000000",
"decimal": 14
},
"x" : {
"modifier": "00000000",
"decimal": 27
},
"b" : {
"modifier": "00000000",
"decimal": 5
},
"m" : {
"modifier": "00000000",
"decimal": 16
},
"w" : {
"modifier": "00000000",
"decimal": 26
},
"v" : {
"modifier": "00000000",
"decimal": 25
},
"z" : {
"modifier": "00000000",
"decimal": 29
},
"~" : {
"modifier": "00000010",
"decimal": 53
},
"!" : {
"modifier": "00000010",
"decimal": 30
},
"@" : {
"modifier": "00000010",
"decimal": 31
},
"#" : {
"modifier": "00000010",
"decimal": 32
},
"$" : {
"modifier": "00000010",
"decimal": 33
},
"%" : {
"modifier": "00000010",
"decimal": 34
},
"^" : {
"modifier": "00000010",
"decimal": 35
},
"&" : {
"modifier": "00000010",
"decimal": 36
},
"*" : {
"modifier": "00000010",
"decimal": 37
},
"(" : {
"modifier": "00000010",
"decimal": 38
},
")" : {
"modifier": "00000010",
"decimal": 39
},
"{" : {
"modifier": "00000010",
"decimal": 47
},
"}" : {
"modifier": "00000010",
"decimal": 48
},
"\"" : {
"modifier": "00000010",
"decimal": 52
},
"<" : {
"modifier": "00000010",
"decimal": 54
},
">" : {
"modifier": "00000010",
"decimal": 55
},
"P" : {
"modifier": "00000010",
"decimal": 19
},
"Y" : {
"modifier": "00000010",
"decimal": 28
},
"F" : {
"modifier": "00000010",
"decimal": 9
},
"G" : {
"modifier": "00000010",
"decimal": 10
},
"C" : {
"modifier": "00000010",
"decimal": 6
},
"R" : {
"modifier": "00000010",
"decimal": 21
},
"L" : {
"modifier": "00000010",
"decimal": 15
},
"?" : {
"modifier": "00000010",
"decimal": 56
},
"+" : {
"modifier": "00000010",
"decimal": 46
},
"|" : {
"modifier": "00000010",
"decimal": 49
},
"A" : {
"modifier": "00000010",
"decimal": 4
},
"O" : {
"modifier": "00000010",
"decimal": 18
},
"E" : {
"modifier": "00000010",
"decimal": 8
},
"U" : {
"modifier": "00000010",
"decimal": 24
},
"I" : {
"modifier": "00000010",
"decimal": 12
},
"D" : {
"modifier": "00000010",
"decimal": 7
},
"H" : {
"modifier": "00000010",
"decimal": 11
},
"T" : {
"modifier": "00000010",
"decimal": 23
},
"N" : {
"modifier": "00000010",
"decimal": 17
},
"S" : {
"modifier": "00000010",
"decimal": 22
},
"_" : {
"modifier": "00000010",
"decimal": 45
},
":" : {
"modifier": "00000010",
"decimal": 51
},
"Q" : {
"modifier": "00000010",
"decimal": 20
},
"J" : {
"modifier": "00000010",
"decimal": 13
},
"K" : {
"modifier": "00000010",
"decimal": 14
},
"X" : {
"modifier": "00000010",
"decimal": 27
},
"B" : {
"modifier": "00000010",
"decimal": 5
},
"M" : {
"modifier": "00000010",
"decimal": 16
},
"W" : {
"modifier": "00000010",
"decimal": 26
},
"V" : {
"modifier": "00000010",
"decimal": 25
},
"Z" : {
"modifier": "00000010",
"decimal": 29
}
}