I'm thinking about creating a new keyboard layout for programming. Now I mostly program in HTML, JavaScript/jQuery/CoffeeScript, CSS/LESS/SASS, though I may dabble in shell scripting & RegEx soon, with perhaps LUA, C++, & Java in a few years. I want to have scientific proof to the key's placements. I do have ideas/requirements, some invented myself, some taken or derived from others:

  • Almost All keys may be re-arranged
    • RETURN, Left SHIFT, Left CONTROL, SPACE-bar, & TAB need to stay, but all others, including numbers, symbols, & movement keys are open to moving
    • Might be optimal to leave zxcv & perhhaps s to stay in place, due to common Undo/Cut/Copy/Paste/Save habits :)
    • DELETE key likely to be moved to where CAPS LOCK is :)
    • Unlikely to keep matching brackets like (){}[]<> next to each other; see below
  • The only accurate way IMHO to count key usage is by key-logging, not key counts of files:
    • Much of "programming" is sending emails, posting to forums, twitter, bug reporting, web surfing, etc.
    • I believe much of keyboard usage is "movement"; tabbing between fields, page down, moving cursors around, etc. These are not captured by file outputs
    • Many editors use auto-complete & macros, so close-deliminators: )}]> may not be as often typed as openers, thus only key-logging & not parsing files will accurate.

So my questions:

  1. What are safe free/open source software keyloggers, that will not upload files unless you send a separate file yourself? I would prefer NOT to collect log-in names & passwords, not only for security but also for because that can throw of my analysis IMHO.
  2. What programs can be used client-side to digest single & pair key-counts? Or how to best build one?
  3. Where is it best to find volunteers to help out?

Best research so far: http://www.michaelcapewell.com/projects/keyboard/layout_capewell.htm


& Wikipedia: Keyboard_layout#Non-QWERTY_keyboards_for_Latin_scripts


  • An interesting question, but let me propose one of my own: Are we better off abandoning the staggered chocolate bar layout we have been using for decades for something completely different? Apr 11, 2012 at 2:52
  • Do ou mean Ignacio to switch to a entire new layout like Kinesis' Contoured keyboard for $300USD? No, just remapping keys in existing cheap keyboards one can find in a normal store for $5-20.
    – tomByrer
    Apr 11, 2012 at 2:58
  • If you are used to a standard QWERTY (or other) keyboard it may be more efficient to just use it, rather than learning a new layout. Especially if you use other computers, which will not have your customised layout, on a regular basis.
    – Bob
    Apr 11, 2012 at 3:02
  • 1
    By the way, in order for people to receive replies, you need to ping them with @tomByrer, for example!
    – slhck
    Apr 11, 2012 at 5:17
  • 2
    I suspect that the best thing to do would be to giv <>{}[] (and other keys that currently require shift) their own keys - I wouldn't really consider myself a programmer, but I know that's what find most annoying when writing up bash scripts.
    – evilsoup
    May 28, 2013 at 4:59

2 Answers 2


Use a program like WhatPulse to record which keys are hit, and how many times.

After asking on the FreeNode IRC network about how to get the key frequencies together, a user lead me to this:

  1. Get your text, such as a program(s), and copy them.
  2. Go to http://type.trmnl.org/
  3. Under the buttons, Be Sure to uncheck 'autostart with clipboard contents on paste'
  4. Then, paste your program into the text box.
  5. Press Cntrl+Shift+K, which will open a console.
  6. Type in count_digraphs() and press Enter.

The results are read like this: "ar" 7 17 10 "ra" which means 'ar' was pressed 7 times, 'ra' was pressed 10 times, and all together 'ar' and 'ra' were pressed 17 times together

  • "Extra Options:Keep record of keystroke frequencies - Introduced in WhatPulse version 1.7, this allows you to track how many of each key you have pressed." whatpulse.org/wiki/Program_Settings_Tab_2 Sweet, thaks @ekaj! I'll have too look into it!
    – tomByrer
    Apr 11, 2012 at 8:28
  • I think this is the best solution so far short of a more intrusive keyloger. Being cross-platform & XML/HTML output is a blessing. The only thing missing is support for bigram/digram (sequence of two adjacent elements). Reasoning: in English, not only is 'he' & 'th' common together, but also in many programming languages (like C++, JavaScript, CSS) ';ENTER' are very often typed together. So if there is a WhatPulse clone that allows this, then that would be best. In the meanwhile, I'll post a suggestion on their forum.
    – tomByrer
    Apr 11, 2012 at 21:02
  • 1
    @tomBryer tried to update the answer for you, hope it helps.. and note, I could only get it to work in FF, not IE or Chrome.. not sure why.
    – cutrightjm
    Apr 14, 2012 at 19:29
  • Yes, that is helpful in a few ways! Source code: "'Unfortunately this app doesn\'t work in IE, sry.'"; IE has weird JS syntax sometimes.
    – tomByrer
    Apr 15, 2012 at 4:44

Keys for movement in editors are most often adapted to fit with as efficient usage with QWERTY as possible, and so they will most certainly need to be remapped if you change key layout and want the optimal placement of everything, which you strive. E.g. in Vim, the HJKL buttons are used for a reason with QWERTY, and would most probably need to be remapped back to the same placement after the key map has been modified.

What I mean is that it won't help you much to track movement and editing keys and use it as a basis for a new layout, since they are easily reconfigurable (in any editor worth it's salt, and since we are talking about a programmer's layout, we are most likely talking about Vim or Emacs), shouldn't interfere with the placement of the literal keys and have already been optimized (again: we are not talking about Notepad).

You are trying to solve a problem which is an inefficient way to productivity, especially for a programmer, **imho**. There would be a much greater effect in simply learning more about the tools (once again: probably Vim/Emacs). You will find that less and less time is spent actually writing characters when programming, and more (but more efficient) time is spent on auto-completion, auto-tagging, auto-indenting, quick function definition look-ups, etc. The keys to do all this are already adapted to allow efficiency, and the big speed boost comes simply with familiarity. Thus I argue that a different keyboard layout is right on comparably destructive for productivity, since you already have many years of QWERTY exercise. If the same analytical training time was spent on QWERTY as people who switch layouts spend on Dvorak, they would also notice a speed boost. Speed comes with explicit training.

If you were a copywriter/translator/author/etc., someone who actually spends his time doing work with the literal meaning of the keys, then a different layout might be of help. For a programmer, the best tip is usually to at least get an English keyboard layout, since programming idioms have been shaped by these and their key placement (on my local key layout, @$[]{}~ are all behind AltGr which is quite sub-optimal).

tldr: Dvorak/Colemak/[the next "best thing since sliced bread"] (arguably) solves a problem only for those who enter a lot of flowing text in a specific language (most often English). For programming, the needed keys have not been subject to the same restriction as literal language, and thus it has already been optimized for its purpose (which is not just "write as fast as you can"; it builds more on logical operations. See Vim). I believe that the time spent in learning alternate layouts and the confusion that most certainly occurs time and time again is definitely not worth the effort in most cases (not just your own confusion; others who sit down at the same terminal you last used will throw things at you), very much including the programmer's.

  • Thanks @Daniel-Andersson for your insights about Vim; it is helpful to weigh that some editors are allow movement-keys remapping! I do have to learn more about my tools. However, I do ALOT of editing with MANY tools; online editors & text-boxes: forums (like here ;), gists, jsFiddle, GMail, Facebook, Twitter (shouldn't @ be a non-shift close key?)... & other editors like Inkscape, SynthMaker, Live, etc. I'd like to unify my shortcuts as much as possible via keymapping, then take it a step higher via app-configs :)
    – tomByrer
    Apr 11, 2012 at 8:00

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .