Compare commits

..

6 commits
v4.5.0 ... main

5 changed files with 86 additions and 83 deletions

11
README.md Normal file
View file

@ -0,0 +1,11 @@
# ACP Keyboard
This is my custom keyboard layout. For the full spec, rationale, and images,
please see the `spec.html` file in the repo or at the URL below:
https://acperkins.com/acp/keyboard/src/branch/main/spec.html
To download the Windows AutoHotKey build, see the GitHub Releases page at the
URL below:
https://acperkins.com/acp/keyboard/releases/latest

View file

@ -1,12 +0,0 @@
ACP Keyboard
============
This is my custom keyboard layout. For the full spec, rationale, and images,
please see the spec file at the URL below:
https://acperkins.github.io/keyboard/spec.html
To download the Windows AutoHotKey build, see the GitHub Releases page at the
URL below:
https://github.com/acperkins/keyboard/releases

View file

@ -97,39 +97,39 @@ dead_macron := Map.Call(
; E00 - SC029
; ⁻
>!SC029::Send "{U+207B}"
<^>!SC029::Send "{U+207B}"
; ≈
>!SC029::Send "{U+2248}"
<^>!SC029::Send "{U+2248}"
; ±
>!+SC029::Send "{U+00B1}"
<^>!+SC029::Send "{U+00B1}"
>!+SC029::Send "{U+2248}"
<^>!+SC029::Send "{U+2248}"
; E01 - SC002
; !
>!SC002::Send "{U+0021}"
<^>!SC002::Send "{U+0021}"
; ¹
>!SC002::Send "{U+00B9}"
<^>!SC002::Send "{U+00B9}"
; ¡
>!+SC002::Send "{U+00A1}"
<^>!+SC002::Send "{U+00A1}"
; E02 - SC003
; ©
>!SC003::Send "{U+00A9}"
<^>!SC003::Send "{U+00A9}"
; ²
>!+SC003::Send "{U+00B2}"
<^>!+SC003::Send "{U+00B2}"
>!SC003::Send "{U+00B2}"
<^>!SC003::Send "{U+00B2}"
; ©
>!+SC003::Send "{U+00A9}"
<^>!+SC003::Send "{U+00A9}"
; E03 - SC004
; £
>!SC004::Send "{U+00A3}"
<^>!SC004::Send "{U+00A3}"
; ³
>!+SC004::Send "{U+00B3}"
<^>!+SC004::Send "{U+00B3}"
>!SC004::Send "{U+00B3}"
<^>!SC004::Send "{U+00B3}"
; £
>!+SC004::Send "{U+00A3}"
<^>!+SC004::Send "{U+00A3}"
; E04 - SC005
@ -583,9 +583,9 @@ dead_macron := Map.Call(
;
>!SC030::Send "{U+2013}"
<^>!SC030::Send "{U+2013}"
;
>!+SC030::Send ""
<^>!+SC030::Send ""
;
>!+SC030::Send "{U+2011}"
<^>!+SC030::Send "{U+2011}"
; B06 - SC031
@ -625,9 +625,9 @@ dead_macron := Map.Call(
; B10 - SC035
; ?
>!SC035::Send "{U+003F}"
<^>!SC035::Send "{U+003F}"
; ±
>!SC035::Send "{U+00B1}"
<^>!SC035::Send "{U+00B1}"
; ¿
>!+SC035::Send "{U+00BF}"
<^>!+SC035::Send "{U+00BF}"
@ -636,9 +636,9 @@ dead_macron := Map.Call(
; SPC - SC039
; NNBSP
>!SC039::Send "{U+202F}"
<^>!SC039::Send "{U+202F}"
; THSP
>!SC039::Send "{U+2009}"
<^>!SC039::Send "{U+2009}"
; NBSP
>!+SC039::Send "{U+00A0}"
<^>!+SC039::Send "{U+00A0}"

View file

@ -42,7 +42,7 @@
</style>
</head>
<body>
<h1>ACP Keyboard v4.5.0</h1>
<h1>ACP Keyboard v4.9.0</h1>
<ol>
<li><a href="#rationale">Rationale</a></li>
<li><a href="#images">Images</a></li>
@ -61,21 +61,22 @@
<h2 id="rationale">Rationale</h2>
<p>There are thousands of keyboard layouts around. Why make a new one?
Simply: none of them worked for me. They either had too many symbols,
not enough symbols, or the layout was wrong. <a
Simply: none of them worked for me. They either had too many symbols, not
enough symbols, or the layout was wrong. <a
href="https://bepo.fr/wiki/Accueil">BÉPO</a> came the closest to having the
main symbols I wanted, but I couldnt get over the non-QWERTY layout; and
the <a href="https://kbdlayout.info/kbdcan">Canadian Multilingual
Standard</a> layout had the symbols I wanted, but they were spread across
six levels (AltGr and Right Ctrl both act as level selectors).
main symbols I wanted, but I couldn&#x2019;t get over the non-QWERTY
layout; and the <a href="https://kbdlayout.info/kbdcan">Canadian
Multilingual Standard</a> layout had the symbols I wanted, but they were
spread across six levels (AltGr and Right Ctrl both act as level
selectors).
<p>So I made my own. There were a number of requirements for me:</p>
<ol>
<li>The most common English symbols I need should be available.</li>
<li>No more than four levels (normal; Shift; AltGr; and Shift+AltGr).</li>
<li>Keys should be grouped sensibly: the degree sign in °C is preceded by
a narrow non-breaking space, so they should be on the same level.</li>
<li>Keys should be grouped sensibly: the guillemets in French are paired
with a non-breaking space, so they should be on the same level.</li>
<li>The main layout should be based on the US ANSI layout, but it should
also support an ISO layout with one key extra.</li>
<li>It should be able to be used without Administrative permissions. This
@ -140,29 +141,29 @@
<rect x="0" y="0" width="80" height="80" />
<text x="10" y="70" class="layer1">&#x0060;</text>
<text x="10" y="10" class="layer2">&#x007e;</text>
<text x="70" y="70" class="layer3">&#x2248;</text>
<text x="70" y="10" class="layer4">&#x00b1;</text>
<text x="70" y="70" class="layer3">&#x207b;</text>
<text x="70" y="10" class="layer4">&#x2248;</text>
<!-- E01 -->
<rect x="80" y="0" width="80" height="80" />
<text x="90" y="70" class="layer1">&#x0031;</text>
<text x="90" y="10" class="layer2">&#x0021;</text>
<text x="150" y="70" class="layer3">&#x0021;</text>
<text x="150" y="70" class="layer3">&#x00b9;</text>
<text x="150" y="10" class="layer4">&#x00a1;</text>
<!-- E02 -->
<rect x="160" y="0" width="80" height="80" />
<text x="170" y="70" class="layer1">&#x0032;</text>
<text x="170" y="10" class="layer2">&#x0040;</text>
<text x="230" y="70" class="layer3">&#x00a9;</text>
<text x="230" y="10" class="layer4">&#x00b2;</text>
<text x="230" y="70" class="layer3">&#x00b2;</text>
<text x="230" y="10" class="layer4">&#x00a9;</text>
<!-- E03 -->
<rect x="240" y="0" width="80" height="80" />
<text x="250" y="70" class="layer1">&#x0033;</text>
<text x="250" y="10" class="layer2">&#x0023;</text>
<text x="310" y="70" class="layer3">&#x00a3;</text>
<text x="310" y="10" class="layer4">&#x00b3;</text>
<text x="310" y="70" class="layer3">&#x00b3;</text>
<text x="310" y="10" class="layer4">&#x00a3;</text>
<!-- E04 -->
<rect x="320" y="0" width="80" height="80" />
@ -457,7 +458,7 @@
<text x="510" y="310" class="layer1">&#x0062;</text>
<text x="510" y="250" class="layer2">&#x0042;</text>
<text x="570" y="310" class="layer3">&#x2013;</text>
<text x="570" y="250" class="layer4"></text>
<text x="570" y="250" class="layer4">&#x2011;</text>
<!-- B06 -->
<rect x="580" y="240" width="80" height="80" />
@ -491,7 +492,7 @@
<rect x="900" y="240" width="80" height="80" />
<text x="910" y="310" class="layer1">&#x002f;</text>
<text x="910" y="250" class="layer2">&#x003f;</text>
<text x="970" y="310" class="layer3">&#x003f;</text>
<text x="970" y="310" class="layer3">&#x00b1;</text>
<text x="970" y="250" class="layer4">&#x00bf;</text>
<!-- Right Shift -->
@ -516,7 +517,7 @@
<rect x="320" y="320" width="460" height="80" />
<text x="330" y="390" class="layer1 function">Space</text>
<text x="330" y="330" class="layer2 function">Space</text>
<text x="770" y="390" class="layer3 function">Narrow non-breaking space</text>
<text x="770" y="390" class="layer3 function">Thin space</text>
<text x="770" y="330" class="layer4 function">Non-breaking space</text>
<!-- AltGr -->
@ -594,29 +595,29 @@
<rect x="0" y="0" width="80" height="80" />
<text x="10" y="70" class="layer1">&#x0060;</text>
<text x="10" y="10" class="layer2">&#x007e;</text>
<text x="70" y="70" class="layer3">&#x2248;</text>
<text x="70" y="10" class="layer4">&#x00b1;</text>
<text x="70" y="70" class="layer3">&#x207b;</text>
<text x="70" y="10" class="layer4">&#x2248;</text>
<!-- E01 -->
<rect x="80" y="0" width="80" height="80" />
<text x="90" y="70" class="layer1">&#x0031;</text>
<text x="90" y="10" class="layer2">&#x0021;</text>
<text x="150" y="70" class="layer3">&#x0021;</text>
<text x="150" y="70" class="layer3">&#x00b9;</text>
<text x="150" y="10" class="layer4">&#x00a1;</text>
<!-- E02 -->
<rect x="160" y="0" width="80" height="80" />
<text x="170" y="70" class="layer1">&#x0032;</text>
<text x="170" y="10" class="layer2">&#x0040;</text>
<text x="230" y="70" class="layer3">&#x00a9;</text>
<text x="230" y="10" class="layer4">&#x00b2;</text>
<text x="230" y="70" class="layer3">&#x00b2;</text>
<text x="230" y="10" class="layer4">&#x00a9;</text>
<!-- E03 -->
<rect x="240" y="0" width="80" height="80" />
<text x="250" y="70" class="layer1">&#x0033;</text>
<text x="250" y="10" class="layer2">&#x0023;</text>
<text x="310" y="70" class="layer3">&#x00a3;</text>
<text x="310" y="10" class="layer4">&#x00b3;</text>
<text x="310" y="70" class="layer3">&#x00b3;</text>
<text x="310" y="10" class="layer4">&#x00a3;</text>
<!-- E04 -->
<rect x="320" y="0" width="80" height="80" />
@ -908,7 +909,7 @@
<text x="510" y="310" class="layer1">&#x0062;</text>
<text x="510" y="250" class="layer2">&#x0042;</text>
<text x="570" y="310" class="layer3">&#x2013;</text>
<text x="570" y="250" class="layer4"></text>
<text x="570" y="250" class="layer4">&#x2011;</text>
<!-- B06 -->
<rect x="580" y="240" width="80" height="80" />
@ -942,7 +943,7 @@
<rect x="900" y="240" width="80" height="80" />
<text x="910" y="310" class="layer1">&#x002f;</text>
<text x="910" y="250" class="layer2">&#x003f;</text>
<text x="970" y="310" class="layer3">&#x003f;</text>
<text x="970" y="310" class="layer3">&#x00b1;</text>
<text x="970" y="250" class="layer4">&#x00bf;</text>
<!-- Right Shift -->
@ -967,7 +968,7 @@
<rect x="320" y="320" width="460" height="80" />
<text x="330" y="390" class="layer1 function">Space</text>
<text x="330" y="330" class="layer2 function">Space</text>
<text x="770" y="390" class="layer3 function">Narrow non-breaking space</text>
<text x="770" y="390" class="layer3 function">Thin space</text>
<text x="770" y="330" class="layer4 function">Non-breaking space</text>
<!-- Right Alt -->
@ -1020,8 +1021,8 @@
<td>SC029</td>
<td><span class="codepoint">U+0060</span> <span class="key-character">&#x0060;</span></td>
<td><span class="codepoint">U+007E</span> <span class="key-character">&#x007e;</span></td>
<td><span class="codepoint">U+207B</span> <span class="key-character">&#x207b;</span></td>
<td><span class="codepoint">U+2248</span> <span class="key-character">&#x2248;</span></td>
<td><span class="codepoint">U+00B1</span> <span class="key-character">&#x00b1;</span></td>
</tr>
<tr>
<td>E01</td>
@ -1029,7 +1030,7 @@
<td>SC002</td>
<td><span class="codepoint">U+0031</span> <span class="key-character">&#x0031;</span></td>
<td><span class="codepoint">U+0021</span> <span class="key-character">&#x0021;</span></td>
<td><span class="codepoint">U+0021</span> <span class="key-character">&#x0021;</span></td>
<td><span class="codepoint">U+00B9</span> <span class="key-character">&#x00b9;</span></td>
<td><span class="codepoint">U+00A1</span> <span class="key-character">&#x00a1;</span></td>
</tr>
<tr>
@ -1038,8 +1039,8 @@
<td>SC003</td>
<td><span class="codepoint">U+0032</span> <span class="key-character">&#x0032;</span></td>
<td><span class="codepoint">U+0040</span> <span class="key-character">&#x0040;</span></td>
<td><span class="codepoint">U+00A9</span> <span class="key-character">&#x00a9;</span></td>
<td><span class="codepoint">U+00B2</span> <span class="key-character">&#x00b2;</span></td>
<td><span class="codepoint">U+00A9</span> <span class="key-character">&#x00a9;</span></td>
</tr>
<tr>
<td>E03</td>
@ -1047,8 +1048,8 @@
<td>SC004</td>
<td><span class="codepoint">U+0033</span> <span class="key-character">&#x0033;</span></td>
<td><span class="codepoint">U+0023</span> <span class="key-character">&#x0023;</span></td>
<td><span class="codepoint">U+00A3</span> <span class="key-character">&#x00a3;</span></td>
<td><span class="codepoint">U+00B3</span> <span class="key-character">&#x00b3;</span></td>
<td><span class="codepoint">U+00A3</span> <span class="key-character">&#x00a3;</span></td>
</tr>
<tr>
<td>E04</td>
@ -1405,7 +1406,7 @@
<td><span class="codepoint">U+0062</span> <span class="key-character">&#x0062;</span></td>
<td><span class="codepoint">U+0042</span> <span class="key-character">&#x0042;</span></td>
<td><span class="codepoint">U+2013</span> <span class="key-character">&#x2013;</span></td>
<td></td>
<td><span class="codepoint">U+2011</span> <span class="key-character">&#x2011;</span></td>
</tr>
<tr>
<td>B06</td>
@ -1449,7 +1450,7 @@
<td>SC035</td>
<td><span class="codepoint">U+002F</span> <span class="key-character">&#x002f;</span></td>
<td><span class="codepoint">U+003F</span> <span class="key-character">&#x003f;</span></td>
<td><span class="codepoint">U+003F</span> <span class="key-character">&#x003f;</span></td>
<td><span class="codepoint">U+00B1</span> <span class="key-character">&#x00b1;</span></td>
<td><span class="codepoint">U+00BF</span> <span class="key-character">&#x00bf;</span></td>
</tr>
</tbody>
@ -1460,7 +1461,7 @@
<td>SC039</td>
<td><span class="codepoint">U+0020</span> <span class="key-character">&#x0020;</span></td>
<td><span class="codepoint">U+0020</span> <span class="key-character">&#x0020;</span></td>
<td><span class="codepoint">U+202F</span> <span class="key-character">&#x202f;</span></td>
<td><span class="codepoint">U+2009</span> <span class="key-character">&#x2009;</span></td>
<td><span class="codepoint">U+00A0</span> <span class="key-character">&#x00a0;</span></td>
</tr>
</tbody>
@ -2054,6 +2055,7 @@
<li><span class="codepoint">U+0327</span> COMBINING CEDILLA</li>
<li><span class="codepoint">U+03A9</span> GREEK CAPITAL LETTER OMEGA</li>
<li><span class="codepoint">U+03BC</span> GREEK SMALL LETTER MU</li>
<li><span class="codepoint">U+00B9</span> SUPERSCRIPT ONE</li>
<li><span class="codepoint">U+1E80</span> LATIN CAPITAL LETTER W WITH GRAVE</li>
<li><span class="codepoint">U+1E81</span> LATIN SMALL LETTER W WITH GRAVE</li>
<li><span class="codepoint">U+1E82</span> LATIN CAPITAL LETTER W WITH ACUTE</li>
@ -2063,6 +2065,8 @@
<li><span class="codepoint">U+1E9E</span> LATIN CAPITAL LETTER SHARP S</li>
<li><span class="codepoint">U+1EF2</span> LATIN CAPITAL LETTER Y WITH GRAVE</li>
<li><span class="codepoint">U+1EF3</span> LATIN SMALL LETTER Y WITH GRAVE</li>
<li><span class="codepoint">U+2009</span> THIN SPACE</li>
<li><span class="codepoint">U+2011</span> NON-BREAKING HYPHEN</li>
<li><span class="codepoint">U+2013</span> EN DASH</li>
<li><span class="codepoint">U+2014</span> EM DASH</li>
<li><span class="codepoint">U+2018</span> LEFT SINGLE QUOTATION MARK</li>
@ -2073,13 +2077,13 @@
<li><span class="codepoint">U+201E</span> DOUBLE LOW-9 QUOTATION MARK</li>
<li><span class="codepoint">U+2022</span> BULLET</li>
<li><span class="codepoint">U+2026</span> HORIZONTAL ELLIPSIS</li>
<li><span class="codepoint">U+202F</span> NARROW NO-BREAK SPACE</li>
<li><span class="codepoint">U+2030</span> PER MILLE SIGN</li>
<li><span class="codepoint">U+2032</span> PRIME</li>
<li><span class="codepoint">U+2033</span> DOUBLE PRIME</li>
<li><span class="codepoint">U+2039</span> SINGLE LEFT-POINTING ANGLE QUOTATION MARK</li>
<li><span class="codepoint">U+203A</span> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK</li>
<li><span class="codepoint">U+204A</span> TIRONIAN SIGN ET</li>
<li><span class="codepoint">U+207B</span> SUPERSCRIPT MINUS</li>
<li><span class="codepoint">U+20AC</span> EURO SIGN</li>
<li><span class="codepoint">U+2105</span> CARE OF</li>
<li><span class="codepoint">U+2122</span> TRADE MARK SIGN</li>

View file

@ -3,10 +3,10 @@ xkb_symbols "basic" {
name[Group1]= "ACP";
key <TLDE> { [ U0060, U007E, U2248, U00B1 ] }; // ` ~ ≈ ±
key <AE01> { [ U0031, U0021, U0021, U00A1 ] }; // 1 ! ! ¡
key <AE02> { [ U0032, U0040, U00A9, U00B2 ] }; // 2 @ © ²
key <AE03> { [ U0033, U0023, U00A3, U00B3 ] }; // 3 # £ ³
key <TLDE> { [ U0060, U007E, U207B, U2248 ] }; // ` ~ ⁻ ≈
key <AE01> { [ U0031, U0021, U00B9, U00A1 ] }; // 1 ! ¹ ¡
key <AE02> { [ U0032, U0040, U00B2, U00A9 ] }; // 2 @ ² ©
key <AE03> { [ U0033, U0023, U00B3, U00A3 ] }; // 3 # ³ £
key <AE04> { [ U0034, U0024, U00A2, U2105 ] }; // 4 $ ¢ ℅
key <AE05> { [ U0035, U0025, U20AC, U2030 ] }; // 5 % € ‰
key <AE06> { [ U0036, U005E, U221A, U2713 ] }; // 6 ^ √ ✓
@ -48,14 +48,14 @@ xkb_symbols "basic" {
key <AB02> { [ U0078, U0058, U0153, U0152 ] }; // x X œ Œ
key <AB03> { [ U0063, U0043, U00E7, U00C7 ] }; // c C ç Ç
key <AB04> { [ U0076, U0056, U2014, NoSymbol ] }; // v V —
key <AB05> { [ U0062, U0042, U2013, NoSymbol ] }; // b B
key <AB05> { [ U0062, U0042, U2013, U2011 ] }; // b B
key <AB06> { [ U006E, U004E, U00F1, U00D1 ] }; // n N ñ Ñ
key <AB07> { [ U006D, U004D, U03BC, U03A9 ] }; // m M μ Ω
key <AB08> { [ U002C, U003C, U2026, U2264 ] }; // , < … ≤
key <AB09> { [ U002E, U003E, U22C5, U2265 ] }; // . > ⋅ ≥
key <AB10> { [ U002F, U003F, U003F, U00BF ] }; // / ? ? ¿
key <AB10> { [ U002F, U003F, U00B1, U00BF ] }; // / ? ± ¿
key <SPCE> { [ U0020, U0020, U202F, U00A0 ] }; // [space] [space] [nnbsp] [nbsp]
key <SPCE> { [ U0020, U0020, U2009, U00A0 ] }; // [space] [space] [thsp] [nbsp]
include "level3(ralt_switch)"
};