Skip to content

Instantly share code, notes, and snippets.

@fengye
Last active July 20, 2019 11:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fengye/2385665d355a9238d07682ffb5b4b772 to your computer and use it in GitHub Desktop.
Save fengye/2385665d355a9238d07682ffb5b4b772 to your computer and use it in GitHub Desktop.
An remapped HHKB layout for C++ programmers.
#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