Pchr8board

Now playing: Машингвери, штурмгевери

Hi!

You might remember the last two posts about the Dvorak Mirrorboard layout. Well, I’ve updated it for the third time, and it’s gotten different enough that I think I can call it Pchr8board, just to have a better name and to reflect the fact that it’s made for my own personal use and not as some kind of general-purpose layout, though it could be a nice starting point for further changes.

Ladies and gentlemen, Pchr8board:

2017-11-10-184406_617x367_scrot

Keys without a legend have the same letters attached.

Otherwise, this is how you read the picture above:

key_with_explanations

The layout uses left alt as a Latch key, that, when pressed with left thumb, switches the letters to their corresponding right-hand letters, as per original Mirrorboard, but for Dvorak.

Other important changed keys are highlighted.

  • Enter and BackSpace are on the Tilde (“~”) key.
  • The Tab key allows to type forward slashes (“/”), mostly for searching, and diaereses (ümläüts) on the letter immediately following Shift+Latch+Tab (awkward at first, but not more so than the typical compose key approach).

The layout is usable as a typical Dvorak one, and I wanted to add a couple of more keys that I miss. For the right hand, there are:

  • Direction keys on the Latch+”htnc”, which are the base keys for the right hand
  • A Backspace key on Latch+r

I sorely needed both of those, since they required too much movement in a traditional layout. What’s also nice is that all the keyboard shortcuts still work, that is for the OS it doesn’t make much difference. Selecting words word-by-word using Ctrl+Shift+right_arrow as Ctrl+Shift+Latch+n still works, for example. In practice such chords are much less complicated and easier to get used to than they seem. Honest.

At first, I wanted to add the arrow keys to the left hand, but didn’t find a not-awkward way to do this. Next version, maybe. Another logical change would have been using hljk or someting, since this is what I use for my i3wm shortcuts, but, again, I think keeping it classic in this aspect would be more beneficial.

Installation instructions:

  • Copy to your key definitions folder (usually /usr/share/X11/xkb/symbols/)
  • Either just setxkbmap left3 or integrate it in whatever you are using (e.g. setxkbmap -option 'grp:rshift_toggle, compose:rctrl' left3,ru,ua)
  • In case you want to edit it, copy it every time to a new name. The layout gets cached to the DE, and for it to read the new changes you would have to reload X, unless it’s a new file. Or just during editing do xkbcomp mirrorboard.xkb $DISPLAY 2>/dev/null as recommended in the original post, maybe removing the last part to see any errors.

The layout is on Github.

Source:

// Pchr8board, formerly known Dvorak MirrorBoard (v3), based on MirrorBoard one-hand keymapping

// Original keymap: https://blog.xkcd.com/2007/08/14/mirrorboard-a-one-handed-keyboard-layout-for-the-lazy/
// Changes and details: https://www.pchr8.net/blog/2017/11/10/third-update-dvorak-mirrorboard-now-called-pchr8board/

default  partial alphanumeric_keys modifier_keys
  xkb_symbols   "dvorak-mirrorboard" {

// Using L-Alt as modifier instead of Caps lock.

// Additionally, it's a Latch key, not a Shift one, so pressing it once activates the group. 
    key <LALT> { type[Group1] = "ONE_LEVEL", symbols[Group1] = [ ISO_Level3_Latch ] };

// Mod+Space is return

// Tilde is Backspace by itself, 
// Mod+Tilde is Return 
    key <SPCE> { [ space, space, Return ] };
    key <TLDE> {    [     BackSpace,    asciitilde,    Return,    asciitilde    ]    };

// Mod+Tab gives a slash, which I use often (searching etc.) 
// Mod+Shift+Tab gives an umlaut on the next character

    key  <TAB> {    [ Tab,    ISO_Left_Tab, slash, dead_diaeresis]    };

    key <AD01> { [  apostrophe,    quotedbl, l, L] };
    key <AD02> { [    comma,    less,   r, R] };
    key <AD03> { [      period,    greater, c, C] };
    key <AD04> { [        p,    P, g, G        ]    };
    key <AD05> { [        y,    Y, f, F        ]    };

    key <AC01> { [        a,    A, s, S         ]    };
    key <AC02> { [        o,    O, n, N        ]    };
    key <AC03> { [        e,    E, t, T        ]    };
    key <AC04> { [        u,    U, h, H        ]    };
    key <AC05> { [        i,    I, d, D        ]    };

    key <AB01> { [   semicolon,    colon,z, Z] };
    key <AB02> { [        q,    Q, v, V        ]    };
    key <AB03> { [        j,    J, w, W        ]    };
    key <AB04> { [        k,    K, m, M        ]    };
    key <AB05> { [        x,    X, b, B        ]    };

    key <AE01> {    [      1,    exclam,        0,    parenleft    ]    };
    key <AE02> {    [      2,    at,        9,    parenright    ]    };
    key <AE03> {    [      3,    numbersign,    8,    asterisk    ]    };
    key <AE04> {    [      4,    dollar,        7,    ampersand    ]    };
    key <AE05> {    [      5,    percent,    6,    asciicircum    ]    };

    // Backspace and arrow keys
    key <AD08> { [        c,    C,    Up,     Up    ]    };
    key <AD09> { [        r,    R,    BackSpace,    BackSpace        ]    };
    key <AC07> { [        h,    H,    Left,    Left        ]    };
    key <AC08> { [        t,    T,    Down,    Down   ]    };
    key <AC09> { [        n,    N,    Right,    Right        ]    };

    key <AD06> { [        f,    F          ]    };
    key <AD07> { [        g,    G        ]    };
    key <AD10> { [        l,    L        ]    };
    key <AD11> { [    slash,    question    ]    };
    key <AD12> { [    equal,    plus        ]    };


    key <AC06> { [        d,    D        ]    };
    key <AC10> { [        s,    S        ]    };
    key <AC11> { [    minus,    underscore    ]    };

    key <AB06> { [        b,    B        ]    };
    key <AB07> { [        m,    M        ]    };
    key <AB08> { [        w,    W        ]    };
    key <AB09> { [        v,    V        ]    };
    key <AB10> { [        z,    Z        ]    };

    key <BKSL> { [  backslash,  bar             ]       };


    key <AE06> {    [      6,    asciicircum    ]    };
    key <AE07> {    [      7,    ampersand    ]    };
    key <AE08> {    [      8,    asterisk    ]    };
    key <AE09> {    [      9,    parenleft    ]    };
    key <AE10> {    [      0,    parenright    ]    };
    key <AE11> {    [     bracketleft,    braceleft    ]    };
    key <AE12> {    [     bracketright,    braceright        ]    };

  };

The following resources helped me:

(Y)

-SH.