twiddling 0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +7 -0
- data/.mdl_rules.rb +2 -0
- data/.mdlrc +2 -0
- data/.quiet_quality.yml +9 -0
- data/.rspec +1 -0
- data/.rubocop.yml +21 -0
- data/.standard.yml +3 -0
- data/Gemfile +3 -0
- data/LICENSE +21 -0
- data/README.md +116 -0
- data/bin/cfg2tw7 +13 -0
- data/bin/tw72cfg +9 -0
- data/bin/twiddling +9 -0
- data/configs/v7/default.cfg +0 -0
- data/configs/v7/default.tw7 +168 -0
- data/configs/v7/ericspace2.cfg +0 -0
- data/configs/v7/ericspace2.tw7 +203 -0
- data/fixtures/v7/README.md +31 -0
- data/fixtures/v7/button-mode-keyboard.cfg +0 -0
- data/fixtures/v7/button-mode-keyboard.tw7 +16 -0
- data/fixtures/v7/cycle-config-chord.cfg +0 -0
- data/fixtures/v7/cycle-config-chord.tw7 +12 -0
- data/fixtures/v7/empty.cfg +0 -0
- data/fixtures/v7/empty.tw7 +10 -0
- data/fixtures/v7/haptic-feedback-off.cfg +0 -0
- data/fixtures/v7/haptic-feedback-off.tw7 +16 -0
- data/fixtures/v7/idle-time-8m.cfg +0 -0
- data/fixtures/v7/idle-time-8m.tw7 +12 -0
- data/fixtures/v7/key-repeat-1020.cfg +0 -0
- data/fixtures/v7/key-repeat-1020.tw7 +12 -0
- data/fixtures/v7/key-repeat-disabled.cfg +0 -0
- data/fixtures/v7/key-repeat-disabled.tw7 +12 -0
- data/fixtures/v7/large.cfg +0 -0
- data/fixtures/v7/large.tw7 +142 -0
- data/fixtures/v7/mini-buttons.cfg +0 -0
- data/fixtures/v7/mini-buttons.tw7 +14 -0
- data/fixtures/v7/modifier-key.cfg +0 -0
- data/fixtures/v7/modifier-key.tw7 +12 -0
- data/fixtures/v7/multi-char.cfg +0 -0
- data/fixtures/v7/multi-char.tw7 +12 -0
- data/fixtures/v7/nav-invert-x-axis.cfg +0 -0
- data/fixtures/v7/nav-invert-x-axis.tw7 +16 -0
- data/fixtures/v7/nav-sensitivity-lowered.cfg +0 -0
- data/fixtures/v7/nav-sensitivity-lowered.tw7 +12 -0
- data/fixtures/v7/nav-up-east.cfg +0 -0
- data/fixtures/v7/nav-up-east.tw7 +12 -0
- data/fixtures/v7/no-right-mouse-button.cfg +0 -0
- data/fixtures/v7/no-right-mouse-button.tw7 +12 -0
- data/fixtures/v7/no-t0-dedicated.cfg +0 -0
- data/fixtures/v7/no-t0-dedicated.tw7 +12 -0
- data/fixtures/v7/shifted-key.cfg +0 -0
- data/fixtures/v7/shifted-key.tw7 +12 -0
- data/fixtures/v7/single-unmodified-key.cfg +0 -0
- data/fixtures/v7/single-unmodified-key.tw7 +12 -0
- data/formats/tw7.md +222 -0
- data/formats/v7-cfg.md +272 -0
- data/lib/twiddling/cli/convert.rb +70 -0
- data/lib/twiddling/cli/diff.rb +192 -0
- data/lib/twiddling/cli/help.rb +26 -0
- data/lib/twiddling/cli/read.rb +56 -0
- data/lib/twiddling/cli/search.rb +131 -0
- data/lib/twiddling/cli/twiddling.rb +33 -0
- data/lib/twiddling/cli.rb +8 -0
- data/lib/twiddling/v7/chord.rb +48 -0
- data/lib/twiddling/v7/chord_constants.rb +82 -0
- data/lib/twiddling/v7/config.rb +102 -0
- data/lib/twiddling/v7/config_constants.rb +30 -0
- data/lib/twiddling/v7/data/default_base.cfg +0 -0
- data/lib/twiddling/v7/reader/chord.rb +49 -0
- data/lib/twiddling/v7/reader/config.rb +64 -0
- data/lib/twiddling/v7/reader/settings.rb +26 -0
- data/lib/twiddling/v7/reader/string_table.rb +69 -0
- data/lib/twiddling/v7/settings.rb +21 -0
- data/lib/twiddling/v7/string_table.rb +21 -0
- data/lib/twiddling/v7/string_table_entry.rb +14 -0
- data/lib/twiddling/v7/tw7/button_formatter.rb +63 -0
- data/lib/twiddling/v7/tw7/button_parser.rb +78 -0
- data/lib/twiddling/v7/tw7/effect_formatter.rb +78 -0
- data/lib/twiddling/v7/tw7/effect_parser.rb +121 -0
- data/lib/twiddling/v7/tw7/parser.rb +133 -0
- data/lib/twiddling/v7/tw7/printer.rb +105 -0
- data/lib/twiddling/v7/tw7/settings_formatter.rb +96 -0
- data/lib/twiddling/v7/tw7/settings_parser.rb +97 -0
- data/lib/twiddling/v7/validator.rb +93 -0
- data/lib/twiddling/v7/writer/chord.rb +36 -0
- data/lib/twiddling/v7/writer/config.rb +79 -0
- data/lib/twiddling/v7/writer/settings.rb +19 -0
- data/lib/twiddling/v7/writer/string_table.rb +40 -0
- data/lib/twiddling/v7.rb +34 -0
- data/lib/twiddling/version.rb +3 -0
- data/lib/twiddling.rb +8 -0
- data/tmp/.gitkeep +0 -0
- data/twiddling.gemspec +46 -0
- metadata +284 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 100f1bce7fb108f29712c2a203f41abf3073ff2c45d73bbee561d2127c9dc646
|
|
4
|
+
data.tar.gz: 8fc0d6aa7adca0c9e66c998044643b6ba91c81fceaffe6053afca1fa9bec4313
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: d6bc2545b64960e2604856d51ba4223230826309f466ffd4626a87f8ee3f3138bfbabcef5292747d11d7b07f0ad470565030c94feeec2969b6c8344935867837
|
|
7
|
+
data.tar.gz: 38c8a2390ff5ef6eb9c15071e10a8138f9f250ae160d6023c0fbead51e7c2f21320ae046265cb4fab6c6c091f245509eba7b4adf99be8c2e30d192d0d6764b91
|
data/.gitignore
ADDED
data/.mdl_rules.rb
ADDED
data/.mdlrc
ADDED
data/.quiet_quality.yml
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
default_tools: ["standardrb", "rubocop", "markdown_lint"]
|
|
3
|
+
executor: concurrent
|
|
4
|
+
comparison_branch: main
|
|
5
|
+
changed_files: false
|
|
6
|
+
filter_messages: false
|
|
7
|
+
logging: light
|
|
8
|
+
colorize: true
|
|
9
|
+
message_format: "%lcyan10tool| [%myellow40rule] %bred60loc %e-90body"
|
data/.rspec
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
--require spec_helper
|
data/.rubocop.yml
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
AllCops:
|
|
3
|
+
SuggestExtensions: false
|
|
4
|
+
DisabledByDefault: true
|
|
5
|
+
|
|
6
|
+
Metrics/AbcSize:
|
|
7
|
+
Max: 15
|
|
8
|
+
Metrics/CyclomaticComplexity:
|
|
9
|
+
Max: 8
|
|
10
|
+
Metrics/PerceivedComplexity:
|
|
11
|
+
Max: 7
|
|
12
|
+
|
|
13
|
+
Metrics/ClassLength:
|
|
14
|
+
CountComments: false
|
|
15
|
+
Max: 150
|
|
16
|
+
Metrics/MethodLength:
|
|
17
|
+
CountComments: false
|
|
18
|
+
Max: 15
|
|
19
|
+
Metrics/ParameterLists:
|
|
20
|
+
Max: 5
|
|
21
|
+
CountKeywordArgs: true
|
data/.standard.yml
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Eric Mueller
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
data/README.md
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# Twiddling
|
|
2
|
+
|
|
3
|
+
CLI tools for managing Twiddler 4 (v7) configuration files as
|
|
4
|
+
human-readable text instead of using the online tuner.
|
|
5
|
+
|
|
6
|
+
## Installation
|
|
7
|
+
|
|
8
|
+
```sh
|
|
9
|
+
bundle install
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
Requires Ruby >= 3.3.8.
|
|
13
|
+
|
|
14
|
+
## The .tw7 format
|
|
15
|
+
|
|
16
|
+
Twiddling uses a text format (`.tw7`) for editing configs. It has an
|
|
17
|
+
optional settings section and a chords section separated by `=====`.
|
|
18
|
+
See [formats/tw7.md](formats/tw7.md) for a fuller specification.
|
|
19
|
+
|
|
20
|
+
```text
|
|
21
|
+
idle_time: 480
|
|
22
|
+
haptic: false
|
|
23
|
+
=====
|
|
24
|
+
1R: backspace
|
|
25
|
+
1M: space
|
|
26
|
+
1L: tab
|
|
27
|
+
|
|
28
|
+
T2::
|
|
29
|
+
2R: ctrl+d
|
|
30
|
+
2M: ctrl+c
|
|
31
|
+
|
|
32
|
+
[MOUSEMODE]::
|
|
33
|
+
1R: left_click
|
|
34
|
+
1M: middle_click
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Commands
|
|
38
|
+
|
|
39
|
+
### twiddling read
|
|
40
|
+
|
|
41
|
+
Print a `.cfg` or `.tw7` file as text:
|
|
42
|
+
|
|
43
|
+
```sh
|
|
44
|
+
bin/twiddling read my_config.cfg
|
|
45
|
+
bin/twiddling read layout.tw7
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### twiddling convert
|
|
49
|
+
|
|
50
|
+
Convert between `.cfg` and `.tw7` formats:
|
|
51
|
+
|
|
52
|
+
```sh
|
|
53
|
+
bin/twiddling convert my_config.cfg layout.tw7
|
|
54
|
+
bin/twiddling convert layout.tw7 my_config.cfg
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### twiddling search
|
|
58
|
+
|
|
59
|
+
Search for chords by button combination or output:
|
|
60
|
+
|
|
61
|
+
```sh
|
|
62
|
+
bin/twiddling search my.cfg --chord "T4 1M"
|
|
63
|
+
bin/twiddling search my.tw7 --result "@"
|
|
64
|
+
bin/twiddling search my.cfg --button T4 --button 0M
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
All filters are combined as AND conditions.
|
|
68
|
+
|
|
69
|
+
### twiddling diff
|
|
70
|
+
|
|
71
|
+
Compare two configs, showing changed settings and chords:
|
|
72
|
+
|
|
73
|
+
```sh
|
|
74
|
+
bin/twiddling diff old.cfg new.cfg
|
|
75
|
+
bin/twiddling diff base.tw7 mine.tw7 --no-color
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Output is colorized by default (red=removed, yellow=changed,
|
|
79
|
+
green=added).
|
|
80
|
+
|
|
81
|
+
### Standalone conversion scripts
|
|
82
|
+
|
|
83
|
+
These are really necessary (and I recommend `twiddling convert`
|
|
84
|
+
most of the time). But simple coversion tools can be more convenient
|
|
85
|
+
sometimes.
|
|
86
|
+
|
|
87
|
+
```sh
|
|
88
|
+
bin/cfg2tw7 input.cfg output.tw7
|
|
89
|
+
bin/cfg2tw7 input.cfg # prints to stdout
|
|
90
|
+
bin/tw72cfg input.tw7 output.cfg
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Binary format
|
|
94
|
+
|
|
95
|
+
Config files use a binary format documented in
|
|
96
|
+
[formats/v7-cfg.md](formats/v7-cfg.md). Files should be named `1.cfg`,
|
|
97
|
+
`2.cfg`, or `3.cfg` when placed on the device.
|
|
98
|
+
|
|
99
|
+
Note that I have not fully explored the possible chords/settings; I assume
|
|
100
|
+
there are some things that are no converted correctly or currently
|
|
101
|
+
representable in the tw7 format. Feel free to submit PRs, or include a tuner-
|
|
102
|
+
generated .cfg file with minimal chords in your Issue and explain what those
|
|
103
|
+
chords actually do (I personally only use keys, modified keys, and short
|
|
104
|
+
multi-character strings).
|
|
105
|
+
|
|
106
|
+
## Config Collection
|
|
107
|
+
|
|
108
|
+
There are a few full configurations in `configs/v7/`. Feel free to submit
|
|
109
|
+
additional configs, either as PRs or issues; if you use it as your primary
|
|
110
|
+
configuration (or if it's a community standard), I'm happy to include it!
|
|
111
|
+
|
|
112
|
+
## Credits
|
|
113
|
+
|
|
114
|
+
The v7 binary format was originally reverse-engineered by the
|
|
115
|
+
[nchorder](https://github.com/GlassOnTin/nchorder) project, though
|
|
116
|
+
we've departed from their interpretation pretty substantially.
|
data/bin/cfg2tw7
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require_relative "../lib/twiddling"
|
|
4
|
+
|
|
5
|
+
input, output = ARGV
|
|
6
|
+
abort "Usage: cfg2tw7 <input.cfg> [output.tw7]" unless input
|
|
7
|
+
|
|
8
|
+
config = Twiddling::V7::Config.from_file(input)
|
|
9
|
+
if output
|
|
10
|
+
File.open(output, "w") { |f| Twiddling::V7::Tw7::Printer.new(config, io: f).print }
|
|
11
|
+
else
|
|
12
|
+
Twiddling::V7::Tw7::Printer.new(config).print
|
|
13
|
+
end
|
data/bin/tw72cfg
ADDED
data/bin/twiddling
ADDED
|
Binary file
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
1R: a
|
|
2
|
+
1M: e
|
|
3
|
+
1L: space
|
|
4
|
+
2R: b
|
|
5
|
+
1R 2R: .
|
|
6
|
+
1M 2R: r
|
|
7
|
+
1L 2R: i
|
|
8
|
+
2M: f
|
|
9
|
+
1R 2M: '
|
|
10
|
+
1M 2M: u
|
|
11
|
+
1L 2M: l
|
|
12
|
+
2L: delete
|
|
13
|
+
1R 2L: /
|
|
14
|
+
1M 2L: x
|
|
15
|
+
1L 2L: o
|
|
16
|
+
3R: c
|
|
17
|
+
1R 3R: ,
|
|
18
|
+
1M 3R: s
|
|
19
|
+
1L 3R: j
|
|
20
|
+
2R 3R: "the "
|
|
21
|
+
1R 2R 3R: esc
|
|
22
|
+
2M 3R: up
|
|
23
|
+
2L 3R: 4
|
|
24
|
+
3M: g
|
|
25
|
+
1R 3M: '
|
|
26
|
+
1M 3M: v
|
|
27
|
+
1L 3M: m
|
|
28
|
+
2R 3M: "of "
|
|
29
|
+
2M 3M: left
|
|
30
|
+
1M 2M 3M: /
|
|
31
|
+
3L: backspace
|
|
32
|
+
1R 3L: !
|
|
33
|
+
1M 3L: y
|
|
34
|
+
1L 3L: p
|
|
35
|
+
2R 3L: 0
|
|
36
|
+
2M 3L: down
|
|
37
|
+
2L 3L: 9
|
|
38
|
+
1L 2L 3L: \
|
|
39
|
+
4R: d
|
|
40
|
+
1R 4R: ;
|
|
41
|
+
1M 4R: t
|
|
42
|
+
1L 4R: k
|
|
43
|
+
2R 4R: "to "
|
|
44
|
+
2M 4R: "ed "
|
|
45
|
+
3R 4R: page_up
|
|
46
|
+
1R 3R 4R: "ant "
|
|
47
|
+
2R 3R 4R: home
|
|
48
|
+
1R 2R 3R 4R: caps_lock
|
|
49
|
+
3M 4R: =
|
|
50
|
+
3L 4R: @
|
|
51
|
+
4M: h
|
|
52
|
+
1R 4M: "and "
|
|
53
|
+
1M 4M: w
|
|
54
|
+
1L 4M: n
|
|
55
|
+
2R 4M: "in"
|
|
56
|
+
2M 4M: right
|
|
57
|
+
1M 2M 4M: tab
|
|
58
|
+
2L 4M: "ion "
|
|
59
|
+
3R 4M: 5
|
|
60
|
+
3M 4M: "ing "
|
|
61
|
+
1M 3M 4M: "ent "
|
|
62
|
+
1M 2M 3M 4M: num_lock
|
|
63
|
+
3L 4M: 8
|
|
64
|
+
4L: enter
|
|
65
|
+
1R 4L: -
|
|
66
|
+
1M 4L: z
|
|
67
|
+
1L 4L: q
|
|
68
|
+
2R 4L: -
|
|
69
|
+
2M 4L: 3
|
|
70
|
+
2L 4L: 7
|
|
71
|
+
3R 4L: :
|
|
72
|
+
3M 4L: =
|
|
73
|
+
3L 4L: page_down
|
|
74
|
+
2L 3L 4L: end
|
|
75
|
+
|
|
76
|
+
T1::
|
|
77
|
+
1R: 1
|
|
78
|
+
1M: 5
|
|
79
|
+
1L: 9
|
|
80
|
+
2R: 2
|
|
81
|
+
2M: 6
|
|
82
|
+
1R 2M: [
|
|
83
|
+
1L 2M: ^
|
|
84
|
+
2L: 0
|
|
85
|
+
3R: 3
|
|
86
|
+
1R 3R: >
|
|
87
|
+
1L 2L 3R: |
|
|
88
|
+
3M: 7
|
|
89
|
+
1L 2L 3M: ~
|
|
90
|
+
1R 3L: `
|
|
91
|
+
4R: 4
|
|
92
|
+
1L 2L 4R: }
|
|
93
|
+
4M: 8
|
|
94
|
+
1R 4M: ]
|
|
95
|
+
4L: enter
|
|
96
|
+
1R 4L: {
|
|
97
|
+
1M 4L: <
|
|
98
|
+
|
|
99
|
+
T3::
|
|
100
|
+
1R: ctrl+a
|
|
101
|
+
1M: ctrl+e
|
|
102
|
+
2R: ctrl+b
|
|
103
|
+
1M 2R: ctrl+r
|
|
104
|
+
1L 2R: ctrl+i
|
|
105
|
+
2M: ctrl+f
|
|
106
|
+
1M 2M: ctrl+u
|
|
107
|
+
1L 2M: ctrl+l
|
|
108
|
+
1M 2L: ctrl+x
|
|
109
|
+
1L 2L: ctrl+o
|
|
110
|
+
3R: ctrl+c
|
|
111
|
+
1M 3R: ctrl+s
|
|
112
|
+
1L 3R: ctrl+j
|
|
113
|
+
3M: ctrl+g
|
|
114
|
+
1M 3M: ctrl+v
|
|
115
|
+
1L 3M: ctrl+m
|
|
116
|
+
1L 2L 3M: insert
|
|
117
|
+
1M 3L: ctrl+y
|
|
118
|
+
1L 3L: ctrl+p
|
|
119
|
+
4R: ctrl+d
|
|
120
|
+
1M 4R: ctrl+t
|
|
121
|
+
1L 4R: ctrl+k
|
|
122
|
+
4M: ctrl+h
|
|
123
|
+
1M 4M: ctrl+w
|
|
124
|
+
1L 4M: ctrl+n
|
|
125
|
+
1M 4L: ctrl+z
|
|
126
|
+
1L 4L: ctrl+q
|
|
127
|
+
|
|
128
|
+
T4::
|
|
129
|
+
1M 2M 4M: tab
|
|
130
|
+
4L: enter
|
|
131
|
+
|
|
132
|
+
T12::
|
|
133
|
+
1R: f1
|
|
134
|
+
1M: f5
|
|
135
|
+
1L: f9
|
|
136
|
+
2R: f2
|
|
137
|
+
1L 2R: alt+f1
|
|
138
|
+
2M: f6
|
|
139
|
+
1L 2M: alt+f4
|
|
140
|
+
2L: f10
|
|
141
|
+
1L 2L: alt+f7
|
|
142
|
+
3R: f3
|
|
143
|
+
1L 3R: alt+f2
|
|
144
|
+
2L 3R: alt+f10
|
|
145
|
+
3M: f7
|
|
146
|
+
1L 3M: alt+f5
|
|
147
|
+
2L 3M: alt+f12
|
|
148
|
+
3L: f11
|
|
149
|
+
1L 3L: alt+f8
|
|
150
|
+
4R: f4
|
|
151
|
+
1L 4R: alt+f3
|
|
152
|
+
2L 4R: alt+f11
|
|
153
|
+
4M: f8
|
|
154
|
+
1L 4M: alt+f6
|
|
155
|
+
4L: f12
|
|
156
|
+
1L 4L: alt+f9
|
|
157
|
+
1L 2L 4L: 0x0047
|
|
158
|
+
|
|
159
|
+
T14 4R: speed_cycle
|
|
160
|
+
|
|
161
|
+
[MOUSEMODE]::
|
|
162
|
+
1R: left_click
|
|
163
|
+
1M: middle_click
|
|
164
|
+
1L: right_click
|
|
165
|
+
T23: mouse_toggle
|
|
166
|
+
4R: speed_decrease
|
|
167
|
+
4M: scroll_toggle
|
|
168
|
+
4L: speed_increase
|
|
Binary file
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
key_repeat: false
|
|
2
|
+
haptic: false
|
|
3
|
+
nav_direction: 1
|
|
4
|
+
t1_modifier: l_command
|
|
5
|
+
t2_modifier: none
|
|
6
|
+
t3_modifier: l_shift
|
|
7
|
+
t4_modifier: none
|
|
8
|
+
f0l_dedicated: none
|
|
9
|
+
f0m_dedicated: none
|
|
10
|
+
f0r_dedicated: none
|
|
11
|
+
t0_dedicated: none
|
|
12
|
+
=====
|
|
13
|
+
|
|
14
|
+
# The primary bindings here are based on the tabspace layout - see
|
|
15
|
+
# https://rhodesmill.org/brandon/projects/tabspace-guide.pdf for
|
|
16
|
+
# details. I have departed in several places, but the general idea
|
|
17
|
+
# is to dedicate the 1-row to chord bases (index finger is most
|
|
18
|
+
# capable of isolated control).
|
|
19
|
+
|
|
20
|
+
1R: backspace
|
|
21
|
+
1M: space
|
|
22
|
+
1L: tab
|
|
23
|
+
|
|
24
|
+
# -------- letters ------------------------------
|
|
25
|
+
2R: i
|
|
26
|
+
2M: e
|
|
27
|
+
2L: o
|
|
28
|
+
3R: n
|
|
29
|
+
3M: t
|
|
30
|
+
3L: r
|
|
31
|
+
4R: a
|
|
32
|
+
4M: h
|
|
33
|
+
4L: s
|
|
34
|
+
|
|
35
|
+
1M::
|
|
36
|
+
# -- Secondary letters (chorded on space/1M)
|
|
37
|
+
2R: c
|
|
38
|
+
2M: d
|
|
39
|
+
2L: u
|
|
40
|
+
3R: f
|
|
41
|
+
3M: l
|
|
42
|
+
3L: w
|
|
43
|
+
4R: g
|
|
44
|
+
4M: m
|
|
45
|
+
4L: y
|
|
46
|
+
|
|
47
|
+
# -- Tertiary letters (adjacent pairs chorded on space/1M)
|
|
48
|
+
2R 3R: b
|
|
49
|
+
2M 3M: p
|
|
50
|
+
3M 4M: k
|
|
51
|
+
2L 3L: v
|
|
52
|
+
3L 4L: x
|
|
53
|
+
3R 4R: j
|
|
54
|
+
|
|
55
|
+
# -- Rare letters (adjacent triples chorded on space/1M)
|
|
56
|
+
2R 3R 4R: z
|
|
57
|
+
2M 3M 4M: q
|
|
58
|
+
# Note that 1M 2L3L4L is in the next section (as ESC)
|
|
59
|
+
|
|
60
|
+
# -------- whole hand chords --------------------
|
|
61
|
+
1R 2R 3R 4R: enter
|
|
62
|
+
1M 2L 3L 4L: esc
|
|
63
|
+
|
|
64
|
+
# -------- numerics -----------------------------
|
|
65
|
+
1R::
|
|
66
|
+
# numbers
|
|
67
|
+
2R: 1
|
|
68
|
+
3R: 2
|
|
69
|
+
4R: 3
|
|
70
|
+
2M: 4
|
|
71
|
+
3M: 5
|
|
72
|
+
4M: 6
|
|
73
|
+
2L: 7
|
|
74
|
+
3L: 8
|
|
75
|
+
4L: 9
|
|
76
|
+
2R 3R: 0 # (three adjacent)
|
|
77
|
+
|
|
78
|
+
3R 4R: .
|
|
79
|
+
3M 4M: ,
|
|
80
|
+
2L 3L: ^
|
|
81
|
+
|
|
82
|
+
3L 4L: ~
|
|
83
|
+
2L 3L 4L: %
|
|
84
|
+
|
|
85
|
+
# -------- calculation glyphs ------------------------------
|
|
86
|
+
1R2R::
|
|
87
|
+
# (3R is above - that's zero)
|
|
88
|
+
3M: +
|
|
89
|
+
3L: -
|
|
90
|
+
4R: =
|
|
91
|
+
4M: *
|
|
92
|
+
4L: /
|
|
93
|
+
|
|
94
|
+
# I am less happy with the punctuation/symbol bindings.
|
|
95
|
+
# There are _so many_ of them, and I don't have a good mental model for
|
|
96
|
+
# how to organize them so that I can find what I need on the fly yet.
|
|
97
|
+
# I write mostly ruby, so the easily reachable symbols are biased in
|
|
98
|
+
# that direction.
|
|
99
|
+
|
|
100
|
+
# -------- paired glyphs (mostly) ---------------------
|
|
101
|
+
1R2M::
|
|
102
|
+
3R: [
|
|
103
|
+
4R: ]
|
|
104
|
+
3M: (
|
|
105
|
+
4M: )
|
|
106
|
+
3L: {
|
|
107
|
+
4L: }
|
|
108
|
+
3R 4R: <
|
|
109
|
+
3L 4L: >
|
|
110
|
+
|
|
111
|
+
3M 4M: $
|
|
112
|
+
|
|
113
|
+
1L:: # -------- common punctuation ------------------------------
|
|
114
|
+
2L: .
|
|
115
|
+
3L: ,
|
|
116
|
+
4L: '
|
|
117
|
+
|
|
118
|
+
2M: enter
|
|
119
|
+
3M: !
|
|
120
|
+
4M: *
|
|
121
|
+
|
|
122
|
+
2R: -
|
|
123
|
+
3R: /
|
|
124
|
+
4R: \
|
|
125
|
+
|
|
126
|
+
# adjacent pairs
|
|
127
|
+
3R 4R: &
|
|
128
|
+
3M 4M: `
|
|
129
|
+
3L 4L: shift+' # (double-quote)
|
|
130
|
+
|
|
131
|
+
1L2L::
|
|
132
|
+
3R: @
|
|
133
|
+
3M: ? # way more common than I expected, this needs promoting to a 2-finger chord
|
|
134
|
+
3L: ;
|
|
135
|
+
4R: %
|
|
136
|
+
4M: $
|
|
137
|
+
4L: "#"
|
|
138
|
+
3L 4L: "_"
|
|
139
|
+
|
|
140
|
+
1L2M:: # don't chord too much from here; 'enter' is a dangerous base in a terminal
|
|
141
|
+
3M: ":"
|
|
142
|
+
3M 4M: =
|
|
143
|
+
|
|
144
|
+
1L2R:: # awkward reach
|
|
145
|
+
3R: ~
|
|
146
|
+
3R 4R: |
|
|
147
|
+
|
|
148
|
+
# Thumb chords - these are entirely tentative, and I'm playing with other approaches.
|
|
149
|
+
# Chords including them buttons are _awkward_, and usually require a hgrip shift,
|
|
150
|
+
# so they aren't terribly useful.
|
|
151
|
+
|
|
152
|
+
# Probably the answer is 'sticky' thumb buttons, but I need to see how often I get
|
|
153
|
+
# confused about what buttons are _stuck_.
|
|
154
|
+
|
|
155
|
+
T2::
|
|
156
|
+
2R: ctrl+d
|
|
157
|
+
2M: ctrl+c
|
|
158
|
+
2L: cmd+n
|
|
159
|
+
|
|
160
|
+
1R 2R: cmd+c
|
|
161
|
+
1R 2M: cmd+v
|
|
162
|
+
1R 2L: cmd+x
|
|
163
|
+
|
|
164
|
+
3R: cmd+l
|
|
165
|
+
3M: cmd+k
|
|
166
|
+
3L: cmd+f
|
|
167
|
+
|
|
168
|
+
4R: cmd+w
|
|
169
|
+
4M: cmd+t
|
|
170
|
+
4L: cmd+q
|
|
171
|
+
|
|
172
|
+
T4::
|
|
173
|
+
1R: ctrl+y
|
|
174
|
+
1M: up
|
|
175
|
+
1L: page_up
|
|
176
|
+
2R: alt+f
|
|
177
|
+
2M: right
|
|
178
|
+
2L: end
|
|
179
|
+
3R: alt+b
|
|
180
|
+
2R 3R: ctrl+cmd+up
|
|
181
|
+
3M: left
|
|
182
|
+
3L: home
|
|
183
|
+
2L 3L: ctrl+cmd+enter
|
|
184
|
+
4R: ctrl+e
|
|
185
|
+
1R 4R: ctrl+cmd+left
|
|
186
|
+
4M: down
|
|
187
|
+
4L: page_down
|
|
188
|
+
1L 4L: ctrl+cmd+right
|
|
189
|
+
1L 2L 3L 4L: ctrl+cmd+enter
|
|
190
|
+
0L: ctrl+tab
|
|
191
|
+
0M: cmd+`
|
|
192
|
+
0R: cmd+tab
|
|
193
|
+
|
|
194
|
+
T14 4R: speed_cycle
|
|
195
|
+
|
|
196
|
+
[MOUSEMODE]::
|
|
197
|
+
1R: left_click
|
|
198
|
+
1M: middle_click
|
|
199
|
+
1L: right_click
|
|
200
|
+
T23: mouse_toggle
|
|
201
|
+
4R: speed_decrease
|
|
202
|
+
4M: scroll_toggle
|
|
203
|
+
4L: speed_increase
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Fixtures
|
|
2
|
+
|
|
3
|
+
- empty.cfg - config downloaded with only system chords and default settings
|
|
4
|
+
- large.cfg - a full config with many chords.
|
|
5
|
+
|
|
6
|
+
## Settings
|
|
7
|
+
|
|
8
|
+
Each of these is a variation of empty.cfg with one setting changed.
|
|
9
|
+
|
|
10
|
+
- no-right-mouse-button.cfg - 'dedicated button function' removed from
|
|
11
|
+
0L (previously was 'Mouse Button Right')
|
|
12
|
+
- no-t0-dedicated.cfg - t0 no longer dedicated to mouse button left.
|
|
13
|
+
- idle-time-8m.cfg - 'idle time until sleep' lowered from 10m to 8m
|
|
14
|
+
- nav-invert-x-axis.cfg - 'Nav Invert X-Axis' enabled
|
|
15
|
+
- nav-sensitivity-lowered.cfg - 'nav sensitivity' reduced all the way
|
|
16
|
+
- button-mode-keyboard.cfg - button-mode set to "keyboard"
|
|
17
|
+
- haptic-feedback-off.cfg - haptic feedback disabled
|
|
18
|
+
- nav-up-east.cfg - nav-up set to east instead of north
|
|
19
|
+
- key-repeat-disabled.cfg - key-repeat disabled
|
|
20
|
+
- key-repeat-1020.cfg - key-repeat threshold changed from 1000 to 1020 ms
|
|
21
|
+
|
|
22
|
+
## Buttons
|
|
23
|
+
|
|
24
|
+
Each of these is empty.cfg with one extra chord added.
|
|
25
|
+
|
|
26
|
+
- single-unmodified-key.cfg - F1R = "c"
|
|
27
|
+
- shifted-key.cfg - F1R = "@"
|
|
28
|
+
- modifier-key.cfg - F1R = "ctrl+c"
|
|
29
|
+
- multi-char.cfg - F1R = "test" (a string)
|
|
30
|
+
- cycle-config-chord.cfg - F1R = "Cycle config"
|
|
31
|
+
- mini-buttons.cfg - 0L = "l", 0M = "m", and 0R = "r"
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|