Giter Site home page Giter Site logo

dreymar / bigbagkbdtrixpkl Goto Github PK

View Code? Open in Web Editor NEW
326.0 10.0 32.0 74.27 MB

"DreymaR's Big Bag of Keyboard Tricks" for Windows with EPKL

License: Other

AutoHotkey 73.35% Batchfile 0.50% C 22.81% HTML 3.34%
keyboard keyboard-layout dreymar-big-bag colemak colemak-layout pkl autohotkey ahk ahk-script portableapps

bigbagkbdtrixpkl's Introduction

DreymaR's Big Bag Of Keyboard Tricks - EPKL

The EPiKaL Portable Keyboard Layout program for Windows


EPKL help image, for the Colemak-CAWS layout



Θώθ – What Is This?

  • EPiKaL PKL, as its name states, is a portable keyboard layout program.
  • Portable means that it doesn't have to be installed, just run inside its folder.
  • You can run it from a USB drive, remotely or on your PC like any other program.
  • EPKL can map key presses like the installed Windows layout does.
  • You can use it to change single keys, or remap the entire layout.
  • It also supports special keys and functions. Read on for more info.

  • EPKL implements my Big Bag of Keyboard Tricks for Windows!
    • That is, my many layout mods and tweaks and bells and whistles.
  • It's mostly centered around the brilliant Colemak keyboard layout,…
  • … with or without my own [eD] AltGr layers and dead keys,…
  • ergonomic mods both for Colemak, the Tarmak learning layouts and other layouts,…
  • … and the incredibly useful Extend layers which work with any layout.
  • DreymaR's Big Bag of Keyboard Tricks at dreymar.colemak.org is my main info site.

  • EPKL has lots of improvements over the old abandonware PKL by Máté Farkas (2008–2010).
  • Nearly all my Big Bag "tricks" are implemented for EPKL, as layouts and accessory files.
  • Some non-EPKL BigBag/Windows stuff can be found in the Other folder, such as other keyboard tools.
  • Some non-BigBag stuff is found in EPKL too, including support for several other layouts.
    • I won't support just any other layout though, as I don't have time and energy to do so.
    • The layouts I have included for EPKL have all seemed interesting and/or promising to me.
    • Note: This does not include certain oversold layouts such as Workman and Norman.
    • I consider those flawed designs for which there are far better options. Really.
    • It does include Dvorak although that layout is dated now, together with some Dvorak mods.

Getting EPKL up and running

  • Download a full copy of this repository, or just its executable resources.
    • Under Release Assets, there's a .ZIP file with the files needed to run EPKL. Unzip and run!
    • For the newest updated Git commit with source code, instead Download ZIP from the green Code button.
    • For releases, the EPKL.exe binary is included. For commits, you must run Compile_EPKL.bat to produce it.
    • Note that some virus protection programs overreact to compiling Autohotkey (AHK) code of this type.
  • FAST LANE: If you simply want "vanilla Colemak" on a US/ANSI keyboard, just run EPKL.exe and type!
    • If you insist on having the Caps key as Backspace instead of the superior Extend key…
    • … in the Layouts Default file find the first ;QWCLK = BACK etc line and remove that semicolon…
    • … but first, read the "Can I map…" section below to know your options!
  • Run EPKL.exe inside its main folder in any way you like! Check its tray menu in the bottom right-hand corner.
  • To make EPKL start up automatically with Windows, add a shortcut to it in the Startup folder:
    • Create a shortcut to EPKL.exe (drag it while holding down Alt, or right-click and choose).
    • Press Win+R then type in shell:startup and hit Enter or press OK.
    • Move your EPKL shortcut to the Startup folder that just opened up. That should do it!

  • To choose a layout variant, select the Layout/Settings… menu option. The EPKL Settings User Interface pops up.
  • Choose a layout with your keyboard type, variant/locale and Curl/Angle/Wide etc preferences.
    • There are two main layout types: VK/SC which only moves your keys, and eD which maps each shift state.
    • There are several premade Locale variants, if you need to type in other languages. Check out which variants exist – they'll likely be eD variants.
    • There are several ergonomic variants, which you can read about in the Big Bag: Curl(DH), Angle, Wide, Sym…
  • Helpful help images are shown by default. To show them only when modifiers are pressed, change img_HideStates to 0 on the Settings tab. You can choose whether to show images at all, or which ones to show; see the EPKL_Settings file for more explanations.
  • This image shows the EPKL tray menu. Right-click the Co icon in the lower right corner of your screen, if necessary via the 'Show hidden icons' caret.

EPKL tray menu



These Aren't The Guides You're Looking For?

EPKL can be complex and confusing for the newbie. So we're very happy to present to you the…

Easiest way to setup DreymaR's EPKL on Windows, a brilliantly instructive YouTube video by Andrew Li. He even shows you how to make a multi-layout setup with for instance Colemak and QWERTY, which should be useful for some people.

If you find my info below and on the Big Bag pages too daunting and massive, do try it out. ( Θώθ)

External guides may not be fully updated to show everything the Layout/Settings menu can do for instance! So do try that, too. The Settings dialog holds some useful info points for each tab, and the KeyMapper tab has its own Help button.

EPKL layout dialog


The EPKL For Dummies guide by TorbenGB, sadly, is now outdated since it predates the Layout/Settings GUI. But if you want to edit EPKL files manually you can still learn the ropes there.



"I just want Colemak-DH(?) …"

What is Colemak-DH?

  • There are several different layout options and EPKL has many interesting ones. The two main Colemak flavors are standard/"vanilla" and DH.
  • Colemak-DH moves the D and H keys down instead of in the inwards "middle trench", so the home row curls downward.
  • Many new users ask whether Colemak-DH or vanilla is best for them. This is too long to discuss here, so look on the Cmk community page and elsewhere.
    • Briefly: DH makes the HE bigram easier, and removes some lateral stretches. Vanilla is better implemented on various platforms.
    • At the end of the day, the question is whether stretching inwards or curling downwards from the T/N home position feels better to you.
    • Some may have heard of DHk and DHm or other sub-variants. DHm is the DH standard now. It should be a one-size-fits-nearly-all.

How do I get Colemak-DH with EPKL?

TL;DR: Press Ctrl+Shift+6 then select the CurlAngle mod for your keyboard type (ANS or ISO)

  • EPKL by default gives you the standard Colemak for the ANSI keyboard type. Now let's choose something else.
  • As described above, open up the Layout/Settings… GUI from the EPKL tray menu.
  • To get the right layout, you should know your keyboard type. ISO has a key between Z and LShift, ANS not.
    • Don't worry about how your Enter key looks, but look for the ISO key at the lower left.
    • If Z and Shift are adjacent by default, you have an ANSI-type board.
  • Next, is your keyboard geometry standard row-staggered (rows shifted relative to each other) or ortholinear/column-staggered?
    • For the latter, use the -Orth KbdTypes. These also come in ANS/ISO, to account for which underlying key codes are used.
  • The Variant option is for locale solutions such as French or German Colemak, but may also contain other mods affecting the main layout.
    • If you're a simple USer without the need for such fanciness, leave the Variant/Locale setting at <None>.
  • Colemak-DH is an ergonomic Colemak mod or mod combo:
    • The DH mod in itself is named Curl in EPKL, because that's what it does physically: The home row is curled like the curve of your fingers.
    • For standard row-staggered keyboards (whether ANSI or ISO), Colemak with the CurlAngle mod equals the Colemak-DH layout.
    • The Curl-only mod is for ortho keyboards.
    • Many newbs on row-stag boards don't understand why an Angle mod is needed. Please strive to do so!!!

What are the options?

  • You'll notice that you can also select Wide and Sym ergo mods in most cases, up to a cool CAWS combo. Consult the Big Bag.
    • All combos aren't pre-made as that'd be too much work for me. To create new ones yourself, see below.
  • The next image shows Colemak-DH on an ANSI keyboard, together with the Symbol mod which affects the right-hand symbol keys.
    • In EPKL terms that's Colemak-eD_ANS_CurlAngleSym which may be abbreviated to Cmk-CAS.
    • Note the Angle(Z) mod that moves the XCDV keys one step to the left so your left wrist can be straight like on the right hand.
    • Every finger in the image has its own color, so make sure you do the Angle mod right!

Colemak-DH (CurlAngle) on an ANSI keyboard, with the Sym mod (Cmk-CAS)



"Can I map the Caps key to Backspace?"

Sure you can! But may I suggest you do something much better with it and use Extend for a lot more power? Or, how about the multilayer "MoDK" Tap-or-Mod-Extend with even more wonders?! See below for how that works.

For that matter, you could use your Caps as a Compose key, see below. There really are a lot of brilliant options for it.

Using Extend, you can easily press Ext+O for Backspace. Ext+T+O for Ctrl+Backspace deletes the previous word!

If you're still convinced you want to lose out on all that power and flexibility, then there are several ways you can do this:

  • By Menu: On the Layout/Settings menu's Special Keys tab, select your Caps key's desired behavior then allow EPKL to restart.
  • By KeyMapper: On the Layout/Settings KeyMapper tab, make a VKey or SKey-type CLK to BSP mapping and submit it.
  • By File: In your EPKL_Layouts_ .ini file (Default or, if present, Override), find or make these lines under the [layout] section.
;QWCLK = BACK    	VKey 		; SC03a: CapsLock as Backspace (CAPITAL -> BACK)
QWCLK = Extend  	Mod 		; SC03a: CapsLock as the Extend modifier
;QWCLK = BACK/Ext 	VKey 		; SC03a: CapsLock as a Tap-or-Mod key: Backspace on tap, Extend modifier on hold
  • Add a semicolon before the line you don't want, and remove the one before the line you do want to use.
  • Note the bottom line there? You can actually have both: Backspace on tapping Caps, Extend on holding it!
  • It's actually the default setting for the KeyMapper tab of the Layout/Settings dialog. Press the Submit button and you're on.

EPKL settings dialog



"I don't want your layouts but I still want EPKL"

You may want to use EPKL's functionality without opting for one of the available layouts. That's possible too.

  • You may of course make your own layout or layout variant. See below for more info.
  • But you may also run EPKL with your installed OS layout, to just get Extend and/or Compose. Or to map just a few keys.
  • To do that, use the System layout. It's designed to pass through the OS layout so whatever you have there will work with EPKL.
  • If you want an ergo mod for the Extend layer, you need to select/make the right mod combo in the EPKL Layouts\System layout file.

Key vs State Mapping

There are two main ways EPKL handles key presses intercepted by its keyboard hook:

  • Key mapping means that EPKL sends a new keypress event to the OS. It may be the same key or a different one.
    • The types of key mapping available are by Scan Code (SC) or by Virtual Key (VK) code.
    • These generally work the same. Windows translates between them as necessary.
    • There's a set of intuitive KLM key code aliases. For instance, the VK code for the Del key is vcDEL.
    • The Modifier mapping is a special case. It's used for modifiers including Shift, Ctrl and Extend.
    • The mapping format for key mapping is <KEY SC> = <VK CODE> VKey (or <SC> SKey).
  • Single-Entry mapping can be handy for some special use cases.
    • A System (or SKey) entry simply SC maps the key onto itself, allowing EPKL to see that key.
    • A Disabled (or --) single-entry mapping does just that: Renders a key disabled and useless.
    • A Unmapped (or <>) entry can be used by an override file to tell EPKL to leave that key alone.
    • The mapping format for these commands is simply <KEY SC> = <SINGLE ENTRY>.
  • State mapping means that EPKL sends a character event onwards to the OS based on the current shift state.
    • The shift state is affected by Shift (held or on a Sticky Mod timer), AltGr and other layer modifiers.
    • In addition to single characters, the mapping can be all sorts of wondrous things. See below for info.
    • The eD layout type is state mapped using my AltGr and dead key Colemak-eD layers.
    • Including the custom SwiSh and FliCK modifiers, there are a lot of states available in EPKL.
    • The mapping format for state mapped keys is described in the State Mapping Syntax section below.
  • Any key may be key or state mapped. Layouts will generally contain one or the other type, but may contain a mix.
    • Wherever there is an eD-type layout available, you can use it as a key mapped one with the eD2VK type.
    • The eD2VK layout type will read its BaseLayout only as key mapped. Any overriding mappings are read as-is.
  • Note that key mapped and state mapped input events are sent differently. See the next section.

EPKL & Games

There are some pitfalls to using a keyboard remapping program like EPKL for gaming, which uses the keyboard very differently.

In gaming a key is often held down for a longish time. This may lead to some problems:

  • The OS keyboard/input driver sends repeated KeyDown key events that are picked up and processed by EPKL. KeyUp is only sent once, on key release.
  • When sending characters, AutoHotkey sends a KeyDown followed immediately by a KeyUp. So inbetween each sent KeyDown there will be an extra KeyUp.
    • The result of this is often choppy game controls. Also, the MonkeyType typing test site has a cheat detection that interprets this behavior as suspect.
    • The solution is to use a key mapped (VK/SC/eD2VK or System) layout. These pass on the KeyDown events from the OS, and send KeyUp only on release.
    • Shift state mapped keys as used by the eD layouts, send each mapping as character input with a KeyDown-then-KeyUp combo.
  • If you use a state mapped layout or your gaming is otherwise disturbed by EPKL, you can make the program sleep whenever your game is active.
  • You can suspend EPKL at any time with its Suspend hotkey (default Ctrl+Shift+3). If you want your layout in-game, you may have to use a MSKLC install.
  • If you want EPKL to suspend itself when your game or webpage is active, you can use the suspendingApps setting; see the Settings file.
  • You could try setting the Windows Key Repeat speed as low as possible, but I'm unsure whether it'll really help.
  • For more info, consult the Known Issues section below.

TL;DR:

  • Don't use eD-type (state mapped) layouts for gaming; VK/SC/System/eD2VK are okay
  • For key-intensive games like FPS, probably (auto-)suspend EPKL

State Mapping Syntax

As seen in the Key vs State Mapping section above, there are two basic types of mapping: Key and shift/modifier state. The format for EPKL state mapping is similar to MSKLC, but more readable and also a lot more powerful.

[layout]
;shiftStates    =           0   :   1   :   2   :   6   :   7       ;   8   :   9   :   e   :   f
;; SC = VKEY       CStat    Base    Shift   Ctrl    AltGr   AGrSh   ;   SwiSh   SwShS   SwAGr   SwAGS

This shows the start of the layout section of an EPKL Layout.ini file. So, what are all those arcane abbreviations?

  • SC: The Scan Code of the key being mapped
    • The SC can either use the SC### format like MSKLC or AHK uses, or my own KLM (KeyLayoutMap) format.
    • Example: The QWERTY S key has scan code SC01F, and KLM name QW_S. See the Remap file for more info.
    • Note that the key can be moved around by remap loops later, if remaps are specified in the Layout.ini file.
  • VKEY: The Virtual Key (VK) code sent for this key
    • The VK code determines what the OS sees when a key press is sent, in addition to the key output itself. So it affects hotkeys etc.
    • If a key is Key Mapped, only the VKEY entry is used. This also holds true if an eD-type state mapped layout is run as eD2VK.
    • Key mapped keys can either have the actual VK code of a key here, a SC or "System" (to just send the pressed key itself).
    • If using KLM syntax, the VK code of a certain key is like the QW### code but with vc### instead. Example: vc_S.
  • CStat: The Caps stat for this key
    • CStat is a number used by MSKLC to determine CapsLock behavior. It's the AND value of the states that are shifted with Caps.
    • Example: If a key has letter and its capitalized counterpart on states 0/1, CStat is 1. If also on 6/7, it's 5 (4 + 1; see below).
    • In most cases, though, this number isn't so important. If you're not sure, feel free to just ignore it.
    • If a key is key mapped, this entry is the final one for that key and instead consists of the string VKey or SKey, or a synonym.
  • State 0/1: Base and shifted output
    • While MSKLC has Unicode hex values for these entries, EPKL can take just a symbol – or any other valid entry like Prefix-Entry syntax!
    • EPKL accepts normal whitespace between state entries. If you want the mapping to be whitespace, use special syntax. Spc is Space.
    • If a state is mapped to ##, that means this particular state is sent as key mapped. So you get whatever the OS layout has there.
      • Key mapping works better with Windows shortcuts (such as Win+Number), but can cause issues if your OS layout is non-standard.
  • State 2: Ctrl state
    • Most keys should not produce any output from the Ctrl state(s)! This is because Ctrl+Key is normally used for hotkeys.
    • An exception is that Ctrl+[ by convention outputs an Escape character for many layouts.
  • State 6/7: AltGr states
    • The Alt key has value 4 and Ctrl 2, so why are the AltGr states numbered 6 and 7? Because Windows considers AltGr = LCtrl + RAlt.
    • Note that only the 4 is used in the calculation of the CStat. Go figure.
  • State 8/9/e/f/...: SwiSh & FliCK!
    • These are special EPKL modifier states; see the "More Modifiers" section. Most layouts don't use these states, so feel free to ignore.
    • You need to have keys defined as SwiSh and/or FliCK modifiers to access those states, should you want to.
    • The SwiSh (Swiss Shift) modifier adds 8 to the state, and FliCK (Flip Cap Key) adds 16 (not shown above).
    • In the Colemak BaseLayout_Cmk-eD_SwiSh.ini file, I defined a suggestion of how to get accented letters etc using SwiSh & FliCK.

Making Layout Variants

It's entirely possible to create new layout variants and tweak existing ones with EPKL. It can be a little daunting at first though! Mostly because there is so much functionality and complexity, which is actually a good thing but hard on the beginner.

To learn more about key mappings and creating your own layout variants, please consult the Layouts folder README.

More Know-How

A Short EPKL Glossary

  • Extend is a layer switch, by default the CapsLock key, giving easy access to navigation and NumPad etc layers
    • I really can't overstate the benefits of using Extend. It amazes nearly everyone who gets used to it.
    • The true power of Extend may be hard to understand at first. You really should read about it in the Big Bag!
  • Multi-Extend means you'll get another Extend layer if you hold down modifiers when pressing Extend
    • Try holding down RShift and/or RAlt then press Extend
    • After selecting an Extend layer this way, keep only the Extend key pressed down to maintain it
  • Sticky Modifier or OSM (One-Shot Mod) is when you can tap a mod and then another key shortly thereafter
    • There's a setting in the Settings file for how quickly the OSM times out, and which keys are OSMs
  • ToM (Tap-or-Mod) is a dual-role key, working as a mod when held down and a normal key when tapped
    • ToM has its own timer setting which is typically shorter than the Sticky Mods timer
  • DK is a dead key. You tap it then another key, there's no timer. Most of my DKs are on AltGr+‹symbol›.
    • DK sequence: You can tap several DKs to get new symbols (example: {AltGr+=,=} gives ; AltGr+{/,=} then = gives )
    • DK chaining: One DK can release to another. This is not implemented in EPKL yet
    • MoDK (Mother-of-DKs) is a ToM key (here, on tap-Extend) that leads to lots of cool DKs
  • Compose is a concept taken from the Linux world. In EPKL, the Compose key works a little differently.
    • You can enter a sequence of characters and then press an EPKL Compose key if your layout has one
    • If the sequence is recognized as one in an applicable Compose table, it gets replaced
    • It's also possible to set a Compose table to complete instead of replacing sequences
    • CoDeKey is an even more advanced variety of a Compose key, adding Dead Key functionality
    • If you have a CoDeKey set, it works as a special DK if no sequence is recognized, and Compose otherwise
    • Such a key can be very handy for enhancing your layout with a variety of useful mappings!
  • Repeat is another handy special key. It simply repeats the previous key press, but boy is that nice.
    • Map any state mapping to ®® to make it a Repeat mapping. A ®# mapping repeats # times.
    • It's good on a key for the thumb not used for Space. I use the SharpKeys program for that.
    • Speed typist Sophie says: "Double letter n-grams are funny: They start off as free WPM; then the better you get, the more they slow you down."
  • PowerStrings are shortcuts to text strings. These may be multiline, and may contain AutoHotKey syntax.
    • As an Example, try Extend+End in a text editor. It should produce an editable 'Yours truly' message footer.
  • LayStack is the stack of files that may hold layout definitions. From top to bottom priority:
    • Layout_Override in your chosen layout folder, if present, holds personal key mappings and such
    • Layout, that is, the Layout.ini main layout file in your chosen layout folder
    • BaseLayout, which may be pointed to and overridden by the Layout file
    • Layouts_Override, which may hold your personal layout settings and mappings
    • Layouts_Default, found in the root folder, holds default layout settings/mappings
    • Special dedicated files for Extend, DeadKeys, PowerStrings, Remaps etc etc.
  • Remaps are cycles of keys swapping places. This allows you turn one layout definition into another.
    • These can be in the LayStack files for quick layout tweaks, or in the dedicated Remap file.
  • Prefix-Entry Syntax is a powerful enhancement for most kind of EPKL mappings
    • Prefix-Entry syntax can go in layout state mappings, DKs, Extend, PowerStrings, Compose entries...
    • Basically, it's any mapping starting with one of the characters %→$§*α=β~†@Ð&¶®© and then an entry
    • It allows AHK Send syntax, sending Unicode points, EPKL DKs and PowerStrings – and more!
    • See below for more details

Hotkeys defined in the EPKL_Settings file:

  • Ctrl+Shift+1 – Display/hide the help image (it may also hide itself by shift state)
  • Ctrl+Shift+2 – Switch between the layouts specified in the Layouts file(s)
  • Ctrl+Shift+3 – Suspend EPKL; hit again to re-activate. It may also be Ctrl+Shift+` (backtick).
  • Ctrl+Shift+4 – Exit EPKL
  • Ctrl+Shift+5 – Refresh EPKL, if it gets stuck or something
  • Ctrl+Shift+6 – Show the Layout/Settings… dialog
  • Ctrl+Shift+7 – Zoom the help image in/out, to see it better or get it out of the way
  • Ctrl+Shift+8 – Toggle help image transparency
  • Ctrl+Shift+9 – Move the help image between positions, as by mouseover
  • Ctrl+Shift+0 – Show info about the active window; useful for setting suspending apps

Examples of tweakable parameters:

The layouts and setup files may take a little tweaking to get what you want. There are several parameters:

  • Colemak vs QWERTY vs what-have-you, obviously. Choose your main layout wisely!
    • EPKL defaults to Colemak(-DH) and Tarmak layouts, but also holds QWERTY and Dvorak and several others.
    • To type with QWERTY it may be just as easy to suspend EPKL. Of course, then Extend etc won't work.
  • Full/VK/SC mappings: I've provided my own Colemak[eD] as well as 'VirtualKey' or 'ScanCode' versions
    • Key mapped VK/SC layouts just move the keys of your installed OS layout around, without other changes
    • State mapped [eD] layouts have their own Shift/AltGr state mappings specified.
    • Actually, you may mix mapping types freely in any layout. Layout types are mainly a means of organizing mappings.
    • Furthermore, a state-mapped BaseLayout may be read as VK-mapped by setting layout type to ##2VK – here, eD2VK.
    • VK/SC mapped keys work for Compose sequences, as well as Extend and DK releases.
    • The DKs themselves are on state mappings only, as are special key definitions (Compose and Repeat).
  • ISO (European/World) vs ANSI (US) vs other keyboard types
    • ISO boards have a OEM_102 key between Z and LShift. It often holds <> or -_.
    • In ISO OS layouts, OEM_ virtual key codes differ from ANSI ones. These boards send the same scan codes though.
    • Brazilian ABNT boards are like ISO, but have two extra ABNT keys. These can be remapped by their scan codes.
    • JIS (Japanese) etc are not fully supported so far. Sorry. Gomen-nasai. ごめんなさい.    ᏊᵕꈊᵕᏊ
  • Curl(DH), Angle and/or Wide ergonomic mods, moving some keys to more comfortable positions
    • Angle/Wide affect the "hard" key positions in the Layout.ini file, usually both for Layout and Extend
    • Curl(DH) is Colemak/Tarmak/Dvorak specific and for the most part should not affect Extend
    • The Curl(DH) mod does insert D between C and V though. There's a remap to let Extend+V still be Paste
  • Extend mappings, using for instance CapsLock as a modifier for nav/edit/multimedia/etc keys. It's awesome!!!
    • The Extend modifier may even double as a Tap-or-Mod key so that when you tap it, something else happens.
    • The most advanced way of using this may be the Mother-of-DeadKeys which allows really fancy "tap dances"!
    • Holding down Shift and/or AltGr while first holding or while tapping the Ext key affects which Ext layer you get.
  • In EPKL_Layouts you can use shorthand (@#) for KbdType/CurlMod/HardMod etc, or set the layout folder path directly.
    • For most users it'll be much more handy to use the Layout Picker from the Layout/Settings… menu.
    • The Layout Picker creates a EPKL_Layouts_Override.ini file if necessary, and writes to it.
    • For Extend (on by default), set an Extend file and map the Extend modifier to a key in your layout.
    • My _eD_Extend mappings file is in the Files folder. Look inside it to learn more.
  • In the layout folder(s) you've chosen, you may edit the layout .ini files further if required. See below.
    • Mod remaps, help image specifications, Extend key, key mappings etc can be set in the LayStack .ini files.
    • Many layouts use a BaseLayout. Most mappings may be there, so the top Layout.ini only has to change a few keys.
  • To learn more about remaps, see the _eD_Remap.ini file. They can even turn Colemak into QWERTY (oh no…!).
  • There's a file for named literals/PowerStrings. These are useable by layouts, Extend and dead keys.
  • There's a Dead Key file too. DKs are mapped as @###. Pressing the key then a release glyph may produce something new!
    • There are help images for DKs, these can be very useful as they show what releases are in different shift states.
    • I haven't made images for all variants though, so there may be minor discrepancies.
  • Layout folders aren't premade for every variant, board and mod combo, as there are so many of them. See below.
  • The Layout/Settings dialog can change layout, key mappings and a selection of settings quite easily.

Techy tips for EPKL:

  • EPKL is Viper and CSGO approved! Some of the fastest typists in the world have tested it and found it responsive enough.
    • If you type above around 150 Words Per Minute, a little pace smoothing may occur. This shouldn't be a problem, mostly.
  • EPKL, being portable, doesn't need an install with admin rights to work. You must still be allowed to run programs.
  • I usually put a shortcut to EPKL.exe in my Start Menu "Startup" folder so it starts on logon, per user.
  • EPKL can also easily be used with the PortableApps.com menu by putting its folder in a C:\PortableApps folder.
    • If the PortableApps menu is run on logon it can start up EPKL for you too.
  • Look inside the various .ini files under Files and Layouts if you're interested! Much is explained there.
  • See my examples in the Extend file for some advanced mappings! These may be used in layouts and dead keys too.
  • EPKL uses both .ini and source files that may be UTF-8 Unicode encoded.
  • EPKL allows end-of-line comments (whitespace-semicolon) in .ini files. The old PKL only allowed them in layout entries.
  • You can use EPKL with a Virtual Machine. Set it to not capture the keyboard. System key strokes may not transfer then.
    • If you have a VM running Windows, another way is to run EPKL inside the VM of course.
  • Running EPKL with other key mapping programs may be problematic due to hook competition. For more info, see Known Issues below.
  • EPKL isn't always a robust solution for gaming etc. See the Other folder for more options/info.

Prefix-Entry Syntax

  • As mentioned above, a state-mapped entry may be several useful things. Most of these are governed by P-E syntax.
  • The first character – the prefix – identifies its type. Allowed prefixes are %→$§*α=β~†@Ð&¶®©.
  • Should you need to start a literal string with one of the prefix characters, prefix it with or %.
  • This is from the EPKL Layout/Settings… Key Mapper Help screen (press the Help button on the last tabs):
#=======================================================================================================================#
|  EPKL prefix-entry syntax is useable in layout state mappings, Extend, Compose, PowerString and dead key entries.     |
|  - There are two equivalent prefixes for each entry type: One easy-to-type ASCII, one from the eD Shift+AltGr layer.  |
|      →  |  %  : Send a literal string/ligature by the SendInput {Text} method                                         |
|      §  |  $  : Send a literal string/ligature by the SendMessage method                                              |
|      α  |  *  : Send ‹entry› as AHK syntax in which !+^# are modifiers, and {} contain key names                      |
|      β  |  =  : Send {Blind}‹entry›, keeping the current modifier state                                               |
|      †  |  ~  : Send the hex Unicode point U+<entry> (normally but not necessarily 4-digit)                           |
|      Ð  |  @  : Send the current layout's dead key named ‹entry› (often a 3-character code)                           |
|      ¶  |  &  : Send the current layout's powerstring named ‹entry›; some are abbreviations like &Esc, &Tab…          |
|  - Any entry may start with «#»: '#' is one or more characters to display on help images for the following mapping.   |
|  - Other advanced state mappings:                                                                                     |
|      ®® |  ®# : Repeat the previous character. `#` may be a hex number. Nice for avoiding same-finger bigrams.        |
|      ©‹name›  : Named Compose key, replacing the last written character sequence with something else.                 |
|      ##       : Send the active system layout's Virtual Key code. Good for OS shortcuts, but EPKL can't see it.       |
#=======================================================================================================================#

The LayStack and file relations explained further

  • As said before, the easy way to set layouts and settings is to let the Layout/Settings… GUI write your overrides.
  • If you still want to choose layouts manually, copy the Override_Example file to EPKL_Layouts_Override.ini.
  • In your Layouts_Override file, activate the layout(s) you want by editing and/or uncommenting (remove initial semicolon).
    • There are KbdType (@K) and other abbreviations, but you could also type the path to a layout folder out in full.
    • The format is: layout = ‹layout folder›:‹menu entry›,‹2nd layout folder›:‹2nd menu entry› etc.
  • The EPKL_Layouts .ini file(s) hold layout choices. The EPKL_Settings file(s) hold general program settings.
  • The Layout.ini files hold layout settings and mappings. They often point to and augment a BaseLayout file.
  • In theory, you could put all the info needed for a whole layout into any one of the layout stack files.

  • Here's the "LayStack" for layout info priority. Mappings/settings at higher levels take precedence:
    1. A Layout_Override.ini file in the chosen Layout folder will get the last word about everything.
    2. The Layout.ini file in the chosen Layout folder typically defines names, remaps and key overrides.
    3. The BaseLayout .ini file usually found under each layout type may define most of the layout
    4. The EPKL_Layouts_Override, if present, overrides default layout choices
    5. The EPKL_Layouts_Default holds default and common layout settings/mappings
    6. Beyond this, specialized files may hold settings, info, Extend or DeadKey mappings etc. See below.

  • Settings priority and file selection during EPKL startup goes like this:
    • The EPKL_Settings files (_Default and, if present, _Override) determine program settings
    • The EPKL_Layouts files select the active layout folder(s)
    • The layout folder's Layout.ini file may select a BaseLayout to complement

EPKL file priority relations chart, by Tanamr



Special Special Keys

There is a Special Keys tab on the Layout/Settings window, that can be used to set Extend and Compose keys more easily than before. Have a look.

However, to fully understand how these mappings and settings work you may want to study this section as well.

Advanced Extend

Here are some sample Extend key mappings:

QWCLK   = Extend    Modifier        ; Caps   -> The Extend modifier (see the Big Bag)
QWCLK   = BACK/Ext  VirtualKey      ; Caps   -> Tap-or-Mod: Backspace if tapped, Extend if held
QWCLK   = BACK/Ext  0   @ex0 @ex1 *#. @ex6 @ex7 ; Mother-of-DeadKeys (MoDK) on tap, Extend on hold
  • These mappings merit explanation. Extend is a most marvelous beast, so don't be daunted now! ฅ(=ʘᆽʘ=)ฅ
  • The above Extend modifier mappings may be in any LayStack .ini file, such as Layouts_Default
  • Holding designated modifiers, RShift and/or RAlt by default (specified in the Settings), chooses Extend layers.
    • So, e.g., holding the Ext1 mod (RAlt) then the Extend key activates the Extend2 layer (NumPad).
    • After selecting your Extend layer, you hold down only the Ext key (Caps by default) and start using Extend!
    • Again: To get the NumPad Extend layer (Ext2):
      1. Press AltGr and hold it
      2. Press Extend (Caps) and hold it
      3. Release AltGr while keeping Extend down
      4. While holding down Extend, start using the NumPad layer
  • Extend layers (like Ext3/Ext4) can be set as one-shot so they fall back to another layer after each use.
    • This lets you for instance release a string then keep editing. But dead keys are better for that, see below.
  • Setting the Extend key as a Tap-or-Mod (ToM) key as above lets you tap it for, e.g., Backspace or hold for Extend.
  • Mother-of-DeadKeys (MoDK) is the most powerful option. Tapping Extend activates a dead key depending on shift state!
    • Tapping Ext alone or with Shift/AltGr activates the dead keys "ex0/1/6/7". See the DeadKeys.ini file!
    • In my default example, Ext-tap alone lets you activate symbols and commands easily.
    • Shift+Ext-tap activates a kaomoji DK, similar to Ext3 but you don't have to hold down the Ext key! d( ^◇^)b
    • Another advantage of DK layers over Extend layers is that you can make entries for any release char.
    • So, e.g., Ext3 has one kitty kaomoji (=^・ω・^=)丿 but dk_Ext_Kaomoji has one for k and one for K. (=ΦωΦ=)ʃ
    • "Tap-dance" {Shift,Ext,‹key›} quickly using Sticky Shift, for a kaomoji. Wait before ‹key› for another.
    • Holding Ctrl then tapping Ext sends Win+., opening the Emoji picker.
    • AltGr+Ext-tap holds some commands to avoid hand contortion. Example: {AltGr+Ext,T} for Task Manager.

Advanced Compose/CoDeKey

As mentioned, the EPKL Compose key is used to enter a sequence of characters and then change that into something else.

  • Unlike its Linux counterpart, the EPKL Compose key works post-hoc: Enter the sequence first, then press Compose.
  • If the sequence is recognized as one in an applicable Compose table, it gets replaced or completed.
  • A layout can have several Compose keys defined in its state mappings. They may be duplicates or different ones.
  • Look inside the EPKL Compose file for more info. Compose tables are defined and described in that file.
    • Example: Type e'Compose to get the accented letter é.
    • Example: Composing 'noevil using the default EPKL tables produces three monkey emojis. 🙈 🙉 🙊
  • Composing U#### where #### is a 4-5 digit hex number, sends the corresponding Unicode character. 💪
  • The key can also be used for completions (using a + table), adding to rather than deleting the original sequence.
  • CoDeKey is an even more advanced variety of a Compose key, adding Dead Key functionality.
  • If you have a CoDeKey set, it works as a special DK if no sequence is recognized, and Compose otherwise.
  • A Compose key or CoDeKey can be very handy for enhancing your layout with useful mappings!
  • I have one on my ISO key in the middle of the board, with mappings to neighboring key rolls. ANSI users can't do that of course.
  • I also use one on the key next to RAlt. Using the Wide mod it's a quite accessible thumb key. Excellent for home row mappings!
  • If you want for instance a thumb key DK without the Compose, you could of course use any dead key directly.
  • You can map keys as Compose and specify which Compose keys are CoDeKeys from the Special Keys tab of the Layout/Settings menu.

More Modifiers

You can set pretty much any key to be a modifier of choice.

  • To make any key into a Left Shift key, just map that key to LShift Modifier – similar to a VK/SC key mapping.
  • Shift, Ctrl and AltGr (RAlt is AltGr on international layouts) affect the Shift State: Shift is +1, AltGr is +6.
  • So, the four main states are 0:1:6:7. In most layouts there's also state 2 for Ctrl, but it isn't normally used.
  • In a Layout.ini or its BaseLayout file there's a ShiftStates setting that specifies which states are used.
  • However, EPKL has more modifiers for you to play with, should you wish to: The magical SwiSh & FliCK are there for you!
  • SwiSh stands for "Swiss Shift" from the Windows "SGCaps", an extra Shift-type modifier on the CapsLock key.
  • FliCK got its name because of the other one, pretty much. It means "Flip Cap Key". Bear with me. ฅʕ •ᴥ•ʔฅ
  • To use SwiSh, edit your layout's ShiftStates entry to add states by changing 7 ; 8 to 7 : 8.
  • Then, add the new mappings to all state-mapped keys. To leave a state blank, map it to -- as usual.
  • For Cmk-eD derived layouts, just set your Layout.ini baseLayout setting to BaseLayout_Cmk-eD_SwiSh.
  • Then add a SwiSh Modifier key definition somewhere. You could override RCtrl for instance.
  • Side note: It may be harder the other way around; in particular the Alt keys aren't easily mappable.
  • Try SharpKeys for hard mod remapping? It's less flexible but very robust!

KNOWN ISSUES

  • Running EPKL with other key mapping programs may be problematic due to hook competition.
    • When keyboard hooks compete, it becomes uncertain which hook gets which key press, with unpredictable results.
    • Unfortunately, this includes some of the functionality of the popular Microsoft PowerToys tool suite.
    • It also includes other AutoHotkey scripts using hotkeys.
    • To some extent, you could include other scripts into EPKL if you know how to, or replicate their functionality within EPKL.
  • The AHK Send command used by some EPKL mappings, sends a KeyDown shortly followed by a KeyUp.
    • This does produce a key press with the desired character/key.
    • However, when holding down a key for a while Windows really sends repeated KeyDown events and KeyUp only on key release.
    • This discrepancy often messes with games. The KeyUp events tend to interrupt held-down keys, resulting in choppy game controls.
    • Also, typing sites like Monkeytype may have a cheat detection that reacts to this consistently rapid KeyDown-KeyUp sending.
    • If your game doesn't work well with EPKL, you can use the suspendingApps setting to auto-suspend EPKL when the game's active.
    • If you need your layout for the game, you can use a VK/SC-mapped layout, a MSKLC install or whatever works for you. See the Other\MSKLC folder.
    • Note that EPKL v1.4+ has a send mode for ScanCode and VirtualKey mapped keys that should fix this problem!
    • There is also an eD2VK layout type that uses VK mapping based on an eD-type base layout. AltGr mappings won't work then.
  • ISO VK layouts may not send the right OEM_# key VK codes for all ISO locales.
    • This is bad for QWERTZ/AZERTY etc. Known affected locales are: UK, De, Fr, Be…
    • State mapped layouts should work, or you could figure out which VK codes are the right ones and edit the layout files accordingly.
    • Finding a more robust solution is on my TODO list. There should be new options shortly, including more robust ScanCode mappings.
  • Using the Colemak w/ Caps -> Backspace MSKLC install found on colemak.com will cause the Back and Caps keys to be swapped. Also, Extend will not work.
    • This is due to that layout being hacked to provide the Caps-to-Back remapping. Please use a normal Windows layout with EPKL.
    • If you wish to hard swap keys, a better and safer way is to use the SharpKeys program included with EPKL.
  • Windows intercepts certain key combinations like Ctrl+Alt+Del and Win+L
    • Consequently, these combinations may work oddly with state remaps like eD. Keys may end up working as both unmapped and remapped.
    • A workaround for this is to map a shortcut to α#e for accessing Win+E on Colemak. For Ext-tap, there's one on {Ext,w}.
  • Virus programs may be skittish about compiling AHK code. You may get a Threats found notification, and your epkl.exe file doesn't get made.
    • The ahk2exe temp file will be interpreted as a Trojan. Even allowing the "Threat" doesn't always help, as compilation already failed.
    • Turn off Windows Security → Virus & threat protection → Virus & threat protection settings → Real-time protection temporarily to remedy this.
  • The AHK KeyHistory logs your last key presses (and what EPKL sends as a result), keeping them in memory unencrypted. This may feel unsafe to some.
    • AHK KeyHistory is on by default, even if you've hidden it from the menu (by turning off Advanced Mode) and disabled its hotkey shortcut.
    • To most users, the hypothetical risk of something devious digging into EPKL's memory to fish out your password from this log won't be a problem?
    • To many users, the benefits of seeing which keys you just typed and what EPKL produced from it should outweigh any such concerns in my opinion.
    • If you do wish to disable KeyHistory, however, find the #KeyHistory line in _PKL_Main.ahk and set it to 0. Then recompile EPKL.
    • For more info about this topic, see EPKL issue #63 here on GitHub.
  • The Ctrl+Shift+3 default shortcut doesn't always suspend EPKL.
    • It seems to work after the first suspension (by any method). I have no explanation for this behavior.
    • The workaround I use is to use its synonym Ctrl+Shift+Backtick (the ` character on the Tilde key).

DONE/TODO

For more info about past and future EPKL history, see the EPKL Advanced README in the EPKL_Source folder.

Credits/sources


Finally, to all of you: Best of luck using EPKL!
Øystein "DreymaR" Bech-Aase

bigbagkbdtrixpkl's People

Contributors

algotastic avatar dreymar avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bigbagkbdtrixpkl's Issues

VR_GR doesn't input a backtick

EPKL_Layouts_Override is:

[pkl]
layout = Colemak\Cmk-eD\Cmk-eD_ANS_AWideSym:Colemak-eD AWideSym(ANS) 		; Generated by the EPKL Layout Picker UI, 2022-09-24_01-36
[layout]
QWCLK = BACK/Ext 	0   	@ex0	@ex1	*#. 	@ex6	@ex7	; Caps as Mother-of-DKs (MoDK) on tap, Extend on hold; Ctrl+{Ext} = emoji picker

If I type:
`aaaa`
the log says:

C0  029	h	u	0.06	`              	
41  01E	h	d	1.39	a              	
41  01E	i	d	0.01	a              	
41  01E	i	u	0.00	a              	
41  01E	h	u	0.08	a              	
41  01E	h	d	1.01	a              	
41  01E	i	d	0.02	a              	
41  01E	i	u	0.00	a              	
41  01E	h	u	0.11	a              	
41  01E	h	d	0.20	a              	
41  01E	i	d	0.02	a              	
41  01E	i	u	0.00	a              	
41  01E	h	u	0.05	a              	
41  01E	h	d	0.16	a              	
41  01E	i	d	0.02	a              	
41  01E	i	u	0.00	a              	
41  01E	h	u	0.09	a              	
C0  029	h	d	0.41	`              	
A2  01D	i	d	0.01	LControl       	
A5  138	i	d	0.00	RAlt           	
52  01F	i	d	0.00	r              	
52  01F	i	u	0.00	r              	
A2  01D	i	u	0.02	LControl       	
A5  138	i	u	0.00	RAlt           	
A2  01D	i	d	0.00	LControl       	
A2  01D	i	u	0.00	LControl       	
C0  029	h	u	0.08	`       

However shift+vc_gr outputs a tilde as expected.

How do I override the layout so that backtick works as expected?

Keys get stuck in WSL

Hi, and thanks for a great tool. It works fantastically. The main qualm I am having with it is the key getting stuck, but only in WSL. It seems to be fine in other apps 🙂

My settings screen ->
image

In WSL, it usually annoys me when I'm trying to delete part of a long line in the terminal (terminator) and it ends up deleting the whole line 🙁

I've also tried it with other GUI applications like gedit.

I am currently using wslg as the xserver, but I also had the same issue with GWSL.

Is there any easy way for me to fix this?

Thanks Again,

KeyHistory should be disabled by default

Currently EPKL silently records all the inputs in plain text with the KeyHistory by default, which is not good from a security point of view. KeyHistory should be strictly a debugging tool.

Hiding the KeyHistory menu (with advancedMode = no) or disabling the KeyHistory shortcut (with epklDebugHotkey = ) doesn't really stop EPKL from recording it. The user just have no way to access it interactively, while the recorded data still sits in memory.

Consider adding #KeyHistory 0 by default, with a user overridable option to reenable it on demand.

Cmk-eD-BeCaFr - First row does not work properly with an azerty keyboard

Hello,
I am trying to learn the Cmk-eD-BeCaFr layout but the first row does not print the correct characters when in an unshifted state. Indeed, instead of numbers, here is what it prints for numbers 1 to 0 (left is expected and right is the one actually printed):

1 = &
2 = é 
3 = "
4 = '
5 = (
6 = -
= = =
7 = è
8 = _
9 = ç
0 = à

I guess that this is because keycodes in the .ini file are not correct for an azerty keyboard. Could you please help me out?

Wrong keys in Xserver

I was extremely happy that EPKL worked well with Windows-based Xservers. I use them to run GUI programs in WSL and in cygwin. Before, I needed to go through configuring keyboards manually in the XServer through a set of command line options. Now I can just run it in default mode and EPKL then sends the correct keys there. Extra perk: the XServer layout is the same of the active windows one. Before that, even after you configured it, it still was not synced with the windows one and that could be confusing.

However, now I encounctered a problem: the Del PgUp, PgUp,Home,End keys send numbers or a period instead of doing what they should. The keys they send are . 9 3 7 1 respectively. This does not depend on the layout! It happens for Colemak, Qwerty, and Rulemak.

Interestingly enough issueing these commands through the extended layout accessed through CapsLock works well. That is actually how am surviving for now.

A contributing factor might be that I am a laptop: It is a 15 inch that does not have a number pad but the keys I cited are on a separate column to the right of the enter button.

One-Shot Shift handles modified numbers incorrectly

To reproduce: Activate a Dvorak-Sym layout (which moves the numbers and puts them on the shift layer) and attempt to type numbers using one-shot shift. The expected behavior is that it should produce numbers, but the actual behavior is that it produces the QWERTY symbols corresponding to each expected number. For example, Shift QW_3 should produce 5, but instead produces %.

Typing numbers while keeping Shift held produces the numbers correctly.

Remove warning msgs

If I press "submit layout choice" I don't need to be asked:

  • are you planning to write your changes to disk - yes because i didn't choose Cancel/exit
  • disk write was successful - i wouldn't expect anything else in 2023, it's not 1950

AltGr causing Ctrl getting stuck with EPKL

Hello,
This is a copy-paste from this post at Colemak forum. I have answered the questions at the end and added link to a gif example of the problem.

I have issues with AltGr causing Ctrl getting stuck during typing. I'm Polish and I use AltGr layer to type PL characters (regular Colemak + custom AltGr layer for PL characters). Issue is if I'm typing a bit faster (>50 WPM, so not even that fast), using AltGr to write a letter causes Ctrl to get stuck. With Ctrl getting stuck, when I continue to type and don't realize it happened, all hell breaks loose, because every shortcut ever is designed to be a "Ctrl + letter", so very quickly I have a page refreshed, 2 new tabs open and a printing menu ready to go.

@DreymaR, you mentioned in this post that it can get stuck when using the Extended layer. It is not the case, I have disabled that and use Caps Lock as Caps lock and Backspace as Backspace for some time now, and it didn't fix it.

This problem is the only thing that is frustrating to me to the point that I switched to MSKLC installed layout on my private PC, but I'm "unfortunately" stuck with EPKL on my business laptop, as IT didn't approve installing any new keyboard layout.

Is it possible to get it fixed, or find a workaround for it?
I know I can use a layout that uses dead keys instead of going into AltGr layer for PL characters, but that would be the last option I would explore, as it interferes too much into the layout than I'm currently comfortable with (I tried that for some time and reverted back to regular Colemak + custom AltGr layer for PL characters).

Answering the questions from the Colemak forum post:

Firstly, have you tried downloading the very latest version of EPKL? I don't experience any stuck Ctrl with AltGr myself, now.

Yes, this is on the newest version downloaded yesterday.

Secondly, do you have an ANSI or ISO keyboard? Does the underlying Windows layout use AltGr or not?

It is ANS, Ducky One 2 Mini. The original Windows layout has an AltGr layer, e.g. in order to write "ą", I do AltGr+A. I have not experienced any issue with the Windows layout since I went back from EPKL to MSKLC on my private laptop.

In the newer versions of EPKL, Extend doesn't cause Ctrl to get stuck anymore that I know of. So if you wish to get back to the awesome power that is Extend, you should try it again.

Indeed seems like the Extend layer makes no difference here, getting stuck happens regardless.

See this gif that shows the problem, I was writing a word "mężczyźni", Ctrl got stuck on the "ź" letter, and what follows is letter "n", which ended up in me opening a new tab in Chrome with Ctrl+N shortcut.

Any help with the issue will be much appreciated!
Thanks,
Kuba

Multiple issues with default mapping due to conflicts with older Colemak install

System: Windows 10 build 19044. Colemak w/ caps -> backspace is installed and I am running EPKL over that. Can supply more info if needed. Running non-admin user--I have another account which is admin that I use for UAC.

tl;dr: Any user trying to run EPKL as an alternative to simply installing Colemak (in order to get Extend layers & customization) will face the same issue I did--keys being remapped all over the place. Recommended fix is improved documentation/onboarding. I imagine that a huge portion of users will be people already using Colemak.

Steps:

  1. Download latest release from github
  2. Unzip to folder in downloads.
  3. Run EPKL.exe
  4. Press the key which on most ANS keyboards is 'p'
    a. Expect to see this button remapped to semicolon (and on shift, colon)
    b. Observe that it instead is remapped to 'o' and 'O' with shift
  5. Press the key which is originally backspace
    a. Expect it to continue functioning as backspace
    b. Observe that it functions as extend, but unreliably. It flickers and that is visible in the help image as the layers change
  6. Press the key which was originally caps lock
    a. Expect it to function as extend
    b. Observe nothing happens
  7. Attempt to resolve by switching back to the original Windows QWERTY layout using the Win + Space shortcut and resetting EPKL via Ctrl Shift 5
    a. This resolved all issues.

Making EPKL work with Administrator level programs / UAC

Thank you for this great program. I decided to switch from using the windows layout mechanism to this one (in particular because windows11 does not have Russian phonetic Colemak and the program to install it under windows 10 does not work under windows 11).

This is not a bug but rather an explanation for a common usecase; please advise if you would like me to post it somewhere else (e.g. one could enable the Wiki here on github, but maybe having selfcontained documentation is best).

I noticed a small issue. If you run EPKL with user-level privileges, then any admin-mode programs do not make use of the configured layout. To see this in action, run any program as "admin" and try typing: windows will be using the base layout and ignoring EPKL. To solve this issue, one must run EPKL with admin rights. Making it run on startup with admin rights is slightly involved (it is best to schedule it as a task) especially if you do not want to be prompted by the UAC every time.

Below I illustrate the steps to enable EPKL with admi rights.

Running EPKL on logon using Startup link

Disadvantage: Nags you with a UAC screen

Step 1:

Open the Run dialog. Either press Win+R or go to Start menu, type r u n, and select the Run app:

image

In the resulting dialog type shell:startup
image

The explorer window will open to the startup folder

Step 2:

Create a shortcut to EPKL.exe in this place
image

Step 3:

Make EPKL run as Administartor. To do so left-click on the shortcut, select Properties, go to the Shortcut tab, click the Advanced button and check Run as Administrator
image

image

Conclude by clicking Ok

Step 4:

You are done, try running it by clicking the shortcut. You will get the UAC prompt as you will at every startup but at least it works.

Running EPKL on logon using Startup link

Disadvantage: Slightly more complicated
Advantage: No UAC nagging

Step 1

Start the Task Scheduler by opening the Start Menu and searching for Task Scheduler
image

Step 2

Create a New task by clicking entry on the right
image

Step 3

Give it a name e.g. EPKL and a optionally a description. Maybe mention that it was created by yourself so that if you need to remove it later you are not scared of removing something more system-related. Important: Check the option "Run with highest priveledges"! You may also select "Configure for: Windows 10" but I am not sure this is necessary

image

Step 4

Assign the action to run. Go to the Action tab and click new. As an action, select Run program and browse for where EPKL.exe is.

image

image

image

Copy the path to the directoy containing EPKL as the "start in" option. (I do not know if this is mandatory)
image

Finish by clicking OK

Step 4

Go to the Conditions tab and disable limitations on power source for running this task

image

Step 5

In the Settings tab make sure to disable stopping the service if it runs for more than 3 hours. Also enable running if schedule is missed

Other settings are self-explantory and you can change them to your liking. Here is a reasonable choice

image

Step 6

Finally go to the "Trigger" tab, click "New", and select "At logon" with Specific user set to your user

image

image

If the user displayed is not your user (should not be needed) click on
"Change user" -> "Advanced" -> "Find Now" and select your user from the newly populated list

image

image

image

Step 7

Close the task creationg dialog and you are done. Try logging out and logging in to see it work.

Bluetooth headphone controls act as keys in some apps.

Hi,
I have really strange bug: when Bluetooth headphones are connected and I use their controls with EPKL enabled, in all apps with text fields (VSCode, Notepad, VLC, etc.), Play/Pause outputs "g", Previous outputs "q", and Next outputs ";" but volume controls work normally. I am using a pair of Sony WH-H9000Ns and don't have any other Bluetooth headphones to test with but the media keys on my keyboard do the same. Is this a problem with EPKL itself, my layout or settings (which don't seem to do anything special with these keys), or Windows.

Only one layoutworks

Hello, I just cloned your repo. I followed your instructions, but I am not able to switch layouts. I am able to use only the default one (Colermark[eD]_CurlAwide).

Using acronyms makes the settings pages more confusing.

I like to imagine I know a lot of keyboard terminology, but I have a lot of trouble deciphering the Layout/Settings menu for EPKL without a user guide on hand. I believe part of the issue is caused by the excessive use of shorthand and acronyms. For example, In the Layout tab, the "Keyboard type" dropdown uses "ANS" instead of "ANSI". The "Mods, if any" dropdown uses "AWide" but could be using "Angle + Wide". The KeyMapper tab is worse, using 2 letter codes like "QW" and "VK" to represent... something, I don't know. I think VK means virtualkey, but why not just call it VirtualKey?

Sorry for sounding so terse but I'm not used to this backspace location yet and every typo is pain.

Remapping LAlt and RAlt

In my custom layout based on Cmk-eD-CAWide, I defined

SC02a = LAlt  	Modifier	; originally: LShift
SC136 = RCtrl  	Modifier	; originally: RShift
SC01d = LCtrl   Modifier	; originally: LCtrl
;SC1361d = RCtrl  Modifier	; originally: RCtrl
SC038 = Extend  Modifier	; originally: LAlt
SC138 = RShift  Modifier  	; originally: RAlt
SC137 = RAlt	Modifier  	; originally: PrtScrs
SC03a = ESCAPE  VirtualKey	; CapsLock as Escape

I need LAlt to be Extend and RAlt to be Shift. I used that setup for about half a year on Linux with your Linux repository and it works really well for me. Now I wanted to get it to work on Windows, but with this setup, LAlt now apparently does nothing and RAlt seems to be a combination of Shift and the original RAlt functionality. The other changes seem to work fine. Is it possible to configure it differently to get my setup to work? Did I configure it incorrectly?

Some Windows Key Combinations Don't Work

I'm not sure what the intended experience is for Windows keys combinations, but I've noticed many of the Windows + <keys> commands don't work while a couple of them do work, seemingly no matter what layout I have set. Some Windows commands that appear to work are Win + L (Lock) and Win (+ Shift) + <Arrow Keys>. Win + L works if I use the L key on my keyboard, not the keymapping from EPKL.

In particular, I'd like at least Win + P (Project, for changing monitor output) and Win + Shift + S (Snip & Sketch) to work as these are two commands that I use very frequently which don't have alternate ways that I know of to access their functions, and I don't want to have to close EPKL every time I need to use them.

When I press the RWin key alone, in the AHK key history I see what I would expect:

VK SC Type Up/Dn Elapsed Key Window
5C 15C d 1.53 RWin
5C 15C u 0.06 RWin

When I press the RWin + L combination (using Colemak\Cmk-eD_ANS_Curl), which works correctly, I see a strange series of keys:

VK SC Type Up/Dn Elapsed Key Window
5C 15C d 4.44 RWin
4C 026 h d 0.14 l
5B 15B i d 0.01 LWin
A2 01D i d 0.00 LControl
A2 01D i u 0.00 LControl
5C 15C i u 0.00 RWin
49 017 i d 0.00 i
49 017 i u 0.00 i
5B 15B i u 0.02 LWin
A0 02A i u 4.31 LShift Windows Default Lock Screen
A2 01D i u 0.01 LControl
A4 038 i u 0.02 LAlt
5B 15B i u 0.01 LWin
A1 136 i u 0.02 RShift
A3 11D i u 0.02 RControl
A5 138 i u 0.01 RAlt
5C 15C i u 0.02 RWin

When I press the RWin + P combination (using Colemak\Cmk-eD_ANS_Curl), which does not work, I see a similar series of keys:

VK SC Type Up/Dn Elapsed Key Window
5C 15C d 3.66 RWin
50 019 h d 0.22 p
5B 15B i d 0.02 LWin
A2 01D i d 0.00 LControl
A2 01D i u 0.00 LControl
5C 15C i u 0.00 RWin
BA 027 i d 0.00 ;
BA 027 i u 0.00 ;
5B 15B i u 0.02 LWin
A2 01D i d 0.00 LControl
5C 15C i d 0.00 RWin
A2 01D i u 0.00 LControl
50 019 h u 0.05 p
5C 15C u 0.26 RWin
A2 01D i d 0.00 LControl
A2 01D i u 0.00 LControl

Please let me know if you need more examples. I would be happy to help work on this, but I first need to understand the intended experience and how the Windows key mappings are controlled within EPKL.

Dead key help images are missing!

I just noticed that the help images don't update anymore when I use a dead key. The dead keys still work but the images don't show it. This is something I fixed in the Nov 12 commit, but now it's all gone bad again and I have no idea why. I haven't been editing the pkl_gui_image.ahk file that I know of lately so I don't know what made this happen.

Not sure which commit may have broken it, but it must be after Nov 17 as I checked it with that commit.

Disable Hotkeys using the Override file?

Hi, thanks very much for your work on this tool, its great!

Is it possible to disable the hotkeys using the EPKL_Settings_Override file? I am aware that I can comment them out in the default file, but it is handy to know that when an update comes out, I can just preserve the override files for my settings.

Cheers,
Michael.

Remapping keys like "Windows"

Hello,

First of all, I would like to thank you for this great software! It is true that it is quite complex and scary at first but yesterday I mustered up the courage to switch from the windows layout manager to using this program. I will not go back!

I was already using a small AHK script to remap tapping the LWin key to issuing a shortcut. Normally on Windows, if you tap the LWin key it opens the start menu. Then if you start typing it starts searching for a program. However, there are much better launchers than the start menu e.g. https://keypirinha.com/. One cannot bind to the tap of the 'LWin' key directly (thank you Microsoft for your usual monopolistic behavior ). So the following AHK script detects "pure" LWin keypresses and sends out a shortcut Alt+Space if LWin was pressed alone

#NoTrayIcon
#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
#Warn  ; Enable warnings to assist with detecting common errors.
#InstallKeybdHook
#UseHook
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.


; If windows key gets pressed alone then send alt-space
LWin up::
If (A_PriorKey = "LWin") ; LWin was pressed alone
    Send, ^!w
return


; But still make LWin have its original function 
<#d:: Send #d  ; <# means LWin

Could such functionality be included in your program, i.e. remapping the LWin key and not using it as a modifier?

Apart from this suggestion I have the following question/issue. My script is actually in slight conflict with EPKL: It cannot detect "purity" of the keypress. I have the shortcut LWin+` to open a drop-down terminal. Before, pressing that shortcut did not trigger the AHK script. With EPKL, however, the logic does not work anymore, and even if I press LWin+` it sends out the shortcut on the release of the LWin key. Any suggestions?

Thank you!

The Help Images Will Not Show Up

Quite simply as it says, I cannot seem to figure out why and I did utilize the help image generation for inkscape, but none of the built in help images appear for more than a second.
qfFkMKTQXE

Typed keys are output in wrong order when computer is busy

When my computer is under heavy load, sometimes typing the letters "t" "h" "i" and "s" (in this order) will get printed as "s" "i" "h" and "t", in this exact reversed order.

"Heavy load" means a large program compilation job with multiple processes totaling more threads than there are actual cores. The computer is generally usable, other programs will load, Teams and Chrome work, but a bit sluggish. So "heavy" but not "excessive" to the point the computer is locked up.

I suspect AutoHotKey has an internal queue that it does not necessarily process in FIFO order. But I know nothing about the implementation, still it is a way to describe what's happening.

My numpad doesn't really work with EPKL

I use a 89-key keyboard with the numpad also works as the Home/End/etc keys. Using EPKL everything works fine except the numpad works regardless of the NumLock state, and the navigation keys doesn't work at all. I just started using EPKL so I don't really know what to do. Any suggestions would really be appreciated.

Shift key sticks

In the default layout the shift key seems to be sticky. This has some counterintuitive results for example e.g. selecting text using SHIFT+<arrowkeys> and then copying it with CTRL+C inside a browser window sends the shortcut CTRL+SHIFT+C that opens the developer console.

A partial solution seems to go to Settings and put stickyTime much lower.
image

While writing this I also noticed the option stickyMods from which one can remove LShift
image

This solves the problem!

Overhelmed by the number of files with settings. Need simple stuff.

Hi guys.

It seems to be a great tool, but I fail to grasp how it works and what files I need to modify. Every time I open a file I see plenty of settings which I don't need. I am also afraid that it re-maps stuff which I don't want to be changed.

I use DZ60 qwerty keyboards at work and home where on the second layer (accessed with Caps) I mapped navigation keys, delete, insert, home, end with QMK configuration (must say it is so much easier to use than this tool):
layer_dz_60

I want to use this tool to add the same functionality on my laptop. Any guidance on how to do it? Can I remove like 90% of those other files which I believe I don't need, and just add a simple one where I only will specify mappings as on the picture? So that all other laptop Fn keys will keep working? Can you give me such file with one of the keys being mapped? I will map the rest by myself following the example.

Cheers,
oleksii

Where do I find "EPKL.exe"?

Hi,
In your instructions, you state: Also make sure you have the EPKL.exe binary. I might just be very newbie but where do I find this? I've searched forums and web and I can't find this anywhere. Thanks

Could layouts/settings (optionally) sit within a user profile?

I realize that this is a portable application, but how difficult would it be to adjust the code so that if %A_WorkingDir% isn't %A_ScriptDir% then EPKL checks for override settings/layouts files an "EPKL" subdirectory of %A_WorkingDir%, and if any overrides are set via the GUI, it saves them to this location?

The effect would be that current users could download and double-click EPKL.exe just as they do now. If they currently drag and create a shortcut of EPKL.exe somewhere, the default "Start In" field is the same directory as the EXE, so again it works just as now. In fact, because of the SetWorkingDir %A_ScriptDir% line, there is no reason any current user would ever change the "Start In" field for an EPKL shortcut because it would have no effect.

However, with a change like that, should an admin put the EPKL application folder (with all it's defaults) in %ProgramFiles% or %ProgramData% and create a shortcut in the start menu with a modified "Start In" field of %AppData%, then all users starting from that shortcut would get the default settings and any adjustments they made/saved in the GUI would be only for them in their profile. Any updates would use their previous, personal overrides. You would effectively have a machine "install" of EPKL so all users could try different keyboard tricks without needing to download anything, nor affecting any other user's personal settings.

If you can easily make this change, that seems like a win-win to me! At that point, I would be interested in building/maintaining a Chocolatey package for EPKL so more folks could discover it and/or try it with confidence knowing that they can easily remove it as well. (I have some experience with that already.)

Thanks!

create help images not working? empty folder

hello,
I previously had v1.5 and changed to 2 but it doesn't seem to work properly 'generate state images' as it only creates empty directories. I changed the folder in the application settings

Monkeytype dead keys

Hi,

I noticed that i can't type `~ and ^ on monkeytype, it counts it as 2 wrong inputs even though the dead keys are put in the settings_default file.

4-finger multi touch disables trackpad

I'm using a laptop, and whenever epkl is open and I use the 4-finger tap gesture to bring up my notifications panel, it disables the trackpad and I have to click F6 (the laptop's lock trackpad key) to re-enable it

Key beside RShift in ABNT2 Keyboard

The standard ABNT2 keyboard has a key beside the RShift key which isn't remapped into anything, so you end up with two keys which does the same thing.

  • How would one go about remapping it to RShift?
  • Do you pretend to do anything about it?

Make Extend Modifiers Functional *After* Pressing Extend Key

Hey, love this this program, thanks so much for creating and maintaining it.

I was wondering if it might be possible to have modifier keys affect the extend layer if they are pressed after the extend key has been pressed.

For example, right now pressing RShift and then Extend → Extend layer 2. But pressing Extend and then RShift → Extend layer 1. At least for me, I would like for the second series of actions to also get me to Extend layer 2.

I know enough about AHK to know that this might be pretty difficult, but I thought I might go ahead and ask just in case. Thank you!

Tablet mode, auto-switch or correct virtual keyboard layout?

Hi, been using EPiKaL on Windows 11 for Colemak-DH.

It's been working perfectly. Only thing can make it better is, if when I switch to tablet mode, that either:

a. The virtual keyboard is the right layout
b. It auto-switches to qwerty when in tablet mode.

I'm not sure if anyone knows if either of these options is possible. Thanks!

v1.4 broke my ø mapping

I don't know if I need to make any changes moving to v1.4 but I couldn't find any information on the releases page or on the Colemak forums. I moved over my override files from v1.3.1 so maybe that's it?
I use the CurlAWideSym(ISO) variant and access ø using AltGr + (qwerty b)
With v1.4 I instead get just an empty space or otherwise unprintable char, and sometimes I weirdly get {¤}

EDIT: on further testing it seems to repeat my last pressed button and {¤} represents backspace sometimes?

Sometimes EPKL stopped working [w/ MS Teams]

Sometimes EPKL stopped working. For example if I switch from Sublime Text to Microsoft Teams my keyboard goes back to normal layout used by Windows. If I quit EPKL then I relaunch it's working again. Any idea ?

I have the same behaviour with original PKL application.

I'm on Windows 10 1803.

Can't find how to put stress/accent in Greek

Hi!

Firstly thank you very much for all your hard work on this! It really is an amazing tool!

Probably this is not the right spot for this kind of question, but I wasn't sure where to post this...
My issue is, I can't find how to put a stress/accent on a letter when using Greek, as in for example the words: άλφα, Άλφα, έλα, από, Θώθ etc. I guess what is referred in the dead-keys doc as: @0b4 = Acute-Sup ; ´ - Acute, Gr. Tonos-Oxia, superscripts
Which key is used in the Gr locale that you have provided?

Many thanks!

Ctrl + Shift + 9 in Slack doesn't turn on Quoting any more

I come from using the older pkl for about 5 years, and just yesterday upgraded to epkl. When using slack, I used to be able to type Ctrl + Shift + 9 to start a blockquote. This doesn't work with epkl


OS: windows 10
keyboard: US standard QWERTY
language: US standard
Geography: Australia

EPKL Does Not Work With Password Manager Auto Type

Awesome software, thank you! It allows me to try Colemak at work where I don't have admin privileges.

I noticed, however, that my password manager's auto type (KeePass 2) has broken.
For example, instead of jackabomb, it types naceabymb.

jackabomb <- expected
naceabymb <- gotten

naceabymb is, coincidentally, what you get if a QWERTY user tries to type jackabomb on Colemak.

Sure enough, AHK history reveals KeePass attempting to use QWERTY and AHK interfering doing its job.
Unless otherwise noted, type i events are AHK while type h events are KeePass.

VK SC Type Up/Dn Elapsed Key Window Notes
4A 024 h u 0.00 j Keepass. We just missed the very start of the auto type
4E 031 i d 0.01 n AHK
4E 031 i u 0.00 n
41 01E h d 0.03 a
41 01E h u 0.00 a
41 01E i d 0.01 a
41 01E i u 0.00 a
43 02E h d 0.03 c
43 02E h u 0.00 c
43 02E i d 0.02 c
43 02E i u 0.00 c
4B 025 h d 0.03 k
4B 025 h u 0.00 k
41 01E h u 0.02 a Me, releasing the hotkey that triggered the auto type (Ctrl+Alt+A)
45 012 i d 0.00 e
45 012 i u 0.00 e
A4 038 u 0.02 LAlt Me, releasing the hotkey that triggered the auto type (Ctrl+Alt+A)
41 01E h d 0.01 a
41 01E h u 0.00 a
A2 01D u 0.00 LControl Me, releasing the hotkey that triggered the auto type (Ctrl+Alt+A)
41 01E i d 0.02 a
41 01E i u 0.00 a
42 030 h d 0.03 b
42 030 h u 0.00 b
42 030 i d 0.02 b
42 030 i u 0.00 b
4F 018 h d 0.03 o
4F 018 h u 0.00 o
59 015 i d 0.02 y
59 015 i u 0.00 y
4D 032 h d 0.03 m
4D 032 h u 0.00 m
4D 032 i d 0.01 m
4D 032 i u 0.00 m
42 030 h d 0.03 b
42 030 h u 0.00 b
42 030 i d 0.01 b
42 030 i u 0.00 b
74 03F h d 2.97 F5 C:\Users\xxxxxxx\Downloads\EPKL_Executable_v1-4-0\EPKL.exe Me, updating the AHK history
74 03F i d 0.02 F5 Me, updating the AHK history

If I turn off EPKL, this is the output. We can see the whole invocation this time.
Interestingly, I get the same (correct) result if I switch the Windows layout to Dvorak (with EPKL still turned off). This suggests that KeePass detects the active keyboard layout and adjusts accordingly. Indeed, their web site warns

KeePass does not know the keyboard layout that has been selected in a remote desktop or virtual machine window. If you want to auto-type into such a window, you must ensure that the local and the remote/virtual system are using the same keyboard layout.

KeePass Auto-Type Requirements and Limitations
This supports the idea that they do know the layout normally.

VK SC Type Up/Dn Elapsed Key Window Notes
A2 01D d 3.20 LControl TypeRacer - Play Typing Games and Race Friends - Google Chrome Me, invoking auto type
A4 038 d 0.08 LAlt Me, invoking auto type
A4 038 d 0.50 LAlt Me, invoking auto type
A4 038 d 0.03 LAlt Me, invoking auto type
A4 038 d 0.05 LAlt Me, invoking auto type
A4 038 d 0.03 LAlt Me, invoking auto type
A4 038 d 0.03 LAlt Me, invoking auto type
A4 038 d 0.03 LAlt Me, invoking auto type
A4 038 d 0.03 LAlt Me, invoking auto type
A4 038 d 0.03 LAlt Me, invoking auto type
A4 038 d 0.03 LAlt Me, invoking auto type
A4 038 d 0.03 LAlt Me, invoking auto type
A4 038 d 0.05 LAlt Me, invoking auto type
A4 038 d 0.03 LAlt Me, invoking auto type
41 01E d 0.02 a Me, invoking auto type
A2 01D a u 0.01 LControl Me, invoking auto type
A4 038 a u 0.00 LAlt Me, invoking auto type
4A 024 a d 0.02 j
4A 024 a u 0.00 j
41 01E a d 0.05 a
41 01E a u 0.00 a
41 01E u 0.03 a
43 02E a d 0.02 c
43 02E a u 0.00 c
A4 038 u 0.01 LAlt
4B 025 a d 0.02 k
4B 025 a u 0.02 k
A2 01D u 0.01 LControl
41 01E a d 0.02 a
41 01E a u 0.00 a
42 030 a d 0.05 b
42 030 a u 0.01 b
4F 018 a d 0.03 o
4F 018 a u 0.01 o
4D 032 a d 0.03 m
4D 032 a u 0.00 m
42 030 a d 0.05 b
42 030 a u 0.00 b
74 03F d 1.55 F5 C:\Users\xxxxxxx\Downloads\EPKL_Executable_v1-4-0\EPKL.exe Me, refreshing AHK history

So. I'm not even convinced this is a bug in EPKL or KeePass. Perhaps it's merely an unfortunate point of incompatibility, but I'd appreciate any thoughts or ideas on the subject, or any possible workarounds. For the moment, I just switch layouts in EPKL when I need auto type, but that is inconvenient.

Thanks again! 😃

P.S. Yes, this took like an hour to compose. 75% drop in speed hurts so bad... 😭 Ah, the agony of switching layouts!

DHm layout

All I need is a DHm layout with capslock turn to backspace in window os, please somehow make it easier to use.
image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.