fix modifier key order, add EU badge template icons, rename build scripts

- fix modifier key order to Apple canonical: Option+Shift (not Shift+Option)
  across parser, validator, PDF generator, website keyboard viewer, README
- add EU badge template icons for v1.2/v1.3/v1.4 matching Apple's built-in
  keyboard layout icon style (edge-to-edge rounded square, text knockout)
- add build-icons.sh to generate .icns from SVG source via rsvg-convert
- rename create-dmg.sh → build-dmg.sh, update CI workflows
- add website feature icons (install, pdf, versions)
- update website icon to star-on-key design

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-14 11:01:56 +01:00
parent 1b9ce5dd86
commit 92422e1bf1
26 changed files with 412 additions and 772 deletions

View File

@@ -35,7 +35,7 @@ jobs:
run: python3 scripts/validate_layouts.py
- name: create DMG
run: bash scripts/create-dmg.sh
run: bash scripts/build-dmg.sh
- name: upload DMG
uses: actions/upload-artifact@v4

View File

@@ -26,7 +26,7 @@ jobs:
run: bash scripts/build-bundle.sh --version "${{ steps.version.outputs.version }}"
- name: create DMG
run: bash scripts/create-dmg.sh --version "${{ steps.version.outputs.version }}"
run: bash scripts/build-dmg.sh --version "${{ steps.version.outputs.version }}"
- name: create GitHub release
uses: softprops/action-gh-release@v2

View File

@@ -0,0 +1,14 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024">
<!-- Template badge: rounded square nearly filling the canvas.
Matches Apple's built-in keyboard layout icon style (ABC, DE, etc.). -->
<defs>
<mask id="textmask">
<rect width="1024" height="1024" fill="white"/>
<text x="512" y="700" text-anchor="middle"
font-family="Helvetica, Arial, sans-serif"
font-size="640" font-weight="bold"
fill="black">EU</text>
</mask>
</defs>
<rect x="0" y="0" width="1024" height="1024" rx="220" fill="black" mask="url(#textmask)"/>
</svg>

After

Width:  |  Height:  |  Size: 567 B

View File

@@ -0,0 +1,13 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024">
<!-- Draft C: Single key cap with EU star — minimal, reads well at any size -->
<rect width="1024" height="1024" rx="180" fill="#003399"/>
<!-- Large key cap shape, centered -->
<rect x="172" y="172" width="680" height="680" rx="80" fill="rgba(255,255,255,0.92)"
stroke="rgba(255,255,255,0.3)" stroke-width="8"/>
<!-- Key shadow/depth -->
<rect x="172" y="180" width="680" height="680" rx="80" fill="none"
stroke="rgba(0,0,0,0.08)" stroke-width="8"/>
<!-- Single EU gold star centered on key -->
<polygon points="512,220 568,398 756,398 604,506 646,680 512,580 378,680 420,506 268,398 456,398"
fill="#FFCC00"/>
</svg>

After

Width:  |  Height:  |  Size: 699 B

View File

@@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024">
<!-- Template icon: "EU" — transparent bg, black text
macOS TISIconIsTemplate renders this adaptively:
light mode: dark text, light pill background
dark mode: light text, dark pill background -->
<text x="512" y="700" text-anchor="middle" font-family="'SF Pro Text', '.AppleSystemUIFont', 'Helvetica Neue', sans-serif" font-size="620" font-weight="600" fill="#000" letter-spacing="-10">EU</text>
</svg>

After

Width:  |  Height:  |  Size: 490 B

View File

@@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024">
<!-- Template icon: "EUR" text — macOS renders black in light mode, white in dark mode -->
<text x="512" y="640" text-anchor="middle" font-family="-apple-system, BlinkMacSystemFont, 'SF Pro Display', 'Helvetica Neue', sans-serif" font-size="480" font-weight="700" fill="#000" letter-spacing="-20">EUR</text>
</svg>

After

Width:  |  Height:  |  Size: 384 B

View File

@@ -13,7 +13,7 @@ The bundle ships 4 layout versions:
| Version | Description |
| ------- | ----------- |
| **v1.3** | Official EurKEY spec implementation. **Recommended for most users.** |
| **v1.2** | Legacy version based on [Leonardo Schenkel's port](https://github.com/lbschenkel/EurKEY-Mac). Predates the v1.3 spec (no `¬` dead key, `§` instead of `` on Shift+Option+S). |
| **v1.2** | Legacy version based on [Leonardo Schenkel's port](https://github.com/lbschenkel/EurKEY-Mac). Predates the v1.3 spec (no `¬` dead key, `§` instead of `` on Option+Shift+S). |
| **v1.4** | v1.3 with `` (capital sharp s) on Caps+`§` key. |
| **v2.0** | Custom edition — complete rework. Every key configures exactly as printed on the MacBook keyboard. Removes left/right modifier key distinction. New monochrome template icon. |
@@ -54,7 +54,7 @@ python3 scripts/parse_keylayout.py "EurKey-macOS.bundle/Contents/Resources/EurKE
bash scripts/build-bundle.sh
# create a DMG installer
bash scripts/create-dmg.sh
bash scripts/build-dmg.sh
```
## Dead key compositions (v2.0)

View File

@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" fill="none">
<!-- DMG disk shape (rounded rectangle base) -->
<rect x="6" y="26" width="36" height="18" rx="4" stroke="#003399" stroke-width="2.5" fill="none"/>
<!-- Slot/opening on the disk -->
<line x1="16" y1="38" x2="32" y2="38" stroke="#003399" stroke-width="2" stroke-linecap="round"/>
<!-- Download arrow -->
<line x1="24" y1="4" x2="24" y2="22" stroke="#003399" stroke-width="2.5" stroke-linecap="round"/>
<path d="M18 17 L24 23 L30 17" stroke="#003399" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 604 B

View File

@@ -0,0 +1,12 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" fill="none">
<!-- Document with folded corner -->
<path d="M10 4 H30 L38 12 V42 Q38 44 36 44 H12 Q10 44 10 42 Z" stroke="#003399" stroke-width="2.5" fill="none"/>
<!-- Folded corner -->
<path d="M30 4 V12 H38" stroke="#003399" stroke-width="2" fill="none" stroke-linejoin="round"/>
<!-- Keyboard diagram lines on the document -->
<line x1="16" y1="22" x2="32" y2="22" stroke="#003399" stroke-width="1.5" stroke-linecap="round" opacity="0.5"/>
<line x1="16" y1="27" x2="32" y2="27" stroke="#003399" stroke-width="1.5" stroke-linecap="round" opacity="0.5"/>
<line x1="16" y1="32" x2="28" y2="32" stroke="#003399" stroke-width="1.5" stroke-linecap="round" opacity="0.5"/>
<!-- PDF label -->
<text x="24" y="40" text-anchor="middle" font-family="-apple-system, system-ui, sans-serif" font-size="7" font-weight="700" fill="#003399">PDF</text>
</svg>

After

Width:  |  Height:  |  Size: 915 B

View File

@@ -0,0 +1,13 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" fill="none">
<!-- Stacked key caps representing multiple versions -->
<!-- Back card -->
<rect x="12" y="6" width="28" height="20" rx="3" stroke="#003399" stroke-width="2" fill="none" opacity="0.3"/>
<!-- Middle card -->
<rect x="8" y="12" width="28" height="20" rx="3" stroke="#003399" stroke-width="2" fill="none" opacity="0.6"/>
<!-- Front card -->
<rect x="4" y="18" width="28" height="20" rx="3" stroke="#003399" stroke-width="2.5" fill="none"/>
<!-- Version label on front card -->
<text x="18" y="32" text-anchor="middle" font-family="-apple-system, system-ui, sans-serif" font-size="10" font-weight="700" fill="#003399">2.0</text>
<!-- Checkmark on front card -->
<path d="M32 42 L36 46 L44 36" stroke="#003399" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 866 B

View File

@@ -1,28 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" fill="none">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128">
<!-- EurKEY: EU star on a key cap -->
<rect width="128" height="128" rx="28" fill="#003399"/>
<g fill="#FFCC00">
<circle cx="64" cy="34" r="3"/>
<circle cx="71.5" cy="35.5" r="3"/>
<circle cx="77.5" cy="40" r="3"/>
<circle cx="80" cy="47" r="3"/>
<circle cx="77.5" cy="54" r="3"/>
<circle cx="71.5" cy="58.5" r="3"/>
<circle cx="64" cy="60" r="3"/>
<circle cx="56.5" cy="58.5" r="3"/>
<circle cx="50.5" cy="54" r="3"/>
<circle cx="48" cy="47" r="3"/>
<circle cx="50.5" cy="40" r="3"/>
<circle cx="56.5" cy="35.5" r="3"/>
</g>
<g fill="#fff" opacity=".9">
<rect x="22" y="74" width="14" height="12" rx="3"/>
<rect x="39" y="74" width="14" height="12" rx="3"/>
<rect x="56" y="74" width="14" height="12" rx="3"/>
<rect x="73" y="74" width="14" height="12" rx="3"/>
<rect x="90" y="74" width="14" height="12" rx="3"/>
<rect x="30" y="90" width="14" height="12" rx="3"/>
<rect x="47" y="90" width="14" height="12" rx="3"/>
<rect x="64" y="90" width="14" height="12" rx="3"/>
<rect x="81" y="90" width="14" height="12" rx="3"/>
</g>
<rect x="22" y="22" width="84" height="84" rx="12" fill="rgba(255,255,255,0.92)"/>
<polygon points="64,28 71,50 94,50 75,62 81,84 64,72 47,84 53,62 34,50 57,50" fill="#FFCC00"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 346 B

View File

@@ -35,11 +35,11 @@ const KEYBOARD_ROWS = [
const MOD_BASE = "0";
const MOD_SHIFT = "1";
const MOD_OPTION = "3";
const MOD_SHIFT_OPTION = "4";
const MOD_OPTION_SHIFT = "4";
const LAYERS = [
{ mod: MOD_SHIFT, cls: "key-char--shift" },
{ mod: MOD_SHIFT_OPTION, cls: "key-char--shift-option" },
{ mod: MOD_OPTION_SHIFT, cls: "key-char--option-shift" },
{ mod: MOD_BASE, cls: "key-char--base" },
{ mod: MOD_OPTION, cls: "key-char--option" },
];
@@ -261,7 +261,7 @@ function enterDeadKeyMode(deadState) {
const shiftComposed = charMap[shiftChar] || "";
const spans = keyEl.querySelectorAll(".key-char");
// order: shift, shift-option, base, option
// order: shift, option-shift, base, option
if (spans[0]) spans[0].textContent = displayChar(shiftComposed);
if (spans[1]) spans[1].textContent = "";
if (spans[2]) spans[2].textContent = displayChar(baseComposed);
@@ -298,7 +298,7 @@ function exitDeadKeyMode() {
keyEl.classList.remove("key--has-composition", "key--no-composition", "key--dead-active");
const spans = keyEl.querySelectorAll(".key-char");
const layerOrder = [MOD_SHIFT, MOD_SHIFT_OPTION, MOD_BASE, MOD_OPTION];
const layerOrder = [MOD_SHIFT, MOD_OPTION_SHIFT, MOD_BASE, MOD_OPTION];
for (let i = 0; i < spans.length; i++) {
const info = charForKey(currentData, layerOrder[i], keyCode);
spans[i].textContent = info ? displayChar(info.char) : "";
@@ -324,7 +324,7 @@ function updateActiveLayer() {
const shift = activeModifiers.has("shift");
const option = activeModifiers.has("option");
let layer = null;
if (shift && option) layer = "shift-option";
if (shift && option) layer = "option-shift";
else if (shift) layer = "shift";
else if (option) layer = "option";
@@ -338,7 +338,7 @@ function updateActiveLayer() {
function getActiveModIndex() {
const shift = activeModifiers.has("shift");
const option = activeModifiers.has("option");
if (shift && option) return MOD_SHIFT_OPTION;
if (shift && option) return MOD_OPTION_SHIFT;
if (shift) return MOD_SHIFT;
if (option) return MOD_OPTION;
return MOD_BASE;

View File

@@ -308,7 +308,7 @@ img {
color: #0028aa;
}
.key-char--shift-option {
.key-char--option-shift {
justify-content: flex-end;
color: #780078;
}
@@ -427,7 +427,7 @@ img {
.keyboard[data-active-layer="shift"] .key-char--shift,
.keyboard[data-active-layer="option"] .key-char--option,
.keyboard[data-active-layer="shift-option"] .key-char--shift-option {
.keyboard[data-active-layer="option-shift"] .key-char--option-shift {
opacity: 1;
font-weight: 700;
font-size: 15px;
@@ -436,8 +436,8 @@ img {
/* Pressed modifier key visual */
.keyboard[data-active-layer="shift"] .key--mod[data-mod="shift"],
.keyboard[data-active-layer="option"] .key--mod[data-mod="option"],
.keyboard[data-active-layer="shift-option"] .key--mod[data-mod="shift"],
.keyboard[data-active-layer="shift-option"] .key--mod[data-mod="option"] {
.keyboard[data-active-layer="option-shift"] .key--mod[data-mod="shift"],
.keyboard[data-active-layer="option-shift"] .key--mod[data-mod="option"] {
transform: translateY(1px);
background: linear-gradient(to bottom, #d4d4d4, #ccc);
box-shadow:
@@ -454,7 +454,7 @@ img {
background: linear-gradient(to bottom, #fef9e7, #fef3cd 95%, #f5e6a8);
}
.keyboard--dead-mode .key--has-composition .key-char--shift-option,
.keyboard--dead-mode .key--has-composition .key-char--option-shift,
.keyboard--dead-mode .key--has-composition .key-char--option {
visibility: hidden;
}

View File

@@ -32,6 +32,9 @@ echo "Building ${BUNDLE_NAME} ${VERSION}"
echo "Bundle: ${BUNDLE_DIR}"
echo
# --- generate icons from SVG sources ---
bash "${SCRIPT_DIR}/build-icons.sh"
# --- assemble bundle from src/ ---
rm -rf "${BUNDLE_DIR}"
mkdir -p "${RESOURCES_DIR}"

View File

@@ -26,11 +26,8 @@ STAGING_DIR="${BUILD_DIR}/dmg-staging"
echo "Creating DMG: ${DMG_NAME}"
# --- auto-build bundle if missing ---
if [[ ! -f "${BUNDLE_DIR}/Contents/Info.plist" ]]; then
echo "Bundle not found, building..."
bash "${SCRIPT_DIR}/build-bundle.sh" --version "${VERSION}"
fi
# --- build bundle (includes validation) ---
bash "${SCRIPT_DIR}/build-bundle.sh" --version "${VERSION}"
# --- auto-build PDFs ---
echo "Building PDFs..."

66
scripts/build-icons.sh Executable file
View File

@@ -0,0 +1,66 @@
#!/usr/bin/env bash
# Generate .icns icon files from SVG sources.
#
# Requires: rsvg-convert (librsvg), iconutil (macOS built-in)
#
# The v1.2/v1.3/v1.4 icon is a template badge with "EU" text.
# The v2.0 icon is a monochrome star ring (managed separately).
#
# Usage: bash scripts/build-icons.sh
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
ICON_DIR="${PROJECT_DIR}/src/icons"
SVG_DIR="${PROJECT_DIR}/EurKEY-macOS-icon/drafts"
BADGE_SVG="${SVG_DIR}/badge-eu-template.svg"
if ! command -v rsvg-convert &> /dev/null; then
echo "SKIP: rsvg-convert not found (install librsvg for icon generation)"
echo "Using existing .icns files from src/icons/"
exit 0
fi
if [[ ! -f "${BADGE_SVG}" ]]; then
echo "ERROR: ${BADGE_SVG} not found"
exit 1
fi
ICONSET="$(mktemp -d)/badge-eu.iconset"
mkdir -p "${ICONSET}"
echo "Generating EU badge icon..."
# render at all required sizes
for size in 16 32 64 128 256 512 1024; do
rsvg-convert -w "${size}" -h "${size}" "${BADGE_SVG}" -o "${ICONSET}/tmp_${size}.png"
done
# map to iconset naming convention
cp "${ICONSET}/tmp_16.png" "${ICONSET}/icon_16x16.png"
cp "${ICONSET}/tmp_32.png" "${ICONSET}/icon_16x16@2x.png"
cp "${ICONSET}/tmp_32.png" "${ICONSET}/icon_32x32.png"
cp "${ICONSET}/tmp_64.png" "${ICONSET}/icon_32x32@2x.png"
cp "${ICONSET}/tmp_128.png" "${ICONSET}/icon_128x128.png"
cp "${ICONSET}/tmp_256.png" "${ICONSET}/icon_128x128@2x.png"
cp "${ICONSET}/tmp_256.png" "${ICONSET}/icon_256x256.png"
cp "${ICONSET}/tmp_512.png" "${ICONSET}/icon_256x256@2x.png"
cp "${ICONSET}/tmp_512.png" "${ICONSET}/icon_512x512.png"
cp "${ICONSET}/tmp_1024.png" "${ICONSET}/icon_512x512@2x.png"
rm "${ICONSET}"/tmp_*.png
# convert to .icns
ICNS_PATH="${ICON_DIR}/badge-eu.icns"
iconutil --convert icns --output "${ICNS_PATH}" "${ICONSET}"
# install for v1.2, v1.3, v1.4 (v2.0 keeps its own icon)
cp "${ICNS_PATH}" "${ICON_DIR}/EurKEY v1.2.icns"
cp "${ICNS_PATH}" "${ICON_DIR}/EurKEY v1.3.icns"
cp "${ICNS_PATH}" "${ICON_DIR}/EurKEY v1.4.icns"
rm "${ICNS_PATH}"
# clean up
rm -rf "$(dirname "${ICONSET}")"
echo "Icons generated for v1.2, v1.3, v1.4"

View File

@@ -2,7 +2,7 @@
"""Generate keyboard layout PDFs from .keylayout files.
Renders an ISO keyboard diagram showing Base, Shift, Option, and
Shift+Option layers on each key, plus dead key composition tables.
Option+Shift layers on each key, plus dead key composition tables.
Requires: fpdf2 (pip install fpdf2)
@@ -72,12 +72,12 @@ KEYBOARD_ROWS = [
MOD_BASE = "0"
MOD_SHIFT = "1"
MOD_OPTION = "3"
MOD_SHIFT_OPTION = "4"
MOD_OPTION_SHIFT = "4"
# Display layers: (modifier_index, color_rgb, position)
DISPLAY_LAYERS = [
(MOD_SHIFT, (0, 40, 170), "top_left"),
(MOD_SHIFT_OPTION, (120, 0, 120), "top_right"),
(MOD_OPTION_SHIFT, (120, 0, 120), "top_right"),
(MOD_BASE, (0, 0, 0), "bottom_left"),
(MOD_OPTION, (170, 0, 0), "bottom_right"),
]
@@ -202,7 +202,7 @@ class LayoutPDF(FPDF):
((0, 0, 0), "Base"),
((0, 40, 170), "Shift"),
((170, 0, 0), "Option"),
((120, 0, 120), "Shift+Option"),
((120, 0, 120), "Option+Shift"),
]
for color, label in items:
self._color(color)
@@ -316,7 +316,7 @@ class LayoutPDF(FPDF):
"""Find which key combo triggers a dead key state."""
mod_names = {
"0": "", "1": "", "2": "", "3": "",
"4": "", "5": "⇪⌥ ",
"4": " ", "5": "⇪⌥ ",
}
# map key codes to physical labels from KEYBOARD_ROWS
code_labels = {}

View File

@@ -74,9 +74,9 @@ MODIFIER_LABELS = {
1: "Shift",
2: "Caps",
3: "Option",
4: "Shift+Option",
4: "Option+Shift",
5: "Caps+Option",
6: "Command+Option",
6: "Option+Command",
7: "Control",
}

View File

@@ -21,7 +21,7 @@ from parse_keylayout import parse_keylayout, TYPING_KEY_CODES, MODIFIER_LABELS,
BUNDLE_DIR = Path(__file__).parent.parent / "build" / "EurKey-macOS.bundle" / "Contents" / "Resources"
# modifier indices that contain meaningful typing output
# (exclude index 6 = Command+Option and 7 = Control — these are system shortcuts)
# (exclude index 6 = Option+Command and 7 = Control — these are system shortcuts)
VALIDATED_MODIFIER_INDICES = {"0", "1", "2", "3", "4", "5"}
@@ -182,14 +182,14 @@ def format_char_display(c):
# v1.2 predates v1.3 — known differences documented here
V1_2_EXCEPTIONS = {
# Shift+Option S: v1.2 has § where v1.3 has ẞ (capital sharp s)
# Option+Shift S: v1.2 has § where v1.3 has ẞ (capital sharp s)
"4:1": {"output": "§"},
# v1.2 does not have the ¬ (negation) dead key — added in v1.3
# instead, Option+- has the © dead key, and Option+\ outputs plain ¬
"_dead_key_skip": ["dead: ¬"],
"3:27": {"deadKey": "dead: ©"}, # Option+-: © dead key instead of ¬ dead key
"3:42": {"output": "¬"}, # Option+\: plain ¬ instead of ¬ dead key
"4:27": {"output": ""}, # Shift+Option+-: № instead of ✗
"4:27": {"output": ""}, # Option+Shift+-: № instead of ✗
"5:27": {"deadKey": "dead: ©"}, # Caps+Option+-: © dead key instead of ¬ dead key
}

View File

@@ -954,7 +954,8 @@
"24": {
"code": 24,
"keyName": "=",
"output": "^"
"action": "=",
"output": "="
},
"25": {
"code": 25,
@@ -989,7 +990,8 @@
"30": {
"code": 30,
"keyName": "]",
"output": "["
"action": "]",
"output": "]"
},
"31": {
"code": 31,
@@ -1006,7 +1008,8 @@
"33": {
"code": 33,
"keyName": "[",
"output": "@"
"action": "[",
"output": "["
},
"34": {
"code": 34,
@@ -1040,7 +1043,8 @@
"39": {
"code": 39,
"keyName": "'",
"output": ":"
"action": "'",
"output": "'"
},
"40": {
"code": 40,
@@ -1057,7 +1061,7 @@
"42": {
"code": 42,
"keyName": "\\",
"output": "]"
"output": "\\"
},
"43": {
"code": 43,
@@ -1243,21 +1247,6 @@
"keyName": "KP9",
"output": "9"
},
"93": {
"code": 93,
"keyName": "ISO§",
"output": "¥"
},
"94": {
"code": 94,
"keyName": "ISO_backslash",
"output": "_"
},
"95": {
"code": 95,
"keyName": "ISO_comma",
"output": ","
},
"96": {
"code": 96,
"keyName": "F5",
@@ -1291,8 +1280,7 @@
"102": {
"code": 102,
"keyName": "code102",
"action": "space",
"output": " "
"output": "\u0010"
},
"103": {
"code": 103,
@@ -1302,8 +1290,7 @@
"104": {
"code": 104,
"keyName": "code104",
"action": "space",
"output": " "
"output": "\u0010"
},
"105": {
"code": 105,
@@ -1536,7 +1523,8 @@
"19": {
"code": 19,
"keyName": "2",
"output": "\""
"action": "@",
"output": "@"
},
"20": {
"code": 20,
@@ -1553,7 +1541,8 @@
"22": {
"code": 22,
"keyName": "6",
"output": "&"
"action": "^",
"output": "^"
},
"23": {
"code": 23,
@@ -1564,37 +1553,44 @@
"24": {
"code": 24,
"keyName": "=",
"output": "~"
"action": "+",
"output": "+"
},
"25": {
"code": 25,
"keyName": "9",
"output": ")"
"action": "(",
"output": "("
},
"26": {
"code": 26,
"keyName": "7",
"output": "'"
"action": "&",
"output": "&"
},
"27": {
"code": 27,
"keyName": "-",
"output": "="
"action": "_",
"output": "_"
},
"28": {
"code": 28,
"keyName": "8",
"output": "("
"action": "*",
"output": "*"
},
"29": {
"code": 29,
"keyName": "0",
"output": "0"
"action": ")",
"output": ")"
},
"30": {
"code": 30,
"keyName": "]",
"output": "{"
"action": "}",
"output": "}"
},
"31": {
"code": 31,
@@ -1611,7 +1607,8 @@
"33": {
"code": 33,
"keyName": "[",
"output": "`"
"action": "{",
"output": "{"
},
"34": {
"code": 34,
@@ -1645,7 +1642,8 @@
"39": {
"code": 39,
"keyName": "'",
"output": "*"
"action": "\"",
"output": "\""
},
"40": {
"code": 40,
@@ -1656,12 +1654,14 @@
"41": {
"code": 41,
"keyName": ";",
"output": "+"
"action": ":",
"output": ":"
},
"42": {
"code": 42,
"keyName": "\\",
"output": "}"
"action": "|",
"output": "|"
},
"43": {
"code": 43,
@@ -1849,21 +1849,6 @@
"keyName": "KP9",
"output": "9"
},
"93": {
"code": 93,
"keyName": "ISO§",
"output": "|"
},
"94": {
"code": 94,
"keyName": "ISO_backslash",
"output": "_"
},
"95": {
"code": 95,
"keyName": "ISO_comma",
"output": ","
},
"96": {
"code": 96,
"keyName": "F5",
@@ -1897,8 +1882,7 @@
"102": {
"code": 102,
"keyName": "code102",
"action": "space",
"output": " "
"output": "\u0010"
},
"103": {
"code": 103,
@@ -1908,8 +1892,7 @@
"104": {
"code": 104,
"keyName": "code104",
"action": "space",
"output": " "
"output": "\u0010"
},
"105": {
"code": 105,
@@ -2172,7 +2155,8 @@
"24": {
"code": 24,
"keyName": "=",
"output": "^"
"action": "=",
"output": "="
},
"25": {
"code": 25,
@@ -2207,7 +2191,7 @@
"30": {
"code": 30,
"keyName": "]",
"output": "["
"output": "]"
},
"31": {
"code": 31,
@@ -2224,7 +2208,7 @@
"33": {
"code": 33,
"keyName": "[",
"output": "@"
"output": "["
},
"34": {
"code": 34,
@@ -2258,7 +2242,7 @@
"39": {
"code": 39,
"keyName": "'",
"output": ":"
"output": "'"
},
"40": {
"code": 40,
@@ -2274,7 +2258,7 @@
"42": {
"code": 42,
"keyName": "\\",
"output": "]"
"output": "\\"
},
"43": {
"code": 43,
@@ -2459,21 +2443,6 @@
"keyName": "KP9",
"output": "9"
},
"93": {
"code": 93,
"keyName": "ISO§",
"output": "¥"
},
"94": {
"code": 94,
"keyName": "ISO_backslash",
"output": "_"
},
"95": {
"code": 95,
"keyName": "ISO_comma",
"output": ","
},
"96": {
"code": 96,
"keyName": "F5",
@@ -2507,8 +2476,7 @@
"102": {
"code": 102,
"keyName": "code102",
"action": "space",
"output": " "
"output": "\u0010"
},
"103": {
"code": 103,
@@ -2518,8 +2486,7 @@
"104": {
"code": 104,
"keyName": "code104",
"action": "space",
"output": " "
"output": "\u0010"
},
"105": {
"code": 105,
@@ -3044,22 +3011,6 @@
"keyName": "KP9",
"output": "9"
},
"93": {
"code": 93,
"keyName": "ISO§",
"output": "\\"
},
"94": {
"code": 94,
"keyName": "ISO_backslash",
"action": "`",
"deadKey": "dead: `"
},
"95": {
"code": 95,
"keyName": "ISO_comma",
"output": ","
},
"96": {
"code": 96,
"keyName": "F5",
@@ -3093,8 +3044,7 @@
"102": {
"code": 102,
"keyName": "code102",
"action": "space",
"output": " "
"output": "\u0010"
},
"103": {
"code": 103,
@@ -3104,8 +3054,7 @@
"104": {
"code": 104,
"keyName": "code104",
"action": "space",
"output": " "
"output": "\u0010"
},
"105": {
"code": 105,
@@ -3220,7 +3169,7 @@
}
},
"4": {
"label": "Shift+Option",
"label": "Option+Shift",
"keys": {
"0": {
"code": 0,
@@ -3629,21 +3578,6 @@
"keyName": "KP9",
"output": "9"
},
"93": {
"code": 93,
"keyName": "ISO§",
"output": "|"
},
"94": {
"code": 94,
"keyName": "ISO_backslash",
"output": "`"
},
"95": {
"code": 95,
"keyName": "ISO_comma",
"output": ","
},
"96": {
"code": 96,
"keyName": "F5",
@@ -3677,8 +3611,7 @@
"102": {
"code": 102,
"keyName": "code102",
"action": "space",
"output": " "
"output": "\u0010"
},
"103": {
"code": 103,
@@ -3688,8 +3621,7 @@
"104": {
"code": 104,
"keyName": "code104",
"action": "space",
"output": " "
"output": "\u0010"
},
"105": {
"code": 105,
@@ -4210,21 +4142,6 @@
"keyName": "KP9",
"output": "9"
},
"93": {
"code": 93,
"keyName": "ISO§",
"output": "\\"
},
"94": {
"code": 94,
"keyName": "ISO_backslash",
"output": "`"
},
"95": {
"code": 95,
"keyName": "ISO_comma",
"output": ","
},
"96": {
"code": 96,
"keyName": "F5",
@@ -4258,8 +4175,7 @@
"102": {
"code": 102,
"keyName": "code102",
"action": "space",
"output": " "
"output": "\u0010"
},
"103": {
"code": 103,
@@ -4269,8 +4185,7 @@
"104": {
"code": 104,
"keyName": "code104",
"action": "space",
"output": " "
"output": "\u0010"
},
"105": {
"code": 105,
@@ -4385,7 +4300,7 @@
}
},
"6": {
"label": "Command+Option",
"label": "Option+Command",
"keys": {
"0": {
"code": 0,
@@ -4782,21 +4697,6 @@
"keyName": "KP9",
"output": "9"
},
"93": {
"code": 93,
"keyName": "ISO§",
"output": "\\"
},
"94": {
"code": 94,
"keyName": "ISO_backslash",
"output": "_"
},
"95": {
"code": 95,
"keyName": "ISO_comma",
"output": ","
},
"96": {
"code": 96,
"keyName": "F5",
@@ -4830,8 +4730,7 @@
"102": {
"code": 102,
"keyName": "code102",
"action": "space",
"output": " "
"output": "\u0010"
},
"103": {
"code": 103,
@@ -4841,8 +4740,7 @@
"104": {
"code": 104,
"keyName": "code104",
"action": "space",
"output": " "
"output": "\u0010"
},
"105": {
"code": 105,
@@ -5356,21 +5254,6 @@
"keyName": "KP9",
"output": "9"
},
"93": {
"code": 93,
"keyName": "ISO§",
"output": "|"
},
"94": {
"code": 94,
"keyName": "ISO_backslash",
"output": "_"
},
"95": {
"code": 95,
"keyName": "ISO_comma",
"output": ","
},
"96": {
"code": 96,
"keyName": "F5",
@@ -5404,8 +5287,7 @@
"102": {
"code": 102,
"keyName": "code102",
"action": "space",
"output": " "
"output": "\u0010"
},
"103": {
"code": 103,
@@ -5415,8 +5297,7 @@
"104": {
"code": 104,
"keyName": "code104",
"action": "space",
"output": " "
"output": "\u0010"
},
"105": {
"code": 105,

View File

@@ -964,7 +964,8 @@
"24": {
"code": 24,
"keyName": "=",
"output": "^"
"action": "=",
"output": "="
},
"25": {
"code": 25,
@@ -999,7 +1000,8 @@
"30": {
"code": 30,
"keyName": "]",
"output": "["
"action": "]",
"output": "]"
},
"31": {
"code": 31,
@@ -1016,7 +1018,8 @@
"33": {
"code": 33,
"keyName": "[",
"output": "@"
"action": "[",
"output": "["
},
"34": {
"code": 34,
@@ -1050,7 +1053,8 @@
"39": {
"code": 39,
"keyName": "'",
"output": ":"
"action": "'",
"output": "'"
},
"40": {
"code": 40,
@@ -1067,7 +1071,7 @@
"42": {
"code": 42,
"keyName": "\\",
"output": "]"
"output": "\\"
},
"43": {
"code": 43,
@@ -1253,21 +1257,6 @@
"keyName": "KP9",
"output": "9"
},
"93": {
"code": 93,
"keyName": "ISO§",
"output": "¥"
},
"94": {
"code": 94,
"keyName": "ISO_backslash",
"output": "_"
},
"95": {
"code": 95,
"keyName": "ISO_comma",
"output": ","
},
"96": {
"code": 96,
"keyName": "F5",
@@ -1301,8 +1290,7 @@
"102": {
"code": 102,
"keyName": "code102",
"action": "space",
"output": " "
"output": "\u0010"
},
"103": {
"code": 103,
@@ -1312,8 +1300,7 @@
"104": {
"code": 104,
"keyName": "code104",
"action": "space",
"output": " "
"output": "\u0010"
},
"105": {
"code": 105,
@@ -1546,7 +1533,8 @@
"19": {
"code": 19,
"keyName": "2",
"output": "\""
"action": "@",
"output": "@"
},
"20": {
"code": 20,
@@ -1563,7 +1551,8 @@
"22": {
"code": 22,
"keyName": "6",
"output": "&"
"action": "^",
"output": "^"
},
"23": {
"code": 23,
@@ -1574,37 +1563,44 @@
"24": {
"code": 24,
"keyName": "=",
"output": "~"
"action": "+",
"output": "+"
},
"25": {
"code": 25,
"keyName": "9",
"output": ")"
"action": "(",
"output": "("
},
"26": {
"code": 26,
"keyName": "7",
"output": "'"
"action": "&",
"output": "&"
},
"27": {
"code": 27,
"keyName": "-",
"output": "="
"action": "_",
"output": "_"
},
"28": {
"code": 28,
"keyName": "8",
"output": "("
"action": "*",
"output": "*"
},
"29": {
"code": 29,
"keyName": "0",
"output": "0"
"action": ")",
"output": ")"
},
"30": {
"code": 30,
"keyName": "]",
"output": "{"
"action": "}",
"output": "}"
},
"31": {
"code": 31,
@@ -1621,7 +1617,8 @@
"33": {
"code": 33,
"keyName": "[",
"output": "`"
"action": "{",
"output": "{"
},
"34": {
"code": 34,
@@ -1655,7 +1652,8 @@
"39": {
"code": 39,
"keyName": "'",
"output": "*"
"action": "\"",
"output": "\""
},
"40": {
"code": 40,
@@ -1666,12 +1664,14 @@
"41": {
"code": 41,
"keyName": ";",
"output": "+"
"action": ":",
"output": ":"
},
"42": {
"code": 42,
"keyName": "\\",
"output": "}"
"action": "|",
"output": "|"
},
"43": {
"code": 43,
@@ -1859,21 +1859,6 @@
"keyName": "KP9",
"output": "9"
},
"93": {
"code": 93,
"keyName": "ISO§",
"output": "|"
},
"94": {
"code": 94,
"keyName": "ISO_backslash",
"output": "_"
},
"95": {
"code": 95,
"keyName": "ISO_comma",
"output": ","
},
"96": {
"code": 96,
"keyName": "F5",
@@ -1907,8 +1892,7 @@
"102": {
"code": 102,
"keyName": "code102",
"action": "space",
"output": " "
"output": "\u0010"
},
"103": {
"code": 103,
@@ -1918,8 +1902,7 @@
"104": {
"code": 104,
"keyName": "code104",
"action": "space",
"output": " "
"output": "\u0010"
},
"105": {
"code": 105,
@@ -2182,7 +2165,8 @@
"24": {
"code": 24,
"keyName": "=",
"output": "^"
"action": "=",
"output": "="
},
"25": {
"code": 25,
@@ -2217,7 +2201,7 @@
"30": {
"code": 30,
"keyName": "]",
"output": "["
"output": "]"
},
"31": {
"code": 31,
@@ -2234,7 +2218,7 @@
"33": {
"code": 33,
"keyName": "[",
"output": "@"
"output": "["
},
"34": {
"code": 34,
@@ -2268,7 +2252,7 @@
"39": {
"code": 39,
"keyName": "'",
"output": ":"
"output": "'"
},
"40": {
"code": 40,
@@ -2284,7 +2268,7 @@
"42": {
"code": 42,
"keyName": "\\",
"output": "]"
"output": "\\"
},
"43": {
"code": 43,
@@ -2469,21 +2453,6 @@
"keyName": "KP9",
"output": "9"
},
"93": {
"code": 93,
"keyName": "ISO§",
"output": "¥"
},
"94": {
"code": 94,
"keyName": "ISO_backslash",
"output": "_"
},
"95": {
"code": 95,
"keyName": "ISO_comma",
"output": ","
},
"96": {
"code": 96,
"keyName": "F5",
@@ -2517,8 +2486,7 @@
"102": {
"code": 102,
"keyName": "code102",
"action": "space",
"output": " "
"output": "\u0010"
},
"103": {
"code": 103,
@@ -2528,8 +2496,7 @@
"104": {
"code": 104,
"keyName": "code104",
"action": "space",
"output": " "
"output": "\u0010"
},
"105": {
"code": 105,
@@ -3055,22 +3022,6 @@
"keyName": "KP9",
"output": "9"
},
"93": {
"code": 93,
"keyName": "ISO§",
"output": "\\"
},
"94": {
"code": 94,
"keyName": "ISO_backslash",
"action": "`",
"deadKey": "dead: `"
},
"95": {
"code": 95,
"keyName": "ISO_comma",
"output": ","
},
"96": {
"code": 96,
"keyName": "F5",
@@ -3104,8 +3055,7 @@
"102": {
"code": 102,
"keyName": "code102",
"action": "space",
"output": " "
"output": "\u0010"
},
"103": {
"code": 103,
@@ -3115,8 +3065,7 @@
"104": {
"code": 104,
"keyName": "code104",
"action": "space",
"output": " "
"output": "\u0010"
},
"105": {
"code": 105,
@@ -3231,7 +3180,7 @@
}
},
"4": {
"label": "Shift+Option",
"label": "Option+Shift",
"keys": {
"0": {
"code": 0,
@@ -3640,21 +3589,6 @@
"keyName": "KP9",
"output": "9"
},
"93": {
"code": 93,
"keyName": "ISO§",
"output": "|"
},
"94": {
"code": 94,
"keyName": "ISO_backslash",
"output": "`"
},
"95": {
"code": 95,
"keyName": "ISO_comma",
"output": ","
},
"96": {
"code": 96,
"keyName": "F5",
@@ -3688,8 +3622,7 @@
"102": {
"code": 102,
"keyName": "code102",
"action": "space",
"output": " "
"output": "\u0010"
},
"103": {
"code": 103,
@@ -3699,8 +3632,7 @@
"104": {
"code": 104,
"keyName": "code104",
"action": "space",
"output": " "
"output": "\u0010"
},
"105": {
"code": 105,
@@ -4221,21 +4153,6 @@
"keyName": "KP9",
"output": "9"
},
"93": {
"code": 93,
"keyName": "ISO§",
"output": "\\"
},
"94": {
"code": 94,
"keyName": "ISO_backslash",
"output": "`"
},
"95": {
"code": 95,
"keyName": "ISO_comma",
"output": ","
},
"96": {
"code": 96,
"keyName": "F5",
@@ -4269,8 +4186,7 @@
"102": {
"code": 102,
"keyName": "code102",
"action": "space",
"output": " "
"output": "\u0010"
},
"103": {
"code": 103,
@@ -4280,8 +4196,7 @@
"104": {
"code": 104,
"keyName": "code104",
"action": "space",
"output": " "
"output": "\u0010"
},
"105": {
"code": 105,
@@ -4396,7 +4311,7 @@
}
},
"6": {
"label": "Command+Option",
"label": "Option+Command",
"keys": {
"0": {
"code": 0,
@@ -4793,21 +4708,6 @@
"keyName": "KP9",
"output": "9"
},
"93": {
"code": 93,
"keyName": "ISO§",
"output": "\\"
},
"94": {
"code": 94,
"keyName": "ISO_backslash",
"output": "_"
},
"95": {
"code": 95,
"keyName": "ISO_comma",
"output": ","
},
"96": {
"code": 96,
"keyName": "F5",
@@ -4841,8 +4741,7 @@
"102": {
"code": 102,
"keyName": "code102",
"action": "space",
"output": " "
"output": "\u0010"
},
"103": {
"code": 103,
@@ -4852,8 +4751,7 @@
"104": {
"code": 104,
"keyName": "code104",
"action": "space",
"output": " "
"output": "\u0010"
},
"105": {
"code": 105,
@@ -5367,21 +5265,6 @@
"keyName": "KP9",
"output": "9"
},
"93": {
"code": 93,
"keyName": "ISO§",
"output": "|"
},
"94": {
"code": 94,
"keyName": "ISO_backslash",
"output": "_"
},
"95": {
"code": 95,
"keyName": "ISO_comma",
"output": ","
},
"96": {
"code": 96,
"keyName": "F5",
@@ -5415,8 +5298,7 @@
"102": {
"code": 102,
"keyName": "code102",
"action": "space",
"output": " "
"output": "\u0010"
},
"103": {
"code": 103,
@@ -5426,8 +5308,7 @@
"104": {
"code": 104,
"keyName": "code104",
"action": "space",
"output": " "
"output": "\u0010"
},
"105": {
"code": 105,

View File

@@ -951,7 +951,8 @@
"24": {
"code": 24,
"keyName": "=",
"output": "^"
"action": "a27",
"output": "="
},
"25": {
"code": 25,
@@ -986,7 +987,8 @@
"30": {
"code": 30,
"keyName": "]",
"output": "["
"action": "a57",
"output": "]"
},
"31": {
"code": 31,
@@ -1003,7 +1005,8 @@
"33": {
"code": 33,
"keyName": "[",
"output": "@"
"action": "a56",
"output": "["
},
"34": {
"code": 34,
@@ -1037,7 +1040,8 @@
"39": {
"code": 39,
"keyName": "'",
"output": ":"
"action": "a6",
"output": "'"
},
"40": {
"code": 40,
@@ -1054,7 +1058,7 @@
"42": {
"code": 42,
"keyName": "\\",
"output": "]"
"output": "\\"
},
"43": {
"code": 43,
@@ -1240,21 +1244,6 @@
"keyName": "KP9",
"output": "9"
},
"93": {
"code": 93,
"keyName": "ISO§",
"output": "¥"
},
"94": {
"code": 94,
"keyName": "ISO_backslash",
"output": "_"
},
"95": {
"code": 95,
"keyName": "ISO_comma",
"output": ","
},
"96": {
"code": 96,
"keyName": "F5",
@@ -1288,8 +1277,7 @@
"102": {
"code": 102,
"keyName": "code102",
"action": "a80",
"output": " "
"output": "\u0010"
},
"103": {
"code": 103,
@@ -1299,8 +1287,7 @@
"104": {
"code": 104,
"keyName": "code104",
"action": "a80",
"output": " "
"output": "\u0010"
},
"105": {
"code": 105,
@@ -1533,7 +1520,8 @@
"19": {
"code": 19,
"keyName": "2",
"output": "\""
"action": "a29",
"output": "@"
},
"20": {
"code": 20,
@@ -1550,7 +1538,8 @@
"22": {
"code": 22,
"keyName": "6",
"output": "&"
"action": "a58",
"output": "^"
},
"23": {
"code": 23,
@@ -1561,37 +1550,44 @@
"24": {
"code": 24,
"keyName": "=",
"output": "~"
"action": "a10",
"output": "+"
},
"25": {
"code": 25,
"keyName": "9",
"output": ")"
"action": "a7",
"output": "("
},
"26": {
"code": 26,
"keyName": "7",
"output": "'"
"action": "a5",
"output": "&"
},
"27": {
"code": 27,
"keyName": "-",
"output": "="
"action": "a59",
"output": "_"
},
"28": {
"code": 28,
"keyName": "8",
"output": "("
"action": "a9",
"output": "*"
},
"29": {
"code": 29,
"keyName": "0",
"output": "0"
"action": "a8",
"output": ")"
},
"30": {
"code": 30,
"keyName": "]",
"output": "{"
"action": "a90",
"output": "}"
},
"31": {
"code": 31,
@@ -1608,7 +1604,8 @@
"33": {
"code": 33,
"keyName": "[",
"output": "`"
"action": "a88",
"output": "{"
},
"34": {
"code": 34,
@@ -1642,7 +1639,8 @@
"39": {
"code": 39,
"keyName": "'",
"output": "*"
"action": "a1",
"output": "\""
},
"40": {
"code": 40,
@@ -1653,12 +1651,14 @@
"41": {
"code": 41,
"keyName": ";",
"output": "+"
"action": "a24",
"output": ":"
},
"42": {
"code": 42,
"keyName": "\\",
"output": "}"
"action": "a89",
"output": "|"
},
"43": {
"code": 43,
@@ -1846,21 +1846,6 @@
"keyName": "KP9",
"output": "9"
},
"93": {
"code": 93,
"keyName": "ISO§",
"output": "|"
},
"94": {
"code": 94,
"keyName": "ISO_backslash",
"output": "_"
},
"95": {
"code": 95,
"keyName": "ISO_comma",
"output": ","
},
"96": {
"code": 96,
"keyName": "F5",
@@ -1894,8 +1879,7 @@
"102": {
"code": 102,
"keyName": "code102",
"action": "a80",
"output": " "
"output": "\u0010"
},
"103": {
"code": 103,
@@ -1905,8 +1889,7 @@
"104": {
"code": 104,
"keyName": "code104",
"action": "a80",
"output": " "
"output": "\u0010"
},
"105": {
"code": 105,
@@ -2169,7 +2152,8 @@
"24": {
"code": 24,
"keyName": "=",
"output": "^"
"action": "a27",
"output": "="
},
"25": {
"code": 25,
@@ -2204,7 +2188,7 @@
"30": {
"code": 30,
"keyName": "]",
"output": "["
"output": "]"
},
"31": {
"code": 31,
@@ -2221,7 +2205,7 @@
"33": {
"code": 33,
"keyName": "[",
"output": "@"
"output": "["
},
"34": {
"code": 34,
@@ -2255,7 +2239,7 @@
"39": {
"code": 39,
"keyName": "'",
"output": ":"
"output": "'"
},
"40": {
"code": 40,
@@ -2271,7 +2255,7 @@
"42": {
"code": 42,
"keyName": "\\",
"output": "]"
"output": "\\"
},
"43": {
"code": 43,
@@ -2456,21 +2440,6 @@
"keyName": "KP9",
"output": "9"
},
"93": {
"code": 93,
"keyName": "ISO§",
"output": "¥"
},
"94": {
"code": 94,
"keyName": "ISO_backslash",
"output": "_"
},
"95": {
"code": 95,
"keyName": "ISO_comma",
"output": ","
},
"96": {
"code": 96,
"keyName": "F5",
@@ -2504,8 +2473,7 @@
"102": {
"code": 102,
"keyName": "code102",
"action": "a80",
"output": " "
"output": "\u0010"
},
"103": {
"code": 103,
@@ -2515,8 +2483,7 @@
"104": {
"code": 104,
"keyName": "code104",
"action": "a80",
"output": " "
"output": "\u0010"
},
"105": {
"code": 105,
@@ -3041,22 +3008,6 @@
"keyName": "KP9",
"output": "9"
},
"93": {
"code": 93,
"keyName": "ISO§",
"output": "\\"
},
"94": {
"code": 94,
"keyName": "ISO_backslash",
"action": "a60",
"deadKey": "3"
},
"95": {
"code": 95,
"keyName": "ISO_comma",
"output": ","
},
"96": {
"code": 96,
"keyName": "F5",
@@ -3090,8 +3041,7 @@
"102": {
"code": 102,
"keyName": "code102",
"action": "a80",
"output": " "
"output": "\u0010"
},
"103": {
"code": 103,
@@ -3101,8 +3051,7 @@
"104": {
"code": 104,
"keyName": "code104",
"action": "a80",
"output": " "
"output": "\u0010"
},
"105": {
"code": 105,
@@ -3217,7 +3166,7 @@
}
},
"4": {
"label": "Shift+Option",
"label": "Option+Shift",
"keys": {
"0": {
"code": 0,
@@ -3626,21 +3575,6 @@
"keyName": "KP9",
"output": "9"
},
"93": {
"code": 93,
"keyName": "ISO§",
"output": "|"
},
"94": {
"code": 94,
"keyName": "ISO_backslash",
"output": "`"
},
"95": {
"code": 95,
"keyName": "ISO_comma",
"output": ","
},
"96": {
"code": 96,
"keyName": "F5",
@@ -3674,8 +3608,7 @@
"102": {
"code": 102,
"keyName": "code102",
"action": "a80",
"output": " "
"output": "\u0010"
},
"103": {
"code": 103,
@@ -3685,8 +3618,7 @@
"104": {
"code": 104,
"keyName": "code104",
"action": "a80",
"output": " "
"output": "\u0010"
},
"105": {
"code": 105,
@@ -4201,21 +4133,6 @@
"keyName": "KP9",
"output": "9"
},
"93": {
"code": 93,
"keyName": "ISO§",
"output": "\\"
},
"94": {
"code": 94,
"keyName": "ISO_backslash",
"output": "`"
},
"95": {
"code": 95,
"keyName": "ISO_comma",
"output": ","
},
"96": {
"code": 96,
"keyName": "F5",
@@ -4249,8 +4166,7 @@
"102": {
"code": 102,
"keyName": "code102",
"action": "a80",
"output": " "
"output": "\u0010"
},
"103": {
"code": 103,
@@ -4260,8 +4176,7 @@
"104": {
"code": 104,
"keyName": "code104",
"action": "a80",
"output": " "
"output": "\u0010"
},
"105": {
"code": 105,
@@ -4376,7 +4291,7 @@
}
},
"6": {
"label": "Command+Option",
"label": "Option+Command",
"keys": {
"0": {
"code": 0,
@@ -4773,21 +4688,6 @@
"keyName": "KP9",
"output": "9"
},
"93": {
"code": 93,
"keyName": "ISO§",
"output": "\\"
},
"94": {
"code": 94,
"keyName": "ISO_backslash",
"output": "_"
},
"95": {
"code": 95,
"keyName": "ISO_comma",
"output": ","
},
"96": {
"code": 96,
"keyName": "F5",
@@ -4821,8 +4721,7 @@
"102": {
"code": 102,
"keyName": "code102",
"action": "a80",
"output": " "
"output": "\u0010"
},
"103": {
"code": 103,
@@ -4832,8 +4731,7 @@
"104": {
"code": 104,
"keyName": "code104",
"action": "a80",
"output": " "
"output": "\u0010"
},
"105": {
"code": 105,
@@ -5347,21 +5245,6 @@
"keyName": "KP9",
"output": "9"
},
"93": {
"code": 93,
"keyName": "ISO§",
"output": "|"
},
"94": {
"code": 94,
"keyName": "ISO_backslash",
"output": "_"
},
"95": {
"code": 95,
"keyName": "ISO_comma",
"output": ","
},
"96": {
"code": 96,
"keyName": "F5",
@@ -5395,8 +5278,7 @@
"102": {
"code": 102,
"keyName": "code102",
"action": "a80",
"output": " "
"output": "\u0010"
},
"103": {
"code": 103,
@@ -5406,8 +5288,7 @@
"104": {
"code": 104,
"keyName": "code104",
"action": "a80",
"output": " "
"output": "\u0010"
},
"105": {
"code": 105,

View File

@@ -955,7 +955,8 @@
"24": {
"code": 24,
"keyName": "=",
"output": "^"
"action": "=",
"output": "="
},
"25": {
"code": 25,
@@ -990,7 +991,8 @@
"30": {
"code": 30,
"keyName": "]",
"output": "["
"action": "]",
"output": "]"
},
"31": {
"code": 31,
@@ -1007,7 +1009,8 @@
"33": {
"code": 33,
"keyName": "[",
"output": "@"
"action": "[",
"output": "["
},
"34": {
"code": 34,
@@ -1041,7 +1044,8 @@
"39": {
"code": 39,
"keyName": "'",
"output": ":"
"action": "'",
"output": "'"
},
"40": {
"code": 40,
@@ -1058,7 +1062,7 @@
"42": {
"code": 42,
"keyName": "\\",
"output": "]"
"output": "\\"
},
"43": {
"code": 43,
@@ -1259,21 +1263,6 @@
"keyName": "KP9",
"output": "9"
},
"93": {
"code": 93,
"keyName": "ISO§",
"output": "¥"
},
"94": {
"code": 94,
"keyName": "ISO_backslash",
"output": "_"
},
"95": {
"code": 95,
"keyName": "ISO_comma",
"output": ","
},
"96": {
"code": 96,
"keyName": "F5",
@@ -1307,8 +1296,7 @@
"102": {
"code": 102,
"keyName": "code102",
"action": "space",
"output": " "
"output": "\u0010"
},
"103": {
"code": 103,
@@ -1318,8 +1306,7 @@
"104": {
"code": 104,
"keyName": "code104",
"action": "space",
"output": " "
"output": "\u0010"
},
"105": {
"code": 105,
@@ -1553,7 +1540,8 @@
"19": {
"code": 19,
"keyName": "2",
"output": "\""
"action": "@",
"output": "@"
},
"20": {
"code": 20,
@@ -1570,7 +1558,8 @@
"22": {
"code": 22,
"keyName": "6",
"output": "&"
"action": "^",
"output": "^"
},
"23": {
"code": 23,
@@ -1581,37 +1570,44 @@
"24": {
"code": 24,
"keyName": "=",
"output": "~"
"action": "+",
"output": "+"
},
"25": {
"code": 25,
"keyName": "9",
"output": ")"
"action": "(",
"output": "("
},
"26": {
"code": 26,
"keyName": "7",
"output": "'"
"action": "&",
"output": "&"
},
"27": {
"code": 27,
"keyName": "-",
"output": "="
"action": "_",
"output": "_"
},
"28": {
"code": 28,
"keyName": "8",
"output": "("
"action": "*",
"output": "*"
},
"29": {
"code": 29,
"keyName": "0",
"output": "0"
"action": ")",
"output": ")"
},
"30": {
"code": 30,
"keyName": "]",
"output": "{"
"action": "}",
"output": "}"
},
"31": {
"code": 31,
@@ -1628,7 +1624,8 @@
"33": {
"code": 33,
"keyName": "[",
"output": "`"
"action": "{",
"output": "{"
},
"34": {
"code": 34,
@@ -1662,7 +1659,8 @@
"39": {
"code": 39,
"keyName": "'",
"output": "*"
"action": "\"",
"output": "\""
},
"40": {
"code": 40,
@@ -1673,12 +1671,14 @@
"41": {
"code": 41,
"keyName": ";",
"output": "+"
"action": ":",
"output": ":"
},
"42": {
"code": 42,
"keyName": "\\",
"output": "}"
"action": "|",
"output": "|"
},
"43": {
"code": 43,
@@ -1866,21 +1866,6 @@
"keyName": "KP9",
"output": "9"
},
"93": {
"code": 93,
"keyName": "ISO§",
"output": "|"
},
"94": {
"code": 94,
"keyName": "ISO_backslash",
"output": "_"
},
"95": {
"code": 95,
"keyName": "ISO_comma",
"output": ","
},
"96": {
"code": 96,
"keyName": "F5",
@@ -1914,8 +1899,7 @@
"102": {
"code": 102,
"keyName": "code102",
"action": "space",
"output": " "
"output": "\u0010"
},
"103": {
"code": 103,
@@ -1925,8 +1909,7 @@
"104": {
"code": 104,
"keyName": "code104",
"action": "space",
"output": " "
"output": "\u0010"
},
"105": {
"code": 105,
@@ -2189,7 +2172,8 @@
"24": {
"code": 24,
"keyName": "=",
"output": "^"
"action": "=",
"output": "="
},
"25": {
"code": 25,
@@ -2224,7 +2208,7 @@
"30": {
"code": 30,
"keyName": "]",
"output": "["
"output": "]"
},
"31": {
"code": 31,
@@ -2241,7 +2225,7 @@
"33": {
"code": 33,
"keyName": "[",
"output": "@"
"output": "["
},
"34": {
"code": 34,
@@ -2275,7 +2259,7 @@
"39": {
"code": 39,
"keyName": "'",
"output": ":"
"output": "'"
},
"40": {
"code": 40,
@@ -2291,7 +2275,7 @@
"42": {
"code": 42,
"keyName": "\\",
"output": "]"
"output": "\\"
},
"43": {
"code": 43,
@@ -2476,21 +2460,6 @@
"keyName": "KP9",
"output": "9"
},
"93": {
"code": 93,
"keyName": "ISO§",
"output": "¥"
},
"94": {
"code": 94,
"keyName": "ISO_backslash",
"output": "_"
},
"95": {
"code": 95,
"keyName": "ISO_comma",
"output": ","
},
"96": {
"code": 96,
"keyName": "F5",
@@ -2524,8 +2493,7 @@
"102": {
"code": 102,
"keyName": "code102",
"action": "space",
"output": " "
"output": "\u0010"
},
"103": {
"code": 103,
@@ -2535,8 +2503,7 @@
"104": {
"code": 104,
"keyName": "code104",
"action": "space",
"output": " "
"output": "\u0010"
},
"105": {
"code": 105,
@@ -3081,22 +3048,6 @@
"keyName": "KP9",
"output": "9"
},
"93": {
"code": 93,
"keyName": "ISO§",
"output": "\\"
},
"94": {
"code": 94,
"keyName": "ISO_backslash",
"action": "`",
"deadKey": "⌥`"
},
"95": {
"code": 95,
"keyName": "ISO_comma",
"output": ","
},
"96": {
"code": 96,
"keyName": "F5",
@@ -3130,8 +3081,7 @@
"102": {
"code": 102,
"keyName": "code102",
"action": "space",
"output": " "
"output": "\u0010"
},
"103": {
"code": 103,
@@ -3141,8 +3091,7 @@
"104": {
"code": 104,
"keyName": "code104",
"action": "space",
"output": " "
"output": "\u0010"
},
"105": {
"code": 105,
@@ -3257,7 +3206,7 @@
}
},
"4": {
"label": "Shift+Option",
"label": "Option+Shift",
"keys": {
"0": {
"code": 0,
@@ -3666,21 +3615,6 @@
"keyName": "KP9",
"output": "9"
},
"93": {
"code": 93,
"keyName": "ISO§",
"output": "|"
},
"94": {
"code": 94,
"keyName": "ISO_backslash",
"output": "`"
},
"95": {
"code": 95,
"keyName": "ISO_comma",
"output": ","
},
"96": {
"code": 96,
"keyName": "F5",
@@ -3714,8 +3648,7 @@
"102": {
"code": 102,
"keyName": "code102",
"action": "space",
"output": " "
"output": "\u0010"
},
"103": {
"code": 103,
@@ -3725,8 +3658,7 @@
"104": {
"code": 104,
"keyName": "code104",
"action": "space",
"output": " "
"output": "\u0010"
},
"105": {
"code": 105,
@@ -4241,21 +4173,6 @@
"keyName": "KP9",
"output": "9"
},
"93": {
"code": 93,
"keyName": "ISO§",
"output": "\\"
},
"94": {
"code": 94,
"keyName": "ISO_backslash",
"output": "`"
},
"95": {
"code": 95,
"keyName": "ISO_comma",
"output": ","
},
"96": {
"code": 96,
"keyName": "F5",
@@ -4289,8 +4206,7 @@
"102": {
"code": 102,
"keyName": "code102",
"action": "space",
"output": " "
"output": "\u0010"
},
"103": {
"code": 103,
@@ -4300,8 +4216,7 @@
"104": {
"code": 104,
"keyName": "code104",
"action": "space",
"output": " "
"output": "\u0010"
},
"105": {
"code": 105,
@@ -4416,7 +4331,7 @@
}
},
"6": {
"label": "Command+Option",
"label": "Option+Command",
"keys": {
"0": {
"code": 0,
@@ -4833,21 +4748,6 @@
"keyName": "KP9",
"output": "9"
},
"93": {
"code": 93,
"keyName": "ISO§",
"output": "\\"
},
"94": {
"code": 94,
"keyName": "ISO_backslash",
"output": "_"
},
"95": {
"code": 95,
"keyName": "ISO_comma",
"output": ","
},
"96": {
"code": 96,
"keyName": "F5",
@@ -4881,8 +4781,7 @@
"102": {
"code": 102,
"keyName": "code102",
"action": "space",
"output": " "
"output": "\u0010"
},
"103": {
"code": 103,
@@ -4892,8 +4791,7 @@
"104": {
"code": 104,
"keyName": "code104",
"action": "space",
"output": " "
"output": "\u0010"
},
"105": {
"code": 105,
@@ -5417,21 +5315,6 @@
"keyName": "KP9",
"output": "9"
},
"93": {
"code": 93,
"keyName": "ISO§",
"output": "|"
},
"94": {
"code": 94,
"keyName": "ISO_backslash",
"output": "_"
},
"95": {
"code": 95,
"keyName": "ISO_comma",
"output": ","
},
"96": {
"code": 96,
"keyName": "F5",
@@ -5465,8 +5348,7 @@
"102": {
"code": 102,
"keyName": "code102",
"action": "space",
"output": " "
"output": "\u0010"
},
"103": {
"code": 103,
@@ -5476,8 +5358,7 @@
"104": {
"code": 104,
"keyName": "code104",
"action": "space",
"output": " "
"output": "\u0010"
},
"105": {
"code": 105,

Binary file not shown.

Binary file not shown.

Binary file not shown.