One-handed portable keyboards? (other than Twiddler)

lancegatlin

07 Mar 2019, 21:20

Hi folks!

I already own several Twiddlers and am very familiar with its pros and cons.

I'm writing to see if anyone knows about alternatives. There seems to be no viable commercial one-handed portable keyboards besides Twiddler. I'm very interested in custom projects that anyone knows about.

Specifically, I'm looking to find something like the Twiddler but with a controller that is QMK compatible. My current project is bumping up against the limitations of the TekGear firmware and TekGear provides no help in writing custom firmware.

Also, for anyone inclined to comment, I'm weighing the choice of spending the time to bootstrap custom Twiddler firmware vs crafting a Twiddler like device from scratch.

The chipset on the Twiddler is: https://www.microchip.com/wwwproducts/en/PIC18F47J53

Thanks!

-L

Lanrefni

08 Mar 2019, 16:03

Only one I remember seeing was the Frogpad, but with QMK and chording you could easily duplicate it's functionality with half a Levinson/Let's Split.

User avatar
swampangel

08 Mar 2019, 20:15

There's an expensive Matias one http://www.matias.ca/halfkeyboard/index.php?refID=7 but it's not programmable.

I agree with Lanrefni's suggestion to use half of a QMK compatible split keyboard.

Do you want/need something that you can hold in your hand like the Twiddler?

Menuhin

08 Mar 2019, 22:08

I use this keyboard in the foreground as my one-handed portable keyboard - like a half-Planck:

Image

QMK compatible.
(It's also a switch tester for me, mainly Cherry, Gateron, & Zeal v1)
Spoiler:

Code: Select all

#define _BL 0
#define _NV 1

#define _NP 2

#define _LH  3
#define _RHM 4
#define _LN  5
#define _RNM 6
#define _HV 7

#define _FL 9

#define _______ KC_TRNS

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  /* Keymap _BL: 0, (Base Layer) Default Layer
   * ,-------------------.
   * |EscF|Tab |Del | BS |
   * |----|----|----|----|
   * | 7  | 8  | 9  | /  |
   * |----|----|----|----|
   * | 4  | 5  | 6  | *  |
   * |----|----|----|----|
   * | 1  | 2  | 3  | -  |
   * |----|----|----|----|
   * | 0  | Up | .  | +  |
   * |----|----|----|----|
   * |Left|Down|Rght| En |
   * `-------------------'
   */
  [_BL] = LAYOUT_ortho_6x4(
    LT(9, KC_ESC), KC_TAB, KC_DEL, KC_BSPC, \
    KC_P7,   KC_P8,   KC_P9,  KC_PSLS, \
    KC_P4,   KC_P5,   KC_P6,  KC_PAST, \
    KC_P1,   KC_P2,   KC_P3,  KC_PMNS, \
    KC_P0,   KC_UP,   KC_PDOT,  KC_PPLS, \
    KC_LEFT, KC_DOWN, KC_RIGHT, LT(1, KC_PENT)
  ),

  /* Keymap _NV: 1, Navigation Layer
   * ,-------------------.
   * |    |    |    |    |
   * |----|----|----|----|
   * |    |    |    |    |
   * |----|----|----|----|
   * |    |    |Prev|    |
   * |----|----|----|----|
   * |VoUp|Mute|Play|    |
   * |----|----|----|----|
   * |VoDn|PgUp|Next|    |
   * |----|----|----|----|
   * |Home|PgDn|End |    |
   * `-------------------'
   */
  [_NV] = LAYOUT_ortho_6x4(
    _______, _______, _______, _______,  \
    _______, _______, _______, _______,  \
    KC_MUTE, _______, KC_MPLY, _______,  \
    KC_VOLU, _______, KC_MPRV, _______,  \
    KC_VOLD, KC_PGUP, KC_MNXT, _______,  \
    KC_HOME, KC_PGDN, KC_END,  _______ 
  ),

  /* Keymap _FL: 9, Function Layer
   * ,-------------------.
   * |    |LED |RGB | NP |
   * |----|----|----|----|
   * |NuLk|LED+|    | LH |
   * |----|----|----|----|
   * |    |LED-|    | RH |
   * |----|----|----|----|
   * |    |    |    |    |
   * |----|----|----|----|
   * |    |    |    |    |
   * |----|----|----|----|
   * | BL |    |Rset|    |
   * `-------------------'
   */
  [_FL] = LAYOUT_ortho_6x4(
    KC_TRNS, BL_TOGG, RGB_TOG, TO(2),   \
    KC_NLCK, BL_INC,  KC_NO,   TO(3),   \
    KC_NO,   BL_DEC,  KC_NO,   TO(7),   \
    KC_NO,   BL_BRTG, KC_NO,   KC_NO,   \
    KC_NO,   KC_NO,   KC_NO,   KC_NO,   \
    TO(0),   KC_NO,   KC_NO,   RESET
  ),

  /* Keymap _NP: 2, Numpad Layer
   * ,-------------------.
   * |EscF|Tab |Del | BS |
   * |----|----|----|----|
   * | =  | (  | )  | /  |
   * |----|----|----|----|
   * | 7  | 8  | 9  | *  |
   * |----|----|----|----|
   * | 4  | 5  | 6  | -  |
   * |----|----|----|----|
   * | 1  | 2  | 3  | +  |
   * |----|----|----|----|
   * | 0  | .  | ,  | En |
   * `-------------------'
   */
  [_NP] = LAYOUT_ortho_6x4(
    LT(9, KC_ESC), KC_TAB, KC_DEL, KC_BSPC, \
    KC_PEQL, KC_LPRN, KC_RPRN, KC_PSLS, \
    KC_P7,   KC_P8,   KC_P9,   KC_PAST,   \
    KC_P4,   KC_P5,   KC_P6,   KC_PMNS, \
    KC_P1,   KC_P2,   KC_P3,   KC_PPLS, \
    KC_P0, KC_PDOT, KC_PCMM,   KC_PENT
  ),

  
  /* Keymap _LH: 3, Left hand
   * ,-------------------.
   * | TF | G  | B  |Spac|
   * |----|----|----|----|
   * | R  | F  | V  | Fn |
   * |----|----|----|----|
   * | E  | D  | C  | OS |
   * |----|----|----|----|
   * | W  | S  | X  | Alt|
   * |----|----|----|----|
   * | Q  | A  | Z  | Fn2|
   * |----|----|----|----|
   * |TabF|CtEs|ShEn|Bspc| Can use KC_SFTENT also
   * `-------------------'
   */
  [_LH] = LAYOUT_ortho_6x4(
    LT(9, KC_T), KC_G,           KC_B,           LT(4, KC_SPC), \
    KC_R,        KC_F,           KC_V,           LT(5, KC_SPC), \
    KC_E,        KC_D,           KC_C,           KC_LALT, \
    KC_W,        KC_S,           KC_X,           KC_LGUI, \
    KC_Q,        KC_A,           KC_Z,           LT(7, KC_LEAD), \
    KC_TAB,      LCTL_T(KC_ESC), LSFT_T(KC_ENT), KC_BSPC
  ),

  /* Keymap _RHM: 4, Right hand mirror
   * ,-------------------.
   * | Y  | H  | N  |Spc |
   * |----|----|----|----|
   * | U  | J  | MF |    |
   * |----|----|----|----|
   * | I  | K  | ,  |    |
   * |----|----|----|----|
   * | O  | L  | .  |    |
   * |----|----|----|----|
   * | P  | ;  | /  |    |
   * |----|----|----|----|
   * |Bspc| "  |    |    |
   * `-------------------'
   */
  [_RHM] = LAYOUT_ortho_6x4(
    LT(9, KC_Y), KC_H,            KC_N,        KC_TRNS,   \
    KC_U,        KC_J,            KC_M,        KC_TRNS,   \
    KC_I,        KC_K,            KC_COMM,     KC_TRNS,   \
    KC_O,        KC_L,            KC_DOT,      KC_TRNS,   \
    KC_P,        KC_SCLN,         KC_QUES,     KC_TRNS,   \
    KC_TRNS,     LCTL_T(KC_QUOT), KC_TRNS,     KC_DEL
  ),

  /* Keymap _LN: 5, Left hand number
   * ,-------------------.
   * | 5f | =  | F5 |    |
   * |----|----|----|----|
   * | 4  | -  | F4f|    |
   * |----|----|----|----|
   * | 3  | )  | F3 |    |
   * |----|----|----|----|
   * | 2  | (  | F2 |    |
   * |----|----|----|----|
   * | 1  | /  | F1 |    |
   * |----|----|----|----|
   * | `  |    |    | Del|
   * `-------------------'
   */
  [_LN] = LAYOUT_ortho_6x4(
    KC_5,   KC_EQL,  KC_F5,   _______, \
    KC_4,   KC_MINS, LT(6, KC_F4),  _______, \
    KC_3,   KC_RPRN, KC_F3,   _______, \
    KC_2,   KC_LPRN, KC_F2,   _______, \
    KC_1,   KC_SLSH, KC_F1,   _______, \
    KC_GRV, _______, _______, KC_DEL
  ),

  /* Keymap _RNM: 6, Right hand number mirror
   * ,-------------------.
   * | 6f | F12| F6 | F7 |
   * |----|----|----|----|
   * | 7  | F11|    |    |
   * |----|----|----|----|
   * | 8  | ]  | F8 |    |
   * |----|----|----|----|
   * | 9  | [  | F9 |    |
   * |----|----|----|----|
   * | 0  | \  | F10|    |
   * |----|----|----|----|
   * |    |    |    |    |
   * `-------------------'
   */
  [_RNM] = LAYOUT_ortho_6x4(
    KC_6,    KC_F12,  KC_F6,   KC_F7,    \
    KC_7,    KC_F11,  _______, _______,  \
    KC_8,    KC_RBRC, KC_F8,   _______,  \
    KC_9,    KC_LBRC, KC_F9,   _______,  \
    KC_0,    KC_BSLS, KC_F10,  _______,  \
    KC_PSCR, _______, _______, _______
  ),

  /* Keymap _HV: 7, Half hand navigation
   * ,-------------------.
   * |Mute|    |    |    |
   * |----|----|----|----|
   * |VoUp|VolD|    |    |
   * |----|----|----|----|
   * |End |Rght|Next|    |
   * |----|----|----|----|
   * |Up  |Down|Play|    |
   * |----|----|----|----|
   * |Home|Left|Prev|    |
   * |----|----|----|----|
   * |PgUp|PgDn|    |    |
   * `-------------------'
   */
  [_HV] = LAYOUT_ortho_6x4(
    KC_MUTE, KC_NO,   KC_NO,   KC_NO,   \
    KC_VOLU, KC_VOLD, KC_NO,   KC_NO,   \
    KC_END,  KC_RGHT, KC_MNXT, KC_NO,   \
    KC_UP,   KC_DOWN, KC_MPLY, KC_NO,   \
    KC_HOME, KC_LEFT, KC_MPRV, KC_NO,   \
    KC_PGUP, KC_PGDN, KC_NO,   KC_NO
  ),
};

P.s. I type super super slow in this mirrored one-hand way, < 20 WPM, was worse when I just get started. I see I can get to perhaps 40 WPM but not much more.

Post Reply

Return to “Keyboards”