├── layout.png
├── ortho.png
├── windows
└── engrammer.klc
├── macos
└── Engrammer.bundle
│ └── Contents
│ ├── Resources
│ ├── Engrammer.icns
│ ├── en.lproj
│ │ └── InfoPlist.strings
│ └── Engrammer.keylayout
│ ├── version.plist
│ └── Info.plist
├── linux
├── usr-share-X11-xkb-rules-evdev
├── Makefile
└── usr-share-X11-xkb-symbols-us
├── ortho.json
├── layout.json
├── README.md
└── type-fu.com
└── engrammer.tfl
/layout.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunaku/engrammer/HEAD/layout.png
--------------------------------------------------------------------------------
/ortho.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunaku/engrammer/HEAD/ortho.png
--------------------------------------------------------------------------------
/windows/engrammer.klc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunaku/engrammer/HEAD/windows/engrammer.klc
--------------------------------------------------------------------------------
/macos/Engrammer.bundle/Contents/Resources/Engrammer.icns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunaku/engrammer/HEAD/macos/Engrammer.bundle/Contents/Resources/Engrammer.icns
--------------------------------------------------------------------------------
/macos/Engrammer.bundle/Contents/Resources/en.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunaku/engrammer/HEAD/macos/Engrammer.bundle/Contents/Resources/en.lproj/InfoPlist.strings
--------------------------------------------------------------------------------
/linux/usr-share-X11-xkb-rules-evdev:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | engrammer
5 | English (Engrammer)
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/macos/Engrammer.bundle/Contents/version.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | BuildVersion
6 |
7 | ProjectName
8 |
9 | SourceVersion
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/linux/Makefile:
--------------------------------------------------------------------------------
1 | TARGET_SYMBOLS := /usr/share/X11/xkb/symbols/us
2 | SOURCE_SYMBOLS := usr-share-X11-xkb-symbols-us
3 | TARGET_RULES := /usr/share/X11/xkb/rules/evdev.xml
4 | SOURCE_RULES := usr-share-X11-xkb-rules-evdev
5 |
6 | all: reinstall
7 |
8 | install: $(SOURCE_SYMBOLS) $(TARGET_SYMBOLS) $(SOURCE_RULES) $(TARGET_RULES)
9 | cat $(SOURCE_SYMBOLS) >> $(TARGET_SYMBOLS)
10 | sed -i "$$(awk '/variantList/{ print NR; exit }' $(TARGET_RULES)) r $(SOURCE_RULES)" $(TARGET_RULES)
11 |
12 | uninstall: $(TARGET_SYMBOLS) $(TARGET_RULES)
13 | sed -i '/ ENGRAMMER BEGIN /,/ ENGRAMMER END /d' $^
14 |
15 | reinstall:
16 | $(MAKE) uninstall
17 | $(MAKE) install
18 |
19 | .PHONY: all install uninstall reinstall
20 |
--------------------------------------------------------------------------------
/macos/Engrammer.bundle/Contents/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleIdentifier
6 | org.sil.ukelele.keyboardlayout.
7 | CFBundleName
8 |
9 | CFBundleVersion
10 |
11 | KLInfo_Engrammer
12 |
13 | TICapsLockLanguageSwitchCapable
14 |
15 | TISIconIsTemplate
16 |
17 | TISInputSourceID
18 | org.sil.ukelele.keyboardlayout..engrammer
19 | TISIntendedLanguage
20 | en
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/ortho.json:
--------------------------------------------------------------------------------
1 | [
2 | [
3 | {
4 | "p": "CHICKLET",
5 | "a": 5,
6 | "f": 4
7 | },
8 | "~\n`",
9 | "!\n1",
10 | "@\n2",
11 | "#\n3",
12 | "$\n4",
13 | "%\n5",
14 | "^\n6",
15 | "&\n7",
16 | "*\n8",
17 | "(\n9",
18 | ")\n0",
19 | {
20 | "c": "#FFCDD2"
21 | },
22 | "{\n[",
23 | "}\n]",
24 | {
25 | "c": "#cccccc",
26 | "a": 7,
27 | "f": 3
28 | },
29 | "Back Space"
30 | ],
31 | [
32 | "Tab",
33 | {
34 | "c": "#FFECB3",
35 | "f": 4
36 | },
37 | "B",
38 | "Y",
39 | "O",
40 | "U",
41 | {
42 | "c": "#BBDEFB",
43 | "a": 5
44 | },
45 | "\"\n'",
46 | {
47 | "c": "#FFCDD2"
48 | },
49 | ":\n;",
50 | {
51 | "c": "#FFECB3",
52 | "a": 7
53 | },
54 | "L",
55 | "D",
56 | "W",
57 | "V",
58 | "Z",
59 | {
60 | "c": "#FFCDD2",
61 | "a": 5
62 | },
63 | "+\n=",
64 | {
65 | "c": "#cccccc"
66 | },
67 | "|\n\\"
68 | ],
69 | [
70 | {
71 | "a": 7,
72 | "f": 3
73 | },
74 | "Caps Lock",
75 | {
76 | "c": "#FFECB3",
77 | "f": 4
78 | },
79 | "C",
80 | "I",
81 | "E",
82 | {
83 | "n": true
84 | },
85 | "A",
86 | {
87 | "c": "#BBDEFB",
88 | "a": 5
89 | },
90 | "<\n,",
91 | ">\n.",
92 | {
93 | "c": "#FFECB3",
94 | "a": 7,
95 | "n": true
96 | },
97 | "H",
98 | "T",
99 | "S",
100 | "N",
101 | "Q",
102 | {
103 | "c": "#cccccc",
104 | "f": 3,
105 | "w": 2
106 | },
107 | "Enter"
108 | ],
109 | [
110 | "Shift",
111 | {
112 | "c": "#FFECB3",
113 | "f": 4
114 | },
115 | "G",
116 | {
117 | "c": "#cccccc"
118 | },
119 | "X",
120 | {
121 | "c": "#FFECB3"
122 | },
123 | "J",
124 | "K",
125 | {
126 | "a": 5
127 | },
128 | "_\n-",
129 | {
130 | "c": "#BBDEFB"
131 | },
132 | "?\n/",
133 | {
134 | "c": "#FFECB3",
135 | "a": 7
136 | },
137 | "R",
138 | "M",
139 | "F",
140 | "P",
141 | {
142 | "c": "#cccccc",
143 | "f": 3,
144 | "w": 3
145 | },
146 | "Shift"
147 | ],
148 | [
149 | "Ctrl",
150 | "Win",
151 | "Alt",
152 | {
153 | "w": 7
154 | },
155 | "",
156 | "Alt",
157 | "Win",
158 | "Menu",
159 | "Ctrl"
160 | ]
161 | ]
--------------------------------------------------------------------------------
/layout.json:
--------------------------------------------------------------------------------
1 | [
2 | [
3 | {
4 | "p": "CHICKLET",
5 | "a": 5,
6 | "f": 4
7 | },
8 | "~\n`",
9 | "!\n1",
10 | "@\n2",
11 | "#\n3",
12 | "$\n4",
13 | "%\n5",
14 | "^\n6",
15 | "&\n7",
16 | "*\n8",
17 | "(\n9",
18 | ")\n0",
19 | {
20 | "c": "#FFCDD2"
21 | },
22 | "{\n[",
23 | "}\n]",
24 | {
25 | "c": "#cccccc",
26 | "a": 7,
27 | "f": 3,
28 | "w": 2
29 | },
30 | "Backspace"
31 | ],
32 | [
33 | {
34 | "w": 1.5
35 | },
36 | "Tab",
37 | {
38 | "c": "#FFECB3",
39 | "f": 4
40 | },
41 | "B",
42 | "Y",
43 | "O",
44 | "U",
45 | {
46 | "c": "#BBDEFB",
47 | "a": 5
48 | },
49 | "\"\n'",
50 | {
51 | "c": "#FFCDD2"
52 | },
53 | ":\n;",
54 | {
55 | "c": "#FFECB3",
56 | "a": 7
57 | },
58 | "L",
59 | "D",
60 | "W",
61 | "V",
62 | "Z",
63 | {
64 | "c": "#FFCDD2",
65 | "a": 5
66 | },
67 | "+\n=",
68 | {
69 | "c": "#cccccc",
70 | "w": 1.5
71 | },
72 | "|\n\\"
73 | ],
74 | [
75 | {
76 | "a": 7,
77 | "f": 3,
78 | "w": 1.75
79 | },
80 | "Caps Lock",
81 | {
82 | "c": "#FFECB3",
83 | "f": 4
84 | },
85 | "C",
86 | "I",
87 | "E",
88 | {
89 | "n": true
90 | },
91 | "A",
92 | {
93 | "c": "#BBDEFB",
94 | "a": 5
95 | },
96 | "<\n,",
97 | ">\n.",
98 | {
99 | "c": "#FFECB3",
100 | "a": 7,
101 | "n": true
102 | },
103 | "H",
104 | "T",
105 | "S",
106 | "N",
107 | "Q",
108 | {
109 | "c": "#cccccc",
110 | "f": 3,
111 | "w": 2.25
112 | },
113 | "Enter"
114 | ],
115 | [
116 | {
117 | "w": 2.25
118 | },
119 | "Shift",
120 | {
121 | "c": "#FFECB3",
122 | "f": 4
123 | },
124 | "G",
125 | {
126 | "c": "#cccccc"
127 | },
128 | "X",
129 | {
130 | "c": "#FFECB3"
131 | },
132 | "J",
133 | "K",
134 | {
135 | "a": 5
136 | },
137 | "_\n-",
138 | {
139 | "c": "#BBDEFB"
140 | },
141 | "?\n/",
142 | {
143 | "c": "#FFECB3",
144 | "a": 7
145 | },
146 | "R",
147 | "M",
148 | "F",
149 | "P",
150 | {
151 | "c": "#cccccc",
152 | "f": 3,
153 | "w": 2.75
154 | },
155 | "Shift"
156 | ],
157 | [
158 | {
159 | "w": 1.25
160 | },
161 | "Ctrl",
162 | {
163 | "w": 1.25
164 | },
165 | "Win",
166 | {
167 | "w": 1.25
168 | },
169 | "Alt",
170 | {
171 | "w": 6.25
172 | },
173 | "",
174 | {
175 | "w": 1.25
176 | },
177 | "Alt",
178 | {
179 | "w": 1.25
180 | },
181 | "Win",
182 | {
183 | "w": 1.25
184 | },
185 | "Menu",
186 | {
187 | "w": 1.25
188 | },
189 | "Ctrl"
190 | ]
191 | ]
--------------------------------------------------------------------------------
/linux/usr-share-X11-xkb-symbols-us:
--------------------------------------------------------------------------------
1 | // ENGRAMMER BEGIN ////////////////////////////////////////
2 | //
3 | // Engrammer - Arno's Engram 2.0 https://engram.dev variant
4 | // with standard shifted pairs, for programmers
5 | //
6 | // `~ 1! 2@ 3# 4$ 5% 6^ 7& 8* 9( 0) [{ ]}
7 | // bB yY oO uU '" ;: lL dD wW vV zZ =+ \|
8 | // cC iI eE aA ,< .> hH tT sS nN qQ
9 | // gG xX jJ kK -_ /? rR mM fF pP
10 | //
11 | partial alphanumeric_keys
12 | xkb_symbols "engrammer"
13 | {
14 | include "us(basic)"
15 |
16 | key { [ grave, asciitilde ] }; // `~
17 | key { [ 1, exclam ] }; // 1!
18 | key { [ 2, at ] }; // 2@
19 | key { [ 3, numbersign ] }; // 3#
20 | key { [ 4, dollar ] }; // 4$
21 | key { [ 5, percent ] }; // 5%
22 | key { [ 6, asciicircum] }; // 6^
23 | key { [ 7, ampersand ] }; // 7&
24 | key { [ 8, asterisk ] }; // 8*
25 | key { [ 9, parenleft ] }; // 9(
26 | key { [ 0, parenright ] }; // 0)
27 | key { [ bracketleft, braceleft ] }; // [{
28 | key { [ bracketright, braceright ] }; // ]}
29 |
30 | key { [ b, B ] }; // bB
31 | key { [ y, Y ] }; // yY
32 | key { [ o, O ] }; // oO
33 | key { [ u, U ] }; // uU
34 | key { [ apostrophe, quotedbl ] }; // '"
35 | key { [ semicolon, colon ] }; // ;:
36 | key { [ l, L ] }; // lL
37 | key { [ d, D ] }; // dD
38 | key { [ w, W ] }; // wW
39 | key { [ v, V ] }; // vV
40 | key { [ z, Z ] }; // zZ
41 | key { [ equal, plus ] }; // =+
42 | key { [ backslash, bar ] }; // \|
43 |
44 | key { [ c, C ] }; // cC
45 | key { [ i, I ] }; // iI
46 | key { [ e, E ] }; // eE
47 | key { [ a, A ] }; // aA
48 | key { [ comma, less ] }; // ,<
49 | key { [ period, greater ] }; // .>
50 | key { [ h, H ] }; // hH
51 | key { [ t, T ] }; // tT
52 | key { [ s, S ] }; // sS
53 | key { [ n, N ] }; // nN
54 | key { [ q, Q ] }; // qQ
55 |
56 | key { [ g, G ] }; // gG
57 | key { [ x, X ] }; // xX
58 | key { [ j, J ] }; // jJ
59 | key { [ k, K ] }; // kK
60 | key { [ minus, underscore ] }; // -_
61 | key { [ slash, question ] }; // /?
62 | key { [ r, R ] }; // rR
63 | key { [ m, M ] }; // mM
64 | key { [ f, F ] }; // fF
65 | key { [ p, P ] }; // pP
66 | };
67 | // ENGRAMMER END //////////////////////////////////////////
68 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | [Arno's Engram]: https://engram.dev
2 |
3 | # Engrammer - [Arno's Engram] layout for programmers
4 |
5 | This is a programmer-friendly variant of [Arno's Engram] 2.0 keyboard
6 | layout that helps maintain cross-proficiency with standard keyboards:
7 |
8 | * Shifted pairs are standard (e.g. quotes don't shift to parentheses).
9 | * Semicolon is placed relative to comma and period just like standard.
10 | * Equals and square brackets are placed near their standard locations.
11 |
12 | In addition, application shortcuts that assume standard shifted pairs,
13 | such as Control-Equals for the "zoom in" operation, now work properly.
14 |
15 | To illustrate the differences between this layout, Engram, and QWERTY:
16 |
17 | >*Legend:* Gold is [Arno's Engram]; Blue is Engram-like; Pink is new.
18 | >
19 | >
20 | >
21 | > `~ 1! 2@ 3# 4$ 5% 6^ 7& 8* 9( 0) [{ ]}
22 | > bB yY oO uU '" ;: lL dD wW vV zZ =+ \|
23 | > cC iI eE aA ,< .> hH tT sS nN qQ
24 | > gG xX jJ kK -_ /? rR mM fF pP
25 |
26 | For example, here are my split ortholinear keyboards using this layout:
27 |
28 | * This is [my Glove80](https://sunaku.github.io/moergo-glove80-keyboard.html) keyboard by MoErgo:
29 | >
30 | >
31 |
32 | * This is [my Remnant](https://sunaku.github.io/ergohaven-remnant-keyboard.html) keyboard by Ergohaven:
33 | >
34 | >
35 |
36 | ## Linux setup
37 |
38 | Install:
39 |
40 | cd linux/
41 | sudo make install
42 | echo Now restart your graphical session.
43 |
44 | Activate:
45 |
46 | setxkbmap -layout us -variant engrammer # one layout; no switch
47 | setxkbmap -layout us,us -variant engrammer,basic # dual layout switching
48 |
49 | Repair (e.g. whenever a system-wide XKB package upgrade reverts installation):
50 |
51 | cd linux/
52 | sudo make reinstall
53 | echo Now restart your graphical session.
54 |
55 | Uninstall:
56 |
57 | cd linux/
58 | sudo make uninstall
59 | echo Now restart your graphical session.
60 |
61 | ## Windows setup
62 |
63 | You can [download a pre-built installation package](
64 | https://github.com/sunaku/engrammer/releases/download/windows/engrammer.zip
65 | ) or build one yourself, like this:
66 |
67 | 1. Install the official _Microsoft Keyboard Layout Creator_ app: [MSKLC version 1.4](
68 | https://www.microsoft.com/en-us/download/details.aspx?id=102134
69 | ).
70 |
71 | 2. Launch the MSKLC app and open up the `windows\engrammer.klc` source file.
72 |
73 | 3. From the "Project" menu, select the "Build DLL and Setup Package" action.
74 |
75 | 4. Open the resulting build directory and run the `setup.exe` installer file.
76 |
77 | ## MacOS setup
78 |
79 | 1. Copy `macos/Engrammer.bundle` to `~/Library/Keyboard Layouts/` directory
80 |
81 | 2. Log out and Log in again to your MacOS user
82 |
83 | 3. Open Keyboard Settings and add Engrammer from the list of English layouts
84 |
85 | ## Type Fu setup
86 |
87 | 
88 |
89 | 1. Launch the [Type Fu](https://type-fu.com/) app, then open the "More" menu.
90 |
91 | 2. Go to Preferences > Keyboard > Functional > "More" menu > Import from file.
92 |
93 | 3. Pick the `type-fu.com/engrammer.tfl` file from your copy of this repository.
94 |
95 | ## License
96 |
97 | Released under the same terms as [Arno's Engram]:
98 |
99 | > MIT License
100 | >
101 | > Copyright 2021 Arno Klein
102 | >
103 | > Permission is hereby granted, free of charge, to any person obtaining a copy
104 | > of this software and associated documentation files (the "Software"), to deal
105 | > in the Software without restriction, including without limitation the rights
106 | > to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
107 | > copies of the Software, and to permit persons to whom the Software is
108 | > furnished to do so, subject to the following conditions:
109 | >
110 | > The above copyright notice and this permission notice shall be included in
111 | > all copies or substantial portions of the Software.
112 | >
113 | > THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
114 | > IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
115 | > FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
116 | > AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
117 | > LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
118 | > OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
119 | > SOFTWARE.
120 |
--------------------------------------------------------------------------------
/type-fu.com/engrammer.tfl:
--------------------------------------------------------------------------------
1 | {
2 | "id": "engrammer",
3 | "name": "Engrammer",
4 | "description": "Arno's Engram layout for programmers - https://github.com/sunaku/engrammer",
5 | "version": 1,
6 | "keys": {
7 | "Digit1": {
8 | "default" : {
9 | "base" : "1",
10 | "shift" : "!"
11 | }
12 | },
13 | "Digit2" : {
14 | "default" : {
15 | "base" : "2",
16 | "shift" : "@"
17 | }
18 | },
19 | "Digit3" : {
20 | "default" : {
21 | "base" : "3",
22 | "shift" : "#"
23 | }
24 | },
25 | "Digit4" : {
26 | "default" : {
27 | "base" : "4",
28 | "shift" : "$"
29 | }
30 | },
31 | "Digit5" : {
32 | "default" : {
33 | "base" : "5",
34 | "shift" : "%"
35 | }
36 | },
37 | "Digit6" : {
38 | "default" : {
39 | "base" : "6",
40 | "shift" : "^"
41 | }
42 | },
43 | "Digit7" : {
44 | "default" : {
45 | "base" : "7",
46 | "shift" : "&"
47 | }
48 | },
49 | "Digit8" : {
50 | "default" : {
51 | "base" : "8",
52 | "shift" : "*"
53 | }
54 | },
55 | "Digit9" : {
56 | "default" : {
57 | "base" : "9",
58 | "shift" : "("
59 | }
60 | },
61 | "Digit0" : {
62 | "default" : {
63 | "base" : "0",
64 | "shift" : ")"
65 | }
66 | },
67 | "KeyA" : {
68 | "default" : {
69 | "base" : "c",
70 | "shift" : "C"
71 | }
72 | },
73 | "KeyB" : {
74 | "default" : {
75 | "base" : "-",
76 | "shift" : "_"
77 | }
78 | },
79 | "KeyC" : {
80 | "default" : {
81 | "base" : "j",
82 | "shift" : "J"
83 | }
84 | },
85 | "KeyD" : {
86 | "default" : {
87 | "base" : "e",
88 | "shift" : "E"
89 | }
90 | },
91 | "KeyE" : {
92 | "default" : {
93 | "base" : "o",
94 | "shift" : "O"
95 | }
96 | },
97 | "KeyF" : {
98 | "default" : {
99 | "base" : "a",
100 | "shift" : "A"
101 | }
102 | },
103 | "KeyG" : {
104 | "default" : {
105 | "base" : ",",
106 | "shift" : "<"
107 | }
108 | },
109 | "KeyH" : {
110 | "default" : {
111 | "base" : ".",
112 | "shift" : ">"
113 | }
114 | },
115 | "KeyI" : {
116 | "default" : {
117 | "base" : "d",
118 | "shift" : "D"
119 | }
120 | },
121 | "KeyJ" : {
122 | "default" : {
123 | "base" : "h",
124 | "shift" : "H"
125 | }
126 | },
127 | "KeyK" : {
128 | "default" : {
129 | "base" : "t",
130 | "shift" : "T"
131 | }
132 | },
133 | "KeyL" : {
134 | "default" : {
135 | "base" : "s",
136 | "shift" : "S"
137 | }
138 | },
139 | "KeyM" : {
140 | "default" : {
141 | "base" : "r",
142 | "shift" : "R"
143 | }
144 | },
145 | "KeyN" : {
146 | "default" : {
147 | "base" : "/",
148 | "shift" : "?"
149 | }
150 | },
151 | "KeyO" : {
152 | "default" : {
153 | "base" : "w",
154 | "shift" : "W"
155 | }
156 | },
157 | "KeyP" : {
158 | "default" : {
159 | "base" : "v",
160 | "shift" : "V"
161 | }
162 | },
163 | "KeyQ" : {
164 | "default" : {
165 | "base" : "b",
166 | "shift" : "B"
167 | }
168 | },
169 | "KeyR" : {
170 | "default" : {
171 | "base" : "u",
172 | "shift" : "U"
173 | }
174 | },
175 | "KeyS" : {
176 | "default" : {
177 | "base" : "i",
178 | "shift" : "I"
179 | }
180 | },
181 | "KeyT" : {
182 | "default" : {
183 | "base" : "'",
184 | "shift" : "\""
185 | }
186 | },
187 | "KeyU" : {
188 | "default" : {
189 | "base" : "l",
190 | "shift" : "L"
191 | }
192 | },
193 | "KeyV" : {
194 | "default" : {
195 | "base" : "k",
196 | "shift" : "K"
197 | }
198 | },
199 | "KeyW" : {
200 | "default" : {
201 | "base" : "y",
202 | "shift" : "Y"
203 | }
204 | },
205 | "KeyX" : {
206 | "default" : {
207 | "base" : "x",
208 | "shift" : "X"
209 | }
210 | },
211 | "KeyY" : {
212 | "default" : {
213 | "base" : ";",
214 | "shift" : ":"
215 | }
216 | },
217 | "KeyZ" : {
218 | "default" : {
219 | "base" : "g",
220 | "shift" : "G"
221 | }
222 | },
223 | "Minus" : {
224 | "default" : {
225 | "base" : "[",
226 | "shift" : "{"
227 | }
228 | },
229 | "Equal" : {
230 | "default" : {
231 | "base" : "]",
232 | "shift" : "}"
233 | }
234 | },
235 | "BracketLeft" : {
236 | "default" : {
237 | "base" : "z",
238 | "shift" : "Z"
239 | }
240 | },
241 | "BracketRight" : {
242 | "default" : {
243 | "base" : "=",
244 | "shift" : "+"
245 | }
246 | },
247 | "Backslash" : {
248 | "default" : {
249 | "base" : "\\",
250 | "shift" : "|"
251 | }
252 | },
253 | "IntlBackslash": {
254 | "default" : {}
255 | },
256 | "Semicolon" : {
257 | "default" : {
258 | "base" : "n",
259 | "shift" : "N"
260 | }
261 | },
262 | "Backquote" : {
263 | "default" : {
264 | "base" : "`",
265 | "shift" : "~"
266 | }
267 | },
268 | "Quote" : {
269 | "default" : {
270 | "base" : "q",
271 | "shift" : "Q"
272 | }
273 | },
274 | "Comma" : {
275 | "default" : {
276 | "base" : "m",
277 | "shift" : "M"
278 | }
279 | },
280 | "Period" : {
281 | "default" : {
282 | "base" : "f",
283 | "shift" : "F"
284 | }
285 | },
286 | "Slash" : {
287 | "default" : {
288 | "base" : "p",
289 | "shift" : "P"
290 | }
291 | },
292 | "Space" : {
293 | "default" : {
294 | "base" : " "
295 | }
296 | }
297 | }
298 | }
299 |
--------------------------------------------------------------------------------
/macos/Engrammer.bundle/Contents/Resources/Engrammer.keylayout:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
230 |
231 |
232 |
233 |
234 |
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 |
245 |
246 |
247 |
248 |
249 |
250 |
251 |
252 |
253 |
254 |
255 |
256 |
257 |
258 |
259 |
260 |
261 |
262 |
263 |
264 |
265 |
266 |
267 |
268 |
269 |
270 |
271 |
272 |
273 |
274 |
275 |
276 |
277 |
278 |
279 |
280 |
281 |
282 |
283 |
284 |
285 |
286 |
287 |
288 |
289 |
290 |
291 |
292 |
293 |
294 |
295 |
296 |
297 |
298 |
299 |
300 |
301 |
302 |
303 |
304 |
305 |
306 |
307 |
308 |
309 |
310 |
311 |
312 |
313 |
314 |
315 |
316 |
317 |
318 |
319 |
320 |
321 |
322 |
323 |
324 |
325 |
326 |
327 |
328 |
329 |
330 |
331 |
332 |
333 |
334 |
335 |
336 |
337 |
338 |
339 |
340 |
341 |
342 |
343 |
344 |
345 |
346 |
347 |
348 |
349 |
350 |
351 |
352 |
353 |
354 |
355 |
356 |
357 |
358 |
359 |
360 |
361 |
362 |
363 |
364 |
365 |
366 |
367 |
368 |
369 |
370 |
371 |
372 |
373 |
374 |
375 |
376 |
377 |
378 |
379 |
380 |
381 |
382 |
383 |
384 |
385 |
386 |
387 |
388 |
389 |
390 |
391 |
392 |
393 |
394 |
395 |
396 |
397 |
398 |
399 |
400 |
401 |
402 |
403 |
404 |
405 |
406 |
407 |
408 |
409 |
410 |
411 |
412 |
413 |
414 |
415 |
416 |
417 |
418 |
419 |
420 |
421 |
422 |
423 |
424 |
425 |
426 |
427 |
428 |
429 |
430 |
431 |
432 |
433 |
434 |
435 |
436 |
437 |
438 |
439 |
440 |
441 |
442 |
443 |
444 |
445 |
446 |
447 |
448 |
449 |
450 |
451 |
452 |
453 |
454 |
455 |
456 |
457 |
458 |
459 |
460 |
461 |
462 |
463 |
464 |
465 |
466 |
467 |
468 |
469 |
470 |
471 |
472 |
473 |
474 |
475 |
476 |
477 |
478 |
479 |
480 |
481 |
482 |
483 |
484 |
485 |
486 |
487 |
488 |
489 |
490 |
491 |
492 |
493 |
494 |
495 |
496 |
497 |
498 |
499 |
500 |
501 |
502 |
503 |
504 |
505 |
506 |
507 |
508 |
509 |
510 |
511 |
512 |
513 |
514 |
515 |
516 |
517 |
518 |
519 |
520 |
521 |
522 |
523 |
524 |
525 |
526 |
527 |
528 |
529 |
530 |
531 |
532 |
533 |
534 |
535 |
536 |
537 |
538 |
539 |
540 |
541 |
542 |
543 |
544 |
545 |
546 |
547 |
548 |
549 |
550 |
551 |
552 |
553 |
554 |
555 |
556 |
557 |
558 |
559 |
560 |
561 |
562 |
563 |
564 |
565 |
566 |
567 |
568 |
569 |
570 |
571 |
572 |
573 |
574 |
575 |
576 |
577 |
578 |
579 |
580 |
581 |
582 |
583 |
584 |
585 |
586 |
587 |
588 |
589 |
590 |
591 |
592 |
593 |
594 |
595 |
596 |
597 |
598 |
599 |
600 |
601 |
602 |
603 |
604 |
605 |
606 |
607 |
608 |
609 |
610 |
611 |
612 |
613 |
614 |
615 |
616 |
617 |
618 |
619 |
620 |
621 |
622 |
623 |
624 |
625 |
626 |
627 |
628 |
629 |
630 |
631 |
632 |
633 |
634 |
635 |
636 |
637 |
638 |
639 |
640 |
641 |
642 |
643 |
644 |
645 |
646 |
647 |
648 |
649 |
650 |
651 |
652 |
653 |
654 |
655 |
656 |
657 |
658 |
659 |
660 |
661 |
662 |
663 |
664 |
665 |
666 |
667 |
668 |
669 |
670 |
671 |
672 |
673 |
674 |
675 |
676 |
677 |
678 |
679 |
680 |
681 |
682 |
683 |
684 |
685 |
686 |
687 |
688 |
689 |
690 |
691 |
692 |
693 |
694 |
695 |
696 |
697 |
698 |
699 |
700 |
701 |
702 |
703 |
704 |
705 |
706 |
707 |
708 |
709 |
710 |
711 |
712 |
713 |
714 |
715 |
716 |
717 |
718 |
719 |
720 |
721 |
722 |
723 |
724 |
725 |
726 |
727 |
728 |
729 |
730 |
731 |
732 |
733 |
734 |
735 |
736 |
737 |
738 |
739 |
740 |
741 |
742 |
743 |
744 |
745 |
746 |
747 |
748 |
749 |
750 |
751 |
752 |
753 |
754 |
755 |
756 |
757 |
758 |
759 |
760 |
761 |
762 |
763 |
764 |
765 |
766 |
767 |
768 |
769 |
770 |
771 |
772 |
773 |
774 |
775 |
776 |
777 |
778 |
779 |
780 |
781 |
782 |
783 |
784 |
785 |
786 |
787 |
788 |
789 |
790 |
791 |
792 |
793 |
794 |
795 |
796 |
797 |
798 |
799 |
800 |
801 |
802 |
803 |
804 |
805 |
806 |
807 |
808 |
809 |
810 |
811 |
812 |
813 |
814 |
815 |
816 |
817 |
818 |
819 |
820 |
821 |
822 |
823 |
824 |
825 |
826 |
827 |
828 |
829 |
830 |
831 |
832 |
833 |
834 |
835 |
836 |
837 |
838 |
839 |
840 |
841 |
842 |
843 |
844 |
845 |
846 |
847 |
848 |
849 |
850 |
851 |
852 |
853 |
854 |
855 |
856 |
857 |
858 |
859 |
860 |
861 |
862 |
863 |
864 |
865 |
866 |
867 |
868 |
869 |
870 |
871 |
872 |
873 |
874 |
875 |
876 |
877 |
878 |
879 |
880 |
881 |
882 |
883 |
884 |
885 |
886 |
887 |
888 |
889 |
890 |
891 |
892 |
893 |
894 |
895 |
896 |
897 |
898 |
899 |
900 |
901 |
902 |
903 |
904 |
905 |
906 |
907 |
908 |
909 |
910 |
911 |
912 |
913 |
914 |
915 |
916 |
917 |
918 |
919 |
920 |
921 |
922 |
923 |
924 |
925 |
926 |
927 |
928 |
929 |
930 |
931 |
932 |
933 |
934 |
935 |
936 |
937 |
938 |
939 |
940 |
941 |
942 |
943 |
944 |
945 |
946 |
947 |
948 |
949 |
950 |
951 |
952 |
953 |
954 |
955 |
956 |
957 |
958 |
959 |
960 |
961 |
962 |
963 |
964 |
965 |
966 |
967 |
968 |
969 |
970 |
971 |
972 |
973 |
974 |
975 |
976 |
977 |
978 |
979 |
980 |
981 |
982 |
983 |
984 |
985 |
986 |
987 |
988 |
989 |
990 |
991 |
992 |
993 |
994 |
995 |
996 |
997 |
998 |
999 |
1000 |
1001 |
1002 |
1003 |
1004 |
1005 |
1006 |
1007 |
1008 |
1009 |
1010 |
1011 |
1012 |
1013 |
1014 |
1015 |
1016 |
1017 |
1018 |
1019 |
1020 |
1021 |
1022 |
1023 |
1024 |
1025 |
1026 |
1027 |
1028 |
1029 |
1030 |
1031 |
1032 |
1033 |
1034 |
1035 |
1036 |
1037 |
1038 |
1039 |
1040 |
1041 |
1042 |
1043 |
1044 |
1045 |
1046 |
1047 |
1048 |
1049 |
1050 |
1051 |
1052 |
1053 |
1054 |
1055 |
1056 |
1057 |
1058 |
1059 |
1060 |
1061 |
1062 |
1063 |
1064 |
1065 |
1066 |
1067 |
1068 |
1069 |
1070 |
1071 |
1072 |
1073 |
1074 |
1075 |
1076 |
1077 |
1078 |
1079 |
1080 |
1081 |
1082 |
1083 |
1084 |
1085 |
1086 |
1087 |
1088 |
1089 |
1090 |
1091 |
1092 |
1093 |
1094 |
1095 |
1096 |
1097 |
1098 |
1099 |
1100 |
1101 |
1102 |
1103 |
1104 |
1105 |
1106 |
1107 |
1108 |
1109 |
1110 |
1111 |
1112 |
1113 |
1114 |
1115 |
1116 |
1117 |
1118 |
1119 |
1120 |
1121 |
1122 |
1123 |
1124 |
1125 |
1126 |
1127 |
1128 |
1129 |
1130 |
1131 |
1132 |
1133 |
1134 |
1135 |
1136 |
1137 |
--------------------------------------------------------------------------------