Last active
July 20, 2019 11:09
-
-
Save fengye/2385665d355a9238d07682ffb5b4b772 to your computer and use it in GitHub Desktop.
An remapped HHKB layout for C++ programmers.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "unimap_trans.h" | |
enum macro_id { | |
CPP_POINTER, | |
CPP_COMMENT, | |
}; | |
// L0, for remapped X keycodes | |
// 1st row | |
#define AC_L0_LPRN ACTION_MODS_KEY(MOD_LSFT, KC_9) | |
#define AC_L0_RPRN ACTION_MODS_KEY(MOD_LSFT, KC_0) | |
// 2nd row | |
#define AC_L0_LCBK ACTION_MODS_KEY(MOD_LSFT, KC_LBRACKET) | |
#define AC_L0_RCBK ACTION_MODS_KEY(MOD_LSFT, KC_RBRACKET) | |
// 3rd row | |
#define AC_L0_COLN ACTION_MODS_KEY(MOD_LSFT, KC_SCOLON) | |
#define AC_FN1 ACTION_LAYER_MOMENTARY(1) | |
// #define AC_FN2 ACTION_LAYER_TAP_KEY(2, KC_LCTRL) | |
#define AC_FN2 ACTION_LAYER_MOMENTARY(2) | |
#define AC_FN3 ACTION_LAYER_MOMENTARY(3) | |
#define AC_ENT2 ACTION_MODS_TAP_KEY(MOD_RCTL, KC_ENTER) | |
// L2, mainly for navigation | |
#define AC_L2(KEY) ACTION_MODS_KEY(MOD_LCTL, KC_##KEY) | |
#define AC_L2_LNST ACTION_MODS_KEY(MOD_LCTL, KC_A) | |
#define AC_L2_LNED ACTION_MODS_KEY(MOD_LCTL, KC_E) | |
// L3, for remapped Shift+X keycodes | |
#define AC_L3(KEY) ACTION_MODS_KEY(MOD_LSFT, KC_##KEY) | |
// 1st row | |
#define AC_L3_GRAV ACTION_KEY(KC_GRAVE) | |
#define AC_L3_DBQT ACTION_MODS_KEY(MOD_LSFT, KC_QUOTE) | |
#define AC_L3_SGQT ACTION_KEY(KC_QUOTE) | |
#define AC_L3_PIPE ACTION_MODS_KEY(MOD_LSFT, KC_BSLASH) | |
#define AC_L3_MINS ACTION_KEY(KC_MINUS) | |
#define AC_L3_PLUS ACTION_MODS_KEY(MOD_LSFT, KC_EQUAL) | |
#define AC_L3_LPRN ACTION_MODS_KEY(MOD_LSFT, KC_9) | |
#define AC_L3_RPRN ACTION_MODS_KEY(MOD_LSFT, KC_0) | |
#define AC_L3_LBKT ACTION_KEY(KC_LBRACKET) | |
#define AC_L3_RBKT ACTION_KEY(KC_RBRACKET) | |
#define AC_L3_AT ACTION_MODS_KEY(MOD_LSFT, KC_2) | |
// 2nd row | |
#define AC_L3_TIDL ACTION_MODS_KEY(MOD_LSFT, KC_GRAVE) | |
#define AC_L3_LSBK ACTION_MODS_KEY(MOD_LSFT, KC_COMMA) | |
#define AC_L3_RSBK ACTION_MODS_KEY(MOD_LSFT, KC_DOT) | |
#define AC_L3_HASH ACTION_MODS_KEY(MOD_LSFT, KC_3) | |
#define AC_L3_DLLR ACTION_MODS_KEY(MOD_LSFT, KC_4) | |
#define AC_L3_CCMT ACTION_MACRO(CPP_COMMENT) | |
// 4th row | |
#define AC_L3_USCR ACTION_MODS_KEY(MOD_LSFT, KC_MINUS) | |
#define AC_L3_QSTM ACTION_MODS_KEY(MOD_LSFT, KC_SLASH) | |
#define AC_L3_CPTR ACTION_MACRO(CPP_POINTER) | |
#define AC_L3_BSLS ACTION_KEY(KC_BSLS) | |
#ifdef KEYMAP_SECTION_ENABLE | |
const action_t actionmaps[][UNIMAP_ROWS][UNIMAP_COLS] __attribute__ ((section (".keymap.keymaps"))) = { | |
#else | |
const action_t actionmaps[][UNIMAP_ROWS][UNIMAP_COLS] PROGMEM = { | |
#endif | |
[0] = UNIMAP_HHKB( | |
ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, L0_LPRN,L0_RPRN,EQL,GRV, | |
TAB, Q, W, E, R, T, Y, U, I, O, P, L0_LCBK,L0_RCBK, BSPC, | |
FN2, A, S, D, F, G, H, J, K, L, SCLN,L0_COLN, ENT2, | |
FN3, Z, X, C, V, B, N, M, COMM,DOT, SLSH, FN3, FN1, | |
LALT,LGUI, SPC, RGUI,RALT), | |
// This is HHKB original Fn1 layer | |
[1] = UNIMAP_HHKB( | |
PWR, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, | |
CAPS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PSCR,SLCK,PAUS,TRNS,TRNS, TRNS, | |
TRNS,VOLD,VOLU,MUTE,TRNS,TRNS,PAST,PSLS,TRNS,TRNS,TRNS,TRNS, PENT, | |
TRNS, TRNS,TRNS,TRNS,TRNS,TRNS,PPLS,PMNS,TRNS,TRNS,TRNS, TRNS,TRNS, | |
TRNS,TRNS, TRNS, TRNS,TRNS), | |
[2] = UNIMAP_HHKB( | |
L2(ESC), L2(1), L2(2), L2(3), L2(4), L2(5), L2(6), L2(7), L2(8), L2(9), L2(0), L2(MINS),L2(EQL), L2(BSLS),L2(GRV), | |
L2(TAB), L2(Q), L2(W), L2(E), L2(R), L2(T), L2(Y), L2_LNST, UP, L2_LNED, HOME, PGUP, L2(RBRC), L2(BSPC), | |
NO, L2(A), L2(S), L2(D), L2(F), L2(G), L2(H), LEFT, DOWN, RIGHT, END, PGDN, L2(ENT), | |
L2(LSFT),L2(Z), L2(X), L2(C), L2(V), L2(B), L2(N), L2(M), L2(COMM),L2(DOT), L2(SLSH), L2(RSFT),NO, | |
L2(LALT),L2(LGUI), L2(SPC), L2(RGUI),L2(RALT)), | |
[3] = UNIMAP_HHKB( | |
L3_GRAV,L3(1), L3_DBQT,L3_SGQT,L3_PIPE,L3(5), L3(6), L3(7), L3(8), L3_MINS,L3_PLUS,L3_LBKT,L3_RBKT,L3_USCR,L3_TIDL, | |
L3_AT, L3(Q), L3(W), L3(E), L3(R), L3(T), L3(Y), L3(U), L3(I), L3(O), L3(P), L3_LSBK,L3_RSBK, DEL, | |
TRNS, L3(A), L3(S), L3(D), L3(F), L3(G), L3(H), L3(J), L3(K), L3(L), L3_HASH,L3_DLLR, L3_CCMT, | |
TRNS, L3(Z), L3(X), L3(C), L3(V), L3(B), L3(N), L3(M), L3_QSTM,L3_CPTR,L3_BSLS, TRNS, TRNS, | |
TRNS, TRNS, L3_USCR, TRNS, TRNS), | |
}; | |
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) | |
{ | |
switch (id) { | |
case CPP_POINTER: | |
return (record->event.pressed ? | |
MACRO( I(0), T(MINUS), ST(DOT), END ) : | |
MACRO_NONE ); | |
case CPP_COMMENT: | |
return (record->event.pressed ? | |
MACRO( I(0), T(SLSH), T(SLSH), T(SLSH), END ) : | |
MACRO_NONE ); | |
} | |
return MACRO_NONE; | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment