From eae7638c1b14ca22e8744ac1d0f77874d875650c Mon Sep 17 00:00:00 2001
From: DreymaR <7303297+DreymaR@users.noreply.github.com>
Date: Wed, 12 Oct 2022 16:26:05 +0200
Subject: [PATCH] v1-4-0 Better key mapping. CoDeKey.
* A better Send method for key mapping, compatible with key repetition
* ScanCode key mapping, sometimes more robust than VKey mapping
* CoDeKey: Dual-function Compose+Dead key
* Special Keys settings tab on the Layout/Settings menu
---
README.md | 6 +-
Source/EPKL_Source/README.md | 466 ++++++++++++++++++++++++
Source/EPKL_Source/_PKL_main.ahk | 87 -----
Source/Extras/README.md | 102 ++++++
Source/README.md | 584 ++-----------------------------
5 files changed, 598 insertions(+), 647 deletions(-)
create mode 100644 Source/Extras/README.md
diff --git a/README.md b/README.md
index c02cd272..36d19369 100644
--- a/README.md
+++ b/README.md
@@ -422,7 +422,7 @@ KNOWN ISSUES:
DONE/TODO:
----------
-For more info about past and future EPKL history, see the **[EPKL Advanced README][PklSrc]** in the Source folder.
+For more info about past and future EPKL history, see the **[EPKL Advanced README][PklSrc]** in the EPKL_Source folder.
Credits/sources
@@ -450,6 +450,8 @@ _Øystein "DreymaR" Bech-Aase_
[PrtApp]: https://portableapps.com/ (PortableApps.com)
[SCMSDN]: https://msdn.microsoft.com/en-us/library/aa299374(v=vs.60).aspx (Scan code list at MSDN)
[VKCAHK]: https://autohotkey.com/docs/KeyList.htm (Virtual key list in the AHK docs)
+[ISOANS]: https://deskthority.net/wiki/ANSI_vs_ISO (Deskthority on ANSI vs ISO keyboard models)
+[Cmk-DH]: https://colemakmods.github.io/mod-dh/ (The ColemakMods Mod-DH project on the Colemak-DH layout)
[EPKLgh]: https://github.com/DreymaR/BigBagKbdTrixPKL/ (EPKL on GitHub)
[GitRel]: https://github.com/DreymaR/BigBagKbdTrixPKL/releases/latest (Latest EPKL release)
[GitCom]: https://github.com/DreymaR/BigBagKbdTrixPKL/archive/master.zip (Latest EPKL commit download)
@@ -468,5 +470,3 @@ _Øystein "DreymaR" Bech-Aase_
[MapIni]: ./Files/_eD_Remap.ini (EPKL Remap file)
[DKsIni]: ./Files/_eD_DeadKeys.ini (EPKL DeadKeys file)
[CmpIni]: ./Files/_eD_Compose.ini (EPKL Compose file)
-[ISOANS]: https://deskthority.net/wiki/ANSI_vs_ISO (Deskthority on ANSI vs ISO keyboard models)
-[Cmk-DH]: https://colemakmods.github.io/mod-dh/ (The ColemakMods Mod-DH project on the Colemak-DH layout)
diff --git a/Source/EPKL_Source/README.md b/Source/EPKL_Source/README.md
index 9df32632..8a39343a 100644
--- a/Source/EPKL_Source/README.md
+++ b/Source/EPKL_Source/README.md
@@ -10,3 +10,469 @@ EPiKaL Portable Keyboard Layout by Máté Farkas & DreymaR
(c) PKL: Máté Farkas , 2007-2010
(c) EPKL: Øystein Bech "DreymaR" Gadmar , 2015-2021
(c) EPKL: Øystein "DreymaR" Bech-Aase , 2021-
+
+
+EPKL TODO:
+----------
+* A "janitor" timer that checks whether the underlying Windows layout has changed (affects dead keys)
+* Generic dual-role keys and/or modifiers. For instance, home row keys might act as modifiers when held and letters when tapped.
+* An import module for MSKLC layout files and other formats.
+* Dead key chaining, allowing one DK to release another.
+ - EPKL allows the @## syntax but it doesn't work as it should yet. Because it resets PVDK?
+ - Chainable dead keys would allow a true Mother-of-DKs for Compose-like "tap dance" sequences like {MoDK,t,n}->ñ.
+* Rework the AltGr code. Check whether Ralt (SC138 without LCtrl) will be AltGr consistently in layouts with state 6-7.
+* Add to unmapped dead key functionality
+ - Specify release for unmapped sequences. Today's practice of leaving an accent then the next character is often bad?
+ - That way, one could for instance use the Vietnamese Telex method with aou dead keys (aw ow uw make â ô ư) etc.
+ - One catch would be that the dead key wouldn't release until next key press, but that may be acceptable.
+ - Specify, e.g., the entry for s1 similar to today's s0 entry. (U+0000–U+001F are just ‹control› chars.)
+ - That'd be backwards compatible with existing PKL tables, and one can choose behavior.
+* Truly transparent image background without the image frame. Overall transparency (but not transparent color?) works.
+ - Transparent foreground images for all states and dead keys.
+* More dead key mappings:
+ - Greek polytonic accents? Need nestable accents, e.g., iota with diaeresis and tonos. May be done by Compose instead, though.
+ - Kyrillic special letters like ёЁ (for Bulmak) җ ӆ ҭ ң қ ӎ (tailed); see the Rulemak topic.
+ - IPA on AltGr+Shift symbol keys?! A proposed system based on phonetics, having DKs based on position and suchlike.
+ - DKs for vowels rounded/unrounded (near-)front, central, (near-)back. Release w/ I(YU)-E(ØO)-O(Œ)-A(Æ) for close-open, U/Y?/Æ for inbetweens?
+ - For consonants, DKs for (bi-)labial, dental, (post-)alveolar, retroflex, palatal, velar, uvular, pharyngeal/glottal?
+ - Release with the voiced/unvoiced P/B, T/D, M, N, R, F/V, S/H, L. Have to tweak it a little to account for the whole chart.
+ - Also need to provide clicks (! etc), voiced implosives (hooked), ejectives (ʼ), diacritics and others. May sequence DKs for that?
+ - Apart from combining diacritics, IPA needs superscript `ʰ ⁿ ᶿ ᵊ ˡ ˣ ʷ ˠ ˤ ʲ`. The Acute DK should be enough... except it conflicts for nlw.
+
+
+WARNING: HARD HAT AREA!
+=======================
+
+EPiKaL PKL is a Work-In-Progress, so all of it may not be working perfectly ... yet.
+
+This is the EPKL Work-In-Progress README, going into details on the changes. For the normal EPKL README see the main folder.
+
+~ Øystein "DreymaR" Bech-Aase, 2022
+
+
+DONE:
+-----
+**GENERAL/SETTINGS**
+* Renamings and file mergings to make the code more compact and streamlined.
+* Removed MenuIcons and HashTables code, replacing them with AHK v1.1+ native code.
+* Unicode native AHK now works. SendU and changeNonASCIIMode removed.
+* New iniRead functions that support the UTF-8 Unicode file format.
+* Merged several .ini sections including eD specific ones into the default [pkl] as it's tidier.
+* Made a PKL_Tables.ini file for info tables that were formerly internal. This way, the user can make additions as necessary.
+* If using a layout from the command line, the notation "UseLayPos_#" will run layout # in the layout list set in EPKL_Layouts.
+ - This also makes Refresh robust against layout changes in EPKL_Layouts.
+* Base layout: Specify in layout.ini a basis file (layout section only). Just need to list changes in layout.ini now. Nice for variants.
+* Shorthand notation in EPKL .ini layouts, allowing the KbdType/CurlMod/ErgoMod settings to be referred to as @K/@C/@H resp. (@A for all at once).
+* Path shortcut for layout.ini entries, allowing ".\" instead of full path from EPKL root.
+
+
+**MENUS/IMAGES**
+* Edited menus and the About... dialog.
+* Added a KeyHistory shortcut for debugging etc. Make it configurable in EPKL_Settings (eD_DebugInfo).
+* Added a Refresh hotkey. Reruns EPKL in case something got stuck or similar.
+* You can specify in the EPKL_Settings .ini which tray menu item is the default (i.e., activated by double-clicking the tray icon)
+* Would tray menu shortcuts work? E.g., &About. Answer: The menu shows it, but unselectable by key(?).
+
+* Multilayered help images so fingering can be in one image and letters/symbols in another (saves file space, adds options).
+ - Shift/AltGr indicators on separate images in a specified directory instead of in the state#.png (and dk) images.
+ - Allow pushing the help image horizontally if mouse x pos. is in the R/L ~20% zone.
+ - Zoom and Move hotkeys for the help image, cycling between image sizes and positions. Set e.g., imgZoom = 60,100,150 (%) in EPKL_Settings.
+ - Settings in layout.ini: Size/scaling, background/extend images, background color, shift indicator, icons and dead key dirs.
+ - Settings in settings.ini: Overall transparency/opacity, top/bottom gutter distances, horizonal activation zone.
+ - If settings are missing, may default to backgr.png, extend.png, on/off.ico and ModStateImg\ in the layout dir.
+ - Instead of many lines of image sizes, introduced a scaling factor 'img_scale' (in percent).
+* Help Image Generator, using my KLD format in an SVG image template. With search/replace this is turned into a key glyph image.
+ - You'll need an Inkscape (Scalable Vector Graphics program) install. A good option is portable Inkscape from PortableApps.com.
+ - You can choose whether to make shift state images only or a full image set with all shift states for all deadkeys. The latter takes time!
+ - The HIG can be used from the menu when Advanced Mode is set. Its settings file is in Files\ImgGenerator.
+ - In the HIG settings file you can control replacement characters used in a marking layer; anything written to it will show in bold yellow.
+ - The SVG image template file is in the same location. You could use another template and specify it in the HIG settings file.
+ - If you don't want the dead keys marked in yellow for instance, you could save the SVG template with that layer hidden.
+ - You can make full layout images showing keys as well, by combining with a Files\ImgBackground image of choice. I use the GIMP for that.
+
+
+**MAPPINGS**
+* Updated and added several layouts, including locale and script variants.
+* Removed explicit Cut/Copy/Paste keys (in pkl_keypress.ahk); use +{Del} / ^{Ins} / +{Ins} (or as I have used in my Extend mappings, }^{X/C/V ).
+* Made an _eD_Extend.ini file for Extend mappings that were formerly in pkl.ini (or layout.ini). The old way should still work though.
+* Made Extend substitutes for Launch_Media/Search/App1/App2, as AHK multimedia launcher keys aren't working in Win 10.
+* Scan code modular remapping, making ergo and other variants much easier. Separate key permutation cycles, and remaps combining/translating them.
+ - In layout.ini, specify any remap combinations using the names (and syntax) found in the [Remaps] section of the Remap.ini file.
+ - The _layout remap specifies a full remapping, while the _extend remap is only for those keys you want to move for Extend ("hard" remaps).
+ - Uses my KeyLayoutDefinition (KLD) mapping format.
+ - KLD is good for remaps, but too compact for main layout or Extend definitions. (Besides, Aldo Gunsing has a conversion tool for those.)
+ - Unfortunately though, I can't make that work for the help images directly. New images need to be generated then.
+ - Should I have a cycle merge syntax, e.g., "Angle_ISO105 = TC< |L0LG | ^Angle_ANSI-Z"? Probably unnecessary.
+* Virtual Key remapping, similarly to SC. I'd like to make only ANSI or ISO layouts, and leave the ISO-ANSI VK issue to a simple remap routine.
+* Sensible dead key names for images and entries (e.g., @14 -> tilde) in a central doc that layouts can point to.
+ - Dead key list and file path in layout (but use dk## in the layout itself, for compatibility!)
+ - If no lookup is specified, EPKL defaults to the local file as before
+ - This way, one change in a DK will affect all layouts using that DK
+ - DK images may still be kept in the layout dir (or a subdir to avoid clutter), as they are layout dependent
+ - DK imgs named ‹name›_dk‹#› for state ‹#› (add s6/7 where applicable?!)
+* Greek layout w/ tonos/dialytika in the acute/umlaut dead keys.
+* In the OS deadkey table ([DeadKeysFromLocID] in PKL_Tables.ini) a -2 entry means no dead keys and RAlt may be used as AltGr (CtrlAltlIsAltGr).
+* Special keys such as Back/Del/Esc/F# used to release a dead key's base char and also do their normal action. Now they just cancel the dead key(s).
+* A single layout entry of `VK`/`VKey` or `SC`/`System` will set that key to itself, say, if it was set in the base layout and you don't want it remapped.
+
+
+**OTHER/NOTES**
+* There was a problem with DKs getting stuck after a special entry. Seems this was always the case?! A call to pkl_CheckForDKs( 0 ) somehow prevents it...
+
+
+**PKL[eD] VERSION HISTORY**
+* PKL[eD] v0.4.0: Transition to AHK v1.1
+ - A Refresh menu option with a hotkey (default Ctrl+Shift+5) in case the program hangs up in some way (stuck modifiers etc).
+ - Advanced Mode setting that shows 'AHK key history' and other menu options, plus more info in the About... dialog.
+ - Sensible dead key names for images and entries (e.g., @14 -> tilde) in a central file that layouts can point to.
+ - A PKL_Tables.ini file for info tables that were formerly internal. This way, the user can make additions as necessary.
+* PKL[eD] v0.4.1: Transition to AHK v1.1 Unicode, using native Unicode Send and UTF-8 compatible files. Menu icons.
+ - Array pdics instead of the old HashTable code
+ - A base layout file can be specified, allowing layout.ini to only contain entries that should override the base layout.
+* PKL[eD v0.4.2: Help image layers, opacity, scaling, background color and gutter size settings. Help images can be pushed horizontally too.
+ - Separate help image background/overlay, so keys/fingering, letters/glyphs and Shift/AltGr marks can be in different images.
+* PKL[eD] v0.4.3: Scan and virtual key code modular remapping for layouts and Extend, making ergo and other variants much more accessible.
+ - Ergo and other mods can be played over a few existing base layouts.
+* PKL[eD] v0.4.4: Help Image Generator that uses Inkscape (separate download) to generate a set of help images from the current layout.
+ - A shorthand notation in EPKL_Layouts.ini to specify KbdType (ISO/ANSI), CurlMod and ErgoMod with the layouts.
+* PKL[eD] v0.4.5: Common prefix-entry syntax for keypress/deadkey/extend. Allows, e.g., literal/deadkey release from Extend.
+ - Layouts, Extend and dead keys now support the same prefix-entry syntax, parsing "%$*=@&" as first character specially.
+ - The "&" prefix denotes literals/powerstrings found in a separate file. These may span more than one line.
+ - There's a string file specified in the layout.ini, by default it's Files\_eD_PwrStrings.ini
+ - The ligature name can be any text string. In layout entries, two-digit names are prettiest.
+ - Note that programs handle line breaks differently! In some apps, \r\n is needed but that creates a double break in others.
+ - SendMode can be selected for powerstrings (Input, Message, Paste from Clipboard) in the string file.
+ - To avoid stuck modifiers for long strings, a SendMessage() method was implemented.
+ - More generic dead key output: Same prefix-entry syntax as layout/Extend, parsing "%$*=@&" entries.
+ - Dead key base/release entries can be in 0x#### Unicode format in addition to the old decimal format. For base keys, the syntax must be exact.
+ - Examples: "102 = ƒ" is possible instead of "102 = 402". For a glyph not shown in your font such as Meng, "77 = 0x2C6E" (or 11374 still).
+ - Should be easy to import MSKLC dead key tables of the form '006e 0144 // n -> ń' by script (e.g., RegExp "0x$1 = 0x$2 ; $3")
+* PKL[eD] v0.4.6: The base layout can hold default settings. Layout entries are now any-whitespace delimited.
+ - pklIniRead() can have an altFile, such as "BasIni". For BasIni/LayIni, .\ and ..\ point to their own and mother directories.
+ - Read most layout settings apart from remaps from the base layout if not found in the main layout.
+ - ONHOLD: Look for backup bgImg/extImg/dkImg in BasIni after all? If using an ANS base file for an ISO layout, it looks silly. But better than nothing?
+ - Requiring Tab delimited layout entries was too harsh. Now, any combination of Space/Tab is allowed. For Space, use ={Space}.
+* PKL[eD] v0.4.7: Multi-Extend w/ 4 layers selectable by modifiers+Ext. Extend-tap-release. One-shot Extend layers.
+ - Multi-Extend, allowing one Extend key with 2 modifiers (e.g., RAlt/RShift) to select up to 4 different layers. Ext+Mod{2/3/2+3} -> Ext2/3/4.
+ - Ext2 is a NumPad/nav layer w/ some useful symbols. Ext3/Ext4 are one-shot string layers but mostly to be filled by the user.
+ - Dual-role tap-release Extend key. Works as Back on tap within a certain time and Ext on hold. Set the time to 0 ms to disable it.
+ - ExtReturnTo setting to allow one-shot Extend, e.g., for strings. Can for instance return from Ext3 to Ext1.
+* PKL[eD] v0.4.8: Sticky/One-shot modifiers. Tap the modifier(s), then within a certain time hit the key to modify.
+ - Settings for which keys are OSM and the wait time. Stacking OSMs works (e.g., tap RShift, RCtrl, Left).
+ - NOTE: Mapping LCtrl or RAlt as a Modifier causes trouble w/ AltGr. So they shouldn't be used as sticky mods or w/ Extend if using AltGr.
+ - Powerstrings can have prefix-entry syntax too now. Lets you, e.g., have long AHK command strings referenced by name tags in layouts.
+
+
+**EPKL VERSION HISTORY:**
+* EPKL v1.0.0: Name change to EPiKaL PKL.
+ - Moved ./PKL_eD -> ./Files folder. Languages are now under Files.
+ - Bugfix: A '--' entry in layout.ini didn't overwrite the corresponding BaseLayout.ini entry.
+* EPKL v1.1.0: Some layout format changes. Minor fixes/additions. And kaomoji! d( ^◇^)b
+ - Fixed: DK images were gone due to an error in the EPKL_Settings .ini. DK images also didn't work for some layouts.
+ - Fixed: Sticky/One-Shot mods stayed active when selecting Extend, affecting strings if sent within the OSM timer even when sent with %.
+ - New: A set of 30+ Kaomoji text faces in the Strings Extend3 layer. Help images included. ♪~└[∵┌]└[・▥・]┘[┐∵]┘~♪
+ - New: Hungarian Cmk[eD] locale variant.
+ - New: Zoom and Move hotkeys for the help image, cycling between image sizes and positions. Set e.g., imgZoom = 60,100,150 (%) in EPKL_Settings.
+ - Tutorial on making a layout variant in README. How to make and activate a layout, changing locale, remaps and a keys mappings.
+ - 'Spc' and 'Tab' layout mappings, sending {Blind}{Key}. Makes for compact layout entries for the delimiting whitespace characters.
+ - Direct Extend key mapping, e.g., for CapsLock use 'SC03A = Extend Modifier' instead of the old extend_key setting.
+ - Extend layers can be set as hard/soft in the _Extend file. Soft layers follow mnemonic letter mappings, hard ones are positional (like my Ext1/2).
+ - The Curl(DH) Ext+V may still be mnemonic/soft instead of positional/hard (^V on Ext+D). [v1.1.3: Use `mapSC_extend = V-B,` before AWide/Angle mods.]
+ - BaseLayout files are now at the same tree level as layout folders instead of inside one of them.
+* EPKL v1.1.1: Some format changes. Minor fixes/additions. Tap-or-Mod keys (WIP).
+ - New: Tap-or-Modifier a.k.a. Dual-Role Modifier keys. Work-in-progress, not working well for rapidly typed keys yet.
+ - To make a ToM key, specify its VK layout entry as VK/Mod, where 'Mod' is a modifier name. The rest of the line can be any valid entry.
+ - The Help Image Generator can mark ToM keys (state 0 and 1) with a background symbol.
+ - The Extend key can be set the old way as extend_key in [pkl] (but no layout entry is needed anymore!), as 'Ext Mod' or as ToM, e.g., 'VK/EXT VKey'
+ - Modifiers can be referred to by the first letters of their name so, e.g., 'LS' and 'LSh' both point to LShift. Also, VK or VKey = VirtualKey.
+ - Unicode points can be sent by the ~ prefix; a ~#### entry sends the U+#### character as used in MSKLC file entries.
+ - The shiftStates layout entry is now in the [layouts] section of layout.ini, spaced out so entries have more room and are clearer.
+ - Since Space/Tab are used to delimit layout entries, there are now special '&Spc' and '&Tab' PowerString entries for them.
+ - Dead key abbreviations are now by code point instead of numbered, as in MSKLC. Example: The .klc entry 02c7@ is a caron DK; in EPKL it becomes @2c7.
+ - Added a Compile_EPKL.bat file that compiles the source code by running AHK2Exe with default settings.
+ - Fixed: HIG made a state8 image of semicolons. This was due to the SGCaps states (8:9) being added unnecessarily. (つ_〃*)
+ - Also fixed some minor HIG bugs related to hex dead key values etc.
+* EPKL v1.1.2: Multifunction Tap-or-Mod Extend with dead keys on tap. Janitor inactivity timer.
+ - Dead keys on Extend key tap. Examples: Tap {Extend, n} for parentheses with positioning. {Ext, z/Z} Undo/Redo. {Shift, Ext, letter} for kaomoji.
+ - Sticky Shift works to select Extend dead keys, and stays active. If you want the shift-P kaomoji tap {Shift, Ext} then P quickly. If not, wait.
+ - For InputRaw/Send/AHK/Blind/Unicode/DeadKey/PowerString entry prefixes, both the old %$*=~@& or →§αβ«Ð¶ (AltGr+Shift+ISABUDP) work now.
+ - Direct dead key entries in the format <#> = work too. If the char is an uppercase version, append a plus (<#>+).
+ - "Janitor" inactivity timeout setting (e.g., 2 s) to release any stuck modifiers. These can happen with advanced usage.
+ - IniRead can now handle UTF-8 .ini files (but not UTF-16) allowing Unicode in all entries.
+ - The EPKL.exe binary file is no longer version controlled. It can be compiled using the .bat file but is also provided with each release.
+* EPKL v1.1.3: The LayStack, separating & overriding layout settings. Bugfixes. More kaomoji.
+ - The downloadable release asset .zip file now contains all files needed to run EPKL. No Source/Other/Data nor .bat/.git. files.
+ - The Kaomoji dead key now outshines the Extend layer with a related entry for each shifted letter/symbol, e.g., d( ^◇^)b vs (b ̄◇ ̄)b.
+ - An EPKL_Layouts_Default .ini file has been split off from the EPKL_Settings .ini so the layout definitions have a file of their own.
+ - If present, an EPKL_Layouts_Override.ini file will take precedence. In the future, this may be generated by a GUI panel.
+ - Several mappings and settings common to most layouts are now in the Layouts_Default file. This includes the Extend modifier mapping.
+ - The LayStack [ mainLay, baseLay, LayOver, LayDef ] can be used for most mappings and layout info, including Extend and DeadKey overrides.
+ - Added Layout Type (eD or VK) and Other Mod (e.g., Sym) shortcuts to the Layouts.ini file.
+ - The 'Sym' (;>' />=>- cycles) symbol key rotation mod I'm testing is available as a remap.
+ - The CurlM/DHm variant of the Curl(DH) mod is available through the remap 'Curl-DHmMod'; it isn't available for most premade layouts though.
+ - Added eD/VK Colemak Curl(DHm) only layouts. Used CurlM/DHm here, to support ortho boards. Ortho help images are on the TODO list.
+ - Fixed: The Extend modifier in the BaseLayout didn't work so most layouts didn't get Extend before adding it to their layout.ini manually.
+ - Fixed: From PKL[eD] v0-4-5, DK+Spc didn't release the base accent as Spc was prefixed. Now, (&)Spc and {Space} are turned into a space glyph.
+ - Fixed: Some kaomoji with ^ or ` in them would get confused - (=・ω・^^=)丿 - due to insufficient handling of OS dead keys.
+ - Fixed: Ensured that a quickly used Extend press isn't open for re-use as an Extend tap! Example: Ext+Space, then quickly E.
+ - Fixed: The janitor timer kept resending mod up strokes every # s. Now it's once only after recent keyboard activity.
+ - Minor: Made a bool() fn to use bool(pklIniRead()) instead of a dedicated pklIniBool().
+ - Tested: The LAlt key (SC038) can work as Extend Modifier, just like any other key can. (Remapping another key to LAlt can still be tricky.)
+* EPKL v1.1.4: Sym mod and Dvorak layouts. HIG updated for new Inkscape. Unified VK codes for layouts. Mapping/setting tweaks.
+ - Three Sym(bol) mod variants: Improving quote/apostrophe (Qu), Minus/hyphen (Mn) or both (QuMn). ANSI uses both. Choose between them in the Remap file.
+ - Premade Sym(QuMn) variants for VK/eD Colemak vanilla and CAW.
+ - Dvorak layouts, with suitable Curl/Angle/Wide ergo mods. These are my suggestions and not "official" variants for now.
+ - The HIG (Help Image Generator) has been updated for Inkscape v1.0 that's finally out! All images are now created in one call, a lot faster.
+ - Also tweaked the HIG for Co_## KLM key codes since the image template doesn't have the underscore for these codes.
+ - My KLM QW_## codes found in the Remap file may replace VK codes in layouts.
+ - All BaseLayout files are now unified for KbdType by replacing ANS/ISO specific OEM_# VK codes with KLM ones.
+ - Added a KbdType setting in the layout files, overriding the one used in layout selection.
+ - KbdType @K codes for ANS/ISO in LayStack files, further simplifying ISO/ANSI conversion. (For baseLayout, mapSC_, img_Extend#/DKeyDir/bgImage.)
+ - Keys can now be disabled by '--' or VK mapped to themselves by VK(ey) as their first layout entry.
+ - Key state and dead key mappings can be disabled using '--' or '-1' entries. Thus an entry can be removed in the LayStack.
+ - Remap cycles can consist of minicycles separated by slashes, like this: | a | b / c | d | e | to remap a-b and c-d-e separately.
+ - Instead of special '_ExtDV' remaps for Extend Ctrl+V to follow V under CurlDH, now prepend the mapSC_extend remap with 'V-B,'.
+ - All mapVK_mecSym (ANS2ISO/ISO2ANS) mappings removed from layout.ini files. Still left in BaseLayout files as an example.
+ - Set the help image refresh timer a bit faster. Seems to help for Extend2, but not for Tap-Ext Kaomoji DK nor the initial help image?
+* EPKL v1.1.5: Tarmak Curl(DHm) w/ ortho images. Suspending apps. Language tweaks, fixes.
+ - The EPKL_Layouts_Override file is no longer tracked. Instead, there's an Override_Example file you can copy/rename/edit. Thus, your changes are kept over updates.
+ - Added Tarmak-DH(m) alias Curl(M) for Ortho boards. There's a line in the EPKL_Layouts files for the Tarmak steps with DHm, but you can also use the shortcut syntax.
+ - You can now list "suspendingApps" in Settings that automatically suspend EPKL when active. Specify by exe (X), window class (C) or any other AHK title match method.
+ - To see the AHK window class and other info about the currently active window, there's now a hotkey (default Ctrl+Shift+0).
+ - The janitor timer now handles suspending and/or exiting by the suspendTimeOut and exitAppTimeout settings. As before, set these to 0 to ignore them.
+ - The About hotkey is now shown in the tray menu, and toggles the About... GUI on/off.
+ - Image opacity hotkey (default Ctrl+Shift+8), toggling between opaque and transparent (by setting) help images.
+ - Moved EPKL specific string settings to the language files. Added a few languages (Italian, Norwegian Bm/Nn).
+ - Multi-ID locale variants can be addressed by their component. So for French, either Be Ca or Fr would point to the BeCaFr variant. Specified in the Tables file.
+ - Added the Cmk-eD-Pl ANSI CAW Polish variant designed by Kuba Wiecheć, Colemak forum user Wiechciu. It swaps Z and V from ANSI Cmk-CAW, and adds żŻ to the Z key.
+ - Added the QUARTZ pangram layout (Quartz/glyph [job];vex'd cwm,finks.), as a joke! I used a Wide mod for it, but beware that this is NOT a good layout! ╭(๑•﹏•)╮
+ - Fixed: Local on/off icons were broken since the LayStack (v1.1.3)
+ - Fixed: Help image didn't work if not shown initially, and might become an icon on the first minimize. Now it's shown once and if necessary toggled off again.
+ - Fixed: Sticky Shift didn't get reset by the next typed key on VK layouts, leading to MULtiple SHifted characters.
+ - Made Compile_EPKL.bat stop EPKL before compiling so the .exe can be overwritten, and rerun EPKL afterwards.
+* EPKL v1.1.6: New Curl-DH standard! EPKL For Dummies. KLM key codes. Extend fixes. AltGr layouts for Es/It, and Pan-Germanic locale variants.
+ - Colemak-DH(m) (M on the home row) is now the Curl(DH) standard. The 2017 DH standard (K on the home row) is now named DHk in the Remap file. Files are updated.
+ - Added a link to the useful "EPKL For Dummies!" guide by Torben Gundtofte-Bruun in the README. Also some images and text updates, and a new README for the Files.
+ - Like VK codes, SC### scan codes in layouts & Extend can be replaced by the KLM Co or QW codes found in the Remap file. These are more intuitive and user friendly.
+ - For VK entries, vc### is a synonym for the QW### KLM code. I felt that it makes sense to distinguish between SC and VK this way.
+ - Fixed: Shift+Spc didn't send a shifted space, which should scroll up in most browser windows. Now, Spc is sent Blind.
+ - Fixed: The first Tap-or-Mod Extend key press didn't take if within the ToM timer term. An initializing call to setExtendInfo() solved the problem.
+ - Fixed: Extend mods such as `{Ext+S} = Shift` pressed quickly w/ ToM Ext often led to stuck mods. Now they're only depressed/released for each Extended key press.
+ - Replaced some Loop Parse commands with more modern For loops, and made pklIniSect() return a row array for For loops. Let pklIniCSVs() take a specified separator.
+ - Added EsAlt and ItAlt for users who prefer AltGr to DKs. Es/It have áéíóú/àèìòù on AltGr+aoeiu, and some tweaks to fit in other symbols. Es_ANS has ñ on AltGr+n.
+ - Made the German and Scandinavian (De, DkNo & FiSe) Pan-Germanic, with easier access to each others' letters (De has ÆØÅ on AltGr+AOU; DkNo has ÄÖÜ etc).
+ - Tweaked a few AltGr mappings in the Vi and Hu laoyuts to better take care of lost symbol mappings.
+ - Added a setting that makes HIG delete its temporary files dir after generation. The options are 0=no, 1=paperbin, 2=delete.
+ - Local icons for Ru, Bg etc weren't working if there was an icons_OnOff entry in the LayStack. Now, local on/off icons take precedence.
+ - Help Image Generator reworked. It can now take non-numeric entries. For DKs, it marks strings as ellipses and prefix syntax as for instance '·¶·'.
+ - Currency dead key reworked. Several symbols added, most duplicates removed.
+ - Fixed: Help images didn't always show on rapid dead key activation. Added a help image refresh (if the image is active) whenever a DK is activated.
+ - Tip: Help images can be shown on other monitors using an extended workspace, by adjusting the margins to negative values. See the Settings file.
+* EPKL v1.2.0: Layout/Settings UI.
+ - Layout/Settings GUI panel to help newcomers get into several of the powerful options EPKL offers.
+ - The Layout Picker UI can be used to select any existing layout variant combo in the Layouts folder.
+ - When a Main Layout, Layout Type and Keyboard Type are chosen, existing Variants and Mods for that combo are shown.
+ - Upon submitting, if a Layouts_Override file isn't found one can be created based on the `_Example` file.
+ - A layout line is then written to the top of the `[pkl]` section of the Override file. This line will take precedence on the next Refresh.
+ - Old UI generated lines of the same type are commented out and if there are many of them (>4) the oldest ones get deleted.
+ - The Key Mapper UI reads KeyLayoutMap (KLM) names from the Remap file. Keys not in the selection box may be edited manually into the text fields.
+ - Select row then code to remap, then the same for the VK code that you're mapping to. Then mapping type. Finally, edit any state mappings etc. manually.
+ - For most modifiers, you can select Left/Right or use the generic mod. The modifier is used in Mod, Tap-or-Mod (ToM) and MoDK mappings.
+ - The mapping is written into the `Layouts_Override` file. If that key is also mapped in your (Base)Layout.ini, write the line to `layout.ini` or it won't work.
+ - Added a `Write to layout.ini` button to the KeyMapper. Such mappings will override other LayStack mappings. The default Submit button writes to `Layout_Override`.
+ - The Settings UI lets you choose between several EPKL settings. It shows their current value and any same-line comments. Edit their value and submit.
+ - The UI-adjustable settings have to be in the `Settings_Default` file and specified in the "setInGUI" entry of the `EPKL_Tables.ini` file.
+ - To allow the Settings UI to work, EPKL can now use a Settings Override/Default stack (like with the Layouts files) instead of just `EPKL_Settings.ini`.
+ - The ߧ/þÞ/ŋŊ ligatures from the Colemak-eD AltGr layers were added to the RingAbove-Lig dead key as spares.
+ - Moved Cmk-eD/VK as subdirs under a Colemak folder, like other layouts are organized (`Layouts\MainLay\3LA-LT[-LayVar]_KbT[_Mods]`).
+ - The Tarmak layout folders were also renamed to use the standard format. Tarmak step # is now a Tm# Layout Variant.
+ - The layout shortcuts for EPKL_Layouts files were tweaked somewhat, renaming Variant from `@L` to `@V` and making the underscore before `@K` explicit.
+ - Switching Slash and Backslash for Wide modded Extend brings the WheelLeft/Right keys together. Used it for Colemak-ISO-CAWS. Less intuitive for (C)AWide Ext2.
+ - Added a `LayMain(\3LA)` setting and `@L` shortcut for the main layout in the Layouts files. It may specify a 3-Letter Abbreviation (3LA) for subfolder names.
+ - If not set directly, the 3-Letter Abbreviation is found from the Tables file. Failing that, the three first letters of LayMain are used.
+ - Renamed the KLM key code `_DT` (OEM_PERIOD) to `_PD` and `_EQ` (OEM_PLUS) to `_PL` for better compatibility with the actual VK names. Also updated the HIG files.
+ - Added a 'hideImageState' setting to hide certain help image shift states. Some users may want only AltGr, Extend and dead key images to show.
+ - Remaps and RemapCycle sections are now allowed in the LayStack. See the `_Test\Cmk-eD-Nyfee_ANS_CurlAngle` layout for an example.
+ - LayStack Remaps and cycles will only be checked for if their sections are present in `layout.ini`. This is to avoid slowing down other layouts.
+ - The Nyfee Colemak-DH mods were added to test LayStack remaps. His mods move `Z W X C F K (V)` and the Bracket/Minus/Equals keys.
+ - Detection of current system layout VK codes through GetKeyVK().
+ - This makes `key = VKey` mappings work as intended, enabling for instance Extend to see and use a key without changing its system layout mapping.
+ - Added "System-VK" throughput layouts for Extend etc. users using VKey mappings. Ergomaps would also work on it. One could also remap some keys with states.
+ - Non-Scandinavian installed ISO layouts such as the UK one, should now get the right VK codes detected for OEM_# symbol keys.
+ - If the underlying system layout is changed while running EPKL, for now you should Refresh EPKL to get the codes reread correctly.
+ - The old way of specifying VK remaps from the default KLM ANSI-based codes should still work, but shouldn't be neither necessary nor advisable anymore.
+ - QWERTZ and especially AZERTY are special in that they require some letter remaps too. There are remaps for them in the Remaps file but no layouts using those.
+ - Fixed: If a remap (cycle?) wasn't mapped to a cycle, it could lead to an infinite loop in ReadRemaps().
+ - Fixed: Some Ext-Shift presses would get lost, especially after having pressed Ext-Ctrl.
+ - Reworked extendKeyPress() to avoid this. Also let the Janitor clean up idle Ext-mods to be sure.
+ - Reworked Extend modifiers further, to send with the AHK prefixes `+^!#` instead of holding down modifier keys. Seems smoother. Also, releasing Ext sends mods up.
+ - Updated the non-Wide Sym and ANSI CAWS to the latest versions. ISO and ANSI are the same now. The non-Wide variants swap brackets with minus/plus.
+ - Cz (Czech) ANSI variants. With no ISO key for Ůů, it was mapped to AltGr+Uu. There's optionally a map line to swap J and Z if desired, but it's non-standard.
+* EPKL v1.3.0: Compose/Completion and Repeat keys.
+ - Repeat key: Set any state mapping to `®®` to make that entry repeat the previous key. Good for avoiding same-finger bigrams.
+ - Compose/Completion key: Set any state mapping to `©` to use it for composing up previously sent characters using specified tables.
+ - The ISO key's unshifted state has been set as a Compose key (`©Def`) by default, editable in `EPKL_Layouts_Default.ini` or the LayStack.
+ - Compose tables are kept in a specified file, by default `Files\_eD_Compose.ini`. Each named key has a list of tables to use.
+ - As a Compose key, this is like a post-hoc version of the famous Linux Compose method. It's a very powerful tool for producing new output!
+ - Instead of pressing the Multi/Compose key before a sequence, in EPKL you press the sequence then Compose.
+ - You can get, say, é by pressing e,',Compose. The `e'` sequence is deleted first.
+ - As a Completion key, the previous input is kept and added to. This is specified by the tables entry in the Compose file.
+ - This is handy for making common n-grams easier. Some Colemak examples are: E-comma, UE, SC, Que/And/The/Ion.
+ - By default the method will look for the longest possible sequences first. You can adjust this behavior in the Compose file.
+ - Compose key entries can be any Unicode text, or even use EPKL prefix-entry syntax to do pretty much anything. Backslash escapes are allowed.
+ - Note: VK mapped keys and ## mapped states can't be used for composes, as EPKL can't know what their output is. E.g., `88 ⇒ ∞` w/ ## numbers.
+ - The standard Linux X `en_US.UTF-8` compose file was imported to `Files\_eD_Compose.ini`. Only entries starting with `` were used.
+ - You can compose with any single-character input like dead key releases and AltGr mappings. So using the x11 compose, e.g., `~(α` ⇒ `ἇ`.
+ - Backspace pops the last character from the Compose queue so you can correct a mistake and write the right sequence.
+ - See the `_eD_Compose.ini` file for more examples and explanations.
+ - Compose table import module: Converts actual Linux tables like /usr/share/X11/locale/en_US.UTF-8/compose (~5000 lines) to EPKL Compose.ini entries.
+ - Composing Linux key sym names are translated to their U####[#] Unicode hex values as .ini keys, using a keysym file like the X keysymdef.h one.
+ - The [keysyms.txt](https://www.cl.cam.ac.uk/~mgk25/ucs/keysyms.txt) file by [Dr Markus Kuhn](https://www.cl.cam.ac.uk/~mgk25/) uses proper Unicode.
+ - Moved layout variants into their own folders to reduce clutter, and for better variant documentation placement. Updated the Layout/Settings GUI accordingly.
+ - Layout additions:
+ - Added Nyfee's ColemaQ mod and NotGate's ISRT alias IndyRad layout, as ANSI Cmk-CA mods in the `_Test` folder. Nyfee's mod has his own Sym mod included.
+ - Added the Cmk-DpgH mod using SteveP's `D>P>G` loop which leaves the left hand bottom row alone. It's considered a secondary, somewhat inferior variant.
+ - Added Michael Dickens' MTGAP layout as an eD base layout, and some ergo mods for it. There are many MTGAP variants; I used the "main 30 keys" one.
+ - April's Foal! The Foalmak layout is an April Fool's joke layout by Semi at the Colemak Discord. It's still better than QWERTY, heh. And it's got nice images!
+ - Added Nyfee's new Colemak-QI mod as a Colemak variant, CAS & CAWS modded. Also the "extra mile" QI;x mod as `_Test` layouts like before.
+ - Layer/variant additions:
+ - Added some symbols to the RingAbov-Lig (ring symbols), Stroke-Bar (ballot boxes on s/v/x), Macron (trigrams on 0-7) and DotAbove (dice on 1-6) dead keys.
+ - Added the ijIJ digraphs and ijIJ bigrams to the Nl layouts, on the `OEM_102` "ISO" key and AltGr+iI, respectively.
+ - Added a full set of CAWS locale variants.
+ - Added (Curl)AngleSym Colemak-eD variants. The non-Wide Sym variant now keeps Plus/Equal next to 0 and brackets above another as in the Wide variants.
+ - Added a Reset button to Layout/Settings. It deletes all UI-made lines for the current setting in the Override file, including commented-out UI lines.
+ - Separate BaseLayout for the Greek (Gre) and Kyrillic (Kyr, Ru/Bg) scripts. This removes the need for full mappings in layout files. Bg keeps the necessary mappings.
+ - Fixed: Minor bug in which the Settings GUI wouldn't try to make a new Override file but just lead to a file read error instead.
+ - Fixed: After the Ext-mods rework, spamming modded Ext presses led to stuckness (~5 s for Ext+S+N). Afterwards, Extend got wonky, w/ Ext+S+T+N the arrow was stuck.
+ - Fixed: Layout settings didn't initially show type/variant/mod. Arrow cycling back/forth "removed" VK/variants. Selecting a valid combo removed the problem.
+ - HIG updated so shift state help images show parseable entries like bigrams correctly.
+ - New mappings for Ext-tap `wfpblu`. `{Ext-tap,w}` opens Windows Explorer; useful since the Win+E shortcut may be compromised in Colemak due to a hardwired Win+L.
+ - Updated the EPKL compiler to Ahk2Exe from AHK v1.1.27.07. Later versions are currently not fully compatible with EPKL source, causing trouble with AltGr.
+ - A `##` state entry now sends the key's VK## Blind. Good for, e.g., `Win+` which doesn't work otherwise. Warning: Output will depend on your OS layout.
+ - In particular, if you run a self-made MSKLC layout underneath in which letter and/or `OEM_` VK codes are wrong, the result will be odd.
+ - Added a `BaseLayout_Cmk-eD-NoVK.ini` file with only direct state mappings. If the VK mappings cause you any trouble, point your `layout.ini` to this one.
+ - Cut back on VK ## letter mappings in `BaseLayout_Cmk-eD.ini` again, as these cause some chained dead key outputs like ự and ậ to be preceded by an unwanted space.
+ - Added DK images for ANS AWide and CAWS, in addition to the existing vanilla and CAW. For ISO, we already have Angle, AWide, CAW and CAWS.
+ - Reworked the `@` layout codes. ErgoMod/`@E` is now HardMod/`@H`, as Curl/DH and Sym are also ergonomic mods. MainLay is now `@L` and the ergo mod ensemble `@E`.
+ - Tidied up some complex remaps like `SL-BS,V-B` for Ext. Made `Ext-CAW(S)_@K` remaps instead. Ext1/2 images were also renamed/copied to be simpler and more consistent.
+ - The SL-BS swap is good for `Extend-CAWS_ISO`, bringing the WheelLeft/Right keys together. Since Ext1 and Ext2 use the same remap, it wasn't done for AWide/CAW.
+ - Background image files were renamed more consistently.
+ - Replaced the global PklHotKeyBuffer queue string with a global array.
+ - Mirrored Colemak BaseLayouts. The AltGr layer holds mirror mappings, and ergo mods can be used normally. The Sym mod may not be ideal for it.
+ - There's a separate base layout for Cmk-DH to make mirroring work as it should. Curl mod remaps should not be added to the resulting layout, just other mods.
+ - The AHK Send command sends active modifiers up before a sent character/string, and down after, before the final up as you release them physically.
+ - Specifically, after an `AltGr` key press AHK sends both `LCtrl` and `LCtrl+Ralt` down/up. If this happens too fast, they may get jumbled.
+ - Tried adding `{LCtrl Up}` to getAltGrState(), ~15 ms after `{LCtrl Down}{RAlt Down}`. It did not fix the stuck `LCtrl` problem.
+ - Using the AHK v1.1.27 `{Text}` mode avoids the first `LCtrl`, so it may help.
+ - However, Text mode doesn't work with Win+Key shortcuts, so it's only used for single-glyph mappings on AltGr layers.
+ - Fixed: Earlier, if Win+v (Paste Clipboard) was pressed, the clipboard would often close again unless Win were released very fast.
+ - Seems all the `LCtrl+RAlt` sending around `AltGr` in `pkl_SendThis() `wasn't necessary? It has been removed.
+ - Added the `{Text}` mode (AHK v1.1.27+) to PowerStrings, and made it default. It's more reliable for special characters.
+ - The `img_Positions` setting may define which help image positions are allowed. By default `TL,TM,TR,BL,BM,BR` (Top/Bottom + Left/Mid/Right).
+ - Made string matches case sensitive using StringCaseSense. Hope that didn't break anything...?
+ - Fixed: Win+Spc was broken in commit "Repeat and Compose keys" (506e5b). It sent a space instead. The error was in pkl_Send().
+ - In the `EPKL_HelpImgGen_Settings` file, the BrutalMode setting governs whether the EPKL HIG moves generated images straight into the layout folder.
+ - If this setting is true, generated images may overwrite any existing ones. Also, the `ImgGen_` temporary folder is deleted after use.
+* EPKL v1.3.1: Compose/Completion developments. Folder/file restructuring. Cmk Heb/Epo/BrPt/Nl variants, Ortho kbd types, Boo layout, Dvk-Sym.
+ - Prefix-syntax Repeat and Compose/Completion mappings. In addition to key states, you can now map Extend or DK mappings to ®®/®# or ©###.
+ - If mapping a ©### key to a DK release, it must be preloaded elsewhere. Map it to an unused state or Extend mapping to achieve this.
+ - Mapping a state to `®#` where # is a hex number will repeat the previous key # times. This is affected by modifiers, but not sticky ones.
+ - The Repeat key now resends the last character, not the last key. Repeat used to be affected by modifiers and prone to errors.
+ - Single-char Compose output is pushed to the LastKeys queue, thereby allowing some compose chaining. Example: `g'a` → `α` then `'` → `ά`.
+ - Composing `U####[#]` where `#` are hex digits, sends the corresponding Unicode character
+ - Compose table entries in the LayStack files override those in the Compose file. Use sections for existing tables like `[compose_adding]`.
+ - Remapped dead key combining accents to `© ø Ø` to account for the Compose key taking the place of `œ` in many cases, and NBSP being iffy.
+ - Tidied up the Tarmak folders with icon and Extend image links to a `_Res` folder instead of local files
+ - The img_HideStates setting can hide the `ext` layer image too, and even DK shift states specified as `dk#`; # is a shift state (0,1,6,7).
+ - The BaseLayout setting in layout.ini can now take a `..\` syntax.
+ - Added ANS-Orth/ISO-Orth Colemak-eD. Images are still row-staggered, but this should clarify which ergo mods are for which board types.
+ - The bracket-lift Sym mod (Sym-Br) looks better on ortho boards than the standard (Sym-LBr). Images were made for both mod variants.
+ - Suspend by layout Locale ID. Should make EPKL work better for users of IMEs such as Korean, as they may conflict with non-QWERTY layouts.
+ - The suspendingLIDs setting uses 4-xdigit LID codes as found in the About... menu. Use the Locale ID, not the Language one.
+ - An `--` entry allows disabling EPKL hotkeys in the `EPKL_Settings_Override` file. Earlier, you'd have to use an unused key like `Sleep`.
+ - Added homing-nubbed help image ModState overlays. For now, there's a "GreenBlob" set for non-Wide and Wide homing, some with FShui colors.
+ - Usage: In layout.ini, change the `img_ModsDir = Files\ImgModStates\GrnBlob` setting by appending `-HomeNubs[Wide][-FShui]`.
+ - Allowed links for layout images, so layouts that use the same images as others don't need to keep their own copies.
+ - Made DK images in a local `DeadkeyImg` dir work with the ones set in `img_DKeyDir`. This also alleviates the need to declare a DeadkeyImg dir.
+ - Added the Boo (Dvorak-like modern) layout.
+ - Added a Programmer Dvorak Symbol mod, affecting the Number row plus remapping ]} → @^ and swapping '" ↔ ;:.
+ - Disclaimer: This is a Dvorak Sym mod inspired by the Programmer Dvorak layout by Roland Kaufmann. It does not claim to be that layout.
+ - For the Nl locale, the ISO key was reclaimed as Compose! Kept ij on the images. Note that composing ij/IJ makes the ij/IJ ligature.
+ - Also, a Compose completion was added so that i,© → `ij`.
+ - Esperanto variant, based on Compose. Like the normal Colemak-eD but with composes for ĉĝĵŝŭ added.
+ - Compose key on X for ANSI, since X isn't used in Esperanto. To type X, hit K, X or AltGrX.
+ - Added Hebrew layouts. See the `Cmk-eD-Heb` layout folder and the Forum Locale post.
+ - Fixed: A CapsLock off is sent at startup to avoid CapsLock being stuck on after an EPKL refresh.
+ - Fixed: Using relative paths for icon files, multiple layout selections wouldn't show the correct icons.
+ - Fixed: Setting any mod in the EPKL_Layouts file would make layout shortcuts that don't use mods fail.
+ - Fixed: Subfolder structure added to the MainLay parameter the Colemak and Tarmak layouts. Consistent naming scheme for all such subfolders.
+ - Fixed: The Layout Selector would show non-existing mod combos for, e.g., ANS if there was a KbdType like ANS-Orth present
+ - Fixed: Capitalized sequences didn't compose if followed by a lowercase version in the table. Example: `LJ Lj lj → LJ lj lj`; `Lj` didn't happen.
+ - Fixed: Pressing a DK twice released both its base characters instead of just one. Now only base char 0 (the s0 DK entry) is released.
+* EPKL v1.4.0: Better Send for key mapping. ScanCode key mapping. Dual-function CoDeKey (Compose+Dead key).
+ - EPKL now sends separate KeyUp and KeyDown events for VK/SC mapped keys. Typing games and typing tests should work fine now.
+ - This is a pretty huge development, really! It's a step in the direction of gaming-friendly EPKL.
+ - Dual-function Compose/DK "CoDeKey": If a sequence isn't recognized by the Compose key, it becomes a dead key (@co0) instead.
+ - This is very nice for locale layouts' special letters. I've put mine next to my mid-board (ISO) Compose key for easy rolls.
+ - I've also made punctuation-plus-space home row mappings, ++ on the `NEIO;UY'-` keys. These are great on a thumb Compose key!
+ - Several default X11 sequences cause trouble with this: `c+` (caron), `b+` (breve), `ng` for ŋ, `ae` for æ etc.
+ - I had to nuke/unselect most one-char composes/completions, to make sure we don't stumble over a sequence when wanting the DK.
+ - Some sequences were restored with a leading apostrophe, like for instance `'ng` instead of just `ng` for ŋ.
+ - It isn't on by default in case someone finds it overmuch. Turn it on with a `CoDeKeys` entry in `EPKL_Settings_Override.ini`.
+ - Added a separate dead key for the Shift-Compose mapping, `@co1`. Using the CoDeKey © key, we can then have both @co0 and @co1.
+ - For now, it points to the Ext_Command release table. Slight caveat: Its releases are Shift sensitive, so be mindful of Sticky Shift timing.
+ - A `CoDeKeys` setting in the Settings file determines which Compose keys are CoDeKeys. The keys themselves are defined in the Compose file.
+ - A syntax for Sticky Mods, e.g., {Shift OSM} in mapping entries. Handy for one-shot Shift on CoDeKey entries, for instance.
+ - This syntax works with any prefix-entry `α* β=` (AHK code) entries.
+ - This is necessary to use OSM Shift in a string with VK/SC mapped keys, as their Send methods don't cancel {Shift DownTemp}.
+ - A new `ScanCode`/`SKey` key mapping type, sending a key's scan code instead of the more complex VK mappings. This is more robust in some cases.
+ - KLM names such as `QW_A` or `qwBSP` are allowed for SC mapping, in addition to the traditional `SC###`.
+ - Several keys like PgUp/PgDn etc were changed from VK to SC mapping. Keys may be SC mapped to themselves by mapping them just as `System`.
+ - The `System` passthrough layout now works as intended, using `System` SC key mappings throughout.
+ - You could even send vk## or vk##sc### entries using `SKey`-type mappings, as these mappings are compatible with all AHK key Send syntax.
+ - Sending SC is safer in the case of keys that have both a normal and a NumPad version, as AHK by default sends the NumPad version.
+ - This was already fixed by adding the SC for the normal version of these keys when sent as VK. You can still send any vk##sc### combo.
+ - WARNING: SC-mapping may be less robust than VK-mapping vs AZERTY et al. For these, the VK-remap with EPKL's VK detection should be better.
+ - Compose can now work with VK/SC mapped keys. This allows you to compose accented letters etc with a VK/SC/System type layout.
+ - The GetKeyName(sc) function doesn't work with shifted output etc, so I used a DLL call to ToUnicodeEx.
+ - This worked, but had a side effect: OS Dead Keys now output, e.g., `¨¨` (whereas before they did nothing), due to a GetKeyboardState call(?)
+ - A "Special keys" tab on the Settings GUI can define Caps key behavior, Compose keys and CoDeKeys.
+ - These can also be set using the Key Mapper tab and `.ini` file editing, but this way should be more clear for newcomers.
+ - Remaps in BaseLayout files are now fully respected, so a Remap section in the layout.ini file is no longer mandatory for remapping variants.
+ - You can hide the images for a specific dead key, rather than dead key images in general. To hide all DK images, specify 'DKs' (WIP).
+ - Added an optional `«»`-enclosed display tag to the prefix-entry syntax, so help images can show any desired short string on a key.
+ - Example: «,␣» α{,}{Space} ; Comma-Space (on @co0)
+ - Changed the Prefix-Entry prefix for Unicode points from `«` to `†` to accommodate the new `«»` HIG prefix. Plus, it looks nicer. Still using `~` for it.
+ - Help image entries more than one character long may be scaled by a `fontSizes` table entry in the settings file.
+ - Dead key images can utilize a "disp0" entry that contains a string to be displayed on the key, enclosed in any non-space glyphs (like `«»`).
+ - NOTE: Remember to restart EPKL before image generation when there are changes to DK images
+ - Inkscape calls by the HIG was split into batches ruled by a batchSize setting. My Inkscape couldn't handle more than around 80 files per call.
+ - You can have a hotkey run a debug/utility routine (in `_PKL_main.ahk`) of choice, by means of `epklDebugHotkey` and `whichUtility` in the Settings files.
+ - Moved all HIG settings from their separate file into the Settings file: They'll be easier to find, and Settings_Override works on them.
+ - The "kaomoji" speech bubbles and other links are now PowerStrings, and their Compose and DeadKey entries updated.
+ - Fixed: Shifted state entries with an unshifted character would get the character shifted by sticky Shift. This is the case for Dvorak Sym.
+ - As a fix, the offending entries were given `→` prefixes so they're sent literally.
+ - Note that Win+‹key› (here Win+number) shortcuts won't work with this kind of mapping. I don't know a fix that works in both cases.
+ - Fixed: The caron dead key in the MSKLC files was missing the important Čč entries.
+ - Fixed: Several language files had the wrong encoding so menus became full of `�` symbols.
+ - Fixed: VK-mapped PgUp,PgDn,End,Home,Ins,Del and arrows had their NumPad versions sent as per AHK Send default, due to degenerate VK codes.
+ - ScanCodes are now added to the VirtualKey codes (VK21–28,2D–2E) so their normal versions (SC 149,151,14F,147,152,153 etc) are sent.
+ - Fixed: QWERTY-VK layouts pointed to the Colemak-VK BaseLayout_Cmk-VK without the Cmk-VK subfolder.
+ - Fixed: An end-of-line comment in the baseLayout entriy would cause the layout to fail.
+ - Prefix-Entry documentation updated, in main and Files README. Also added to the KeyMapper Help screen.
+ - Cmk-CAWS-eD MicroSoft Keyboard Layout Creator `.KLC` files in `Other\MSKLC`, both w/ ISO-Angle and an ANSI-Angle(Z) mods. Builds in `.zip` files.
+ - Vanilla Colemak-eD also added to the MSKLC folder. The Vanilla layout is ISO/ANSI agnostic.
+ - Rearranged the Layouts_Default (and Override_Example) file so that there's a commented-out `;[pkl]` section for Tarmak, then a `[pkl]` w/ the rest.
+ - That way, you only have to uncomment the first `;[pkl]` to get Tarmak! Much simpler. Also, more settings can be uncommented and ready.
+ - Tidied up the Tarmak layout files, using existing BaseLayout/remaps instead of explicit VK mappings.
+ - Separated the layout shorthand `@L` into LayMain (`@L`) and LayPath (`@P`). It's clearer, and you can use `@L` as LayName in description strings.
+ - Dead key images for Colemak-CAW variants now point to CAWS images since I'll be trying to support only the best and most popular combos.
+ - Added the Semimak-JQ variant. It's a simple `Q > J > QU` cycle from the original.
+ - Reworked the Greek Colemak locale layouts, replacing the rare diaeresis letters on Q and ISO with Tonos/Diaeresis DKs and the default Compose.
+ - Note that the Compose method allows accented/polytonic Greek letters to be written as sequences using punctuation.
+ - Added Dutch Colemak-eD ANSI (`Cmk-eD-Nl_ANS`) variants, as most Dutch users actually have ANSI and not ISO boards – the poor things...
+ - Updated the German/De locale with the letter ẞ (capital ß). The § sign was moved to AltGr+P.
+ - Added palatal-hook letters to the ogonek-commabelow DK, as only the s mapping overlapped. Mapped ᶊ to ß (AltGr+s) for this DK.
+ - Also, Macron-Below on the Macron key, more special digits and several other new mappings. Reworked turnstiles on the Science DK.
+ - Added `FRST/WP` arrow symbols to the Macron DK. `FRST` is an arrow cross, `WP` left-right and up-down arrows. Single on unshifted, double on shifted and AltGr.
+ - These arrow symbol mappings are geometrically mapped in a Colemak-centric way. For another layout, revision is desirable.
diff --git a/Source/EPKL_Source/_PKL_main.ahk b/Source/EPKL_Source/_PKL_main.ahk
index 3f4e95ec..ad8fb37a 100644
--- a/Source/EPKL_Source/_PKL_main.ahk
+++ b/Source/EPKL_Source/_PKL_main.ahk
@@ -6,93 +6,6 @@
;
;; ####################### user area #######################
-;; eD TOFIX: Can't define hotkeys/-strings here, as it prevents EPKL from working! Where, then?
-; :*:'3o::https://www.colemak.org ; eD WIP: Hotstring (replace text with other)
-; #c::MsgBox % "EPKL hotkey test:`n'" . A_ThisHotkey . "'"
-
-
-;; ================================================================================================
-;; eD DONE for EPKL:
-;; - For the full version history please consult the GitHub repo and the Source folder Readme.
-;
-; * EPKL v1.0.0: Name change to EPiKaL PKL. ./PKL_eD -> ./Files folder. Languages are now under Files.
-; * EPKL v1.1.0: Some layout format changes. Minor fixes/additions. And kaomoji! d( ^◇^)b
-; * EPKL v1.1.1: Some format changes. Minor fixes/additions. Tap-or-Mod keys (WIP).
-; * EPKL v1.1.2: Multifunction Tap-or-Mod Extend with dead keys on tap. Janitor inactivity timer.
-; * EPKL v1.1.3: The LayStack, separating & overriding layout settings. Bugfixes. More kaomoji.
-; * EPKL v1.1.4: Sym mod and Dvorak layouts. HIG updated for new Inkscape. Unified VK codes for layouts. Mapping/setting tweaks.
-; * EPKL v1.1.5: Tarmak Curl(DHm) w/ ortho images. Suspending apps. Language tweaks, fixes.
-; * EPKL v1.1.6: New Curl-DH standard! EPKL For Dummies. KLM key codes. Extend fixes. AltGr layouts for Es/It, and Pan-Germanic locale variants.
-; * EPKL v1.2.0: Layout/Settings UI.
-; * EPKL v1.3.0: Compose/Completion and Repeat keys.
-; * EPKL v1.3.1: Compose/Completion developments. Folder/file restructuring. Cmk Heb/Epo/BrPt/Nl variants, Ortho kbd types, Boo layout, Dvk-Sym.
-; * EPKL v1.4.0: Better Send for key mapping. ScanCode key mapping. Dual-function CoDeKey (Compose+Dead key).
-; - EPKL now sends separate KeyUp and KeyDown events for VK/SC mapped keys. Typing games and typing tests should work fine now.
-; - This is a pretty huge development, really! It's a step in the direction of gaming-friendly EPKL.
-; - Dual-function Compose/DK "CoDeKey": If a sequence isn't recognized by the Compose key, it becomes a dead key (@co0) instead.
-; - This is very nice for locale layouts' special letters. I've put mine next to my mid-board (ISO) Compose key for easy rolls.
-; - I've also made punctuation-plus-space home row mappings, ++ on the `NEIO;UY'-` keys. These are great on a thumb Compose key!
-; - Several default X11 sequences cause trouble with this: `c+` (caron), `b+` (breve), `ng` for ŋ, `ae` for æ etc.
-; - I had to nuke/unselect most one-char composes/completions, to make sure we don't stumble over a sequence when wanting the DK.
-; - Some sequences were restored with a leading apostrophe, like for instance `'ng` instead of just `ng` for ŋ.
-; - It isn't on by default in case someone finds it overmuch. Turn it on with a `CoDeKeys` entry in `EPKL_Settings_Override.ini`.
-; - Added a separate dead key for the Shift-Compose mapping, `@co1`. Using the CoDeKey © key, we can then have both @co0 and @co1.
-; - For now, it points to the Ext_Command release table. Slight caveat: Its releases are Shift sensitive, so be mindful of Sticky Shift timing.
-; - A `CoDeKeys` setting in the Settings file determines which Compose keys are CoDeKeys. The keys themselves are defined in the Compose file.
-; - A syntax for Sticky Mods, e.g., {Shift OSM} in mapping entries. Handy for one-shot Shift on CoDeKey entries, for instance.
-; - This syntax works with any prefix-entry `α* β=` (AHK code) entries.
-; - This is necessary to use OSM Shift in a string with VK/SC mapped keys, as their Send methods don't cancel {Shift DownTemp}.
-; - A new `ScanCode`/`SKey` key mapping type, sending a key's scan code instead of the more complex VK mappings. This is more robust in some cases.
-; - KLM names such as `QW_A` or `qwBSP` are allowed for SC mapping, in addition to the traditional `SC###`.
-; - Several keys like PgUp/PgDn etc were changed from VK to SC mapping. Keys may be SC mapped to themselves by mapping them just as `System`.
-; - The `System` passthrough layout now works as intended, using `System` SC key mappings throughout.
-; - You could even send vk## or vk##sc### entries using `SKey`-type mappings, as these mappings are compatible with all AHK key Send syntax.
-; - Sending SC is safer in the case of keys that have both a normal and a NumPad version, as AHK by default sends the NumPad version.
-; - This was already fixed by adding the SC for the normal version of these keys when sent as VK. You can still send any vk##sc### combo.
-; - WARNING: SC-mapping may be less robust than VK-mapping vs AZERTY et al. For these, the VK-remap with EPKL's VK detection should be better.
-; - Compose can now work with VK/SC mapped keys. This allows you to compose accented letters etc with a VK/SC/System type layout.
-; - The GetKeyName(sc) function doesn't work with shifted output etc, so I used a DLL call to ToUnicodeEx.
-; - This worked, but had a side effect: OS Dead Keys now output, e.g., `¨¨` (whereas before they did nothing), due to a GetKeyboardState call(?)
-; - A "Special keys" tab on the Settings GUI can define Caps key behavior, Compose keys and CoDeKeys.
-; - These can also be set using the Key Mapper tab and `.ini` file editing, but this way should be more clear for newcomers.
-; - Remaps in BaseLayout files are now fully respected, so a Remap section in the layout.ini file is no longer mandatory for remapping variants.
-; - You can hide the images for a specific dead key, rather than dead key images in general. To hide all DK images, specify 'DKs' (WIP).
-; - Added an optional `«»`-enclosed display tag to the prefix-entry syntax, so help images can show any desired short string on a key.
-; - Example: «,␣» α{,}{Space} ; Comma-Space (on @co0)
-; - Changed the Prefix-Entry prefix for Unicode points from `«` to `†` to accommodate the new `«»` HIG prefix. Plus, it looks nicer. Still using `~` for it.
-; - Help image entries more than one character long may be scaled by a `fontSizes` table entry in the settings file.
-; - Dead key images can utilize a "disp0" entry that contains a string to be displayed on the key, enclosed in any non-space glyphs (like `«»`).
-; - NOTE: Remember to restart EPKL before image generation when there are changes to DK images
-; - Inkscape calls by the HIG was split into batches ruled by a batchSize setting. My Inkscape couldn't handle more than around 80 files per call.
-; - You can have a hotkey run a debug/utility routine (in `_PKL_main.ahk`) of choice, by means of `epklDebugHotkey` and `whichUtility` in the Settings files.
-; - Moved all HIG settings from their separate file into the Settings file: They'll be easier to find, and Settings_Override works on them.
-; - The "kaomoji" speech bubbles and other links are now PowerStrings, and their Compose and DeadKey entries updated.
-; - Fixed: Shifted state entries with an unshifted character would get the character shifted by sticky Shift. This is the case for Dvorak Sym.
-; - As a fix, the offending entries were given `→` prefixes so they're sent literally.
-; - Note that Win+‹key› (here Win+number) shortcuts won't work with this kind of mapping. I don't know a fix that works in both cases.
-; - Fixed: The caron dead key in the MSKLC files was missing the important Čč entries.
-; - Fixed: Several language files had the wrong encoding so menus became full of `�` symbols.
-; - Fixed: VK-mapped PgUp,PgDn,End,Home,Ins,Del and arrows had their NumPad versions sent as per AHK Send default, due to degenerate VK codes.
-; - ScanCodes are now added to the VirtualKey codes (VK21–28,2D–2E) so their normal versions (SC 149,151,14F,147,152,153 etc) are sent.
-; - Fixed: QWERTY-VK layouts pointed to the Colemak-VK BaseLayout_Cmk-VK without the Cmk-VK subfolder.
-; - Fixed: An end-of-line comment in the baseLayout entriy would cause the layout to fail.
-; - Prefix-Entry documentation updated, in main and Files README. Also added to the KeyMapper Help screen.
-; - Cmk-CAWS-eD MicroSoft Keyboard Layout Creator `.KLC` files in `Other\MSKLC`, both w/ ISO-Angle and an ANSI-Angle(Z) mods. Builds in `.zip` files.
-; - Vanilla Colemak-eD also added to the MSKLC folder. The Vanilla layout is ISO/ANSI agnostic.
-; - Rearranged the Layouts_Default (and Override_Example) file so that there's a commented-out `;[pkl]` section for Tarmak, then a `[pkl]` w/ the rest.
-; - That way, you only have to uncomment the first `;[pkl]` to get Tarmak! Much simpler. Also, more settings can be uncommented and ready.
-; - Tidied up the Tarmak layout files, using existing BaseLayout/remaps instead of explicit VK mappings.
-; - Separated the layout shorthand `@L` into LayMain (`@L`) and LayPath (`@P`). It's clearer, and you can use `@L` as LayName in description strings.
-; - Dead key images for Colemak-CAW variants now point to CAWS images since I'll be trying to support only the best and most popular combos.
-; - Added the Semimak-JQ variant. It's a simple `Q > J > QU` cycle from the original.
-; - Reworked the Greek Colemak locale layouts, replacing the rare diaeresis letters on Q and ISO with Tonos/Diaeresis DKs and the default Compose.
-; - Note that the Compose method allows accented/polytonic Greek letters to be written as sequences using punctuation.
-; - Added Dutch Colemak-eD ANSI (`Cmk-eD-Nl_ANS`) variants, as most Dutch users actually have ANSI and not ISO boards – the poor things...
-; - Updated the German/De locale with the letter ẞ (capital ß). The § sign was moved to AltGr+P.
-; - Added palatal-hook letters to the ogonek-commabelow DK, as only the s mapping overlapped. Mapped ᶊ to ß (AltGr+s) for this DK.
-; - Also, Macron-Below on the Macron key, more special digits and several other new mappings. Reworked turnstiles on the Science DK.
-; - Added `FRST/WP` arrow symbols to the Macron DK. `FRST` is an arrow cross, `WP` left-right and up-down arrows. Single on unshifted, double on shifted and AltGr.
-; - These arrow symbol mappings are geometrically mapped in a Colemak-centric way. For another layout, revision is desirable.
;; ================================================================================================
diff --git a/Source/Extras/README.md b/Source/Extras/README.md
new file mode 100644
index 00000000..0d4d815c
--- /dev/null
+++ b/Source/Extras/README.md
@@ -0,0 +1,102 @@
+DreymaR's Big Bag Of Keyboard Tricks - EPKL
+===========================================
+
+
+EXTRAS, EXTRAS – READ ALL ABOUT IT!
+-----------------------------------
+This folder isn't so interesting for most, but you never know... ` ̄(=⌒ᆺ⌒=) ̄`
+
+It contains some AHK scripts that I found useful, and other source-related stuff that didn't fit elsewhere.
+
+Also, below are some tidbits of information that I've decided to keep around in this corner of the repo.
+
+
+INFO: Some documentation notes
+------------------------------
+* Virtual key code links:
+ http://www.kbdedit.com/manual/low_level_vk_list.html
+ https://msdn.microsoft.com/en-us/library/ms927178.aspx
+ https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx
+
+* "Anti-madness tips" for EPKL vs old PKL (by user Eraicos and me):
+ - PKL using AHK v1.0: Script files need to be ANSI encoded. They don't support special letters well.
+ - EPKL using AHK v1.1-Unicode: Supports scripts in UTF-8 w/ BOM.
+ - EPKL .ini files may be UTF-8 encoded, with or without BOM. Source .ahk files should be UTF-8-BOM?
+ - PKL: Don't use end-of-line comments in the .ini files. OK in layout.ini because of tab parsing.
+ - EPKL: End-of-line comments are now safe.
+ - In layout.ini, for old PKL:
+ - Always use single tabs as separators in layout.ini, also between a VK code and the word 'VirtualKey'.
+ - The CapsLock key should have scan code 'CapsLock' instead of SC03A, if using 'extend_key = CapsLock'.
+ - The Extend key should be mapped or it won't work, e.g., 'CapsLock = CAPITAL VirtualKey'.
+ - EPKL changes all of the above: Any whitespace delimits, and Extend is mapped as 'Extend Modifier'.
+ - In the Extend section:
+ - Don't have empty mappings in the Extend section. Comment these out.
+ - By default {} is added to send keys by name. To escape these, use a prefix-entry or }‹any string›{.
+
+
+**AHK key remapping syntax**
+AHK direct key mapping works with games, unlike the PKL way of using the Send command to send (KeyDown followed by a KeyUp)
+
+The classic remapping of the form `a::b` actually consists of:
+```
+*a::
+SetKeyDelay -1
+Send {Blind}{b DownR}
+return
+
+*a up::
+SetKeyDelay -1
+Send {Blind}{b Up}
+return
+```
+
+The `DownR` format replaced `DownTemp` with AHK v1.1.27. It tells other Send command to ignore this key's down state.
+
+
+**AHK hotstrings**
+AHK can also use hotstrings, replacing any string with another automagically. I haven't gotten that to work in EPKL yet.
+```
+;; eD TOFIX: Can't define hotkeys/-strings before the rest of the code, as it prevents EPKL from working! Where, then?
+; :*:'3o::https://www.colemak.org ; eD WIP: Hotstring (replace text with other)
+; #c::MsgBox % "EPKL hotkey test:`n'" . A_ThisHotkey . "'"
+```
+
+
+**Entry format info from Farkas' sample.ini layout file:** (Note that EPKL now uses '@' for 'dk' entries etc)
+```
+Scan code =
+ Virtual key code (like in MS KLC)
+ CapsState (like in MS KLC):
+ If CapsState == vk or VirtualKey
+ When you press this key, it sends only the virtual key.
+ It is very useful, if you install your special layout, and you
+ would like to extend it. (See extend_* layouts)
+ Else If CapsState == modifier
+ You can use this key as a modifier, like Shift, RAlt (== AltGr)
+ Else If CapsState & 1 (first bit set)
+ Shift + Key == CapsLock + Key
+ Else If CapsState & 4 (third bit set)
+ AltGr + Shift + Key == CapsLock + AltGr + Key
+ Output for each shift state (see http://www.autohotkey.com/docs/commands/Send.htm):
+ # send utf-8 characters (one or more)
+ *#### send without {Text} – that is, interpret key names (and ^+1#{} ?) in AHK style
+ =#### send {Blind} – that is, keep the modifier state intact
+ %#### utf ligature
+ -- disabled key/state entry
+ dk## deadkey (EPKL: @## is used instead, w/ ## from a DeadKeyNames section)
+ ## EPKL: PowerString name (named strings that are sent by the chosen method)
+NOTE: Use tabs as separator for these entries!!!
+
+;scan = VK CapStat 0Norm 1Sh 2Ctrl 6AGr 7AGrSh Caps CapsSh
+SC002 = 1 1 1 ! ; QWERTY 1!
+SC003 = 2 0 2 ={Left} ; QWERTY 2@
+SC004 = 3 0 3 *{Right} ; QWERTY 3#
+SC005 = rshift modifier ; QWERTY 4$
+SC006 = 5 0 dk1 dk2 ; QWERTY 5% (EPKL: DKs are named for instance @0b4 or @060)
+
+[deadkey1]
+; 0 = unicode number of the "accent"
+0 = 126 ; ~
+; [Unicode number of the base letter] = [Unicode number of the new letter] ‹tab› ; comments
+97 = 227 ; a -> ã
+```
diff --git a/Source/README.md b/Source/README.md
index 1f341dd9..529a910c 100644
--- a/Source/README.md
+++ b/Source/README.md
@@ -10,25 +10,43 @@ DreymaR's Big Bag Of Keyboard Tricks - EPKL
+EPKL versions
+-------------
+EPKL was based on a decompiled PKL v0.4preview from 2010 (formerly v0.3r85) by Máté Farkas.
+
+I started development in 2014, and since then EPKL has come a long way.
+
+A comprehensive version history for is found in the actual [EPKL Source folder][EPKLsc].
+
+```
+* EPKL v1.0.0: Name change to EPiKaL PKL. ./PKL_eD -> ./Files folder. Languages are now under Files.
+* EPKL v1.1.0: Some layout format changes. Minor fixes/additions. And kaomoji! d( ^◇^)b
+* EPKL v1.1.1: Some format changes. Minor fixes/additions. Tap-or-Mod keys (WIP).
+* EPKL v1.1.2: Multifunction Tap-or-Mod Extend with dead keys on tap. Janitor inactivity timer.
+* EPKL v1.1.3: The LayStack, separating & overriding layout settings. Bugfixes. More kaomoji.
+* EPKL v1.1.4: Sym mod and Dvorak layouts. HIG updated for new Inkscape. Unified VK codes for layouts. Mapping/setting tweaks.
+* EPKL v1.1.5: Tarmak Curl(DHm) w/ ortho images. Suspending apps. Language tweaks, fixes.
+* EPKL v1.1.6: New Curl-DH standard! EPKL For Dummies. KLM key codes. Extend fixes. AltGr layouts for Es/It, and Pan-Germanic locale variants.
+* EPKL v1.2.0: Layout/Settings UI.
+* EPKL v1.3.0: Compose/Completion and Repeat keys.
+* EPKL v1.3.1: Compose/Completion developments. Folder/file restructuring. Cmk Heb/Epo/BrPt/Nl variants, Ortho kbd types, Boo layout, Dvk-Sym.
+* EPKL v1.4.0: Better Send for key mapping. ScanCode key mapping. Dual-function CoDeKey (Compose+Dead key).
+```
+
+
Source code info
----------------
This is the source code README, briefly explaining how to compile PKL/EPKL with AHK2EXE.
To this purpose, there's a [Compile_EPKL.bat][MakExe] file that makes and runs EPKL.exe.
-
-Info about DreymaR's Big Bag of keyboard trickery is found on:
-* The [Big Bag pages][BBTind] with better explanations and links
-* The old [Forum BigBag][CmkBBT], including the [Big Bag for EPKL/Windows][CmkPKL] topic
-
-The [EPKL][EPKLRM] source code is based on a decompiled PKL v0.4preview (formerly v0.3r85).
Compiling manually
------------------
* To compile the (E)PKL source code, use the Ahk2Exe compiler from the [AHK download page][AHKDld].
* AHK compiler v1.1 Unicode is needed for EPKL; v1.0 and v1.1 in ANSI mode work for the original PKL.
-* There's a folder in Source that contains the v1.1 AHK compiler.
-* Choose the right Source\#.ahk file, EPKL or PKL_Orig.
+* There's a folder in Source that contains the v1.1 AHK compiler. You may need that version.
+* Choose the Source\EPKL.ahk file.
* Choose to compile into your main EPKL folder.
* You may choose any name for the .exe and run it afterwards.
* Choose Source\EPKL_Resources\Main.ico as the custom icon file.
@@ -54,553 +72,5 @@ _Øystein "DreymaR" Bech-Aase, 2018-_
[AHKDld]: https://autohotkey.com/download/ (AutoHotkey download page)
[MakExe]: /Compile_EPKL.bat (Compile_EPKL batch file)
[BBTind]: https://dreymar.colemak.org/ (DreymaR's Big Bag of Keyboard Tricks)
-[CmkBBT]: https://forum.colemak.com/topic/2315-dreymars-big-bag-of-keyboard-tricks-main-topic/ (BigBagOfKbdTrix on the Colemak forums)
[CmkPKL]: https://forum.colemak.com/topic/1467-dreymars-big-bag-of-keyboard-tricks-pklwindows-edition/ (BigBag-PKL on the Colemak forums)
-[EPKLRM]: /Files/ (EPKL Files folder/README)
-
-
-WARNING: HARD HAT AREA!
-=======================
-
-EPiKaL PKL is a Work-In-Progress, so all of it may not be working perfectly ... yet. ;-)
-
-This is the EPKL Work-In-Progress README, going into details on the changes. For the normal EPKL README see the main folder.
-
-~ Øystein "DreymaR" Bech-Aase, 2022
-
-
-DONE:
------
-**GENERAL/SETTINGS**
-* Renamings and file mergings to make the code more compact and streamlined.
-* Removed MenuIcons and HashTables code, replacing them with AHK v1.1+ native code.
-* Unicode native AHK now works. SendU and changeNonASCIIMode removed.
-* New iniRead functions that support the UTF-8 Unicode file format.
-* Merged several .ini sections including eD specific ones into the default [pkl] as it's tidier.
-* Made a PKL_Tables.ini file for info tables that were formerly internal. This way, the user can make additions as necessary.
-* If using a layout from the command line, the notation "UseLayPos_#" will run layout # in the layout list set in EPKL_Layouts.
- - This also makes Refresh robust against layout changes in EPKL_Layouts.
-* Base layout: Specify in layout.ini a basis file (layout section only). Just need to list changes in layout.ini now. Nice for variants.
-* Shorthand notation in EPKL .ini layouts, allowing the KbdType/CurlMod/ErgoMod settings to be referred to as @K/@C/@H resp. (@A for all at once).
-* Path shortcut for layout.ini entries, allowing ".\" instead of full path from EPKL root.
-
-
-**MENUS/IMAGES**
-* Edited menus and the About... dialog.
-* Added a KeyHistory shortcut for debugging etc. Make it configurable in EPKL_Settings (eD_DebugInfo).
-* Added a Refresh hotkey. Reruns EPKL in case something got stuck or similar.
-* You can specify in the EPKL_Settings .ini which tray menu item is the default (i.e., activated by double-clicking the tray icon)
-* Would tray menu shortcuts work? E.g., &About. Answer: The menu shows it, but unselectable by key(?).
-
-* Multilayered help images so fingering can be in one image and letters/symbols in another (saves file space, adds options).
- - Shift/AltGr indicators on separate images in a specified directory instead of in the state#.png (and dk) images.
- - Allow pushing the help image horizontally if mouse x pos. is in the R/L ~20% zone.
- - Zoom and Move hotkeys for the help image, cycling between image sizes and positions. Set e.g., imgZoom = 60,100,150 (%) in EPKL_Settings.
- - Settings in layout.ini: Size/scaling, background/extend images, background color, shift indicator, icons and dead key dirs.
- - Settings in settings.ini: Overall transparency/opacity, top/bottom gutter distances, horizonal activation zone.
- - If settings are missing, may default to backgr.png, extend.png, on/off.ico and ModStateImg\ in the layout dir.
- - Instead of many lines of image sizes, introduced a scaling factor 'img_scale' (in percent).
-* Help Image Generator, using my KLD format in an SVG image template. With search/replace this is turned into a key glyph image.
- - You'll need an Inkscape (Scalable Vector Graphics program) install. A good option is portable Inkscape from PortableApps.com.
- - You can choose whether to make shift state images only or a full image set with all shift states for all deadkeys. The latter takes time!
- - The HIG can be used from the menu when Advanced Mode is set. Its settings file is in Files\ImgGenerator.
- - In the HIG settings file you can control replacement characters used in a marking layer; anything written to it will show in bold yellow.
- - The SVG image template file is in the same location. You could use another template and specify it in the HIG settings file.
- - If you don't want the dead keys marked in yellow for instance, you could save the SVG template with that layer hidden.
- - You can make full layout images showing keys as well, by combining with a Files\ImgBackground image of choice. I use the GIMP for that.
-
-
-**MAPPINGS**
-* Updated and added several layouts, including locale and script variants.
-* Removed explicit Cut/Copy/Paste keys (in pkl_keypress.ahk); use +{Del} / ^{Ins} / +{Ins} (or as I have used in my Extend mappings, }^{X/C/V ).
-* Made an _eD_Extend.ini file for Extend mappings that were formerly in pkl.ini (or layout.ini). The old way should still work though.
-* Made Extend substitutes for Launch_Media/Search/App1/App2, as AHK multimedia launcher keys aren't working in Win 10.
-* Scan code modular remapping, making ergo and other variants much easier. Separate key permutation cycles, and remaps combining/translating them.
- - In layout.ini, specify any remap combinations using the names (and syntax) found in the [Remaps] section of the Remap.ini file.
- - The _layout remap specifies a full remapping, while the _extend remap is only for those keys you want to move for Extend ("hard" remaps).
- - Uses my KeyLayoutDefinition (KLD) mapping format.
- - KLD is good for remaps, but too compact for main layout or Extend definitions. (Besides, Aldo Gunsing has a conversion tool for those.)
- - Unfortunately though, I can't make that work for the help images directly. New images need to be generated then.
- - Should I have a cycle merge syntax, e.g., "Angle_ISO105 = TC< |L0LG | ^Angle_ANSI-Z"? Probably unnecessary.
-* Virtual Key remapping, similarly to SC. I'd like to make only ANSI or ISO layouts, and leave the ISO-ANSI VK issue to a simple remap routine.
-* Sensible dead key names for images and entries (e.g., @14 -> tilde) in a central doc that layouts can point to.
- - Dead key list and file path in layout (but use dk## in the layout itself, for compatibility!)
- - If no lookup is specified, EPKL defaults to the local file as before
- - This way, one change in a DK will affect all layouts using that DK
- - DK images may still be kept in the layout dir (or a subdir to avoid clutter), as they are layout dependent
- - DK imgs named ‹name›_dk‹#› for state ‹#› (add s6/7 where applicable?!)
-* Greek layout w/ tonos/dialytika in the acute/umlaut dead keys.
-* In the OS deadkey table ([DeadKeysFromLocID] in PKL_Tables.ini) a -2 entry means no dead keys and RAlt may be used as AltGr (CtrlAltlIsAltGr).
-* Special keys such as Back/Del/Esc/F# used to release a dead key's base char and also do their normal action. Now they just cancel the dead key(s).
-* A single layout entry of `VK`/`VKey` or `SC`/`System` will set that key to itself, say, if it was set in the base layout and you don't want it remapped.
-
-
-**OTHER/NOTES**
-* There was a problem with DKs getting stuck after a special entry. Seems this was always the case?! A call to pkl_CheckForDKs( 0 ) somehow prevents it...
-
-
-**PKL[eD] VERSION HISTORY**
-* PKL[eD] v0.4.0: Transition to AHK v1.1
- - A Refresh menu option with a hotkey (default Ctrl+Shift+5) in case the program hangs up in some way (stuck modifiers etc).
- - Advanced Mode setting that shows 'AHK key history' and other menu options, plus more info in the About... dialog.
- - Sensible dead key names for images and entries (e.g., @14 -> tilde) in a central file that layouts can point to.
- - A PKL_Tables.ini file for info tables that were formerly internal. This way, the user can make additions as necessary.
-* PKL[eD] v0.4.1: Transition to AHK v1.1 Unicode, using native Unicode Send and UTF-8 compatible files. Menu icons.
- - Array pdics instead of the old HashTable code
- - A base layout file can be specified, allowing layout.ini to only contain entries that should override the base layout.
-* PKL[eD v0.4.2: Help image layers, opacity, scaling, background color and gutter size settings. Help images can be pushed horizontally too.
- - Separate help image background/overlay, so keys/fingering, letters/glyphs and Shift/AltGr marks can be in different images.
-* PKL[eD] v0.4.3: Scan and virtual key code modular remapping for layouts and Extend, making ergo and other variants much more accessible.
- - Ergo and other mods can be played over a few existing base layouts.
-* PKL[eD] v0.4.4: Help Image Generator that uses Inkscape (separate download) to generate a set of help images from the current layout.
- - A shorthand notation in EPKL_Layouts.ini to specify KbdType (ISO/ANSI), CurlMod and ErgoMod with the layouts.
-* PKL[eD] v0.4.5: Common prefix-entry syntax for keypress/deadkey/extend. Allows, e.g., literal/deadkey release from Extend.
- - Layouts, Extend and dead keys now support the same prefix-entry syntax, parsing "%$*=@&" as first character specially.
- - The "&" prefix denotes literals/powerstrings found in a separate file. These may span more than one line.
- - There's a string file specified in the layout.ini, by default it's Files\_eD_PwrStrings.ini
- - The ligature name can be any text string. In layout entries, two-digit names are prettiest.
- - Note that programs handle line breaks differently! In some apps, \r\n is needed but that creates a double break in others.
- - SendMode can be selected for powerstrings (Input, Message, Paste from Clipboard) in the string file.
- - To avoid stuck modifiers for long strings, a SendMessage() method was implemented.
- - More generic dead key output: Same prefix-entry syntax as layout/Extend, parsing "%$*=@&" entries.
- - Dead key base/release entries can be in 0x#### Unicode format in addition to the old decimal format. For base keys, the syntax must be exact.
- - Examples: "102 = ƒ" is possible instead of "102 = 402". For a glyph not shown in your font such as Meng, "77 = 0x2C6E" (or 11374 still).
- - Should be easy to import MSKLC dead key tables of the form '006e 0144 // n -> ń' by script (e.g., RegExp "0x$1 = 0x$2 ; $3")
-* PKL[eD] v0.4.6: The base layout can hold default settings. Layout entries are now any-whitespace delimited.
- - pklIniRead() can have an altFile, such as "BasIni". For BasIni/LayIni, .\ and ..\ point to their own and mother directories.
- - Read most layout settings apart from remaps from the base layout if not found in the main layout.
- - ONHOLD: Look for backup bgImg/extImg/dkImg in BasIni after all? If using an ANS base file for an ISO layout, it looks silly. But better than nothing?
- - Requiring Tab delimited layout entries was too harsh. Now, any combination of Space/Tab is allowed. For Space, use ={Space}.
-* PKL[eD] v0.4.7: Multi-Extend w/ 4 layers selectable by modifiers+Ext. Extend-tap-release. One-shot Extend layers.
- - Multi-Extend, allowing one Extend key with 2 modifiers (e.g., RAlt/RShift) to select up to 4 different layers. Ext+Mod{2/3/2+3} -> Ext2/3/4.
- - Ext2 is a NumPad/nav layer w/ some useful symbols. Ext3/Ext4 are one-shot string layers but mostly to be filled by the user.
- - Dual-role tap-release Extend key. Works as Back on tap within a certain time and Ext on hold. Set the time to 0 ms to disable it.
- - ExtReturnTo setting to allow one-shot Extend, e.g., for strings. Can for instance return from Ext3 to Ext1.
-* PKL[eD] v0.4.8: Sticky/One-shot modifiers. Tap the modifier(s), then within a certain time hit the key to modify.
- - Settings for which keys are OSM and the wait time. Stacking OSMs works (e.g., tap RShift, RCtrl, Left).
- - NOTE: Mapping LCtrl or RAlt as a Modifier causes trouble w/ AltGr. So they shouldn't be used as sticky mods or w/ Extend if using AltGr.
- - Powerstrings can have prefix-entry syntax too now. Lets you, e.g., have long AHK command strings referenced by name tags in layouts.
-
-
-**EPKL VERSION HISTORY:**
-* EPKL v1.0.0: Name change to EPiKaL PKL.
- - Moved ./PKL_eD -> ./Files folder. Languages are now under Files.
- - Bugfix: A '--' entry in layout.ini didn't overwrite the corresponding BaseLayout.ini entry.
-* EPKL v1.1.0: Some layout format changes. Minor fixes/additions. And kaomoji! d( ^◇^)b
- - Fixed: DK images were gone due to an error in the EPKL_Settings .ini. DK images also didn't work for some layouts.
- - Fixed: Sticky/One-Shot mods stayed active when selecting Extend, affecting strings if sent within the OSM timer even when sent with %.
- - New: A set of 30+ Kaomoji text faces in the Strings Extend3 layer. Help images included. ♪~└[∵┌]└[・▥・]┘[┐∵]┘~♪
- - New: Hungarian Cmk[eD] locale variant.
- - New: Zoom and Move hotkeys for the help image, cycling between image sizes and positions. Set e.g., imgZoom = 60,100,150 (%) in EPKL_Settings.
- - Tutorial on making a layout variant in README. How to make and activate a layout, changing locale, remaps and a keys mappings.
- - 'Spc' and 'Tab' layout mappings, sending {Blind}{Key}. Makes for compact layout entries for the delimiting whitespace characters.
- - Direct Extend key mapping, e.g., for CapsLock use 'SC03A = Extend Modifier' instead of the old extend_key setting.
- - Extend layers can be set as hard/soft in the _Extend file. Soft layers follow mnemonic letter mappings, hard ones are positional (like my Ext1/2).
- - The Curl(DH) Ext+V may still be mnemonic/soft instead of positional/hard (^V on Ext+D). [v1.1.3: Use `mapSC_extend = V-B,` before AWide/Angle mods.]
- - BaseLayout files are now at the same tree level as layout folders instead of inside one of them.
-* EPKL v1.1.1: Some format changes. Minor fixes/additions. Tap-or-Mod keys (WIP).
- - New: Tap-or-Modifier a.k.a. Dual-Role Modifier keys. Work-in-progress, not working well for rapidly typed keys yet.
- - To make a ToM key, specify its VK layout entry as VK/Mod, where 'Mod' is a modifier name. The rest of the line can be any valid entry.
- - The Help Image Generator can mark ToM keys (state 0 and 1) with a background symbol.
- - The Extend key can be set the old way as extend_key in [pkl] (but no layout entry is needed anymore!), as 'Ext Mod' or as ToM, e.g., 'VK/EXT VKey'
- - Modifiers can be referred to by the first letters of their name so, e.g., 'LS' and 'LSh' both point to LShift. Also, VK or VKey = VirtualKey.
- - Unicode points can be sent by the ~ prefix; a ~#### entry sends the U+#### character as used in MSKLC file entries.
- - The shiftStates layout entry is now in the [layouts] section of layout.ini, spaced out so entries have more room and are clearer.
- - Since Space/Tab are used to delimit layout entries, there are now special '&Spc' and '&Tab' PowerString entries for them.
- - Dead key abbreviations are now by code point instead of numbered, as in MSKLC. Example: The .klc entry 02c7@ is a caron DK; in EPKL it becomes @2c7.
- - Added a Compile_EPKL.bat file that compiles the source code by running AHK2Exe with default settings.
- - Fixed: HIG made a state8 image of semicolons. This was due to the SGCaps states (8:9) being added unnecessarily. (つ_〃*)
- - Also fixed some minor HIG bugs related to hex dead key values etc.
-* EPKL v1.1.2: Multifunction Tap-or-Mod Extend with dead keys on tap. Janitor inactivity timer.
- - Dead keys on Extend key tap. Examples: Tap {Extend, n} for parentheses with positioning. {Ext, z/Z} Undo/Redo. {Shift, Ext, letter} for kaomoji.
- - Sticky Shift works to select Extend dead keys, and stays active. If you want the shift-P kaomoji tap {Shift, Ext} then P quickly. If not, wait.
- - For InputRaw/Send/AHK/Blind/Unicode/DeadKey/PowerString entry prefixes, both the old %$*=~@& or →§αβ«Ð¶ (AltGr+Shift+ISABUDP) work now.
- - Direct dead key entries in the format <#> = work too. If the char is an uppercase version, append a plus (<#>+).
- - "Janitor" inactivity timeout setting (e.g., 2 s) to release any stuck modifiers. These can happen with advanced usage.
- - IniRead can now handle UTF-8 .ini files (but not UTF-16) allowing Unicode in all entries.
- - The EPKL.exe binary file is no longer version controlled. It can be compiled using the .bat file but is also provided with each release.
-* EPKL v1.1.3: The LayStack, separating & overriding layout settings. Bugfixes. More kaomoji.
- - The downloadable release asset .zip file now contains all files needed to run EPKL. No Source/Other/Data nor .bat/.git. files.
- - The Kaomoji dead key now outshines the Extend layer with a related entry for each shifted letter/symbol, e.g., d( ^◇^)b vs (b ̄◇ ̄)b.
- - An EPKL_Layouts_Default .ini file has been split off from the EPKL_Settings .ini so the layout definitions have a file of their own.
- - If present, an EPKL_Layouts_Override.ini file will take precedence. In the future, this may be generated by a GUI panel.
- - Several mappings and settings common to most layouts are now in the Layouts_Default file. This includes the Extend modifier mapping.
- - The LayStack [ mainLay, baseLay, LayOver, LayDef ] can be used for most mappings and layout info, including Extend and DeadKey overrides.
- - Added Layout Type (eD or VK) and Other Mod (e.g., Sym) shortcuts to the Layouts.ini file.
- - The 'Sym' (;>' />=>- cycles) symbol key rotation mod I'm testing is available as a remap.
- - The CurlM/DHm variant of the Curl(DH) mod is available through the remap 'Curl-DHmMod'; it isn't available for most premade layouts though.
- - Added eD/VK Colemak Curl(DHm) only layouts. Used CurlM/DHm here, to support ortho boards. Ortho help images are on the TODO list.
- - Fixed: The Extend modifier in the BaseLayout didn't work so most layouts didn't get Extend before adding it to their layout.ini manually.
- - Fixed: From PKL[eD] v0-4-5, DK+Spc didn't release the base accent as Spc was prefixed. Now, (&)Spc and {Space} are turned into a space glyph.
- - Fixed: Some kaomoji with ^ or ` in them would get confused - (=・ω・^^=)丿 - due to insufficient handling of OS dead keys.
- - Fixed: Ensured that a quickly used Extend press isn't open for re-use as an Extend tap! Example: Ext+Space, then quickly E.
- - Fixed: The janitor timer kept resending mod up strokes every # s. Now it's once only after recent keyboard activity.
- - Minor: Made a bool() fn to use bool(pklIniRead()) instead of a dedicated pklIniBool().
- - Tested: The LAlt key (SC038) can work as Extend Modifier, just like any other key can. (Remapping another key to LAlt can still be tricky.)
-* EPKL v1.1.4: Sym mod and Dvorak layouts. HIG updated for new Inkscape. Unified VK codes for layouts. Mapping/setting tweaks.
- - Three Sym(bol) mod variants: Improving quote/apostrophe (Qu), Minus/hyphen (Mn) or both (QuMn). ANSI uses both. Choose between them in the Remap file.
- - Premade Sym(QuMn) variants for VK/eD Colemak vanilla and CAW.
- - Dvorak layouts, with suitable Curl/Angle/Wide ergo mods. These are my suggestions and not "official" variants for now.
- - The HIG (Help Image Generator) has been updated for Inkscape v1.0 that's finally out! All images are now created in one call, a lot faster.
- - Also tweaked the HIG for Co_## KLM key codes since the image template doesn't have the underscore for these codes.
- - My KLM QW_## codes found in the Remap file may replace VK codes in layouts.
- - All BaseLayout files are now unified for KbdType by replacing ANS/ISO specific OEM_# VK codes with KLM ones.
- - Added a KbdType setting in the layout files, overriding the one used in layout selection.
- - KbdType @K codes for ANS/ISO in LayStack files, further simplifying ISO/ANSI conversion. (For baseLayout, mapSC_, img_Extend#/DKeyDir/bgImage.)
- - Keys can now be disabled by '--' or VK mapped to themselves by VK(ey) as their first layout entry.
- - Key state and dead key mappings can be disabled using '--' or '-1' entries. Thus an entry can be removed in the LayStack.
- - Remap cycles can consist of minicycles separated by slashes, like this: | a | b / c | d | e | to remap a-b and c-d-e separately.
- - Instead of special '_ExtDV' remaps for Extend Ctrl+V to follow V under CurlDH, now prepend the mapSC_extend remap with 'V-B,'.
- - All mapVK_mecSym (ANS2ISO/ISO2ANS) mappings removed from layout.ini files. Still left in BaseLayout files as an example.
- - Set the help image refresh timer a bit faster. Seems to help for Extend2, but not for Tap-Ext Kaomoji DK nor the initial help image?
-* EPKL v1.1.5: Tarmak Curl(DHm) w/ ortho images. Suspending apps. Language tweaks, fixes.
- - The EPKL_Layouts_Override file is no longer tracked. Instead, there's an Override_Example file you can copy/rename/edit. Thus, your changes are kept over updates.
- - Added Tarmak-DH(m) alias Curl(M) for Ortho boards. There's a line in the EPKL_Layouts files for the Tarmak steps with DHm, but you can also use the shortcut syntax.
- - You can now list "suspendingApps" in Settings that automatically suspend EPKL when active. Specify by exe (X), window class (C) or any other AHK title match method.
- - To see the AHK window class and other info about the currently active window, there's now a hotkey (default Ctrl+Shift+0).
- - The janitor timer now handles suspending and/or exiting by the suspendTimeOut and exitAppTimeout settings. As before, set these to 0 to ignore them.
- - The About hotkey is now shown in the tray menu, and toggles the About... GUI on/off.
- - Image opacity hotkey (default Ctrl+Shift+8), toggling between opaque and transparent (by setting) help images.
- - Moved EPKL specific string settings to the language files. Added a few languages (Italian, Norwegian Bm/Nn).
- - Multi-ID locale variants can be addressed by their component. So for French, either Be Ca or Fr would point to the BeCaFr variant. Specified in the Tables file.
- - Added the Cmk-eD-Pl ANSI CAW Polish variant designed by Kuba Wiecheć, Colemak forum user Wiechciu. It swaps Z and V from ANSI Cmk-CAW, and adds żŻ to the Z key.
- - Added the QUARTZ pangram layout (Quartz/glyph [job];vex'd cwm,finks.), as a joke! I used a Wide mod for it, but beware that this is NOT a good layout! ╭(๑•﹏•)╮
- - Fixed: Local on/off icons were broken since the LayStack (v1.1.3)
- - Fixed: Help image didn't work if not shown initially, and might become an icon on the first minimize. Now it's shown once and if necessary toggled off again.
- - Fixed: Sticky Shift didn't get reset by the next typed key on VK layouts, leading to MULtiple SHifted characters.
- - Made Compile_EPKL.bat stop EPKL before compiling so the .exe can be overwritten, and rerun EPKL afterwards.
-* EPKL v1.1.6: New Curl-DH standard! EPKL For Dummies. KLM key codes. Extend fixes. AltGr layouts for Es/It, and Pan-Germanic locale variants.
- - Colemak-DH(m) (M on the home row) is now the Curl(DH) standard. The 2017 DH standard (K on the home row) is now named DHk in the Remap file. Files are updated.
- - Added a link to the useful "EPKL For Dummies!" guide by Torben Gundtofte-Bruun in the README. Also some images and text updates, and a new README for the Files.
- - Like VK codes, SC### scan codes in layouts & Extend can be replaced by the KLM Co or QW codes found in the Remap file. These are more intuitive and user friendly.
- - For VK entries, vc### is a synonym for the QW### KLM code. I felt that it makes sense to distinguish between SC and VK this way.
- - Fixed: Shift+Spc didn't send a shifted space, which should scroll up in most browser windows. Now, Spc is sent Blind.
- - Fixed: The first Tap-or-Mod Extend key press didn't take if within the ToM timer term. An initializing call to setExtendInfo() solved the problem.
- - Fixed: Extend mods such as `{Ext+S} = Shift` pressed quickly w/ ToM Ext often led to stuck mods. Now they're only depressed/released for each Extended key press.
- - Replaced some Loop Parse commands with more modern For loops, and made pklIniSect() return a row array for For loops. Let pklIniCSVs() take a specified separator.
- - Added EsAlt and ItAlt for users who prefer AltGr to DKs. Es/It have áéíóú/àèìòù on AltGr+aoeiu, and some tweaks to fit in other symbols. Es_ANS has ñ on AltGr+n.
- - Made the German and Scandinavian (De, DkNo & FiSe) Pan-Germanic, with easier access to each others' letters (De has ÆØÅ on AltGr+AOU; DkNo has ÄÖÜ etc).
- - Tweaked a few AltGr mappings in the Vi and Hu laoyuts to better take care of lost symbol mappings.
- - Added a setting that makes HIG delete its temporary files dir after generation. The options are 0=no, 1=paperbin, 2=delete.
- - Local icons for Ru, Bg etc weren't working if there was an icons_OnOff entry in the LayStack. Now, local on/off icons take precedence.
- - Help Image Generator reworked. It can now take non-numeric entries. For DKs, it marks strings as ellipses and prefix syntax as for instance '·¶·'.
- - Currency dead key reworked. Several symbols added, most duplicates removed.
- - Fixed: Help images didn't always show on rapid dead key activation. Added a help image refresh (if the image is active) whenever a DK is activated.
- - Tip: Help images can be shown on other monitors using an extended workspace, by adjusting the margins to negative values. See the Settings file.
-* EPKL v1.2.0: Layout/Settings UI.
- - Layout/Settings GUI panel to help newcomers get into several of the powerful options EPKL offers.
- - The Layout Picker UI can be used to select any existing layout variant combo in the Layouts folder.
- - When a Main Layout, Layout Type and Keyboard Type are chosen, existing Variants and Mods for that combo are shown.
- - Upon submitting, if a Layouts_Override file isn't found one can be created based on the `_Example` file.
- - A layout line is then written to the top of the `[pkl]` section of the Override file. This line will take precedence on the next Refresh.
- - Old UI generated lines of the same type are commented out and if there are many of them (>4) the oldest ones get deleted.
- - The Key Mapper UI reads KeyLayoutMap (KLM) names from the Remap file. Keys not in the selection box may be edited manually into the text fields.
- - Select row then code to remap, then the same for the VK code that you're mapping to. Then mapping type. Finally, edit any state mappings etc. manually.
- - For most modifiers, you can select Left/Right or use the generic mod. The modifier is used in Mod, Tap-or-Mod (ToM) and MoDK mappings.
- - The mapping is written into the `Layouts_Override` file. If that key is also mapped in your (Base)Layout.ini, write the line to `layout.ini` or it won't work.
- - Added a `Write to layout.ini` button to the KeyMapper. Such mappings will override other LayStack mappings. The default Submit button writes to `Layout_Override`.
- - The Settings UI lets you choose between several EPKL settings. It shows their current value and any same-line comments. Edit their value and submit.
- - The UI-adjustable settings have to be in the `Settings_Default` file and specified in the "setInGUI" entry of the `EPKL_Tables.ini` file.
- - To allow the Settings UI to work, EPKL can now use a Settings Override/Default stack (like with the Layouts files) instead of just `EPKL_Settings.ini`.
- - The ߧ/þÞ/ŋŊ ligatures from the Colemak-eD AltGr layers were added to the RingAbove-Lig dead key as spares.
- - Moved Cmk-eD/VK as subdirs under a Colemak folder, like other layouts are organized (`Layouts\MainLay\3LA-LT[-LayVar]_KbT[_Mods]`).
- - The Tarmak layout folders were also renamed to use the standard format. Tarmak step # is now a Tm# Layout Variant.
- - The layout shortcuts for EPKL_Layouts files were tweaked somewhat, renaming Variant from `@L` to `@V` and making the underscore before `@K` explicit.
- - Switching Slash and Backslash for Wide modded Extend brings the WheelLeft/Right keys together. Used it for Colemak-ISO-CAWS. Less intuitive for (C)AWide Ext2.
- - Added a `LayMain(\3LA)` setting and `@L` shortcut for the main layout in the Layouts files. It may specify a 3-Letter Abbreviation (3LA) for subfolder names.
- - If not set directly, the 3-Letter Abbreviation is found from the Tables file. Failing that, the three first letters of LayMain are used.
- - Renamed the KLM key code `_DT` (OEM_PERIOD) to `_PD` and `_EQ` (OEM_PLUS) to `_PL` for better compatibility with the actual VK names. Also updated the HIG files.
- - Added a 'hideImageState' setting to hide certain help image shift states. Some users may want only AltGr, Extend and dead key images to show.
- - Remaps and RemapCycle sections are now allowed in the LayStack. See the `_Test\Cmk-eD-Nyfee_ANS_CurlAngle` layout for an example.
- - LayStack Remaps and cycles will only be checked for if their sections are present in `layout.ini`. This is to avoid slowing down other layouts.
- - The Nyfee Colemak-DH mods were added to test LayStack remaps. His mods move `Z W X C F K (V)` and the Bracket/Minus/Equals keys.
- - Detection of current system layout VK codes through GetKeyVK().
- - This makes `key = VKey` mappings work as intended, enabling for instance Extend to see and use a key without changing its system layout mapping.
- - Added "System-VK" throughput layouts for Extend etc. users using VKey mappings. Ergomaps would also work on it. One could also remap some keys with states.
- - Non-Scandinavian installed ISO layouts such as the UK one, should now get the right VK codes detected for OEM_# symbol keys.
- - If the underlying system layout is changed while running EPKL, for now you should Refresh EPKL to get the codes reread correctly.
- - The old way of specifying VK remaps from the default KLM ANSI-based codes should still work, but shouldn't be neither necessary nor advisable anymore.
- - QWERTZ and especially AZERTY are special in that they require some letter remaps too. There are remaps for them in the Remaps file but no layouts using those.
- - Fixed: If a remap (cycle?) wasn't mapped to a cycle, it could lead to an infinite loop in ReadRemaps().
- - Fixed: Some Ext-Shift presses would get lost, especially after having pressed Ext-Ctrl.
- - Reworked extendKeyPress() to avoid this. Also let the Janitor clean up idle Ext-mods to be sure.
- - Reworked Extend modifiers further, to send with the AHK prefixes `+^!#` instead of holding down modifier keys. Seems smoother. Also, releasing Ext sends mods up.
- - Updated the non-Wide Sym and ANSI CAWS to the latest versions. ISO and ANSI are the same now. The non-Wide variants swap brackets with minus/plus.
- - Cz (Czech) ANSI variants. With no ISO key for Ůů, it was mapped to AltGr+Uu. There's optionally a map line to swap J and Z if desired, but it's non-standard.
-* EPKL v1.3.0: Compose/Completion and Repeat keys.
- - Repeat key: Set any state mapping to `®®` to make that entry repeat the previous key. Good for avoiding same-finger bigrams.
- - Compose/Completion key: Set any state mapping to `©` to use it for composing up previously sent characters using specified tables.
- - The ISO key's unshifted state has been set as a Compose key (`©Def`) by default, editable in `EPKL_Layouts_Default.ini` or the LayStack.
- - Compose tables are kept in a specified file, by default `Files\_eD_Compose.ini`. Each named key has a list of tables to use.
- - As a Compose key, this is like a post-hoc version of the famous Linux Compose method. It's a very powerful tool for producing new output!
- - Instead of pressing the Multi/Compose key before a sequence, in EPKL you press the sequence then Compose.
- - You can get, say, é by pressing e,',Compose. The `e'` sequence is deleted first.
- - As a Completion key, the previous input is kept and added to. This is specified by the tables entry in the Compose file.
- - This is handy for making common n-grams easier. Some Colemak examples are: E-comma, UE, SC, Que/And/The/Ion.
- - By default the method will look for the longest possible sequences first. You can adjust this behavior in the Compose file.
- - Compose key entries can be any Unicode text, or even use EPKL prefix-entry syntax to do pretty much anything. Backslash escapes are allowed.
- - Note: VK mapped keys and ## mapped states can't be used for composes, as EPKL can't know what their output is. E.g., `88 ⇒ ∞` w/ ## numbers.
- - The standard Linux X `en_US.UTF-8` compose file was imported to `Files\_eD_Compose.ini`. Only entries starting with `` were used.
- - You can compose with any single-character input like dead key releases and AltGr mappings. So using the x11 compose, e.g., `~(α` ⇒ `ἇ`.
- - Backspace pops the last character from the Compose queue so you can correct a mistake and write the right sequence.
- - See the `_eD_Compose.ini` file for more examples and explanations.
- - Compose table import module: Converts actual Linux tables like /usr/share/X11/locale/en_US.UTF-8/compose (~5000 lines) to EPKL Compose.ini entries.
- - Composing Linux key sym names are translated to their U####[#] Unicode hex values as .ini keys, using a keysym file like the X keysymdef.h one.
- - The [keysyms.txt](https://www.cl.cam.ac.uk/~mgk25/ucs/keysyms.txt) file by [Dr Markus Kuhn](https://www.cl.cam.ac.uk/~mgk25/) uses proper Unicode.
- - Moved layout variants into their own folders to reduce clutter, and for better variant documentation placement. Updated the Layout/Settings GUI accordingly.
- - Layout additions:
- - Added Nyfee's ColemaQ mod and NotGate's ISRT alias IndyRad layout, as ANSI Cmk-CA mods in the `_Test` folder. Nyfee's mod has his own Sym mod included.
- - Added the Cmk-DpgH mod using SteveP's `D>P>G` loop which leaves the left hand bottom row alone. It's considered a secondary, somewhat inferior variant.
- - Added Michael Dickens' MTGAP layout as an eD base layout, and some ergo mods for it. There are many MTGAP variants; I used the "main 30 keys" one.
- - April's Foal! The Foalmak layout is an April Fool's joke layout by Semi at the Colemak Discord. It's still better than QWERTY, heh. And it's got nice images!
- - Added Nyfee's new Colemak-QI mod as a Colemak variant, CAS & CAWS modded. Also the "extra mile" QI;x mod as `_Test` layouts like before.
- - Layer/variant additions:
- - Added some symbols to the RingAbov-Lig (ring symbols), Stroke-Bar (ballot boxes on s/v/x), Macron (trigrams on 0-7) and DotAbove (dice on 1-6) dead keys.
- - Added the ijIJ digraphs and ijIJ bigrams to the Nl layouts, on the `OEM_102` "ISO" key and AltGr+iI, respectively.
- - Added a full set of CAWS locale variants.
- - Added (Curl)AngleSym Colemak-eD variants. The non-Wide Sym variant now keeps Plus/Equal next to 0 and brackets above another as in the Wide variants.
- - Added a Reset button to Layout/Settings. It deletes all UI-made lines for the current setting in the Override file, including commented-out UI lines.
- - Separate BaseLayout for the Greek (Gre) and Kyrillic (Kyr, Ru/Bg) scripts. This removes the need for full mappings in layout files. Bg keeps the necessary mappings.
- - Fixed: Minor bug in which the Settings GUI wouldn't try to make a new Override file but just lead to a file read error instead.
- - Fixed: After the Ext-mods rework, spamming modded Ext presses led to stuckness (~5 s for Ext+S+N). Afterwards, Extend got wonky, w/ Ext+S+T+N the arrow was stuck.
- - Fixed: Layout settings didn't initially show type/variant/mod. Arrow cycling back/forth "removed" VK/variants. Selecting a valid combo removed the problem.
- - HIG updated so shift state help images show parseable entries like bigrams correctly.
- - New mappings for Ext-tap `wfpblu`. `{Ext-tap,w}` opens Windows Explorer; useful since the Win+E shortcut may be compromised in Colemak due to a hardwired Win+L.
- - Updated the EPKL compiler to Ahk2Exe from AHK v1.1.27.07. Later versions are currently not fully compatible with EPKL source, causing trouble with AltGr.
- - A `##` state entry now sends the key's VK## Blind. Good for, e.g., `Win+` which doesn't work otherwise. Warning: Output will depend on your OS layout.
- - In particular, if you run a self-made MSKLC layout underneath in which letter and/or `OEM_` VK codes are wrong, the result will be odd.
- - Added a `BaseLayout_Cmk-eD-NoVK.ini` file with only direct state mappings. If the VK mappings cause you any trouble, point your `layout.ini` to this one.
- - Cut back on VK ## letter mappings in `BaseLayout_Cmk-eD.ini` again, as these cause some chained dead key outputs like ự and ậ to be preceded by an unwanted space.
- - Added DK images for ANS AWide and CAWS, in addition to the existing vanilla and CAW. For ISO, we already have Angle, AWide, CAW and CAWS.
- - Reworked the `@` layout codes. ErgoMod/`@E` is now HardMod/`@H`, as Curl/DH and Sym are also ergonomic mods. MainLay is now `@L` and the ergo mod ensemble `@E`.
- - Tidied up some complex remaps like `SL-BS,V-B` for Ext. Made `Ext-CAW(S)_@K` remaps instead. Ext1/2 images were also renamed/copied to be simpler and more consistent.
- - The SL-BS swap is good for `Extend-CAWS_ISO`, bringing the WheelLeft/Right keys together. Since Ext1 and Ext2 use the same remap, it wasn't done for AWide/CAW.
- - Background image files were renamed more consistently.
- - Replaced the global PklHotKeyBuffer queue string with a global array.
- - Mirrored Colemak BaseLayouts. The AltGr layer holds mirror mappings, and ergo mods can be used normally. The Sym mod may not be ideal for it.
- - There's a separate base layout for Cmk-DH to make mirroring work as it should. Curl mod remaps should not be added to the resulting layout, just other mods.
- - The AHK Send command sends active modifiers up before a sent character/string, and down after, before the final up as you release them physically.
- - Specifically, after an `AltGr` key press AHK sends both `LCtrl` and `LCtrl+Ralt` down/up. If this happens too fast, they may get jumbled.
- - Tried adding `{LCtrl Up}` to getAltGrState(), ~15 ms after `{LCtrl Down}{RAlt Down}`. It did not fix the stuck `LCtrl` problem.
- - Using the AHK v1.1.27 `{Text}` mode avoids the first `LCtrl`, so it may help.
- - However, Text mode doesn't work with Win+Key shortcuts, so it's only used for single-glyph mappings on AltGr layers.
- - Fixed: Earlier, if Win+v (Paste Clipboard) was pressed, the clipboard would often close again unless Win were released very fast.
- - Seems all the `LCtrl+RAlt` sending around `AltGr` in `pkl_SendThis() `wasn't necessary? It has been removed.
- - Added the `{Text}` mode (AHK v1.1.27+) to PowerStrings, and made it default. It's more reliable for special characters.
- - The `img_Positions` setting may define which help image positions are allowed. By default `TL,TM,TR,BL,BM,BR` (Top/Bottom + Left/Mid/Right).
- - Made string matches case sensitive using StringCaseSense. Hope that didn't break anything...?
- - Fixed: Win+Spc was broken in commit "Repeat and Compose keys" (506e5b). It sent a space instead. The error was in pkl_Send().
- - In the `EPKL_HelpImgGen_Settings` file, the BrutalMode setting governs whether the EPKL HIG moves generated images straight into the layout folder.
- - If this setting is true, generated images may overwrite any existing ones. Also, the `ImgGen_` temporary folder is deleted after use.
-* EPKL v1.3.1: Compose/Completion developments. Folder/file restructuring. Cmk Heb/Epo/BrPt/Nl variants, Ortho kbd types, Boo layout, Dvk-Sym.
- - Prefix-syntax Repeat and Compose/Completion mappings. In addition to key states, you can now map Extend or DK mappings to ®®/®# or ©###.
- - If mapping a ©### key to a DK release, it must be preloaded elsewhere. Map it to an unused state or Extend mapping to achieve this.
- - Mapping a state to `®#` where # is a hex number will repeat the previous key # times. This is affected by modifiers, but not sticky ones.
- - The Repeat key now resends the last character, not the last key. Repeat used to be affected by modifiers and prone to errors.
- - Single-char Compose output is pushed to the LastKeys queue, thereby allowing some compose chaining. Example: `g'a` → `α` then `'` → `ά`.
- - Composing `U####[#]` where `#` are hex digits, sends the corresponding Unicode character
- - Compose table entries in the LayStack files override those in the Compose file. Use sections for existing tables like `[compose_adding]`.
- - Remapped dead key combining accents to `© ø Ø` to account for the Compose key taking the place of `œ` in many cases, and NBSP being iffy.
- - Tidied up the Tarmak folders with icon and Extend image links to a `_Res` folder instead of local files
- - The img_HideStates setting can hide the `ext` layer image too, and even DK shift states specified as `dk#`; # is a shift state (0,1,6,7).
- - The BaseLayout setting in layout.ini can now take a `..\` syntax.
- - Added ANS-Orth/ISO-Orth Colemak-eD. Images are still row-staggered, but this should clarify which ergo mods are for which board types.
- - The bracket-lift Sym mod (Sym-Br) looks better on ortho boards than the standard (Sym-LBr). Images were made for both mod variants.
- - Suspend by layout Locale ID. Should make EPKL work better for users of IMEs such as Korean, as they may conflict with non-QWERTY layouts.
- - The suspendingLIDs setting uses 4-xdigit LID codes as found in the About... menu. Use the Locale ID, not the Language one.
- - An `--` entry allows disabling EPKL hotkeys in the `EPKL_Settings_Override` file. Earlier, you'd have to use an unused key like `Sleep`.
- - Added homing-nubbed help image ModState overlays. For now, there's a "GreenBlob" set for non-Wide and Wide homing, some with FShui colors.
- - Usage: In layout.ini, change the `img_ModsDir = Files\ImgModStates\GrnBlob` setting by appending `-HomeNubs[Wide][-FShui]`.
- - Allowed links for layout images, so layouts that use the same images as others don't need to keep their own copies.
- - Made DK images in a local `DeadkeyImg` dir work with the ones set in `img_DKeyDir`. This also alleviates the need to declare a DeadkeyImg dir.
- - Added the Boo (Dvorak-like modern) layout.
- - Added a Programmer Dvorak Symbol mod, affecting the Number row plus remapping ]} → @^ and swapping '" ↔ ;:.
- - Disclaimer: This is a Dvorak Sym mod inspired by the Programmer Dvorak layout by Roland Kaufmann. It does not claim to be that layout.
- - For the Nl locale, the ISO key was reclaimed as Compose! Kept ij on the images. Note that composing ij/IJ makes the ij/IJ ligature.
- - Also, a Compose completion was added so that i,© → `ij`.
- - Esperanto variant, based on Compose. Like the normal Colemak-eD but with composes for ĉĝĵŝŭ added.
- - Compose key on X for ANSI, since X isn't used in Esperanto. To type X, hit K, X or AltGrX.
- - Added Hebrew layouts. See the `Cmk-eD-Heb` layout folder and the Forum Locale post.
- - Fixed: A CapsLock off is sent at startup to avoid CapsLock being stuck on after an EPKL refresh.
- - Fixed: Using relative paths for icon files, multiple layout selections wouldn't show the correct icons.
- - Fixed: Setting any mod in the EPKL_Layouts file would make layout shortcuts that don't use mods fail.
- - Fixed: Subfolder structure added to the MainLay parameter the Colemak and Tarmak layouts. Consistent naming scheme for all such subfolders.
- - Fixed: The Layout Selector would show non-existing mod combos for, e.g., ANS if there was a KbdType like ANS-Orth present
- - Fixed: Capitalized sequences didn't compose if followed by a lowercase version in the table. Example: `LJ Lj lj → LJ lj lj`; `Lj` didn't happen.
- - Fixed: Pressing a DK twice released both its base characters instead of just one. Now only base char 0 (the s0 DK entry) is released.
-* EPKL v1.4.0: Better Send for key mapping. ScanCode key mapping. Dual-function CoDeKey (Compose+Dead key).
- - EPKL now sends separate KeyUp and KeyDown events for VK/SC mapped keys. Typing games and typing tests should work fine now.
- - This is a pretty huge development, really! It's a step in the direction of gaming-friendly EPKL.
- - Dual-function Compose/DK "CoDeKey": If a sequence isn't recognized by the Compose key, it becomes a dead key (@co0) instead.
- - This is very nice for locale layouts' special letters. I've put mine next to my mid-board (ISO) Compose key for easy rolls.
- - I've also made punctuation-plus-space home row mappings, ++ on the `NEIO;UY'-` keys. These are great on a thumb Compose key!
- - Several default X11 sequences cause trouble with this: `c+` (caron), `b+` (breve), `ng` for ŋ, `ae` for æ etc.
- - I had to nuke/unselect most one-char composes/completions, to make sure we don't stumble over a sequence when wanting the DK.
- - Some sequences were restored with a leading apostrophe, like for instance `'ng` instead of just `ng` for ŋ.
- - It isn't on by default in case someone finds it overmuch. Turn it on with a `CoDeKeys` entry in `EPKL_Settings_Override.ini`.
- - Added a separate dead key for the Shift-Compose mapping, `@co1`. Using the CoDeKey © key, we can then have both @co0 and @co1.
- - For now, it points to the Ext_Command release table. Slight caveat: Its releases are Shift sensitive, so be mindful of Sticky Shift timing.
- - A `CoDeKeys` setting in the Settings file determines which Compose keys are CoDeKeys. The keys themselves are defined in the Compose file.
- - A syntax for Sticky Mods, e.g., {Shift OSM} in mapping entries. Handy for one-shot Shift on CoDeKey entries, for instance.
- - This syntax works with any prefix-entry `α* β=` (AHK code) entries.
- - This is necessary to use OSM Shift in a string with VK/SC mapped keys, as their Send methods don't cancel {Shift DownTemp}.
- - A new `ScanCode`/`SKey` key mapping type, sending a key's scan code instead of the more complex VK mappings. This is more robust in some cases.
- - KLM names such as `QW_A` or `qwBSP` are allowed for SC mapping, in addition to the traditional `SC###`.
- - Several keys like PgUp/PgDn etc were changed from VK to SC mapping. Keys may be SC mapped to themselves by mapping them just as `System`.
- - The `System` passthrough layout now works as intended, using `System` SC key mappings throughout.
- - You could even send vk## or vk##sc### entries using `SKey`-type mappings, as these mappings are compatible with all AHK key Send syntax.
- - Sending SC is safer in the case of keys that have both a normal and a NumPad version, as AHK by default sends the NumPad version.
- - This was already fixed by adding the SC for the normal version of these keys when sent as VK. You can still send any vk##sc### combo.
- - WARNING: SC-mapping may be less robust than VK-mapping vs AZERTY et al. For these, the VK-remap with EPKL's VK detection should be better.
- - Compose can now work with VK/SC mapped keys. This allows you to compose accented letters etc with a VK/SC/System type layout.
- - The GetKeyName(sc) function doesn't work with shifted output etc, so I used a DLL call to ToUnicodeEx.
- - This worked, but had a side effect: OS Dead Keys now output, e.g., `¨¨` (whereas before they did nothing), due to a GetKeyboardState call(?)
- - A "Special keys" tab on the Settings GUI can define Caps key behavior, Compose keys and CoDeKeys.
- - These can also be set using the Key Mapper tab and `.ini` file editing, but this way should be more clear for newcomers.
- - Remaps in BaseLayout files are now fully respected, so a Remap section in the layout.ini file is no longer mandatory for remapping variants.
- - You can hide the images for a specific dead key, rather than dead key images in general. To hide all DK images, specify 'DKs' (WIP).
- - Added an optional `«»`-enclosed display tag to the prefix-entry syntax, so help images can show any desired short string on a key.
- - Example: «,␣» α{,}{Space} ; Comma-Space (on @co0)
- - Changed the Prefix-Entry prefix for Unicode points from `«` to `†` to accommodate the new `«»` HIG prefix. Plus, it looks nicer. Still using `~` for it.
- - Help image entries more than one character long may be scaled by a `fontSizes` table entry in the settings file.
- - Dead key images can utilize a "disp0" entry that contains a string to be displayed on the key, enclosed in any non-space glyphs (like `«»`).
- - NOTE: Remember to restart EPKL before image generation when there are changes to DK images
- - Inkscape calls by the HIG was split into batches ruled by a batchSize setting. My Inkscape couldn't handle more than around 80 files per call.
- - You can have a hotkey run a debug/utility routine (in `_PKL_main.ahk`) of choice, by means of `epklDebugHotkey` and `whichUtility` in the Settings files.
- - Moved all HIG settings from their separate file into the Settings file: They'll be easier to find, and Settings_Override works on them.
- - The "kaomoji" speech bubbles and other links are now PowerStrings, and their Compose and DeadKey entries updated.
- - Fixed: Shifted state entries with an unshifted character would get the character shifted by sticky Shift. This is the case for Dvorak Sym.
- - As a fix, the offending entries were given `→` prefixes so they're sent literally.
- - Note that Win+‹key› (here Win+number) shortcuts won't work with this kind of mapping. I don't know a fix that works in both cases.
- - Fixed: The caron dead key in the MSKLC files was missing the important Čč entries.
- - Fixed: Several language files had the wrong encoding so menus became full of `�` symbols.
- - Fixed: VK-mapped PgUp,PgDn,End,Home,Ins,Del and arrows had their NumPad versions sent as per AHK Send default, due to degenerate VK codes.
- - ScanCodes are now added to the VirtualKey codes (VK21–28,2D–2E) so their normal versions (SC 149,151,14F,147,152,153 etc) are sent.
- - Fixed: QWERTY-VK layouts pointed to the Colemak-VK BaseLayout_Cmk-VK without the Cmk-VK subfolder.
- - Fixed: An end-of-line comment in the baseLayout entriy would cause the layout to fail.
- - Prefix-Entry documentation updated, in main and Files README. Also added to the KeyMapper Help screen.
- - Cmk-CAWS-eD MicroSoft Keyboard Layout Creator `.KLC` files in `Other\MSKLC`, both w/ ISO-Angle and an ANSI-Angle(Z) mods. Builds in `.zip` files.
- - Vanilla Colemak-eD also added to the MSKLC folder. The Vanilla layout is ISO/ANSI agnostic.
- - Rearranged the Layouts_Default (and Override_Example) file so that there's a commented-out `;[pkl]` section for Tarmak, then a `[pkl]` w/ the rest.
- - That way, you only have to uncomment the first `;[pkl]` to get Tarmak! Much simpler. Also, more settings can be uncommented and ready.
- - Tidied up the Tarmak layout files, using existing BaseLayout/remaps instead of explicit VK mappings.
- - Separated the layout shorthand `@L` into LayMain (`@L`) and LayPath (`@P`). It's clearer, and you can use `@L` as LayName in description strings.
- - Dead key images for Colemak-CAW variants now point to CAWS images since I'll be trying to support only the best and most popular combos.
- - Added the Semimak-JQ variant. It's a simple `Q > J > QU` cycle from the original.
- - Reworked the Greek Colemak locale layouts, replacing the rare diaeresis letters on Q and ISO with Tonos/Diaeresis DKs and the default Compose.
- - Note that the Compose method allows accented/polytonic Greek letters to be written as sequences using punctuation.
- - Added Dutch Colemak-eD ANSI (`Cmk-eD-Nl_ANS`) variants, as most Dutch users actually have ANSI and not ISO boards – the poor things...
- - Updated the German/De locale with the letter ẞ (capital ß). The § sign was moved to AltGr+P.
- - Added palatal-hook letters to the ogonek-commabelow DK, as only the s mapping overlapped. Mapped ᶊ to ß (AltGr+s) for this DK.
- - Also, Macron-Below on the Macron key, more special digits and several other new mappings. Reworked turnstiles on the Science DK.
- - Added `FRST/WP` arrow symbols to the Macron DK. `FRST` is an arrow cross, `WP` left-right and up-down arrows. Single on unshifted, double on shifted and AltGr.
- - These arrow symbol mappings are geometrically mapped in a Colemak-centric way. For another layout, revision is desirable.
-
-
-
-TODO:
------
-* A "janitor" timer that checks whether the underlying Windows layout has changed (affects dead keys)
-* Generic dual-role keys and/or modifiers. For instance, home row keys might act as modifiers when held and letters when tapped.
-* An import module for MSKLC layout files and other formats.
-* Dead key chaining, allowing one DK to release another.
- - EPKL allows the @## syntax but it doesn't work as it should yet. Because it resets PVDK?
- - Chainable dead keys would allow a true Mother-of-DKs for Compose-like "tap dance" sequences like {MoDK,t,n}->ñ.
-* Rework the AltGr code. Check whether Ralt (SC138 without LCtrl) will be AltGr consistently in layouts with state 6-7.
-* Add to unmapped dead key functionality
- - Specify release for unmapped sequences. Today's practice of leaving an accent then the next character is often bad?
- - That way, one could for instance use the Vietnamese Telex method with aou dead keys (aw ow uw make â ô ư) etc.
- - One catch would be that the dead key wouldn't release until next key press, but that may be acceptable.
- - Specify, e.g., the entry for s1 similar to today's s0 entry. (U+0000–U+001F are just ‹control› chars.)
- - That'd be backwards compatible with existing PKL tables, and one can choose behavior.
-* Truly transparent image background without the image frame. Overall transparency (but not transparent color?) works.
- - Transparent foreground images for all states and dead keys.
-* More dead key mappings:
- - Greek polytonic accents? Need nestable accents, e.g., iota with diaeresis and tonos. May be done by Compose instead, though.
- - Kyrillic special letters like ёЁ (for Bulmak) җ ӆ ҭ ң қ ӎ (tailed); see the Rulemak topic.
- - IPA on AltGr+Shift symbol keys?! A proposed system based on phonetics, having DKs based on position and suchlike.
- - DKs for vowels rounded/unrounded (near-)front, central, (near-)back. Release w/ I(YU)-E(ØO)-O(Œ)-A(Æ) for close-open, U/Y?/Æ for inbetweens?
- - For consonants, DKs for (bi-)labial, dental, (post-)alveolar, retroflex, palatal, velar, uvular, pharyngeal/glottal?
- - Release with the voiced/unvoiced P/B, T/D, M, N, R, F/V, S/H, L. Have to tweak it a little to account for the whole chart.
- - Also need to provide clicks (! etc), voiced implosives (hooked), ejectives (ʼ), diacritics and others. May sequence DKs for that?
- - Apart from combining diacritics, IPA needs superscript `ʰ ⁿ ᶿ ᵊ ˡ ˣ ʷ ˠ ˤ ʲ`. The Acute DK should be enough... except it conflicts for nlw.
-
-
-INFO: Some documentation notes
-------------------------------
-* Virtual key code links:
- http://www.kbdedit.com/manual/low_level_vk_list.html
- https://msdn.microsoft.com/en-us/library/ms927178.aspx
- https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx
-
-* "Anti-madness tips" for EPKL (by user Eraicos and me):
- - PKL using AHK v1.0: Script files need to be ANSI encoded. They don't support special letters well.
- - EPKL using AHK v1.1-Unicode: Supports scripts in UTF-8 w/ BOM.
- - EPKL .ini files may be UTF-8 encoded, with or without BOM. Source .ahk files should be UTF-8-BOM?
- - PKL: Don't use end-of-line comments in the .ini files. OK in layout.ini because of tab parsing.
- - EPKL: End-of-line comments are now safe.
- - In layout.ini, for old PKL:
- - Always use single tabs as separators in layout.ini, also between a VK code and the word 'VirtualKey'.
- - The CapsLock key should have scan code 'CapsLock' instead of SC03A, if using 'extend_key = CapsLock'.
- - The Extend key should be mapped or it won't work, e.g., 'CapsLock = CAPITAL VirtualKey'.
- - EPKL changes all of the above: Any whitespace delimits, and Extend is mapped as 'Extend Modifier'.
- - In the Extend section:
- - Don't have empty mappings in the Extend section. Comment these out.
- - By default {} is added to send keys by name. To escape these, use a prefix-entry or }‹any string›{.
-
-
-**AHK key remapping**
-AHK direct key mapping works with games, unlike the PKL way of using the Send command to send (KeyDown followed by a KeyUp)
-The classic remapping of the form `a::b` actually consists of:
-```
-*a::
-SetKeyDelay -1
-Send {Blind}{b DownR}
-return
-
-*a up::
-SetKeyDelay -1
-Send {Blind}{b Up}
-return
-```
-The `DownR` format replaced `DownTemp` with AHK v1.1.27. It tells other Send command to ignore this key's down state.
-
-
-**Entry format info from Farkas' sample.ini layout file:** (Note that EPKL now uses '@' for 'dk' entries etc)
-```
-Scan code =
- Virtual key code (like in MS KLC)
- CapsState (like in MS KLC):
- If CapsState == vk or VirtualKey
- When you press this key, it sends only the virtual key.
- It is very useful, if you install your special layout, and you
- would like to extend it. (See extend_* layouts)
- Else If CapsState == modifier
- You can use this key as a modifier, like Shift, RAlt (== AltGr)
- Else If CapsState & 1 (first bit set)
- Shift + Key == CapsLock + Key
- Else If CapsState & 4 (third bit set)
- AltGr + Shift + Key == CapsLock + AltGr + Key
- Output for each shift state (see http://www.autohotkey.com/docs/commands/Send.htm):
- # send utf-8 characters (one or more)
- *#### send without {Text} – that is, interpret key names (and ^+1#{} ?) in AHK style
- =#### send {Blind} – that is, keep the modifier state intact
- %#### utf ligature
- -- disabled key/state entry
- dk## deadkey (EPKL: @## is used instead, w/ ## from a DeadKeyNames section)
- ## EPKL: PowerString name (named strings that are sent by the chosen method)
-NOTE: Use tabs as separator for these entries!!!
-
-;scan = VK CapStat 0Norm 1Sh 2Ctrl 6AGr 7AGrSh Caps CapsSh
-SC002 = 1 1 1 ! ; QWERTY 1!
-SC003 = 2 0 2 ={Left} ; QWERTY 2@
-SC004 = 3 0 3 *{Right} ; QWERTY 3#
-SC005 = rshift modifier ; QWERTY 4$
-SC006 = 5 0 dk1 dk2 ; QWERTY 5% (EPKL: DKs are named for instance @0b4 or @060)
-
-[deadkey1]
-; 0 = unicode number of the "accent"
-0 = 126 ; ~
-; [Unicode number of the base letter] = [Unicode number of the new letter] ‹tab› ; comments
-97 = 227 ; a -> ã
-```
+[EPKLsc]: /Source/EPKL_Source/ (EPKL_Source folder/README)