clicking a dead key or pressing its key combo (e.g. Option+M) now
shows compositions directly on the keyboard. keys with compositions
are highlighted, others dimmed. spacebar shows catchy group name.
click the active dead key again or press Escape to exit. add helper
text beneath keyboard explaining viewer interaction.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
add actions/setup-python for fpdf2 dependency (PEP 668 blocks bare
pip install on macOS runners). run bundle build before validation
so keylayout files exist when validator runs.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
remove hero section, add download button in nav, version-aware PDF
download button. rename section title. rebuild ISO enter as single
tall key spanning from row 3 upward. rebuild PDF generator: match
viewer layout (ISO enter, fn key, correct sizes, arrow cluster,
symbol labels), larger fonts, bold modifier labels. dead key pages
now render full keyboards with base/shift compositions, catchy group
names matched by terminator character.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
interactive layout viewer with version tabs, modifier key highlighting,
dead key compositions, ISO enter spanning two rows, arrow cluster.
fix keylayout parser mapSet range handling, update PDF build scripts,
move eurkey-layout-complete.pdf to spec/.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- add scripts/generate_layout_pdf.py (requires fpdf2)
- generates ISO keyboard diagrams with Base, Shift, Option, Shift+Option
layers per key, plus dead key composition tables
- output: docs/eurkey-{version}-layout.pdf for v1.2, v1.3, v1.4, v2.0
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- change Greek dead key terminator from Ω to α in all layout versions,
matching the official EurKEY spec (closes#11)
- change dead key state name from "dead: Ω" to "dead: α" in v1.2/v1.3
- enable TICapsLockLanguageSwitchCapable in build script (closes#8)
- fix parser to resolve all key codes from base keyMapSets, not just
codes in explicit layout entry ranges
- add per-version exceptions for newly-discovered v1.2/v1.4 differences
- add Karabiner-Elements docs section, known issues section to README
- add Windows spec installers for reference
- regenerate all parsed JSON specs with fixed parser
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- build-bundle.sh: regenerates Info.plist with KLInfo entries for all 4
layout versions, sets CalVer bundle version, validates plists
- create-dmg.sh: packages bundle into a DMG with drag-and-drop symlink
to /Library/Keyboard Layouts/
- release.yml: GitHub Actions workflow that validates, builds, creates DMG,
publishes GitHub Release on CalVer tag push
- validate.yml: CI validation on push/PR for layout and script changes
- Info.plist now declares all 4 layouts (was only v2.0)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- add keylayout XML parser (parse_keylayout.py) that extracts all key
mappings, dead key compositions, modifier layers from .keylayout files
- add validation script (validate_layouts.py) that compares layouts against
v1.3 reference with per-version exception support
- fix action id="6" outputting "p" instead of "6" in v1.3
- generate reference JSON for all 4 layout versions
- document known intentional differences: v1.2 (no ¬ dead key, § vs ẞ),
v1.4 (ẞ on §/` caps, extra ¬ composition)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>