diff options
Diffstat (limited to 'keyboard/hhkb/keymap.c')
| -rw-r--r-- | keyboard/hhkb/keymap.c | 195 | 
1 files changed, 84 insertions, 111 deletions
| diff --git a/keyboard/hhkb/keymap.c b/keyboard/hhkb/keymap.c index ef21282ff..094d33af1 100644 --- a/keyboard/hhkb/keymap.c +++ b/keyboard/hhkb/keymap.c @@ -56,18 +56,18 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {       * |-----------------------------------------------------------|       * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|Backs|       * |-----------------------------------------------------------| -     * |Fn6   |  A|  S|  D|  F|  G|  H|  J|  K|  L|Fn3|  '|Return  | +     * |Contro|  A|  S|  D|  F|  G|  H|  J|  K|  L|Fn3|  '|Fn4     |       * |-----------------------------------------------------------| -     * |Fn8     |  Z|  X|  C|  V|  B|  N|  M|  ,|  .|Fn2|Fn12  |Fn1| +     * |Fn5     |  Z|  X|  C|  V|  B|  N|  M|  ,|  .|Fn2|Shift |Fn1|       * `-----------------------------------------------------------' -     *       |Gui|Alt  |          Fn5          |Alt  |Fn4| +     *       |Gui|Alt  |         Fn6           |Alt  |Fn7|       *       `-------------------------------------------'       */      KEYMAP(ESC, 1,   2,   3,   4,   5,   6,   7,   8,   9,   0,   MINS,EQL, BSLS,GRV, \             TAB, Q,   W,   E,   R,   T,   Y,   U,   I,   O,   P,   LBRC,RBRC,BSPC, \ -           FN6, A,   S,   D,   F,   G,   H,   J,   K,   L,   FN3, QUOT,FN7, \ -           FN8, Z,   X,   C,   V,   B,   N,   M,   COMM,DOT, FN2, FN12,FN9, \ -                LGUI,LALT,          FN5,                FN13,FN4), +           LCTL,A,   S,   D,   F,   G,   H,   J,   K,   L,   FN3, QUOT,FN4, \ +            FN5,Z,   X,   C,   V,   B,   N,   M,   COMM,DOT, FN2, RSFT,FN1, \ +                LGUI,LALT,          FN6,                RALT,FN7),      /* Layer 1: HHKB mode (HHKB Fn)       * ,-----------------------------------------------------------. @@ -77,15 +77,15 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {       * |-----------------------------------------------------------|       * |Contro|VoD|VoU|Mut|   |   |  *|  /|Hom|PgU|Lef|Rig|Enter   |       * |-----------------------------------------------------------| -     * |Shift   |   |   |   |   |   |  +|  -|End|PgD|Dow|Shift |Fn0| +     * |Shift   |   |   |   |   |   |  +|  -|End|PgD|Dow|Shift |   |       * `-----------------------------------------------------------'       *       |Gui|Alt  |         Space         |Alt  |Gui|       *       `-------------------------------------------'       */  -    KEYMAP(PWR, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, INS, DEL, \ +    KEYMAP(GRV, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, INS, DEL, \             CAPS,NO,  NO,  NO,  NO,  NO,  NO,  NO,  PSCR,SLCK,PAUS, UP,  NO,  BSPC, \             LCTL,VOLD,VOLU,MUTE,NO,  NO,  PAST,PSLS,HOME,PGUP,LEFT,RGHT,ENT, \ -           LSFT,NO,  NO,  NO,  NO,  NO,  PPLS,PMNS,END, PGDN,DOWN,RSFT,FN0, \ +           LSFT,NO,  NO,  NO,  NO,  NO,  PPLS,PMNS,END, PGDN,DOWN,RSFT,TRNS, \                  LGUI,LALT,          SPC,                RALT,RGUI),      /* Layer 2: Vi mode (Slash) @@ -101,10 +101,10 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {       *       |Gui|Alt  |          Space        |Alt  |Gui|       *       `-------------------------------------------'       */ -    KEYMAP(ESC, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, INS, DEL, \ +    KEYMAP(GRV, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, INS, DEL, \             TAB, HOME,PGDN,UP,  PGUP,END, HOME,PGDN,PGUP,END, NO,  NO,  NO,  BSPC, \             LCTL,NO,  LEFT,DOWN,RGHT,NO,  LEFT,DOWN,UP,  RGHT,NO,  NO,  ENT, \ -           LSFT,NO,  NO,  NO,  NO,  NO,  HOME,PGDN,PGUP,END, FN0, RSFT,NO, \ +           LSFT,NO,  NO,  NO,  NO,  NO,  HOME,PGDN,PGUP,END, TRNS,RSFT,NO, \                  LGUI,LALT,          SPC,                RALT,RGUI),      /* Layer 3: Mouse mode (Semicolon) @@ -121,13 +121,13 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {       *      `--------------------------------------------'       * Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel        */ -    KEYMAP(ESC, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, INS, DEL, \ +    KEYMAP(GRV, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, INS, DEL, \             TAB, NO,  NO,  NO,  NO,  NO,  WH_L,WH_D,WH_U,WH_R,NO,  NO,  NO,  BSPC, \ -           LCTL,NO,  ACL0,ACL1,ACL2,NO,  MS_L,MS_D,MS_U,MS_R,FN0, QUOT,ENT, \ +           LCTL,NO,  ACL0,ACL1,ACL2,NO,  MS_L,MS_D,MS_U,MS_R,TRNS,QUOT,ENT, \             LSFT,NO,  NO,  NO,  NO,  BTN3,BTN2,BTN1,BTN4,BTN5,SLSH,RSFT,NO, \ -                LGUI,LALT,          BTN1,               RALT,FN0), +                LGUI,LALT,          BTN1,               RALT,TRNS), -    /* Layer 4: Matias half keyboard style (Space) +    /* Layer 4: Matias half-qwerty keyboard style (Space)       * ,-----------------------------------------------------------.       * |  -|  0|  9|  8|  7|  6|  5|  4|  3|  2|  1|   |   |   |Esc|       * |-----------------------------------------------------------| @@ -144,7 +144,7 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {             BSPC,P,   O,   I,   U,   Y,   T,   R,   E,   W,   Q,   NO,  NO,  TAB, \             LCTL,SCLN,L,   K,   J,   H,   G,   F,   D,   S,   A,   RCTL,RCTL, \             LSFT,SLSH,DOT, COMM,M,   N,   B,   V,   C,   X,   Z,   RSFT,NO, \ -                LGUI,LALT,          FN0,                RALT,RGUI), +                LGUI,LALT,          TRNS,               RALT,RGUI),      /* Layer5: another Mouse mode (Space)       * ,-----------------------------------------------------------. @@ -164,7 +164,7 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {             TAB, NO,  NO,  NO,  NO,  NO,  WH_L,WH_D,WH_U,WH_R,NO,  NO,  NO,  BSPC, \             LCTL,NO,  ACL0,ACL1,ACL2,NO,  MS_L,MS_D,MS_U,MS_R,NO,  NO,  ENT, \             LSFT,NO,  NO,  NO,  NO,  BTN3,BTN2,BTN1,BTN4,BTN5,NO,  RSFT,NO, \ -                LGUI,LALT,          FN0,                RALT,RGUI), +                LGUI,LALT,          TRNS,               RALT,RGUI),  }; @@ -173,56 +173,72 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {  enum function_id {      LSHIFT_LPAREN,      RSHIFT_RPAREN, -    MACRO                   = 0xff +}; + +enum macro_id { +    LSHIFT_PAREN, +    RSHIFT_PAREN, +    HELLO,  };  /*   * Fn action definition   */ -// TODO: use [1] = KEYMAP(...) to prevent from changing index of element?  static const uint16_t PROGMEM fn_actions[] = { -    ACTION_LAYER_DEFAULT,                           // FN0 -    ACTION_LAYER_SET(1),                            // FN1 -    ACTION_LAYER_SET_TAP_KEY(2, KC_SLASH),          // FN2  Layer with Slash -    ACTION_LAYER_SET_TAP_KEY(3, KC_SCLN),           // FN3  Layer with Semicolon +    [0] = ACTION_DEFAULT_LAYER,                        // Default layer(not used) +//  [1] = ACTION_KEYMAP(1),                            // HHKB layer +    [1] = ACTION_KEYMAP_TAP_TOGGLE(1),                 // HHKB layer(toggle with 5 taps) +    [2] = ACTION_KEYMAP_TAP_KEY(2, KC_SLASH),          // Cursor layer with Slash* +    [3] = ACTION_KEYMAP_TAP_KEY(3, KC_SCLN),           // Mousekey layer with Semicolon* +    [4] = ACTION_RMOD_TAP_KEY(KC_RCTL, KC_ENT),        // RControl with tap Enter* +    [5] = ACTION_LMOD_ONESHOT(KC_LSFT),                // Oneshot Shift* +//  [6] = ACTION_KEYMAP_TAP_KEY(4, KC_SPC),            // Half-qwerty layer with Space +    [6] = ACTION_KEYMAP_TAP_KEY(5, KC_SPC),            // Mousekey layer with Space +//  [7] = ACTION_KEYMAP(3),                            // Mousekey layer +    [7] = ACTION_KEYMAP_TOGGLE(3),                     // Mousekey layer(toggle) -    ACTION_LAYER_SET(3),                            // FN4 -//  ACTION_LAYER_SET_TOGGLE(3),                     // FN4 -//  ACTION_FUNCTION(MACRO, 0),                      // FN4 -    ACTION_LAYER_SET_TAP_KEY(5, KC_SPC),            // FN5 -//  ACTION_LMOD_TAP_KEY(KC_LCTL, KC_BSPC),          // FN6  Control with tap Backspace -    ACTION_LMOD_TAP_KEY(KC_LCTL, KC_ESC),           // FN6  Control with tap Backspace -    ACTION_RMOD_TAP_KEY(KC_RCTL, KC_ENT),           // FN7  Control with tap Enter -    ACTION_LMOD_ONESHOT(KC_LSFT),                   // FN8  Oneshot Shift -    ACTION_LAYER_SET_TAP_TOGGLE(1),                 // FN9 -    ACTION_LAYER_BIT_TAP_KEY(1, KC_GRV),            // FN10 Layer with Grave -    //ACTION_LAYER_BIT(1),                          // FN10 -    //ACTION_LAYER_BIT_TAP_TOGGLE(1),               // FN10 -    ACTION_FUNCTION_TAP(LSHIFT_LPAREN),             // FN11 Function: LShift with tap '(' -    ACTION_FUNCTION_TAP(RSHIFT_RPAREN),             // FN12 Function: RShift with tap ')' -    ACTION_FUNCTION(MACRO, 1),                      // FN13 Macro: +//  [8] = ACTION_LMOD_TAP_KEY(KC_LCTL, KC_BSPC),       // LControl with tap Backspace +//  [9] = ACTION_LMOD_TAP_KEY(KC_LCTL, KC_ESC),        // LControl with tap Esc +//  [11] = ACTION_FUNCTION_TAP(LSHIFT_LPAREN),         // Function: LShift with tap '(' +//  [12] = ACTION_FUNCTION_TAP(RSHIFT_RPAREN),         // Function: RShift with tap ')' +//  [13] = ACTION_MACRO_TAP(LSHIFT_PAREN),             // Macro: LShift with tap '(' +//  [14] = ACTION_MACRO_TAP(RSHIFT_PAREN),             // Macro: RShift with tap ')' +//  [15] = ACTION_MACRO(HELLO),                        // Macro: say hello  };  /*   * Macro definition   */ -#define MACRO(...) ({ static prog_macro_t _m[] PROGMEM = { __VA_ARGS__ }; _m; }) -#define MACRO_NONE  0 -static const prog_macro_t *get_macro(uint8_t id, bool pressed) +const prog_macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)  { +    keyevent_t event = record->event; +    tap_t tap = record->tap; +      switch (id) { -        case 0: -            return (pressed ? -                    MACRO( MD(LSHIFT), D(D), END ) : -                    MACRO( U(D), MU(LSHIFT), END ) ); -        case 1: -            return (pressed ? -                    MACRO( I(255), T(H), T(E), T(L), T(L), W(255), T(O), END ) : +        case LSHIFT_PAREN: +            if (tap.count > 0 && !tap.interrupted) { +                return (event.pressed ? +                        MACRO( MD(LSHIFT), D(9), U(9), MU(LSHIFT), END ) : MACRO_NONE); +            } else { +                return (event.pressed ? +                        MACRO( MD(LSHIFT), END ) : MACRO( MU(LSHIFT), END ) ); +            } +        case RSHIFT_PAREN: +            if (tap.count > 0 && !tap.interrupted) { +                return (event.pressed ? +                        MACRO( MD(RSHIFT), D(0), U(0), MU(RSHIFT), END ) : MACRO_NONE); +            } else { +                return (event.pressed ? +                        MACRO( MD(RSHIFT), END ) : MACRO( MU(RSHIFT), END ) ); +            } +        case HELLO: +            return (event.pressed ? +                    MACRO( I(0), T(H), T(E), T(L), T(L), W(255), T(O), END ) :                      MACRO_NONE );      } -    return 0; +    return MACRO_NONE;  } @@ -230,82 +246,51 @@ static const prog_macro_t *get_macro(uint8_t id, bool pressed)  /*   * user defined action function   */ -void keymap_call_function(keyrecord_t *record, uint8_t id, uint8_t opt) +void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)  {      keyevent_t event = record->event; -    uint8_t tap_count = record->tap_count; - -    debug("action_call_function: "); -    if (event.pressed) debug("pressed"); else debug("released"); -    debug(" id: "); debug_hex(id); -    debug(" tap_count: "); debug_dec(tap_count); -    debug("\n"); +    tap_t tap = record->tap;      switch (id) {          case LSHIFT_LPAREN:              // LShft + tap '(' +            // NOTE: cant use register_code to avoid conflicting with magic key bind              if (event.pressed) { -                if (tap_count == 0) { +                if (tap.count == 0 || tap.interrupted) {                      add_mods(MOD_BIT(KC_LSHIFT));                  } else { -                    if (waiting_buffer_has_anykey_pressed()) { -                        // ad hoc: set 0 to cancel tap -                        record->tap_count = 0; -                        add_mods(MOD_BIT(KC_LSHIFT)); -                    } else { -                        // NOTE to avoid conflicting command key bind(LShift+RShift) -                        //register_code(KC_LSHIFT); -                        //register_code(KC_9); -                        host_add_mods(MOD_BIT(KC_LSHIFT)); -                        host_add_key(KC_9); -                        host_send_keyboard_report(); -                    } -                } -            } else { -                if (tap_count == 0) { -                    del_mods(MOD_BIT(KC_LSHIFT)); -                } else { -                    //unregister_code(KC_9); -                    //unregister_code(KC_LSHIFT); +                    host_add_mods(MOD_BIT(KC_LSHIFT)); +                    host_add_key(KC_9); +                    host_send_keyboard_report();                      host_del_mods(MOD_BIT(KC_LSHIFT));                      host_del_key(KC_9);                      host_send_keyboard_report();                  } +            } else { +                if (tap.count == 0 || tap.interrupted) { +                    del_mods(MOD_BIT(KC_LSHIFT)); +                }              }              break;          case RSHIFT_RPAREN:              // RShift + tap ')'              if (event.pressed) { -                if (tap_count == 0) { +                if (tap.count == 0 || tap.interrupted) {                      add_mods(MOD_BIT(KC_RSHIFT));                  } else { -                    if (waiting_buffer_has_anykey_pressed()) { -                        // ad hoc: set 0 to cancel tap -                        record->tap_count = 0; -                        add_mods(MOD_BIT(KC_RSHIFT)); -                    } else { -                        //register_code(KC_RSHIFT); -                        //register_code(KC_0); -                        host_add_mods(MOD_BIT(KC_RSHIFT)); -                        host_add_key(KC_0); -                        host_send_keyboard_report(); -                    } -                } -            } else { -                if (tap_count == 0) { -                    del_mods(MOD_BIT(KC_RSHIFT)); -                } else { -                    //unregister_code(KC_0); -                    //unregister_code(KC_RSHIFT); +                    host_add_mods(MOD_BIT(KC_RSHIFT)); +                    host_add_key(KC_0); +                    host_send_keyboard_report();                      host_del_mods(MOD_BIT(KC_RSHIFT));                      host_del_key(KC_0);                      host_send_keyboard_report();                  } +            } else { +                if (tap.count == 0 || tap.interrupted) { +                    del_mods(MOD_BIT(KC_RSHIFT)); +                }              }              break; -        case MACRO: -            action_macro_play(get_macro(opt, event.pressed)); -            break;      }  } @@ -328,15 +313,3 @@ action_t keymap_fn_to_action(uint8_t keycode)      }      return action;  } - -/* convert key to action */ -action_t action_for_key(uint8_t layer, key_t key) -{ -    uint8_t keycode = keymap_key_to_keycode(layer, key); -    switch (keycode) { -        case KC_FN0 ... KC_FN31: -            return keymap_fn_to_action(keycode); -        default: -            return keymap_keycode_to_action(keycode); -    } -} | 
