rename v2.0 to EurKEY Next, add ANSI support, normalize Caps Lock, fix v1.4

- rename v2.0 → EurKEY Next across all files, scripts, workflows, website
- rename bundle EurKey-macOS → EurKEY-macOS
- add §/± to ¬ dead key (¬+s → §, ¬+S → ±) for ANSI keyboard compatibility
- normalize Caps Lock = Shift across all four layouts, remove custom Caps bindings
- fix v1.4: revert accidental Caps/ẞ changes, correct changelog to super/subscript swap
- update README: remove duplicate v1.2–v1.4 changelog, reorder versions (Next first)
- update website: ISO+ANSI feature card, EurKEY Next branding, consistent version order

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-22 20:54:34 +01:00
parent c2274406ec
commit ea4f88ae51
21 changed files with 375 additions and 402 deletions

View File

@@ -4,12 +4,12 @@ on:
push: push:
branches: [main] branches: [main]
paths: paths:
- 'EurKey-macOS.bundle/**' - 'EurKEY-Next.bundle/**'
- 'scripts/**' - 'scripts/**'
- 'spec/**' - 'spec/**'
pull_request: pull_request:
paths: paths:
- 'EurKey-macOS.bundle/**' - 'EurKEY-Next.bundle/**'
- 'scripts/**' - 'scripts/**'
- 'spec/**' - 'spec/**'
@@ -40,5 +40,5 @@ jobs:
- name: upload DMG - name: upload DMG
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
with: with:
name: EurKEY-macOS-DMG name: EurKEY-Next-DMG
path: build/*.dmg path: build/*.dmg

View File

@@ -39,33 +39,49 @@ jobs:
- name: create GitHub release - name: create GitHub release
uses: softprops/action-gh-release@v2 uses: softprops/action-gh-release@v2
with: with:
name: EurKEY-macOS ${{ steps.version.outputs.version }} name: EurKEY Next ${{ steps.version.outputs.version }}
files: build/EurKEY-macOS-${{ steps.version.outputs.version }}.dmg files: build/EurKEY-Next-${{ steps.version.outputs.version }}.dmg
body: | body: |
## Changes ## EurKEY Next
- Fix modifier key order to Apple canonical: Option+Shift (not Shift+Option) - **ANSI compatibility:** the ISO-only key between left Shift and Z does not exist on ANSI keyboards. Its characters § and ± are now accessible via the `⌥\` dead key (`⌥\` `s` → §, `⌥\` `S` → ±).
- Add EU badge template icons for v1.2, v1.3, v1.4 matching Apple's built-in style - Normalize Caps Lock: Caps Lock = Shift, no special bindings.
- Add icon build pipeline from SVG source - Configure every key exactly as printed on the MacBook keyboard (ISO, English International).
- Add interactive keyboard viewer to website - Remove distinction between left/right modifier keys.
- Add layout PDF downloads to website - Rename all dead key states to their initializing key combination for easier identification.
- Replace Hugo with lightweight static website - Fix Greek dead key terminator (Ω → α) to match official EurKEY spec.
- Fix Greek dead key terminator (Ω → α) to match official spec - Fix modifier key order to Apple canonical: Option+Shift (not Shift+Option).
- Enable CapsLock language switch for all layouts - Clean up duplicate dead key compositions.
- Rename create-dmg.sh → build-dmg.sh - Change Mathematicians (`⌥⇧m`) dead key terminator from invisible space to 𝕄.
## v1.4
- Normalize Caps Lock: Caps Lock = Shift, no special bindings.
- Fix accidental Caps Lock changes from previous release.
## v1.3
- Normalize Caps Lock: Caps Lock = Shift, no special bindings.
## v1.2
- Normalize Caps Lock: Caps Lock = Shift, no special bindings.
## Project
- Rename v2.0 → EurKEY Next.
- Rename bundle to `EurKEY-Next.bundle`.
- New lightweight static website at eurkey-macos.eu.
- Interactive keyboard viewer with modifier layer preview and dead key compositions.
- Layout PDF downloads.
- New monochrome macOS template icon.
- Restructure project with automated build, validation, and release pipelines.
## Installation ## Installation
1. Download `EurKEY-macOS-${{ steps.version.outputs.version }}.dmg` 1. Download `EurKEY-Next-${{ steps.version.outputs.version }}.dmg`
2. Open the DMG 2. Open the DMG
3. Drag `EurKey-macOS.bundle` to the `Install Here (Keyboard Layouts)` folder 3. Drag `EurKEY-Next.bundle` to the `Install Here (Keyboard Layouts)` folder
4. Log out and back in (or restart) 4. Log out and back in (or restart)
5. System Settings → Keyboard → Input Sources → Add → Select EurKEY 5. System Settings → Keyboard → Input Sources → Add → Select EurKEY Next
generate_release_notes: false
## Included layouts
- **EurKEY v1.2** — legacy version
- **EurKEY v1.3** — official spec implementation
- **EurKEY v1.4** — v1.3 with ẞ on Caps+§
- **EurKEY v2.0** — custom edition
generate_release_notes: true

View File

@@ -38,7 +38,9 @@ jobs:
- name: Generate layout JSON - name: Generate layout JSON
run: | run: |
mkdir -p eurkey-macos.eu/data mkdir -p eurkey-macos.eu/data
for ver in v1.2 v1.3 v1.4 v2.0; do python3 scripts/parse_keylayout.py "src/keylayouts/EurKEY Next.keylayout" \
-o "eurkey-macos.eu/data/eurkey-next.json"
for ver in v1.2 v1.3 v1.4; do
python3 scripts/parse_keylayout.py "src/keylayouts/EurKEY ${ver}.keylayout" \ python3 scripts/parse_keylayout.py "src/keylayouts/EurKEY ${ver}.keylayout" \
-o "eurkey-macos.eu/data/eurkey-${ver}.json" -o "eurkey-macos.eu/data/eurkey-${ver}.json"
done done

114
README.md
View File

@@ -1,8 +1,8 @@
# EurKEY-macOS # EurKEY Next
The keyboard layout for Europeans, coders, and translators. This repo contains a **modified version** of the EurKEY base layout for macOS, bundling multiple versions so users can pick what they need. The keyboard layout for Europeans, coders, and translators. This repo contains a **modified version** of the EurKEY base layout for macOS, bundling multiple versions so users can pick what they need.
EurKEY-macOS targets MacBooks with the physical English International keyboard (ISO) instead of the ANSI layout from the official upstream. Since it is an ISO layout, it has one additional key (`` ` ``) and the big Enter key. EurKEY Next works with both ISO and ANSI keyboards. It targets the physical English International keyboard found on European MacBooks (ISO) but is fully compatible with US ANSI keyboards. The ISO key between left Shift and Z (**`§`**/**`±`**) does not exist on ANSI — these characters are accessible via the **`⌥\`** dead key: **`⌥\`** **`s`** → §, **`⌥\`** **`S`** → ±.
The keyboard layout should be compatible with the other ISO layouts typically available in Europe (e.g., German ISO). However, the printed keys will obviously be different. I tested the layout on the current tenkeyless MacBook keyboard (MacBook Air 2024). Working numpad keys are therefore not guaranteed. The keyboard layout should be compatible with the other ISO layouts typically available in Europe (e.g., German ISO). However, the printed keys will obviously be different. I tested the layout on the current tenkeyless MacBook keyboard (MacBook Air 2024). Working numpad keys are therefore not guaranteed.
@@ -10,34 +10,34 @@ The keyboard layout should be compatible with the other ISO layouts typically av
The bundle ships 4 layout versions: The bundle ships 4 layout versions:
| Version | Description | | Version | Description |
| ------- | ----------- | | --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **v1.3** | Official EurKEY spec implementation. **Recommended for most users.** | | **EurKEY Next** | Every key configures exactly as printed on the MacBook keyboard. Removes left/right modifier key distinction. Monochrome template icon. |
| **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 swapped super/subscript numbers: **`⌥m`** **`1`**…**`0`** produces subscript (₁…₀), **`⌥m`** **`⇧1`**…**`⇧0`** produces superscript (¹…⁰). |
| **v1.4** | v1.3 with `` (capital sharp s) on Caps+`§` key. | | **v1.3** | Official EurKEY spec implementation. |
| **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. | | **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 **`⌥⇧S`**). |
## Installation ## Installation
### From DMG (recommended) ### From DMG
1. Download the latest `EurKEY-macOS-YYYY.MM.DD.dmg` from [Releases](https://github.com/felixfoertsch/EurKEY-macOS/releases). 1. Download the latest `EurKEY-Next-YYYY.MM.DD.dmg` from [Releases](https://github.com/felixfoertsch/EurKEY-macOS/releases).
2. Open the DMG. 2. Open the DMG.
3. Drag `EurKey-macOS.bundle` to the `Install Here (Keyboard Layouts)` folder. 3. Drag `EurKEY-Next.bundle` to the `Install Here (Keyboard Layouts)` folder.
4. Log out and back in (or restart). 4. Log out and back in (or restart).
5. System Settings → Keyboard → Input Sources → click `+` → select the EurKEY version you want. 5. System Settings → Keyboard → Input Sources → click `+` → select EurKEY Next.
### Manual ### Manual
1. Download or clone this repo. 1. Download or clone this repo.
2. Copy `EurKey-macOS.bundle` to `/Library/Keyboard Layouts/` (system-wide) or `~/Library/Keyboard Layouts/` (user-only). 2. Copy `EurKEY-Next.bundle` to `/Library/Keyboard Layouts/` (system-wide) or `~/Library/Keyboard Layouts/` (user-only).
3. Log out and back in. 3. Log out and back in.
4. System Settings → Keyboard → Input Sources → click `+` → select EurKEY. 4. System Settings → Keyboard → Input Sources → click `+` → select EurKEY Next.
<img src="eurkey-macos.eu/img/1-input-sources.png" width="300" alt="System preferences showing the edit button for input sources."> <img src="eurkey-macos.eu/img/1-input-sources.png" width="300" alt="System preferences showing the edit button for input sources.">
<img src="eurkey-macos.eu/img/2-add-layout.png" width="300" alt="Dialogue to add a new input source."> <img src="eurkey-macos.eu/img/2-add-layout.png" width="300" alt="Dialogue to add a new input source.">
<img src="eurkey-macos.eu/img/3-select-eurkey.png" width="300" alt="EurKEY in the input sources list."> <img src="eurkey-macos.eu/img/3-select-eurkey.png" width="300" alt="EurKEY Next in the input sources list.">
<img src="eurkey-macos.eu/img/4-select-input-method.png" width="300" alt="Selecting EurKEY from the menu bar dropdown."> <img src="eurkey-macos.eu/img/4-select-input-method.png" width="300" alt="Selecting EurKEY Next from the menu bar dropdown.">
## Validation ## Validation
@@ -48,7 +48,7 @@ The project includes automated validation to catch regressions. The validation s
python3 scripts/validate_layouts.py python3 scripts/validate_layouts.py
# parse a single layout to JSON # parse a single layout to JSON
python3 scripts/parse_keylayout.py "EurKey-macOS.bundle/Contents/Resources/EurKEY v1.3.keylayout" --summary python3 scripts/parse_keylayout.py "EurKEY-Next.bundle/Contents/Resources/EurKEY v1.3.keylayout" --summary
# build the bundle (validates + generates Info.plist) # build the bundle (validates + generates Info.plist)
bash scripts/build-bundle.sh bash scripts/build-bundle.sh
@@ -57,33 +57,23 @@ bash scripts/build-bundle.sh
bash scripts/build-dmg.sh bash scripts/build-dmg.sh
``` ```
## Dead key compositions (v2.0) ## Dead key compositions (EurKEY Next)
v2.0 renames all dead key states to their initializing key combination: EurKEY Next renames all dead key states to their initializing key combination:
| Key combination | Dead key symbol | | Key combination | Dead key symbol |
| --------------- | --------------- | | --------------- | --------------- |
| ⌥`` ` `` | `` ` `` | | **`` ` ``** | `` ` `` |
| ⌥⇧`` ` `` | ~ | | **`` ⌥⇧` ``** | ~ |
| ⌥' | ´ | | **`⌥'`** | ´ |
| ⌥⇧' | ¨ | | **`⌥⇧'`** | ¨ |
| ⌥6 | ^ | | **`⌥6`** | ^ |
| ⌥⇧6 | ˇ | | **`⌥⇧6`** | ˇ |
| ⌥7 | ˚ | | **`⌥7`** | ˚ |
| ⌥⇧7 | ¯ | | **`⌥⇧7`** | ¯ |
| ⌥m | α | | **`⌥m`** | α |
| ⌥⇧m | 𝕄 | | **`⌥⇧m`** | 𝕄 |
| ⌥\ | ¬ | | **`⌥\`** | ¬ |
## Customization with Karabiner-Elements
macOS `.keylayout` files cannot distinguish between the FN key and other modifiers, and cannot remap FN to act as a custom modifier. To use FN (or any other key) as an additional modifier layer, use [Karabiner-Elements](https://karabiner-elements.pqrs.org/):
1. Install Karabiner-Elements.
2. In **Simple Modifications**, remap `fn` to a modifier key (e.g., `right_option`).
3. In **Complex Modifications**, add rules that map your desired key combinations to Unicode character outputs.
[Hammerspoon](https://www.hammerspoon.org/) is an alternative for Lua-based automation but does not intercept keystrokes at the same level as Karabiner.
## Known issues ## Known issues
@@ -100,50 +90,6 @@ Template icons switch color with the system theme (dark/light). Ukelele's GUI ch
The build script (`scripts/build-bundle.sh`) generates `Info.plist` with this flag set correctly for all layout versions. The build script (`scripts/build-bundle.sh`) generates `Info.plist` with this flag set correctly for all layout versions.
## Changelog
### v2.0 (WIP)
#### Layout
- Configure every key exactly as printed on the MacBook keyboard (ISO, English International).
- Remove distinction between left/right modifier keys.
- Rename all dead key states to their initializing key combination for easier identification.
- Fix Greek dead key terminator (`Ω` → `α`) to match official EurKEY spec.
- Fix modifier key order to Apple canonical: Option+Shift (not Shift+Option).
- Enable CapsLock language switch for all layouts.
- Remove duplicate compositions: `§` from Navigators, `±` from Option+Shift+§, `±` from Mathematicians on `-`, terminator duplicates on `5`.
- Change Mathematicians (⌥⇧m) dead key terminator from invisible space to `𝕄`.
#### Website
- Replace Hugo with lightweight static website.
- Add interactive keyboard viewer with modifier layer preview, dead key compositions.
- Support multiple dead keys per key with click cycling (e.g., key 6: circumflex → háček → exit).
- Add layout PDF downloads.
- Add EU badge template icons for v1.2, v1.3, v1.4 matching Apple's built-in keyboard layout icon style.
- Add SVG feature card icons (dead keys, ISO enter, versions, install).
#### DevOps
- Use `*.bundle` format to group layout versions.
- Restructure project: track `src/`, `fonts/` as source, generate bundle at build time.
- Add `build-bundle.sh`, `build-dmg.sh`, `build-icons.sh`, `validate_layouts.py`, `parse_keylayout.py`.
- Add GitHub Actions workflows for build, release, website deployment.
- Add new monochrome macOS template icon that switches color with the system theme.
### v1.4
- Adds `` (capital sharp s) on Caps+`§` key.
### v1.3
- Implements the layout according to [spec](https://eurkey.steffen.bruentjen.eu/changelog.html). Based on [Leonardo Schenkel's version 1.2](https://github.com/lbschenkel/EurKEY-Mac).
### v1.2
- Original macOS port by [Leonardo Brondani Schenkel](https://github.com/lbschenkel/EurKEY-Mac).
## Attribution ## Attribution
The original EurKEY layout is by [Steffen Brüntjen](https://eurkey.steffen.bruentjen.eu/start.html). The macOS port is originally based on the work of [Leonardo Brondani Schenkel](https://github.com/lbschenkel/EurKEY-Mac). The original EurKEY layout is by [Steffen Brüntjen](https://eurkey.steffen.bruentjen.eu/start.html). The macOS port is originally based on the work of [Leonardo Brondani Schenkel](https://github.com/lbschenkel/EurKEY-Mac).

View File

@@ -3,8 +3,8 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>EurKEY — The European Keyboard Layout for macOS</title> <title>EurKEY Next — The European Keyboard Layout for macOS</title>
<meta name="description" content="The keyboard layout for Europeans, coders, and translators. Dead keys for diacritics, ISO international layout, easy DMG install."> <meta name="description" content="The keyboard layout for Europeans, coders, and translators. Dead keys for diacritics, ISO and ANSI compatible, easy DMG install.">
<link rel="icon" type="image/svg+xml" href="img/icon.svg"> <link rel="icon" type="image/svg+xml" href="img/icon.svg">
<link rel="stylesheet" href="style.css"> <link rel="stylesheet" href="style.css">
</head> </head>
@@ -14,7 +14,7 @@
<div class="nav-inner"> <div class="nav-inner">
<a href="#" class="nav-logo"> <a href="#" class="nav-logo">
<img src="img/icon.svg" alt="" width="32" height="32"> <img src="img/icon.svg" alt="" width="32" height="32">
<span>EurKEY</span> <span>EurKEY Next</span>
</a> </a>
<div class="nav-links"> <div class="nav-links">
<a href="https://github.com/felixfoertsch/EurKEY-macOS/releases" class="btn btn--nav">Download</a> <a href="https://github.com/felixfoertsch/EurKEY-macOS/releases" class="btn btn--nav">Download</a>
@@ -30,11 +30,11 @@
<!-- LAYOUT PREVIEW --> <!-- LAYOUT PREVIEW -->
<section id="layout" class="layout-preview"> <section id="layout" class="layout-preview">
<div class="container"> <div class="container">
<h2>EurKEY — The European Keyboard Layout</h2> <h2>EurKEY Next — The European Keyboard Layout</h2>
<p class="section-sub">The complete key map for each version, showing all modifier layers and dead key compositions.</p> <p class="section-sub">The complete key map for each version, showing all modifier layers and dead key compositions.</p>
<div class="layout-controls"> <div class="layout-controls">
<div class="version-tabs"> <div class="version-tabs">
<button class="version-tab active" data-version="v2.0">v2.0</button> <button class="version-tab active" data-version="next">EurKEY Next</button>
<button class="version-tab" data-version="v1.4">v1.4</button> <button class="version-tab" data-version="v1.4">v1.4</button>
<button class="version-tab" data-version="v1.3">v1.3</button> <button class="version-tab" data-version="v1.3">v1.3</button>
<button class="version-tab" data-version="v1.2">v1.2</button> <button class="version-tab" data-version="v1.2">v1.2</button>
@@ -43,7 +43,7 @@
<figure class="keyboard" id="keyboard"></figure> <figure class="keyboard" id="keyboard"></figure>
<p class="keyboard-hint">Hold <kbd>Shift</kbd> or <kbd>Option</kbd> to preview modifier layers. Click a yellow dead key to see its compositions. Press <kbd>Esc</kbd> to go back.</p> <p class="keyboard-hint">Hold <kbd>Shift</kbd> or <kbd>Option</kbd> to preview modifier layers. Click a yellow dead key to see its compositions. Press <kbd>Esc</kbd> to go back.</p>
<div class="layout-pdf-links"> <div class="layout-pdf-links">
<a href="pdf/eurkey-v2.0-layout.pdf" id="pdf-download" class="btn btn--secondary">Download v2.0 PDF</a> <a href="pdf/eurkey-next-layout.pdf" id="pdf-download" class="btn btn--secondary">Download EurKEY Next PDF</a>
</div> </div>
</div> </div>
</section> </section>
@@ -55,22 +55,22 @@
<div class="feature-grid"> <div class="feature-grid">
<div class="feature-card"> <div class="feature-card">
<div class="feature-icon"><img src="img/icon-deadkeys.svg" alt="" width="36" height="36"></div> <div class="feature-icon"><img src="img/icon-deadkeys.svg" alt="" width="36" height="36"></div>
<h3>Dead Keys for Diacritics</h3> <h3>Dead Keys for<br>Diacritics</h3>
<p>Type accented characters (ä, é, ñ, č, …) using intuitive Option-key combinations. No character palette needed.</p> <p>Type accented characters (ä, é, ñ, č, …) using intuitive Option-key combinations. No character palette needed.</p>
</div> </div>
<div class="feature-card"> <div class="feature-card">
<div class="feature-icon"><img src="img/icon-iso.svg" alt="" width="36" height="36"></div> <div class="feature-icon"><img src="img/icon-iso.svg" alt="" width="36" height="36"></div>
<h3>ISO International Layout</h3> <h3>ISO + ANSI<br>Compatible</h3>
<p>Built for the physical English International keyboard found on European MacBooks — with the extra § key and big Enter.</p> <p>Built for ISO MacBooks, fully compatible with ANSI keyboards. All characters remain accessible via dead keys.</p>
</div> </div>
<div class="feature-card"> <div class="feature-card">
<div class="feature-icon"><img src="img/icon-versions.svg" alt="" width="36" height="36"></div> <div class="feature-icon"><img src="img/icon-versions.svg" alt="" width="36" height="36"></div>
<h3>Multiple Versions</h3> <h3>Ships Multiple<br>Versions</h3>
<p>Ships v1.2, v1.3, v1.4, and v2.0 in a single bundle. Pick the one that fits your workflow.</p> <p>Ships EurKEY Next, v1.4, v1.3, and v1.2 in a single bundle. Pick the one that fits your workflow.</p>
</div> </div>
<div class="feature-card"> <div class="feature-card">
<div class="feature-icon"><img src="img/icon-install.svg" alt="" width="36" height="36"></div> <div class="feature-icon"><img src="img/icon-install.svg" alt="" width="36" height="36"></div>
<h3>Easy Install</h3> <h3>Packaged for<br>Easy Installation</h3>
<p>Download the DMG, drag the bundle to Keyboard Layouts, log out. Done in under a minute.</p> <p>Download the DMG, drag the bundle to Keyboard Layouts, log out. Done in under a minute.</p>
</div> </div>
</div> </div>
@@ -86,7 +86,7 @@
<div class="step-number">1</div> <div class="step-number">1</div>
<div class="step-content"> <div class="step-content">
<h3>Download</h3> <h3>Download</h3>
<p>Get the latest <code>.dmg</code> from <a href="https://github.com/felixfoertsch/EurKEY-macOS/releases">GitHub Releases</a>. Open it and drag <code>EurKey-macOS.bundle</code> to the <em>Keyboard Layouts</em> folder.</p> <p>Get the latest <code>.dmg</code> from <a href="https://github.com/felixfoertsch/EurKEY-macOS/releases">GitHub Releases</a>. Open it and drag <code>EurKEY-Next.bundle</code> to the <em>Keyboard Layouts</em> folder.</p>
</div> </div>
</div> </div>
<div class="step"> <div class="step">
@@ -100,11 +100,11 @@
<div class="step-number">3</div> <div class="step-number">3</div>
<div class="step-content"> <div class="step-content">
<h3>Add the layout</h3> <h3>Add the layout</h3>
<p>Open <strong>System Settings → Keyboard → Input Sources</strong>. Click <strong>Edit…</strong>, then <strong>+</strong> to add a new input source. Search for "EurKEY" and select the version you want.</p> <p>Open <strong>System Settings → Keyboard → Input Sources</strong>. Click <strong>Edit…</strong>, then <strong>+</strong> to add a new input source. Search for "EurKEY Next" and select it.</p>
<div class="install-screenshots"> <div class="install-screenshots">
<img src="img/1-input-sources.png" alt="System Settings showing the Edit button for input sources" loading="lazy"> <img src="img/1-input-sources.png" alt="System Settings showing the Edit button for input sources" loading="lazy">
<img src="img/2-add-layout.png" alt="Dialog to add a new input source" loading="lazy"> <img src="img/2-add-layout.png" alt="Dialog to add a new input source" loading="lazy">
<img src="img/3-select-eurkey.png" alt="EurKEY in the input sources list" loading="lazy"> <img src="img/3-select-eurkey.png" alt="EurKEY Next in the input sources list" loading="lazy">
</div> </div>
</div> </div>
</div> </div>
@@ -112,9 +112,9 @@
<div class="step-number">4</div> <div class="step-number">4</div>
<div class="step-content"> <div class="step-content">
<h3>Select it</h3> <h3>Select it</h3>
<p>Click the input source icon in the menu bar and switch to EurKEY.</p> <p>Click the input source icon in the menu bar and switch to EurKEY Next.</p>
<div class="install-screenshots"> <div class="install-screenshots">
<img src="img/4-select-input-method.png" alt="Selecting EurKEY from the menu bar dropdown" loading="lazy"> <img src="img/4-select-input-method.png" alt="Selecting EurKEY Next from the menu bar dropdown" loading="lazy">
</div> </div>
</div> </div>
</div> </div>
@@ -125,7 +125,7 @@
<!-- FOOTER --> <!-- FOOTER -->
<footer class="footer"> <footer class="footer">
<div class="container"> <div class="container">
<p>EurKEY-macOS maintained by <a href="https://github.com/felixfoertsch">Felix Förtsch</a></p> <p>EurKEY Next maintained by <a href="https://github.com/felixfoertsch">Felix Förtsch</a></p>
<p> <p>
Based on <a href="https://eurkey.steffen.bruentjen.eu/start.html">EurKEY</a> by Steffen Brüntjen Based on <a href="https://eurkey.steffen.bruentjen.eu/start.html">EurKEY</a> by Steffen Brüntjen
· macOS port originally by <a href="https://github.com/lbschenkel/EurKEY-Mac">Leonardo Brondani Schenkel</a> · macOS port originally by <a href="https://github.com/lbschenkel/EurKEY-Mac">Leonardo Brondani Schenkel</a>

View File

@@ -67,14 +67,15 @@ const DEAD_KEY_NAMES = {
}; };
const cache = new Map(); const cache = new Map();
let currentVersion = "v2.0"; let currentVersion = "next";
let currentData = null; let currentData = null;
let currentDeadKey = null; let currentDeadKey = null;
let keyElements = new Map(); let keyElements = new Map();
async function loadVersion(version) { async function loadVersion(version) {
if (cache.has(version)) return cache.get(version); if (cache.has(version)) return cache.get(version);
const resp = await fetch("data/eurkey-" + version + ".json"); const file = "data/eurkey-" + version + ".json";
const resp = await fetch(file);
if (!resp.ok) throw new Error("Failed to load " + version); if (!resp.ok) throw new Error("Failed to load " + version);
const data = await resp.json(); const data = await resp.json();
cache.set(version, data); cache.set(version, data);
@@ -419,7 +420,8 @@ function updatePdfLink() {
const link = document.getElementById("pdf-download"); const link = document.getElementById("pdf-download");
if (!link) return; if (!link) return;
link.href = "pdf/eurkey-" + currentVersion + "-layout.pdf"; link.href = "pdf/eurkey-" + currentVersion + "-layout.pdf";
link.textContent = "Download " + currentVersion + " PDF"; const label = currentVersion === "next" ? "EurKEY Next" : currentVersion;
link.textContent = "Download " + label + " PDF";
} }
function initTabs() { function initTabs() {

View File

@@ -177,6 +177,10 @@ img {
font-size: 1rem; font-size: 1rem;
font-weight: 600; font-weight: 600;
margin-bottom: 0.5rem; margin-bottom: 0.5rem;
min-height: 3.2em;
display: flex;
align-items: center;
justify-content: center;
} }
.feature-card p { .feature-card p {

View File

@@ -10,7 +10,7 @@ set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)" PROJECT_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
BUILD_DIR="${PROJECT_DIR}/build" BUILD_DIR="${PROJECT_DIR}/build"
BUNDLE_DIR="${BUILD_DIR}/EurKey-macOS.bundle" BUNDLE_DIR="${BUILD_DIR}/EurKEY-Next.bundle"
CONTENTS_DIR="${BUNDLE_DIR}/Contents" CONTENTS_DIR="${BUNDLE_DIR}/Contents"
RESOURCES_DIR="${CONTENTS_DIR}/Resources" RESOURCES_DIR="${CONTENTS_DIR}/Resources"
@@ -20,11 +20,11 @@ if [[ "${1:-}" == "--version" ]]; then
VERSION="${2:?missing version argument}" VERSION="${2:?missing version argument}"
fi fi
BUNDLE_ID="de.felixfoertsch.keyboardlayout.EurKEY-macOS" BUNDLE_ID="de.felixfoertsch.keyboardlayout.EurKEY-Next"
BUNDLE_NAME="EurKEY-macOS" BUNDLE_NAME="EurKEY-Next"
# layout versions to include # layout names to include (EurKEY Next is the main layout, others are legacy versions)
VERSIONS=("v1.2" "v1.3" "v1.4" "v2.0") LAYOUTS=("EurKEY Next" "EurKEY v1.4" "EurKEY v1.3" "EurKEY v1.2")
SRC_DIR="${PROJECT_DIR}/src" SRC_DIR="${PROJECT_DIR}/src"
@@ -39,9 +39,9 @@ bash "${SCRIPT_DIR}/build-icons.sh"
rm -rf "${BUNDLE_DIR}" rm -rf "${BUNDLE_DIR}"
mkdir -p "${RESOURCES_DIR}" mkdir -p "${RESOURCES_DIR}"
for ver in "${VERSIONS[@]}"; do for layout in "${LAYOUTS[@]}"; do
cp "${SRC_DIR}/keylayouts/EurKEY ${ver}.keylayout" "${RESOURCES_DIR}/" cp "${SRC_DIR}/keylayouts/${layout}.keylayout" "${RESOURCES_DIR}/"
cp "${SRC_DIR}/icons/EurKEY ${ver}.icns" "${RESOURCES_DIR}/" cp "${SRC_DIR}/icons/${layout}.icns" "${RESOURCES_DIR}/"
done done
for lang in en de es; do for lang in en de es; do
@@ -74,15 +74,14 @@ PLIST_VERSION
echo " <string>${VERSION}</string>" >> "${CONTENTS_DIR}/Info.plist" echo " <string>${VERSION}</string>" >> "${CONTENTS_DIR}/Info.plist"
# add KLInfo for each version # add KLInfo for each layout
for ver in "${VERSIONS[@]}"; do for layout in "${LAYOUTS[@]}"; do
layout_name="EurKEY ${ver}" # generate input source ID: bundle id + layout name lowercased, spaces removed
# generate input source ID: bundle id + layout name with spaces removed, lowercased source_id_suffix=$(echo "${layout}" | tr '[:upper:]' '[:lower:]' | tr -d ' ')
source_id_suffix=$(echo "eurkey${ver}" | tr '[:upper:]' '[:lower:]' | tr -d ' ')
source_id="${BUNDLE_ID}.${source_id_suffix}" source_id="${BUNDLE_ID}.${source_id_suffix}"
cat >> "${CONTENTS_DIR}/Info.plist" << KLINFO_ENTRY cat >> "${CONTENTS_DIR}/Info.plist" << KLINFO_ENTRY
<key>KLInfo_${layout_name}</key> <key>KLInfo_${layout}</key>
<dict> <dict>
<key>TICapsLockLanguageSwitchCapable</key> <key>TICapsLockLanguageSwitchCapable</key>
<true/> <true/>
@@ -101,7 +100,7 @@ cat >> "${CONTENTS_DIR}/Info.plist" << 'PLIST_FOOTER'
</plist> </plist>
PLIST_FOOTER PLIST_FOOTER
echo "Generated Info.plist with ${#VERSIONS[@]} layout entries" echo "Generated Info.plist with ${#LAYOUTS[@]} layout entries"
# --- generate version.plist --- # --- generate version.plist ---
cat > "${CONTENTS_DIR}/version.plist" << VPLIST cat > "${CONTENTS_DIR}/version.plist" << VPLIST

View File

@@ -12,7 +12,7 @@ set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)" PROJECT_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
BUILD_DIR="${PROJECT_DIR}/build" BUILD_DIR="${PROJECT_DIR}/build"
BUNDLE_DIR="${BUILD_DIR}/EurKey-macOS.bundle" BUNDLE_DIR="${BUILD_DIR}/EurKEY-Next.bundle"
# parse arguments # parse arguments
VERSION="${1:-$(date +%Y.%m.%d)}" VERSION="${1:-$(date +%Y.%m.%d)}"
@@ -20,7 +20,7 @@ if [[ "${1:-}" == "--version" ]]; then
VERSION="${2:?missing version argument}" VERSION="${2:?missing version argument}"
fi fi
DMG_NAME="EurKEY-macOS-${VERSION}" DMG_NAME="EurKEY-Next-${VERSION}"
DMG_PATH="${BUILD_DIR}/${DMG_NAME}.dmg" DMG_PATH="${BUILD_DIR}/${DMG_NAME}.dmg"
STAGING_DIR="${BUILD_DIR}/dmg-staging" STAGING_DIR="${BUILD_DIR}/dmg-staging"
@@ -41,7 +41,7 @@ mkdir -p "${STAGING_DIR}"
cp -R "${BUNDLE_DIR}" "${STAGING_DIR}/" cp -R "${BUNDLE_DIR}" "${STAGING_DIR}/"
# copy layout PDFs # copy layout PDFs
cp "${BUILD_DIR}"/eurkey-*-layout.pdf "${STAGING_DIR}/" cp "${BUILD_DIR}"/eurkey-*layout.pdf "${STAGING_DIR}/"
# create symlink to installation target # create symlink to installation target
ln -s "/Library/Keyboard Layouts" "${STAGING_DIR}/Install Here (Keyboard Layouts)" ln -s "/Library/Keyboard Layouts" "${STAGING_DIR}/Install Here (Keyboard Layouts)"

View File

@@ -4,7 +4,7 @@
# Requires: rsvg-convert (librsvg), iconutil (macOS built-in) # Requires: rsvg-convert (librsvg), iconutil (macOS built-in)
# #
# The v1.2/v1.3/v1.4 icon is a template badge with "EU" text. # 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). # The EurKEY Next icon is a monochrome star ring (managed separately).
# #
# Usage: bash scripts/build-icons.sh # Usage: bash scripts/build-icons.sh
set -euo pipefail set -euo pipefail
@@ -54,7 +54,7 @@ rm "${ICONSET}"/tmp_*.png
ICNS_PATH="${ICON_DIR}/badge-eu.icns" ICNS_PATH="${ICON_DIR}/badge-eu.icns"
iconutil --convert icns --output "${ICNS_PATH}" "${ICONSET}" iconutil --convert icns --output "${ICNS_PATH}" "${ICONSET}"
# install for v1.2, v1.3, v1.4 (v2.0 keeps its own icon) # install for v1.2, v1.3, v1.4 (EurKEY Next keeps its own icon)
cp "${ICNS_PATH}" "${ICON_DIR}/EurKEY v1.2.icns" 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.3.icns"
cp "${ICNS_PATH}" "${ICON_DIR}/EurKEY v1.4.icns" cp "${ICNS_PATH}" "${ICON_DIR}/EurKEY v1.4.icns"

View File

@@ -443,20 +443,22 @@ def generate_pdf(version, output_dir):
"""Generate a PDF for the given layout version.""" """Generate a PDF for the given layout version."""
src_dir = Path(__file__).parent.parent / "src" / "keylayouts" src_dir = Path(__file__).parent.parent / "src" / "keylayouts"
keylayout = src_dir / f"EurKEY {version}.keylayout" keylayout = src_dir / f"EurKEY {version}.keylayout"
display_name = f"EurKEY {version}"
pdf_name = f"eurkey-{version.lower()}-layout.pdf"
if not keylayout.exists(): if not keylayout.exists():
print(f"ERROR: {keylayout} not found") print(f"ERROR: {keylayout} not found")
return False return False
print(f"Generating PDF for EurKEY {version}...") print(f"Generating PDF for {display_name}...")
data = parse_keylayout(str(keylayout), keyboard_type=0) data = parse_keylayout(str(keylayout), keyboard_type=0)
pdf = LayoutPDF(f"EurKEY {version}") pdf = LayoutPDF(display_name)
pdf.generate(data) pdf.generate(data)
out = Path(output_dir) out = Path(output_dir)
out.mkdir(parents=True, exist_ok=True) out.mkdir(parents=True, exist_ok=True)
output_path = out / f"eurkey-{version}-layout.pdf" output_path = out / pdf_name
pdf.output(str(output_path)) pdf.output(str(output_path))
print(f" Written: {output_path}") print(f" Written: {output_path}")
return True return True
@@ -466,7 +468,7 @@ def main():
parser = argparse.ArgumentParser(description="Generate keyboard layout PDFs") parser = argparse.ArgumentParser(description="Generate keyboard layout PDFs")
parser.add_argument( parser.add_argument(
"--version", "-v", nargs="*", "--version", "-v", nargs="*",
default=["v1.2", "v1.3", "v1.4", "v2.0"], default=["Next", "v1.4", "v1.3", "v1.2"],
help="Layout versions to generate (default: all)", help="Layout versions to generate (default: all)",
) )
default_output = str(Path(__file__).parent.parent / "build") default_output = str(Path(__file__).parent.parent / "build")

View File

@@ -18,7 +18,7 @@ from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent)) sys.path.insert(0, str(Path(__file__).parent))
from parse_keylayout import parse_keylayout, TYPING_KEY_CODES, MODIFIER_LABELS, KEY_CODE_NAMES from parse_keylayout import parse_keylayout, TYPING_KEY_CODES, MODIFIER_LABELS, KEY_CODE_NAMES
BUNDLE_DIR = Path(__file__).parent.parent / "build" / "EurKey-macOS.bundle" / "Contents" / "Resources" BUNDLE_DIR = Path(__file__).parent.parent / "build" / "EurKEY-Next.bundle" / "Contents" / "Resources"
# modifier indices that contain meaningful typing output # modifier indices that contain meaningful typing output
# (exclude index 6 = Option+Command and 7 = Control — these are system shortcuts) # (exclude index 6 = Option+Command and 7 = Control — these are system shortcuts)
@@ -184,27 +184,25 @@ def format_char_display(c):
V1_2_EXCEPTIONS = { V1_2_EXCEPTIONS = {
# Option+Shift 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": "§"}, "4:1": {"output": "§"},
"5:1": {"output": "§"}, # Caps+Option S: mirrors Option+Shift (§)
# v1.2 does not have the ¬ (negation) dead key — added in v1.3 # v1.2 does not have the ¬ (negation) dead key — added in v1.3
# instead, Option+- has the © dead key, and Option+\ outputs plain ¬ # instead, Option+- has the © dead key, and Option+\ outputs plain ¬
"_dead_key_skip": ["dead: ¬"], "_dead_key_skip": ["dead: ¬"],
"3:27": {"deadKey": "dead: ©"}, # Option+-: © dead key instead of ¬ dead key "3:27": {"deadKey": "dead: ©"}, # Option+-: © dead key instead of ¬ dead key
"3:42": {"output": "¬"}, # Option+\: plain ¬ instead of ¬ dead key "3:42": {"output": "¬"}, # Option+\: plain ¬ instead of ¬ dead key
"4:27": {"output": ""}, # Option+Shift+-: № instead of ✗ "4:27": {"output": ""}, # Option+Shift+-: № instead of ✗
"5:27": {"deadKey": "dead: ©"}, # Caps+Option+-: © dead key instead of ¬ dead key "5:27": {"output": ""}, # Caps+Option+-: mirrors Option+Shift (№)
} }
# v1.4 differences from v1.3: # v1.4 differences from v1.3:
# - §/` key (code 10) in Caps/Caps+Option outputs ẞ instead of § # - swaps super/subscript numbers in α dead key
# - ¬ dead key has an extra ¬ composition (self-referencing) # - ¬ dead key has an extra ¬ composition (self-referencing, harmless Ukelele artifact)
V1_4_EXCEPTIONS = { V1_4_EXCEPTIONS = {
"2:10": {"output": ""}, # Caps: §/` → ẞ (capital sharp s)
"5:10": {"output": ""}, # Caps+Option: §/` → ẞ
"5:27": {"output": ""}, # Caps+Option+-: no output (missing ¬ dead key in this layer)
"dead:dead: ¬:extra:¬": True, # extra ¬ composition in negation dead key "dead:dead: ¬:extra:¬": True, # extra ¬ composition in negation dead key
} }
# v2.0 is a custom edition — skip validation for now, just document diffs # EurKEY Next (main edition) — skip validation, custom layout
V2_0_EXCEPTIONS = { EURKEY_NEXT_EXCEPTIONS = {
"_skip_validation": True, "_skip_validation": True,
} }
@@ -212,7 +210,7 @@ VERSIONS = {
"v1.2": {"file": "v1.2", "exceptions": V1_2_EXCEPTIONS, "label": "EurKEY v1.2"}, "v1.2": {"file": "v1.2", "exceptions": V1_2_EXCEPTIONS, "label": "EurKEY v1.2"},
"v1.3": {"file": "v1.3", "exceptions": {}, "label": "EurKEY v1.3 (reference)"}, "v1.3": {"file": "v1.3", "exceptions": {}, "label": "EurKEY v1.3 (reference)"},
"v1.4": {"file": "v1.4", "exceptions": V1_4_EXCEPTIONS, "label": "EurKEY v1.4"}, "v1.4": {"file": "v1.4", "exceptions": V1_4_EXCEPTIONS, "label": "EurKEY v1.4"},
"v2.0": {"file": "v2.0", "exceptions": V2_0_EXCEPTIONS, "label": "EurKEY v2.0 (custom)"}, "next": {"file": "Next", "exceptions": EURKEY_NEXT_EXCEPTIONS, "label": "EurKEY Next"},
} }

View File

@@ -1,7 +1,7 @@
<?xml version="1.1" encoding="UTF-8"?> <?xml version="1.1" encoding="UTF-8"?>
<!DOCTYPE keyboard SYSTEM "file://localhost/System/Library/DTDs/KeyboardLayout.dtd"> <!DOCTYPE keyboard SYSTEM "file://localhost/System/Library/DTDs/KeyboardLayout.dtd">
<!--Last edited by Ukelele version 396 on 2024-03-17 at 16:14 (GMT+1)--> <!--Last edited by Ukelele version 396 on 2024-03-17 at 16:14 (GMT+1)-->
<keyboard group="126" id="-31468" name="EurKEY v2.0" maxout="1"> <keyboard group="126" id="-31468" name="EurKEY Next" maxout="1">
<layouts> <layouts>
<layout first="0" last="17" mapSet="16c" modifiers="f4"/> <layout first="0" last="17" mapSet="16c" modifiers="f4"/>
<layout first="18" last="18" mapSet="994" modifiers="f4"/> <layout first="18" last="18" mapSet="994" modifiers="f4"/>
@@ -280,7 +280,7 @@
<key code="7" action="X"/> <key code="7" action="X"/>
<key code="8" action="C"/> <key code="8" action="C"/>
<key code="9" action="V"/> <key code="9" action="V"/>
<key code="10" output=""/> <key code="10" output="±"/>
<key code="11" action="B"/> <key code="11" action="B"/>
<key code="12" action="Q"/> <key code="12" action="Q"/>
<key code="13" action="W"/> <key code="13" action="W"/>
@@ -288,53 +288,53 @@
<key code="15" action="R"/> <key code="15" action="R"/>
<key code="16" action="Y"/> <key code="16" action="Y"/>
<key code="17" action="T"/> <key code="17" action="T"/>
<key code="18" action="1"/> <key code="18" action="!"/>
<key code="19" action="2"/> <key code="19" action="@"/>
<key code="20" action="3"/> <key code="20" action="#"/>
<key code="21" action="4"/> <key code="21" action="$"/>
<key code="22" action="6"/> <key code="22" action="^"/>
<key code="23" action="5"/> <key code="23" action="%"/>
<key code="24" action="="/> <key code="24" action="+"/>
<key code="25" action="9"/> <key code="25" action="("/>
<key code="26" action="7"/> <key code="26" action="&#x0026;"/>
<key code="27" action="-"/> <key code="27" action="_"/>
<key code="28" action="8"/> <key code="28" action="*"/>
<key code="29" action="0"/> <key code="29" action=")"/>
<key code="30" output="]"/> <key code="30" action="}"/>
<key code="31" action="O"/> <key code="31" action="O"/>
<key code="32" action="U"/> <key code="32" action="U"/>
<key code="33" output="["/> <key code="33" action="{"/>
<key code="34" action="I"/> <key code="34" action="I"/>
<key code="35" action="P"/> <key code="35" action="P"/>
<key code="36" output="&#x000D;"/> <key code="36" output="&#x000D;"/>
<key code="37" action="L"/> <key code="37" action="L"/>
<key code="38" action="J"/> <key code="38" action="J"/>
<key code="39" output="&#x0027;"/> <key code="39" action="&#x0022;"/>
<key code="40" action="K"/> <key code="40" action="K"/>
<key code="41" output=";"/> <key code="41" action=":"/>
<key code="42" output="\"/> <key code="42" action="|"/>
<key code="43" output=","/> <key code="43" action="&#x003C;"/>
<key code="44" output="/"/> <key code="44" output="?"/>
<key code="45" action="N"/> <key code="45" action="N"/>
<key code="46" action="M"/> <key code="46" action="M"/>
<key code="47" output="."/> <key code="47" action="&#x003E;"/>
<key code="48" output="&#x0009;"/> <key code="48" output="&#x0009;"/>
<key code="49" action="space"/> <key code="49" action="space"/>
<key code="50" output="`"/> <key code="50" action="~"/>
<key code="51" output="&#x0008;"/> <key code="51" output="&#x0008;"/>
<key code="52" output="&#x0003;"/> <key code="52" output="&#x0003;"/>
<key code="53" output="&#x001B;"/> <key code="53" output="&#x001B;"/>
<key code="64" output="&#x0010;"/> <key code="64" output="&#x0010;"/>
<key code="65" output="."/> <key code="65" output="."/>
<key code="66" output="&#x001D;"/> <key code="66" output="*"/>
<key code="67" output="*"/> <key code="67" output="*"/>
<key code="69" output="+"/> <key code="69" output="+"/>
<key code="70" output="&#x001C;"/> <key code="70" output="+"/>
<key code="71" output="&#x001B;"/> <key code="71" output="&#x001B;"/>
<key code="72" output="&#x001F;"/> <key code="72" output="="/>
<key code="75" output="/"/> <key code="75" output="/"/>
<key code="76" output="&#x0003;"/> <key code="76" output="&#x0003;"/>
<key code="77" output="&#x001E;"/> <key code="77" output="/"/>
<key code="78" output="-"/> <key code="78" output="-"/>
<key code="79" output="&#x0010;"/> <key code="79" output="&#x0010;"/>
<key code="80" output="&#x0010;"/> <key code="80" output="&#x0010;"/>
@@ -610,9 +610,9 @@
<key code="126" output="&#x001E;"/> <key code="126" output="&#x001E;"/>
</keyMap> </keyMap>
<keyMap index="5"> <keyMap index="5">
<key code="0" output="Ä"/> <key code="0" action="Ä"/>
<key code="1" output="ß"/> <key code="1" output=""/>
<key code="2" output="Ð"/> <key code="2" output="Đ"/>
<key code="3" output="È"/> <key code="3" output="È"/>
<key code="4" output="Ù"/> <key code="4" output="Ù"/>
<key code="5" output="É"/> <key code="5" output="É"/>
@@ -620,60 +620,61 @@
<key code="7" output="Á"/> <key code="7" output="Á"/>
<key code="8" output="Ç"/> <key code="8" output="Ç"/>
<key code="9" output="Ì"/> <key code="9" output="Ì"/>
<key code="10" output=""/> <key code="10" output=""/>
<key code="11" output="Í"/> <key code="11" output="Í"/>
<key code="12" action="Æ"/> <key code="12" action="Æ"/>
<key code="13" output="Å"/> <key code="13" output="Å"/>
<key code="14" output="Ë"/> <key code="14" action="Ë"/>
<key code="15" output="Ý"/> <key code="15" output="Ý"/>
<key code="16" output="Ÿ"/> <key code="16" output="Ÿ"/>
<key code="17" output="Þ"/> <key code="17" output="Þ"/>
<key code="18" output="¡"/> <key code="18" output="¹"/>
<key code="19" output="ª"/> <key code="19" output="²"/>
<key code="20" output="º"/> <key code="20" output="³"/>
<key code="21" output="£"/> <key code="21" output="¥"/>
<key code="22" action="^"/> <key code="22" action="ˇ"/>
<key code="23" output=""/> <key code="23" output="¢"/>
<key code="24" output="×"/> <key code="24" output="÷"/>
<key code="25" output=""/> <key code="25" output=""/>
<key code="26" action="˚"/> <key code="26" action="¯"/>
<key code="28" output=""/> <key code="27" output=""/>
<key code="29" output=""/> <key code="28" output=""/>
<key code="30" output="»"/> <key code="29" output=""/>
<key code="31" output="Ö"/> <key code="30" output=""/>
<key code="32" output="Ü"/> <key code="31" action="Ö"/>
<key code="33" output="«"/> <key code="32" action="Ü"/>
<key code="34" output="Ï"/> <key code="33" output=""/>
<key code="34" action="Ï"/>
<key code="35" output="Œ"/> <key code="35" output="Œ"/>
<key code="36" output="&#x000D;"/> <key code="36" output="&#x000D;"/>
<key code="37" action="Ø"/> <key code="37" action="Ø"/>
<key code="38" output="Ú"/> <key code="38" output="Ú"/>
<key code="39" action="´"/> <key code="39" action="¨"/>
<key code="40" output="IJ"/> <key code="40" output="IJ"/>
<key code="41" action="¨"/> <key code="41" output="·"/>
<key code="42" output="¬"/> <key code="42" output="¦"/>
<key code="43" output="Ò"/> <key code="43" output="Ò"/>
<key code="44" output="¿"/> <key code="44" output=""/>
<key code="45" output="Ñ"/> <key code="45" output="Ñ"/>
<key code="46" action="Ω"/> <key code="46" action=""/>
<key code="47" output="Ó"/> <key code="47" output="Ó"/>
<key code="48" output="&#x0009;"/> <key code="48" output="&#x0009;"/>
<key code="49" output=" "/> <key code="49" output=" "/>
<key code="50" action="`"/> <key code="50" action="~ option"/>
<key code="51" output="&#x0008;"/> <key code="51" output="&#x0008;"/>
<key code="52" output="&#x0003;"/> <key code="52" output="&#x0003;"/>
<key code="53" output="&#x001B;"/> <key code="53" output="&#x001B;"/>
<key code="64" output="&#x0010;"/> <key code="64" output="&#x0010;"/>
<key code="65" output=","/> <key code="65" output="."/>
<key code="66" output="&#x001D;"/> <key code="66" output="*"/>
<key code="67" output="*"/> <key code="67" output="*"/>
<key code="69" output="+"/> <key code="69" output="+"/>
<key code="70" output="&#x001C;"/> <key code="70" output="+"/>
<key code="71" output="&#x001B;"/> <key code="71" output="&#x001B;"/>
<key code="72" output="&#x001F;"/> <key code="72" output="="/>
<key code="75" output="/"/> <key code="75" output="/"/>
<key code="76" output="&#x0003;"/> <key code="76" output="&#x0003;"/>
<key code="77" output="&#x001E;"/> <key code="77" output="/"/>
<key code="78" output="-"/> <key code="78" output="-"/>
<key code="79" output="&#x0010;"/> <key code="79" output="&#x0010;"/>
<key code="80" output="&#x0010;"/> <key code="80" output="&#x0010;"/>
@@ -1340,6 +1341,7 @@
</action> </action>
<action id="S"> <action id="S">
<when state="none" output="S"/> <when state="none" output="S"/>
<when state="⌥\" output="±"/>
<when state="⌥6" output="Ŝ"/> <when state="⌥6" output="Ŝ"/>
<when state="⌥'" output="Ś"/> <when state="⌥'" output="Ś"/>
<when state="⌥⇧6" output="Š"/> <when state="⌥⇧6" output="Š"/>
@@ -1578,6 +1580,7 @@
</action> </action>
<action id="s"> <action id="s">
<when state="none" output="s"/> <when state="none" output="s"/>
<when state="⌥\" output="§"/>
<when state="⌥6" output="ŝ"/> <when state="⌥6" output="ŝ"/>
<when state="⌥'" output="ś"/> <when state="⌥'" output="ś"/>
<when state="⌥⇧6" output="š"/> <when state="⌥⇧6" output="š"/>

View File

@@ -277,7 +277,7 @@
<key code="7" action="X"/> <key code="7" action="X"/>
<key code="8" action="C"/> <key code="8" action="C"/>
<key code="9" action="V"/> <key code="9" action="V"/>
<key code="10" output="§"/> <key code="10" output="±"/>
<key code="11" action="B"/> <key code="11" action="B"/>
<key code="12" action="Q"/> <key code="12" action="Q"/>
<key code="13" action="W"/> <key code="13" action="W"/>
@@ -285,53 +285,53 @@
<key code="15" action="R"/> <key code="15" action="R"/>
<key code="16" action="Y"/> <key code="16" action="Y"/>
<key code="17" action="T"/> <key code="17" action="T"/>
<key code="18" action="1"/> <key code="18" action="!"/>
<key code="19" action="2"/> <key code="19" action="@"/>
<key code="20" action="3"/> <key code="20" action="#"/>
<key code="21" action="4"/> <key code="21" action="$"/>
<key code="22" action="6"/> <key code="22" action="^"/>
<key code="23" action="5"/> <key code="23" action="%"/>
<key code="24" action="="/> <key code="24" action="+"/>
<key code="25" action="9"/> <key code="25" action="("/>
<key code="26" action="7"/> <key code="26" action="&#x0026;"/>
<key code="27" action="-"/> <key code="27" action="_"/>
<key code="28" action="8"/> <key code="28" action="*"/>
<key code="29" action="0"/> <key code="29" action=")"/>
<key code="30" output="]"/> <key code="30" action="}"/>
<key code="31" action="O"/> <key code="31" action="O"/>
<key code="32" action="U"/> <key code="32" action="U"/>
<key code="33" output="["/> <key code="33" action="{"/>
<key code="34" action="I"/> <key code="34" action="I"/>
<key code="35" action="P"/> <key code="35" action="P"/>
<key code="36" output="&#x000D;"/> <key code="36" output="&#x000D;"/>
<key code="37" action="L"/> <key code="37" action="L"/>
<key code="38" action="J"/> <key code="38" action="J"/>
<key code="39" output="&#x0027;"/> <key code="39" action="&#x0022;"/>
<key code="40" action="K"/> <key code="40" action="K"/>
<key code="41" output=";"/> <key code="41" action=":"/>
<key code="42" output="\"/> <key code="42" action="|"/>
<key code="43" output=","/> <key code="43" action="&#x003C;"/>
<key code="44" output="/"/> <key code="44" output="?"/>
<key code="45" action="N"/> <key code="45" action="N"/>
<key code="46" action="M"/> <key code="46" action="M"/>
<key code="47" output="."/> <key code="47" action="&#x003E;"/>
<key code="48" output="&#x0009;"/> <key code="48" output="&#x0009;"/>
<key code="49" action="space"/> <key code="49" action="space"/>
<key code="50" output="`"/> <key code="50" action="~"/>
<key code="51" output="&#x0008;"/> <key code="51" output="&#x0008;"/>
<key code="52" output="&#x0003;"/> <key code="52" output="&#x0003;"/>
<key code="53" output="&#x001B;"/> <key code="53" output="&#x001B;"/>
<key code="64" output="&#x0010;"/> <key code="64" output="&#x0010;"/>
<key code="65" output="."/> <key code="65" output="."/>
<key code="66" output="&#x001D;"/> <key code="66" output="*"/>
<key code="67" output="*"/> <key code="67" output="*"/>
<key code="69" output="+"/> <key code="69" output="+"/>
<key code="70" output="&#x001C;"/> <key code="70" output="+"/>
<key code="71" output="&#x001B;"/> <key code="71" output="&#x001B;"/>
<key code="72" output="&#x001F;"/> <key code="72" output="="/>
<key code="75" output="/"/> <key code="75" output="/"/>
<key code="76" output="&#x0003;"/> <key code="76" output="&#x0003;"/>
<key code="77" output="&#x001E;"/> <key code="77" output="/"/>
<key code="78" output="-"/> <key code="78" output="-"/>
<key code="79" output="&#x0010;"/> <key code="79" output="&#x0010;"/>
<key code="80" output="&#x0010;"/> <key code="80" output="&#x0010;"/>
@@ -603,9 +603,9 @@
<key code="126" output="&#x001E;"/> <key code="126" output="&#x001E;"/>
</keyMap> </keyMap>
<keyMap index="5"> <keyMap index="5">
<key code="0" output="Ä"/> <key code="0" action="Ä"/>
<key code="1" output="ß"/> <key code="1" output="§"/>
<key code="2" output="Ð"/> <key code="2" output="Đ"/>
<key code="3" output="È"/> <key code="3" output="È"/>
<key code="4" output="Ù"/> <key code="4" output="Ù"/>
<key code="5" output="É"/> <key code="5" output="É"/>
@@ -613,61 +613,61 @@
<key code="7" output="Á"/> <key code="7" output="Á"/>
<key code="8" output="Ç"/> <key code="8" output="Ç"/>
<key code="9" output="Ì"/> <key code="9" output="Ì"/>
<key code="10" output="§"/> <key code="10" output="±"/>
<key code="11" output="Í"/> <key code="11" output="Í"/>
<key code="12" action="Æ"/> <key code="12" action="Æ"/>
<key code="13" output="Å"/> <key code="13" output="Å"/>
<key code="14" output="Ë"/> <key code="14" action="Ë"/>
<key code="15" output="Ý"/> <key code="15" output="Ý"/>
<key code="16" output="Ÿ"/> <key code="16" output="Ÿ"/>
<key code="17" output="Þ"/> <key code="17" output="Þ"/>
<key code="18" output="¡"/> <key code="18" output="¹"/>
<key code="19" output="ª"/> <key code="19" output="²"/>
<key code="20" output="º"/> <key code="20" output="³"/>
<key code="21" output="£"/> <key code="21" output="¥"/>
<key code="22" action="^"/> <key code="22" action="ˇ"/>
<key code="23" output=""/> <key code="23" output="¢"/>
<key code="24" output="×"/> <key code="24" output="÷"/>
<key code="25" output=""/> <key code="25" output=""/>
<key code="26" action="˚"/> <key code="26" action="¯"/>
<key code="27" action="©"/> <key code="27" output=""/>
<key code="28" output=""/> <key code="28" output=""/>
<key code="29" output=""/> <key code="29" output=""/>
<key code="30" output="»"/> <key code="30" output=""/>
<key code="31" output="Ö"/> <key code="31" action="Ö"/>
<key code="32" output="Ü"/> <key code="32" action="Ü"/>
<key code="33" output="«"/> <key code="33" output=""/>
<key code="34" output="Ï"/> <key code="34" action="Ï"/>
<key code="35" output="Œ"/> <key code="35" output="Œ"/>
<key code="36" output="&#x000D;"/> <key code="36" output="&#x000D;"/>
<key code="37" action="Ø"/> <key code="37" action="Ø"/>
<key code="38" output="Ú"/> <key code="38" output="Ú"/>
<key code="39" action="´"/> <key code="39" action="¨"/>
<key code="40" output="IJ"/> <key code="40" output="IJ"/>
<key code="41" action="¨"/> <key code="41" output="·"/>
<key code="42" output="¬"/> <key code="42" output="¦"/>
<key code="43" output="Ò"/> <key code="43" output="Ò"/>
<key code="44" output="¿"/> <key code="44" output=""/>
<key code="45" output="Ñ"/> <key code="45" output="Ñ"/>
<key code="46" action="Ω"/> <key code="46" action=""/>
<key code="47" output="Ó"/> <key code="47" output="Ó"/>
<key code="48" output="&#x0009;"/> <key code="48" output="&#x0009;"/>
<key code="49" output=" "/> <key code="49" output=" "/>
<key code="50" action="`"/> <key code="50" action="~ option"/>
<key code="51" output="&#x0008;"/> <key code="51" output="&#x0008;"/>
<key code="52" output="&#x0003;"/> <key code="52" output="&#x0003;"/>
<key code="53" output="&#x001B;"/> <key code="53" output="&#x001B;"/>
<key code="64" output="&#x0010;"/> <key code="64" output="&#x0010;"/>
<key code="65" output=","/> <key code="65" output="."/>
<key code="66" output="&#x001D;"/> <key code="66" output="*"/>
<key code="67" output="*"/> <key code="67" output="*"/>
<key code="69" output="+"/> <key code="69" output="+"/>
<key code="70" output="&#x001C;"/> <key code="70" output="+"/>
<key code="71" output="&#x001B;"/> <key code="71" output="&#x001B;"/>
<key code="72" output="&#x001F;"/> <key code="72" output="="/>
<key code="75" output="/"/> <key code="75" output="/"/>
<key code="76" output="&#x0003;"/> <key code="76" output="&#x0003;"/>
<key code="77" output="&#x001E;"/> <key code="77" output="/"/>
<key code="78" output="-"/> <key code="78" output="-"/>
<key code="79" output="&#x0010;"/> <key code="79" output="&#x0010;"/>
<key code="80" output="&#x0010;"/> <key code="80" output="&#x0010;"/>

View File

@@ -277,7 +277,7 @@
<key code="7" action="X"/> <key code="7" action="X"/>
<key code="8" action="C"/> <key code="8" action="C"/>
<key code="9" action="V"/> <key code="9" action="V"/>
<key code="10" output="§"/> <key code="10" output="±"/>
<key code="11" action="B"/> <key code="11" action="B"/>
<key code="12" action="Q"/> <key code="12" action="Q"/>
<key code="13" action="W"/> <key code="13" action="W"/>
@@ -285,53 +285,53 @@
<key code="15" action="R"/> <key code="15" action="R"/>
<key code="16" action="Y"/> <key code="16" action="Y"/>
<key code="17" action="T"/> <key code="17" action="T"/>
<key code="18" action="1"/> <key code="18" action="!"/>
<key code="19" action="2"/> <key code="19" action="@"/>
<key code="20" action="3"/> <key code="20" action="#"/>
<key code="21" action="4"/> <key code="21" action="$"/>
<key code="22" action="6"/> <key code="22" action="^"/>
<key code="23" action="5"/> <key code="23" action="%"/>
<key code="24" action="="/> <key code="24" action="+"/>
<key code="25" action="9"/> <key code="25" action="("/>
<key code="26" action="7"/> <key code="26" action="&#x0026;"/>
<key code="27" action="-"/> <key code="27" action="_"/>
<key code="28" action="8"/> <key code="28" action="*"/>
<key code="29" action="0"/> <key code="29" action=")"/>
<key code="30" output="]"/> <key code="30" action="}"/>
<key code="31" action="O"/> <key code="31" action="O"/>
<key code="32" action="U"/> <key code="32" action="U"/>
<key code="33" output="["/> <key code="33" action="{"/>
<key code="34" action="I"/> <key code="34" action="I"/>
<key code="35" action="P"/> <key code="35" action="P"/>
<key code="36" output="&#x000D;"/> <key code="36" output="&#x000D;"/>
<key code="37" action="L"/> <key code="37" action="L"/>
<key code="38" action="J"/> <key code="38" action="J"/>
<key code="39" output="&#x0027;"/> <key code="39" action="&#x0022;"/>
<key code="40" action="K"/> <key code="40" action="K"/>
<key code="41" output=";"/> <key code="41" action=":"/>
<key code="42" output="\"/> <key code="42" action="|"/>
<key code="43" output=","/> <key code="43" action="&#x003C;"/>
<key code="44" output="/"/> <key code="44" output="?"/>
<key code="45" action="N"/> <key code="45" action="N"/>
<key code="46" action="M"/> <key code="46" action="M"/>
<key code="47" output="."/> <key code="47" action="&#x003E;"/>
<key code="48" output="&#x0009;"/> <key code="48" output="&#x0009;"/>
<key code="49" action="space"/> <key code="49" action="space"/>
<key code="50" output="`"/> <key code="50" action="~"/>
<key code="51" output="&#x0008;"/> <key code="51" output="&#x0008;"/>
<key code="52" output="&#x0003;"/> <key code="52" output="&#x0003;"/>
<key code="53" output="&#x001B;"/> <key code="53" output="&#x001B;"/>
<key code="64" output="&#x0010;"/> <key code="64" output="&#x0010;"/>
<key code="65" output="."/> <key code="65" output="."/>
<key code="66" output="&#x001D;"/> <key code="66" output="*"/>
<key code="67" output="*"/> <key code="67" output="*"/>
<key code="69" output="+"/> <key code="69" output="+"/>
<key code="70" output="&#x001C;"/> <key code="70" output="+"/>
<key code="71" output="&#x001B;"/> <key code="71" output="&#x001B;"/>
<key code="72" output="&#x001F;"/> <key code="72" output="="/>
<key code="75" output="/"/> <key code="75" output="/"/>
<key code="76" output="&#x0003;"/> <key code="76" output="&#x0003;"/>
<key code="77" output="&#x001E;"/> <key code="77" output="/"/>
<key code="78" output="-"/> <key code="78" output="-"/>
<key code="79" output="&#x0010;"/> <key code="79" output="&#x0010;"/>
<key code="80" output="&#x0010;"/> <key code="80" output="&#x0010;"/>
@@ -603,9 +603,9 @@
<key code="126" output="&#x001E;"/> <key code="126" output="&#x001E;"/>
</keyMap> </keyMap>
<keyMap index="5"> <keyMap index="5">
<key code="0" output="Ä"/> <key code="0" action="Ä"/>
<key code="1" output="ß"/> <key code="1" output=""/>
<key code="2" output="Ð"/> <key code="2" output="Đ"/>
<key code="3" output="È"/> <key code="3" output="È"/>
<key code="4" output="Ù"/> <key code="4" output="Ù"/>
<key code="5" output="É"/> <key code="5" output="É"/>
@@ -613,61 +613,61 @@
<key code="7" output="Á"/> <key code="7" output="Á"/>
<key code="8" output="Ç"/> <key code="8" output="Ç"/>
<key code="9" output="Ì"/> <key code="9" output="Ì"/>
<key code="10" output="§"/> <key code="10" output="±"/>
<key code="11" output="Í"/> <key code="11" output="Í"/>
<key code="12" action="Æ"/> <key code="12" action="Æ"/>
<key code="13" output="Å"/> <key code="13" output="Å"/>
<key code="14" output="Ë"/> <key code="14" action="Ë"/>
<key code="15" output="Ý"/> <key code="15" output="Ý"/>
<key code="16" output="Ÿ"/> <key code="16" output="Ÿ"/>
<key code="17" output="Þ"/> <key code="17" output="Þ"/>
<key code="18" output="¡"/> <key code="18" output="¹"/>
<key code="19" output="ª"/> <key code="19" output="²"/>
<key code="20" output="º"/> <key code="20" output="³"/>
<key code="21" output="£"/> <key code="21" output="¥"/>
<key code="22" action="^"/> <key code="22" action="ˇ"/>
<key code="23" output=""/> <key code="23" output="¢"/>
<key code="24" output="×"/> <key code="24" output="÷"/>
<key code="25" output=""/> <key code="25" output=""/>
<key code="26" action="˚"/> <key code="26" action="¯"/>
<key code="27" action="©"/> <key code="27" output=""/>
<key code="28" output=""/> <key code="28" output=""/>
<key code="29" output=""/> <key code="29" output=""/>
<key code="30" output="»"/> <key code="30" output=""/>
<key code="31" output="Ö"/> <key code="31" action="Ö"/>
<key code="32" output="Ü"/> <key code="32" action="Ü"/>
<key code="33" output="«"/> <key code="33" output=""/>
<key code="34" output="Ï"/> <key code="34" action="Ï"/>
<key code="35" output="Œ"/> <key code="35" output="Œ"/>
<key code="36" output="&#x000D;"/> <key code="36" output="&#x000D;"/>
<key code="37" action="Ø"/> <key code="37" action="Ø"/>
<key code="38" output="Ú"/> <key code="38" output="Ú"/>
<key code="39" action="´"/> <key code="39" action="¨"/>
<key code="40" output="IJ"/> <key code="40" output="IJ"/>
<key code="41" action="¨"/> <key code="41" output="·"/>
<key code="42" output="¬"/> <key code="42" output="¦"/>
<key code="43" output="Ò"/> <key code="43" output="Ò"/>
<key code="44" output="¿"/> <key code="44" output=""/>
<key code="45" output="Ñ"/> <key code="45" output="Ñ"/>
<key code="46" action="Ω"/> <key code="46" action=""/>
<key code="47" output="Ó"/> <key code="47" output="Ó"/>
<key code="48" output="&#x0009;"/> <key code="48" output="&#x0009;"/>
<key code="49" output=" "/> <key code="49" output=" "/>
<key code="50" action="`"/> <key code="50" action="~ option"/>
<key code="51" output="&#x0008;"/> <key code="51" output="&#x0008;"/>
<key code="52" output="&#x0003;"/> <key code="52" output="&#x0003;"/>
<key code="53" output="&#x001B;"/> <key code="53" output="&#x001B;"/>
<key code="64" output="&#x0010;"/> <key code="64" output="&#x0010;"/>
<key code="65" output=","/> <key code="65" output="."/>
<key code="66" output="&#x001D;"/> <key code="66" output="*"/>
<key code="67" output="*"/> <key code="67" output="*"/>
<key code="69" output="+"/> <key code="69" output="+"/>
<key code="70" output="&#x001C;"/> <key code="70" output="+"/>
<key code="71" output="&#x001B;"/> <key code="71" output="&#x001B;"/>
<key code="72" output="&#x001F;"/> <key code="72" output="="/>
<key code="75" output="/"/> <key code="75" output="/"/>
<key code="76" output="&#x0003;"/> <key code="76" output="&#x0003;"/>
<key code="77" output="&#x001E;"/> <key code="77" output="/"/>
<key code="78" output="-"/> <key code="78" output="-"/>
<key code="79" output="&#x0010;"/> <key code="79" output="&#x0010;"/>
<key code="80" output="&#x0010;"/> <key code="80" output="&#x0010;"/>

View File

@@ -284,7 +284,7 @@
<key code="7" action="a53"/> <key code="7" action="a53"/>
<key code="8" action="a32"/> <key code="8" action="a32"/>
<key code="9" action="a51"/> <key code="9" action="a51"/>
<key code="10" output=""/> <key code="10" output="±"/>
<key code="11" action="a31"/> <key code="11" action="a31"/>
<key code="12" action="a46"/> <key code="12" action="a46"/>
<key code="13" action="a52"/> <key code="13" action="a52"/>
@@ -292,53 +292,53 @@
<key code="15" action="a47"/> <key code="15" action="a47"/>
<key code="16" action="a54"/> <key code="16" action="a54"/>
<key code="17" action="a49"/> <key code="17" action="a49"/>
<key code="18" action="a14"/> <key code="18" action="a0"/>
<key code="19" action="a15"/> <key code="19" action="a29"/>
<key code="20" action="a16"/> <key code="20" action="a2"/>
<key code="21" action="a17"/> <key code="21" action="a3"/>
<key code="22" action="a19"/> <key code="22" action="a58"/>
<key code="23" action="a18"/> <key code="23" action="a4"/>
<key code="24" action="a27"/> <key code="24" action="a10"/>
<key code="25" action="a23"/> <key code="25" action="a7"/>
<key code="26" action="a21"/> <key code="26" action="a5"/>
<key code="27" action="a11"/> <key code="27" action="a59"/>
<key code="28" action="a22"/> <key code="28" action="a9"/>
<key code="29" action="a13"/> <key code="29" action="a8"/>
<key code="30" output="]"/> <key code="30" action="a90"/>
<key code="31" action="a44"/> <key code="31" action="a44"/>
<key code="32" action="a50"/> <key code="32" action="a50"/>
<key code="33" output="["/> <key code="33" action="a88"/>
<key code="34" action="a38"/> <key code="34" action="a38"/>
<key code="35" action="a45"/> <key code="35" action="a45"/>
<key code="36" output="&#x000D;"/> <key code="36" output="&#x000D;"/>
<key code="37" action="a41"/> <key code="37" action="a41"/>
<key code="38" action="a39"/> <key code="38" action="a39"/>
<key code="39" output="&#x0027;"/> <key code="39" action="a1"/>
<key code="40" action="a40"/> <key code="40" action="a40"/>
<key code="41" output=";"/> <key code="41" action="a24"/>
<key code="42" output="\"/> <key code="42" action="a89"/>
<key code="43" output=","/> <key code="43" action="a26"/>
<key code="44" output="/"/> <key code="44" output="?"/>
<key code="45" action="a43"/> <key code="45" action="a43"/>
<key code="46" action="a42"/> <key code="46" action="a42"/>
<key code="47" output="."/> <key code="47" action="a28"/>
<key code="48" output="&#x0009;"/> <key code="48" output="&#x0009;"/>
<key code="49" action="a80"/> <key code="49" action="a80"/>
<key code="50" output="`"/> <key code="50" action="a91"/>
<key code="51" output="&#x0008;"/> <key code="51" output="&#x0008;"/>
<key code="52" output="&#x0003;"/> <key code="52" output="&#x0003;"/>
<key code="53" output="&#x001B;"/> <key code="53" output="&#x001B;"/>
<key code="64" output="&#x0010;"/> <key code="64" output="&#x0010;"/>
<key code="65" output="."/> <key code="65" output="."/>
<key code="66" output="&#x001D;"/> <key code="66" output="*"/>
<key code="67" output="*"/> <key code="67" output="*"/>
<key code="69" output="+"/> <key code="69" output="+"/>
<key code="70" output="&#x001C;"/> <key code="70" output="+"/>
<key code="71" output="&#x001B;"/> <key code="71" output="&#x001B;"/>
<key code="72" output="&#x001F;"/> <key code="72" output="="/>
<key code="75" output="/"/> <key code="75" output="/"/>
<key code="76" output="&#x0003;"/> <key code="76" output="&#x0003;"/>
<key code="77" output="&#x001E;"/> <key code="77" output="/"/>
<key code="78" output="-"/> <key code="78" output="-"/>
<key code="79" output="&#x0010;"/> <key code="79" output="&#x0010;"/>
<key code="80" output="&#x0010;"/> <key code="80" output="&#x0010;"/>
@@ -610,9 +610,9 @@
<key code="126" output="&#x001E;"/> <key code="126" output="&#x001E;"/>
</keyMap> </keyMap>
<keyMap index="5"> <keyMap index="5">
<key code="0" output="Ä"/> <key code="0" action="a97"/>
<key code="1" output="ß"/> <key code="1" output=""/>
<key code="2" output="Ð"/> <key code="2" output="Đ"/>
<key code="3" output="È"/> <key code="3" output="È"/>
<key code="4" output="Ù"/> <key code="4" output="Ù"/>
<key code="5" output="É"/> <key code="5" output="É"/>
@@ -620,60 +620,61 @@
<key code="7" output="Á"/> <key code="7" output="Á"/>
<key code="8" output="Ç"/> <key code="8" output="Ç"/>
<key code="9" output="Ì"/> <key code="9" output="Ì"/>
<key code="10" output=""/> <key code="10" output="±"/>
<key code="11" output="Í"/> <key code="11" output="Í"/>
<key code="12" action="a98"/> <key code="12" action="a98"/>
<key code="13" output="Å"/> <key code="13" output="Å"/>
<key code="14" output="Ë"/> <key code="14" action="a99"/>
<key code="15" output="Ý"/> <key code="15" output="Ý"/>
<key code="16" output="Ÿ"/> <key code="16" output="Ÿ"/>
<key code="17" output="Þ"/> <key code="17" output="Þ"/>
<key code="18" output="¡"/> <key code="18" output="¹"/>
<key code="19" output="ª"/> <key code="19" output="²"/>
<key code="20" output="º"/> <key code="20" output="³"/>
<key code="21" output="£"/> <key code="21" output="¥"/>
<key code="22" action="a58"/> <key code="22" action="a111"/>
<key code="23" output=""/> <key code="23" output="¢"/>
<key code="24" output="×"/> <key code="24" output="÷"/>
<key code="25" output=""/> <key code="25" output=""/>
<key code="26" action="a112"/> <key code="26" action="a95"/>
<key code="28" output=""/> <key code="27" output=""/>
<key code="29" output=""/> <key code="28" output=""/>
<key code="30" output="»"/> <key code="29" output=""/>
<key code="31" output="Ö"/> <key code="30" output=""/>
<key code="32" output="Ü"/> <key code="31" action="a101"/>
<key code="33" output="«"/> <key code="32" action="a103"/>
<key code="34" output="Ï"/> <key code="33" output=""/>
<key code="34" action="a100"/>
<key code="35" output="Œ"/> <key code="35" output="Œ"/>
<key code="36" output="&#x000D;"/> <key code="36" output="&#x000D;"/>
<key code="37" action="a102"/> <key code="37" action="a102"/>
<key code="38" output="Ú"/> <key code="38" output="Ú"/>
<key code="39" action="a96"/> <key code="39" action="a93"/>
<key code="40" output="IJ"/> <key code="40" output="IJ"/>
<key code="41" action="a93"/> <key code="41" output="·"/>
<key code="42" output="¬"/> <key code="42" output="¦"/>
<key code="43" output="Ò"/> <key code="43" output="Ò"/>
<key code="44" output="¿"/> <key code="44" output=""/>
<key code="45" output="Ñ"/> <key code="45" output="Ñ"/>
<key code="46" action="a113"/> <key code="46" action="a114"/>
<key code="47" output="Ó"/> <key code="47" output="Ó"/>
<key code="48" output="&#x0009;"/> <key code="48" output="&#x0009;"/>
<key code="49" output=" "/> <key code="49" output=" "/>
<key code="50" action="a60"/> <key code="50" action="a92"/>
<key code="51" output="&#x0008;"/> <key code="51" output="&#x0008;"/>
<key code="52" output="&#x0003;"/> <key code="52" output="&#x0003;"/>
<key code="53" output="&#x001B;"/> <key code="53" output="&#x001B;"/>
<key code="64" output="&#x0010;"/> <key code="64" output="&#x0010;"/>
<key code="65" output=","/> <key code="65" output="."/>
<key code="66" output="&#x001D;"/> <key code="66" output="*"/>
<key code="67" output="*"/> <key code="67" output="*"/>
<key code="69" output="+"/> <key code="69" output="+"/>
<key code="70" output="&#x001C;"/> <key code="70" output="+"/>
<key code="71" output="&#x001B;"/> <key code="71" output="&#x001B;"/>
<key code="72" output="&#x001F;"/> <key code="72" output="="/>
<key code="75" output="/"/> <key code="75" output="/"/>
<key code="76" output="&#x0003;"/> <key code="76" output="&#x0003;"/>
<key code="77" output="&#x001E;"/> <key code="77" output="/"/>
<key code="78" output="-"/> <key code="78" output="-"/>
<key code="79" output="&#x0010;"/> <key code="79" output="&#x0010;"/>
<key code="80" output="&#x0010;"/> <key code="80" output="&#x0010;"/>
@@ -743,7 +744,7 @@
<key code="19" output="™"/> <key code="19" output="™"/>
<key code="20" output="£"/> <key code="20" output="£"/>
<key code="21" output="¢"/> <key code="21" output="¢"/>
<key code="22" output=""/> <key code="22" output="§"/>
<key code="23" output="∞"/> <key code="23" output="∞"/>
<key code="24" output="≠"/> <key code="24" output="≠"/>
<key code="25" output="ª"/> <key code="25" output="ª"/>

Binary file not shown.

Binary file not shown.

Binary file not shown.