13 03
2010

guadvorak

Yes, guadvorak (sic) does exist. I have been using my own customized flavor of the Dvorak keyboard layout since Fall 2008. And here it is.

┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┲━━━━━━━━━┓
│ ½   │ !   │ @   │ #   │ $   │ %   │ &   │ ˇ ^ │ *   │ (   │ )   │ {   │ }   ┃ ⌫       ┃
│ §   │ 1 ¡ │ 2   │ 3   │ 4   │ 5   │ 6   │ 7 ^ │ 8   │ 9   │ 0   │ [   │ ]   ┃Backspace┃
┢━━━━━┷━┱───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┺━┳━━━━━━━┫
┃       ┃ " ´ │ < ' │ > ` │ P ┌ │ Y ┐ │ F   │ L Λ │ C Ç │ R   │ G   │ ?   │ +   ┃ Enter ┃
┃ Tab ↹ ┃ ' ~ │ . ( │ . ) │ p { │ y } │ f   │ l λ │ c ç │ r ® │ g   │ /   │ =   ┃   ⏎   ┃
┣━━━━━━━┻┱────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┺┓      ┃
┃        ┃ A Ä │ O Ö │ E ° │ U Ü │ I ¿ │ D   │ H   │ T   │ N   │ S   │ _ … │ |   ┃      ┃
┃ Ctrl   ┃ a ä │ o ö │ e / │ u ü │ i ? │ d   │ h   │ t ™ │ n   │ s   │ - — │ \   ┃      ┃
┣━━━━━━┳━┹───┬─┴───┬─┴───┬─┴───┬─┴───┬─┴───┬─┴───┬─┴───┬─┴───┬─┴───┬─┴───┲━┷━━━━━┻━━━━━━┫
┃      ┃ :   │ ö Å │ Q └ │ J ┘ │ K   │ X Z │ B   │ M   │ W   │ V   │     ┃              ┃
┃Shift ┃ ;   │ ä å │ q [ │ j ] │ k   │ x z │ b   │ m   │ w   │ v   │Shift┃     Shift ⇧  ┃
┣━━━━━━┻┳━━━━┷━━┳━━┷━━━━┱┴─────┴─────┴─────┴─────┴─────┴────┲┷━━━━━┷┳━━━━┻━━┳━━━━━━━┳━━━┛
┃       ┃       ┃       ┃                                   ┃       ┃       ┃       ┃
┃       ┃ Meta  ┃  Alt  ┃                Space              ┃  Alt  ┃ Menu  ┃ Ctrl  ┃
┗━━━━━━━┻━━━━━━━┻━━━━━━━┹───────────────────────────────────┺━━━━━━━┻━━━━━━━┻━━━━━━━┛

Changes to the common Dvorak layout

The right Alt-key (Alt Gr in Finnish keyboards) works as the Group modifier key [1]. I use this modifier extensively. Most changes to the layout were made to enable the usage of Group 2 in the keyboard layout.

Number row considered harmful

Parens, braces and brackets are also implemented through Group 2. These changes make it way less painful to do programming since there's no need to lift your right hand from the keyboard to generate that awkward keychord on the number row.

Changes in Group 2 (roughly in order of importance)
Ä's and Ö's

The letter ä (adiaeresis) is bound to the key that normally emits semicolon/colon on the Dvorak layout. The same key produces ö (odiaeresis) when pressed with Level 2 modifier (Shift on). This change seems to work since uppercase Ä and Ö are quite rare. The same approach is also taken in ArkkuDvorak [2], another modified Dvorak layout that also produces ä's and ö's. The somewhat unorthodox way of using the same key for different letters is adopted from ArkkuDvorak.

The difference from ArkkuDvorak, in this area, is that the ä key and semicolon key are swapped in guadvorak. I felt I was using the letters more than semicolons and colons, and this didn't seem like a big change, considering I had altered my layout significantly anyway.

The case of small hands and aching wrists

While coping with the RSI pain, I also noticed that the usage of right Shift key was quite impossible with my hands, without moving my wrists. The solution to this problem was converting the Z key to be an additional Shift.

X and Z

The case with X and Z is pretty much the same as with Ä and Ö. Letter Z is very rare in Finnish and I needed space for the extra Shift key. So Z ended up losing its own key. It is accessed through the Group 2 modifier on the X key.

Other changes

xmodmap

The layout can be loaded with xmodmap by saving the text into the file ~/.Xmodmap-guadvorak and running setxkbmap dvorak && xmodmap ~/.Xmodmap-guadvorak.

! Caps_Lock -> Control_L
remove Lock = Caps_Lock
remove Control = Control_L
keysym Caps_Lock = Control_L
keysym Control_L = Caps_Lock
add Control = Control_L
add Lock = Caps_Lock

! Alt Gr-key
!keycode 113 = Mode_switch <-- for older X-servers
keycode 108 = Mode_switch
!add mod3 = Mode_switch

! Compose key
keycode 105 = Multi_key

! z -> Shift_R
!keysym z = Shift_R <-- doesn't work in every X-server, workarounds...
keycode 61  = Shift_R
add Shift = Shift_R

! l <-> g
keycode 30 = l L
keycode 33 = g G

! Weird Finnish letters (äöÄÖåÅ)
keycode 52 = adiaeresis odiaeresis aring
keycode 38 = a A Adiaeresis
keycode 39 = o O Odiaeresis

! Other relevant mappings
keycode 10 = 1 exclam exclamdown
keycode 15 = 6 ampersand
keycode 16 = 7 grave dead_circumflex
keycode 24 = apostrophe quotedbl asciitilde dead_tilde
keycode 25 = comma less parenleft dead_acute
keycode 26 = period greater parenright dead_grave
keycode 27 = p P braceleft guillemotleft
keycode 28 = y Y braceright guillemotright
keycode 30 = l L Greek_LAMBDA
keycode 31 = c C ccedilla Ccedilla
keycode 40 = e E slash eacute
keycode 41 = u U Udiaeresis
keycode 42 = i I question
keycode 48 = minus underscore emdash ellipsis

keycode 94 = semicolon colon

keycode 53 = q Q bracketleft
keycode 54 = j J bracketright
keycode 56 = x X z

xkbmap

xmodmap of Debian testing/unstable was broken at the time of writing of this article. You should probably try out using xmodmap first.

This can be copied into the file /usr/share/X11/xkb/symbols/fi and then loaded by running setxkbmap -layout fi -variant guadvorak. You might be able to get away with something like setxkbmap -I 'pwd' -config ./guadvorak.xkb && setxkbmap -layout fi -variant guadvorak.

partial alphanumeric_keys
xkb_symbols "guadvorak" {
    name[Group1]= "Finland - guadvorak";

    include "us(dvorak)"    
    include "level3(ralt_switch)"
    include "ctrl(swapcaps)"
    include "compose(rctrl)"

    key  { [          1,  exclam,    exclamdown      ] };
    key  { [          6,  ampersand                  ] };
    key  { [          7,  grave,     dead_circumflex ] };

    key  { [ apostrophe,  quotedbl,  asciitilde,  dead_tilde      ] };
    key  { [      comma,  less,      parenleft,   dead_acute      ] };
    key  { [     period,  greater,   parenright,  dead_grave      ] };
    key  { [          p,  P,         braceleft,   guillemotleft   ] };
    key  { [          y,  Y,         braceright,  guillemotright  ] };

    key  { [          l,  L, Greek_LAMBDA            ] };
    key  { [          c,  C, ccedilla,    Ccedilla   ] };
    key  { [          g,  G                          ] };

    key  { [          a,  A, adiaeresis,  Adiaeresis  ] };
    key  { [          o,  O, odiaeresis,  Odiaeresis  ] };
    key  { [          e,  E, slash,       eacute      ] };
    key  { [          u,  U, udiaeresis,  Udiaeresis  ] };
    key  { [          i,  I, question                 ] };

    key  { [      minus,  underscore, emdash, ellipsis  ] };

    key  { [ adiaeresis,  odiaeresis,  aring,       Aring  ] };
    key  { [          q,  Q,           bracketleft         ] };
    key  { [          j,  J,           bracketright        ] };

    key  { [          x,  X,       z,  Z  ] };

    key  { [    Shift_R,  Shift_R         ] };
    key  { [  semicolon,  colon           ] };
};

Windows layout

As a zip including Microsoft Keyboard Layout Creator [3]. source files.

References:

  1. An Unreliable Guide to XKB Configuration, An Unreliable Guide to XKB Configuration: Levels and Groups by Doug Palmer
  2. ArkkuDvorak, "My Dvorak keyboard layout" by Kimmo Kulovesi
  3. Microsoft Keyboard Layout Creator 1.4, Microsoft Download Center