• You are not logged in.

    Colemak now included with NetBSD

    • Started by ghen
    • 10 Replies:
    • Reputation: 23
    • From: Belgium
    • Registered: 26-Feb-2008
    • Posts: 480

    Hi,

    last week I committed support for my (new) favourite keyboard layout to my (long-time) favourite OS: NetBSD. :-)

    Since the wscons mapfile from the Colemak website doesn't work for USB keyboards (this is a general problem with mapfiles), I implemented the Colemak layout in the kernel (where Dvorak and others also live).  It's implemented (like Dvorak) as a "variant" to the US layout.  To enable it:

    wsconsctl -w encoding=us.colemak

    To switch back to US Qwerty:

    wsconsctl -w encoding=us

    This now works for PC (PS/2) keyboards, USB keyboards and I think also Bluetooth keyboards.  To do: add support for other keyboard drivers on other architectures, eg. Sun keyboards on SPARC.

    I've also included the xkbmap file in NetBSD's X11 server.  So "setxkbmap colemak", or setting Option "XkbLayout" "colemak" in XF86Config will now work out of the box.

    All this will be in the upcoming NetBSD 5.0 release (expected Q4 2008).  Update: it will be in NetBSD 4.1 as well (whichever comes first).

    Last edited by ghen (08-Jun-2008 21:31:17)
    Offline
    • 0
    • Reputation: 0
    • Registered: 20-Oct-2006
    • Posts: 111

    Very nice.  First Linux and now NetBSD.  Now we just need Mac OS X.

    ... and maybe that other one, too... but I'm not holding my breath on that.

    Offline
    • 0
    • Reputation: 23
    • From: Belgium
    • Registered: 26-Feb-2008
    • Posts: 480

    I forgot to mention: to enable it permanently, set "encoding us.colemak" in /etc/wscons.conf.

    Last edited by ghen (25-May-2008 17:17:38)
    Offline
    • 0
    • Reputation: 210
    • From: Viken, Norway
    • Registered: 13-Dec-2006
    • Posts: 5,343

    This is simply awesome!

    *** Learn Colemak in 2–5 steps with Tarmak! ***
    *** Check out my Big Bag of Keyboard Tricks for Win/Linux/TMK... ***

    Offline
    • 0
    • Reputation: 23
    • From: Belgium
    • Registered: 26-Feb-2008
    • Posts: 480

    More good news: Colemak support has now been included in FreeBSD, too (I asked a friend with FreeBSD commit access to add the keymap file from https://colemak.com/Unix).

    I'll try to get it imported in OpenBSD (similar to NetBSD) and DragonFly (similar to FreeBSD) as well.

    Offline
    • 0
    • Reputation: 0
    • Registered: 09-Jun-2008
    • Posts: 2

    Hey, that's really cool!  I'm a FreeBSDer, so I'm delighted that your buddy was able to commit the change.  Any idea if he got it into the 7-STABLE branch, 8-CURRENT, or both?  Many thanks!

    Offline
    • 0
    • Reputation: 23
    • From: Belgium
    • Registered: 26-Feb-2008
    • Posts: 480

    Both, and apparently even 6-STABLE, too. :-)

    See https://www.freebsd.org/cgi/cvsweb.cgi/ … 15.acc.kbd

    Offline
    • 0
    • Reputation: 0
    • Registered: 09-Jun-2008
    • Posts: 2

    Nicely done!  I feel a buildworld coming on...

    Offline
    • 0
    • Reputation: 23
    • From: Belgium
    • Registered: 26-Feb-2008
    • Posts: 480

    In NetBSD, you can get Colemak support as far as to the bootloader!
    Just add the following to your installboot(8) command line:

    -o keymap="FTGDSRP:OYJNKEFLIULftgdsrp;oyjnkefliul"

    The bootloader maps each character to the next one, and this way you can type in Colemak even before your kernel is loaded. :-)

    Offline
    • 0
    • Reputation: 23
    • From: Belgium
    • Registered: 26-Feb-2008
    • Posts: 480

    Another OS down: DragonFlyBSD now also includes the Colemak keyboard layout (based on the FreeBSD implementation from the Colemak website), it will be in the 2.4 release.

    For OpenBSD, a patch has been submitted (based on my earlier NetBSD kernel implementation of Colemak), but no response so far.

    On the Linux front, kbd, providing the keytable files and related utilities for the Linux console, will include Colemak in their 1.15.1 release (the implementation taken from the Colemak website).  Linux distributions should then pick it up from there.

    I think I should setup a new thread with a matrix of OS'es supporting Colemak. :-)

    Offline
    • 0
    • Reputation: 0
    • From: Ann Arbor, MI
    • Registered: 25-Sep-2008
    • Posts: 36
    ghen said:

    For OpenBSD, a patch has been submitted (based on my earlier NetBSD kernel implementation of Colemak), but no response so far.

    I should probably mention that Theo has closed this bug report (see bottom).  For OpenBSD on console, you can get colemak easily by adding

    # Colemak
    keyboard.encoding=us  \
        keyboard.map+="keycode  41 =          grave    asciitilde       dead_tilde        asciitilde " \
        keyboard.map+="keycode   2 =              1        exclam       exclamdown       onesuperior " \
        keyboard.map+="keycode   3 =              2            at        masculine       twosuperior " \
        keyboard.map+="keycode   4 =              3    numbersign      ordfeminine     threesuperior " \
        keyboard.map+="keycode   5 =              4        dollar             cent          sterling " \
        keyboard.map+="keycode   6 =              5       percent       asciitilde               yen " \
        keyboard.map+="keycode   7 =              6   asciicircum       asciitilde        asciitilde " \
        keyboard.map+="keycode   8 =              7     ampersand              eth               ETH " \
        keyboard.map+="keycode   9 =              8      asterisk            thorn             THORN " \
        keyboard.map+="keycode  10 =              9     parenleft       asciitilde        asciitilde " \
        keyboard.map+="keycode  11 =              0    parenright       asciitilde        asciitilde " \
        keyboard.map+="keycode  12 =          minus    underscore       asciitilde        asciitilde " \
        keyboard.map+="keycode  13 =          equal          plus         multiply          division " \
                                                                                                       \
        keyboard.map+="keycode  16 =              q             Q       adiaeresis        Adiaeresis " \
        keyboard.map+="keycode  17 =              w             W            aring             Aring " \
        keyboard.map+="keycode  18 =              f             F           atilde            Atilde " \
        keyboard.map+="keycode  19 =              p             P           oslash          Ooblique " \
        keyboard.map+="keycode  20 =              g             G       asciitilde        asciitilde " \
        keyboard.map+="keycode  21 =              j             J       asciitilde        asciitilde " \
        keyboard.map+="keycode  22 =              l             L       asciitilde        asciitilde " \
        keyboard.map+="keycode  23 =              u             U           uacute            Uacute " \
        keyboard.map+="keycode  24 =              y             Y       udiaeresis        Udiaeresis " \
        keyboard.map+="keycode  25 =      semicolon         colon       odiaeresis        Odiaeresis " \
        keyboard.map+="keycode  26 =    bracketleft     braceleft    guillemotleft        asciitilde " \
        keyboard.map+="keycode  27 =   bracketright    braceright   guillemotright        asciitilde " \
        keyboard.map+="keycode  43 =      backslash           bar       asciitilde        asciitilde " \
                                                                                                       \
        keyboard.map+="keycode  30 =              a             A           aacute            Aacute " \
        keyboard.map+="keycode  31 =              r             R       dead_grave        asciitilde " \
        keyboard.map+="keycode  32 =              s             S           ssharp        asciitilde " \
        keyboard.map+="keycode  33 =              t             T       dead_acute        asciitilde " \
        keyboard.map+="keycode  34 =              d             D   dead_diaeresis        asciitilde " \
        keyboard.map+="keycode  35 =              h             H       asciitilde        asciitilde " \
        keyboard.map+="keycode  36 =              n             N           ntilde            Ntilde " \
        keyboard.map+="keycode  37 =              e             E           eacute            Eacute " \
        keyboard.map+="keycode  38 =              i             I           iacute            Iacute " \
        keyboard.map+="keycode  39 =              o             O           oacute            Oacute " \
        keyboard.map+="keycode  40 =     apostrophe      quotedbl           otilde            Otilde " \
                                                                                                       \
        keyboard.map+="keycode  44 =              z             Z               ae                AE " \
        keyboard.map+="keycode  45 =              x             X  dead_circumflex        asciitilde " \
        keyboard.map+="keycode  46 =              c             C         ccedilla          Ccedilla " \
        keyboard.map+="keycode  47 =              v             V       asciitilde        asciitilde " \
        keyboard.map+="keycode  48 =              b             B       asciitilde        asciitilde " \
        keyboard.map+="keycode  49 =              k             K       asciitilde        asciitilde " \
        keyboard.map+="keycode  50 =              m             M       asciitilde        asciitilde " \
        keyboard.map+="keycode  51 =          comma          less     dead_cedilla        asciitilde " \
        keyboard.map+="keycode  52 =         period       greater       asciitilde        asciitilde " \
        keyboard.map+="keycode  53 =          slash      question     questiondown        asciitilde " \
                                                                                                       \
        keyboard.map+="keycode  58 =      BackSpace     BackSpace        BackSpace         BackSpace " \
        keyboard.map+="keycode  86 =          minus    underscore       asciitilde        asciitilde " \
        keyboard.map+="keycode  57 =          space         space            space      nobreakspace " \
        keyboard.map+="keycode 184 =    Mode_switch   Mode_switch                                    "

    to your /etc/wsconsctl.conf.

    For X11, I just use xmodmap (run from my .xinitrc).

    Offline
    • 0