This is where EPKL keeps its layout files.
- Layout folders can be organized by main layout, variants and mods. But they don't have to be.
- A main layout folder can organize a tree of variant and mod subfolders.
- Layout variant/mod folder names describe layout/variant/mod features. These are used by the Layout Selector.
- It starts with a three-letter abbreviation (
3LA
) for the main layout. - Next (preceded with a hyphen) follows the layout type, such as
VK
(VirtualKey) oreD
(my state mappings). - Next comes the variant. These may be anything really – they're often locales such as
BrPt
for Brazil/Portugal. - The names of the layout folders themselves then contain the keyboard type (
ISO
/ANS
), flanked with underscores. - The last part is the mod. Again, anything's allowed; mine are generally a
CurlA(ngle)WideSym
ergonomic combo.
- It starts with a three-letter abbreviation (
- Every layout variant/mod folder must contain a
Layout.ini
file. This file defines the layout.- A
Layout.ini
file may point at aBaseLayout
file that defines common features for the main layout. - Default common features for all layouts are in the
EPKL_Layouts
files in the main folder. - This file hierarchy is known as the
LayStack
. There's a mini-stack for general settings too. See the main EPKL Readme.
- A
I don't try to provide all possible layouts with EPKL, obviously. The ones you will find here are in these categories:
- Useful and recommended, such as Colemak(!) or, say, Canary/Gallium/Graphite/...?
- Of historical interest, such as Dvorak or QWERTY
- Interesting to me and of some promise at the time (Boo, ISRT, MTGAP, Semimak, Sturdy etc)
- Just for fun! (Foalmak, QUARTZ)
If you want me to add a layout of your choice, the answer may be no. Even if you made the files for it. Especially if that layout is Workman, Norman, Minimak or another one of those layouts I feel are poor and oversold choices (and the AltKeyboardLayout community largely agree with me). Sorry, but that's how it goes.
But you're free to ask! Who knows, maybe you pique my interest with a new and promising development in layout design.
Most of my layouts have a base layout defined; their layout section may then change some keys. You can add key definitions following this pattern.
Here are some full shift-state mappings with a legend:
; SC = VK CS S0 S1 S2 S6 S7 ; comments
QW_O = Y 1 y Y -- › » ; SC018: QW oO
QW_P = vc_SC 0 ; : -- @0a8 … ; SC019: QW pP - dk_umlaut (ANS/ISO_1/3)
Where:
- SC & VK: Scan code ("hard code") & Virtual Key Code ("key name"); also see my Key Code Table.
- For SC, you could use an AHK key name instead. For VK you need Windows VK names/codes.
- Instead of the technical SC or VK you may use my more intuitive KLM codes. See the Remap file.
- Example: The above SC are for the O and P keys; these are mapped to their Colemak equivalents Y and ;.
- The
OEM_#
VK names are ISO/ANSI keyboard type specific. For these, it's much better to use KLMvc_##
codes. - Example: The KLM code
vc_SC
is the ; key, which is VKOEM_1
for ANSI butOEM_3
for ISO keyboards. - If the VK entry is VK/ModName, that key is Tap-or-Mod. If tapped it's the VKey, if held down it's the modifier.
- The VK code may be an AHK key name. For modifiers you may use only the first letters, so
LSh
->LShift
etc.
- CS: Cap state. Default 0; +1 if S1 is the capitalized version of S0 (that is, CapsLock acts as Shift for it); +4 for S6/S7.
- Example: For the Y key above, CS = 1 because
Y
is a capitaly
. ForOEM_1
, CS = 0 because:
isn't a capital;
.
- Example: For the Y key above, CS = 1 because
- S#: Modifier states for the key. S0/S1:Unmodified/+Shift, S2:Ctrl (rarely used), S6/S7:AltGr/+Shift.
- Example: Shift+AltGr+Y sends the
»
glyph. AltGrAltGr+; has the special entry@0a8
(umlaut deadkey).
- Example: Shift+AltGr+Y sends the
- EPKL prefix-entry syntax is useable in layout state mappings, Extend, Compose, PowerString and dead key entries.
- There are two equivalent prefix characters for each entry type: One ASCII (easy to type), one from the eD Shift+AltGr layer.
- If the mapping starts with
«#»
where # is one or more characters, these are used for Help Images. → | % ‹entry›
: Send a literal string/ligature by the SendInput {Text}‹entry› method§ | $ ‹entry›
: Send a literal string/ligature by the SendMessage ‹entry› methodα | * ‹entry›
: Send entry as AHK syntax in which +^!# are modifiers, and {} contain key namesβ | = ‹entry›
: Send {Blind}‹entry›, keeping the current modifier state† | ~ ‹entry›
: Send the 4-digit hex Unicode point U+Ð | @ ‹entry›
: Send the current layout's dead key named ‹entry› (often a 3-character code)¶ | & ‹entry›
: Send the current layout's powerstring named ‹entry›; some are abbreviations like &Esc, &Tab…
- A
®®
mapping repeats the previous character. Nice for avoiding same-finger bigrams. May work best as a thumb key?- A state mapping of
®#
where#
is a hex number, repeats the last key # times.
- A state mapping of
- A
©<name>
mapping uses a Linux/X11-type Compose method, replacing the last written characters with something else.- See below and in the EPKL Compose file for more info. Compose tables are defined and described in that file.
- A
##
state mapping sends the key's VK code "blind", so whatever is on the underlying system layout shines through.- Note that since EPKL can't know what this produces, a
##
mapped key state can't be used in, e.g., compose sequences.
- Note that since EPKL can't know what this produces, a
Here are some VirtualKey/VKey, Modifier/Mod and Single-Entry mappings. Any layout may contain all types of mappings.
QW_J = N VKey ; QW jJ -> nN, a simple VK remapping
RWin = BACK VirtualKey ; RWin -> Backspace (VKey)
RShift = LShift Modifier ; RShift -> LShift, so it works with LShift hotkeys
SC149 = NEXT VKey ; PgUp -> PgDn, using ScanCode and VK name (the old/MSKLC way)
QWPGU = vcPGD VKey ; PgUp -> PgDn, this time with my more intuitive KLM codes
QWPGU = qwPGD SKey ; PgUp -> PgDn, this time with KLM scan code (SC) mapping
QW_U = System ; System mapped key. Uses whatever is on the system layout.
QWCLK = Disabled ; The CapsLock key will stop working while EPKL is running.
Entries are any-whitespace delimited.
You can make your own version of, say, a locale layout variant – for instance, using an ergonomic mod combo that isn't provided out-of-the-box:
- Determine which keyboard type (ISO/ANS), ergo mod and if applicable, existing locale variant you want to start from.
- Determine whether you want to just move keys around by VirtualKey/ScanCode mappings or map all their shift states like Colemak-eD does.
- Copy/Paste a promising layout folder and rename the result to what you want.
- In this example we'll make a German (De) Colemak[eD] with only the ISO-Angle mod instead of the provided CurlAngleWide.
- Thus, copy
Cmk-eD-De_ISO_CurlAWide
in the Colemak\Cmk-eD-De folder and rename the copy toCmk-eD-De_ISO_Angle
. - Instead of 'De' you could choose any locale tag you like such as 'MeinDe' to set it apart.
- In that folder's Layout.ini file, edit the remap and/or other relevant fields to represent the new settings.
- Here, change
mapSC_layout = Cmk-CAW-_@K
tomapSC_layout = Angle_@K
(@K
is shorthand for ISO/ANS). - Some Extend layers like the main one use "hard" or positional remaps, which observe most ergo mods but not letter placements.
- Here,
mapSC_extend = Angle_@K
too since Angle is a "hard" ergo mod. If using Curl-DH, you can move Ctrl+V withExt-CA--
. - The geometric ergo mods Angle and Wide alone are named
Angle
andWide
;AWide
for both. For the Curl mods, use C/A/W/S letter abbreviations. - If you don't know the name of your desired mod combo, look in a
Layout.ini
file using that combo. Or in the Remap file itself.
- Here, change
- Change any key mappings you want to tweak.
- The keys are mapped by their native Scan Codes (SC), so, e.g., SC02C is the QWERTY/Colemak Z key even if it's moved around later.
- However, I've also provided a more intuitive syntax, like
QW_Z
for the QWERTY Z key. See the next section to learn more about key mapping syntax. - The mappings in the De layout are okay as they are, but let's say we want to swap V and Ö (
QW_LG
) for the sake of example. - In the
[layout]
section of Layout.ini are the keys that are changed from the BaseLayout.QW_LG
is there, state 0/1 mapped to ö/Ö. - To find the V key, see the
baseLayout = Colemak\BaseLayout_Cmk-eD
line and open that file. - There's the V key, with the KLM code
QW_V
(scan codeSC02f
). - Now, copy the
QW_V
key line from the BaseLayout file to your Layout.ini[layout]
section so it'll override the baseLayout. - Make sure the
QW_LG
line you want is also active and not commented out with a;
, and then swap the key names (scan codes) for the two lines. - Alternatively, you could just edit the mappings for the affected shift states of the two keys in the
Layout.ini
file. - The main shift state mappings are
0/1
for unshifted/shifted, and6/7
for the AltGr states. See above for more info.
- Now, if your
EPKL_Layouts_Override.ini
layout selection setting is right, you should get the variant you just made.- From the Layout/Settings menu, you should be able to see and select it using the right options. Then you can let EPKL restart itself.
- Or, in the file set LayType/LayVari/KbdType/CurlMod/HardMod/OthrMod to eD/De/ISO/--/Angle/-- respectively (or use 'MeinDe' if you went with that).
- If you prefer to use another existing layout line in the file, comment out the old
layout =
line with;
and activate another. - You can also write the
layout = LayoutFolder:DisplayedName
entry directly instead, using the folder path starting fromLayouts\
.
- After making layout changes, refresh EPKL with the Ctrl+Shift+5 hotkey.
- If that somehow doesn't work, just quit and restart EPKL.
- To get relevant help images without generating them with Inkscape:
- Check around in the eD layout folders. Maybe there's something that works for you there despite a few minor differences?
- Here, you might either keep the current De_ISO_CurlAWide settings to see the German special signs without making new images, or…
- … edit the image settings, replacing AWide/CAWide/CAngle with 'Angle' to get normal ISO_Angle images without German letters, or…
- … make new help images in an image editor by copying and combining from the ones you need. I use Gimp for such tasks.
- If you do want to generate a set of help images from your layout you must get Inkscape and run the EPKL Help Image Generator (HIG).
- You can download Inkscape for instance from [PortableApps.com]{InkPrt], or install it properly. Make sure it's version 1.0 or newer.
- Point to your Inkscape in the
InkscapePath
setting in the EPKL_Settings file. - By default, the HIG looks for Inkscape in
C:\PortableApps\InkscapePortable\InkscapePortable.exe
, so you could just put it there. - To see the "Create help images…" menu option,
advancedMode
must be on in EPKL_Settings. - The HIG will make images for the currently active layout.
- I recommend making state images only at first, since a full set of about 80 dead key images takes a long time!
I try to keep to the same locale naming standard as Linux X.Org (xkb-data). That is, the ISO letter codes for countries, languages and scripts.
- Country and language codes can be seen in the Variant selections, primarily prepackaged for the Colemak main layout.
- Codes for scripts (such as Cyrillic or Hebrew) are used internally. Note that I use
Kyr
instead ofCyrl
for Kyrillic script. - For most scripts, the 3-letter language code is used instead (Gre for Grek, Heb for Hebr etc), as per X.Org and Unicode tradition.
The relevant ISO codes can be found at the following addresses:
- 2-letter ISO codes - Country: http://www.iso.org/iso/home/standards/country_codes/iso-3166-1_decoding_table.htm
- 3-letter ISO codes - Language: http://www.loc.gov/standards/iso639-2/php/code_list.php
- 4-letter ISO codes - Script: http://www.unicode.org/iso15924/iso15924-codes.html