]> git.donarmstrong.com Git - qmk_firmware.git/blobdiff - keyboards/planck/keymaps/hiea/keymap.c
update with qmk master (#2887)
[qmk_firmware.git] / keyboards / planck / keymaps / hiea / keymap.c
diff --git a/keyboards/planck/keymaps/hiea/keymap.c b/keyboards/planck/keymaps/hiea/keymap.c
new file mode 100644 (file)
index 0000000..2f573f9
--- /dev/null
@@ -0,0 +1,429 @@
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+// this is the style you want to emulate.
+//
+// To flash planck firmware
+// ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
+//   Reset keyboard or press hw reset button on base (hole)
+//
+//   cd qmk_firmware/keyboards/planck
+//   sudo make KEYMAP=sdothum dfu
+//
+//   sudo make clean          (good practice before flashing)
+//   sudo make KEYMAP=sdothum (to compile check)
+//
+// Package requirements (for arch linux)
+// ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
+//   avr-gcc-atmel
+//   avr-libc-atmel
+//   dfu-programmer
+//
+// Notes
+// ▔▔▔▔▔
+//   ** E R G O   W I D E   S P L I T ** Layout
+//
+//   Autocompletion tap dance key pairs (),[],{} are available from the
+//   number/symbol layer, as well as, numerous (un)shift key values
+//
+//   The navigation pad provides a single hand right thumb activated cluster
+//   with left hand modifiers
+//
+//   #define PRIVATE_STRING includes private_string.h, a user defined code
+//   block for the PRIV tap dance e.g. SEND_STRING("secret messape"),
+//   see function private()
+//
+// Modifier clusters
+// ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
+//   The num and sym keys together access the navigation pad layer
+//
+//   ,-----------------------------------------------------------------------------------.
+//   | Ctrl |  GUI |  Alt |  Esc | Space|  Tab | Bksp |  Ent | Left | Down |  Up  | Right|
+//   `-----------------------------------------------------------------------------------'
+//
+// Hint
+// ▔▔▔▔
+//   For sculpted keycaps such as Cherry or OEM profile, reverse the Alt, Num,
+//   Shift, Shift, Nav, Sym keycaps for more ergonomic thumb orientation and
+//   actuation
+//
+// Code
+// ▔▔▔▔
+//   This source is shamelessly based on the "default" planck layout
+//
+//   #ifdef/#endif block structures are not indented, as syntax highlighting
+//   in vim is sufficient for identification
+//
+//   c++ commenting style is used throughout
+//
+// Change history
+// ▔▔▔▔▔▔▔▔▔▔▔▔▔▔
+//   See http://thedarnedestthing.com/planck%20constant
+//   See http://thedarnedestthing.com/planck%20done
+
+
+
+//                === N O T E ===
+//
+// sudo CPATH=<keymap.c directory>/common make ...
+
+
+#include "config.h"
+#include "planck.h"
+#include "action_layer.h"
+#ifdef STENO_ENABLE
+#include "keymap_steno.h"
+#endif
+#ifdef AUDIO_ENABLE
+#include "audio.h"
+#endif
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+enum planck_layers {
+  _BASE = 0
+ ,_SHIFT
+ ,_LSHIFT
+ ,_RSHIFT
+ ,_PLOVER
+ ,_NUMBER
+ ,_SYMBOL
+ ,_FNCKEY
+ ,_MOUSE
+#ifdef CENTER_TT
+ ,_TTNUMBER
+ ,_TTREGEX
+ ,_TTFNCKEY
+ ,_TTCURSOR
+ ,_TTMOUSE
+#endif
+ ,_EDIT
+ ,_ADJUST
+ ,_END_LAYERS
+};
+
+enum planck_keycodes {
+  BASE = SAFE_RANGE
+ ,BASE1
+ ,BASE2
+ ,PLOVER
+ ,SM_CIRC   // pseudo GUI_T(S(KC_6))                      for shifted key-codes, see process_record_user()
+ ,SM_DLR    // pseudo SFT_T(S(KC_4))                      for shifted key-codes, see process_record_user()
+ ,SM_G      // pseudo MT   (MOD_LALT | MOD_LSFT, S(KC_G)) for shifted key-codes, see process_record_user()
+ ,SM_H      // pseudo MT   (MOD_LCTL | MOD_LSFT, S(KC_H)) for shifted key-codes, see process_record_user()
+ ,SM_PERC   // pseudo ALT_T(S(KC_5))                      for shifted key-codes, see process_record_user()
+ ,SM_W      // pseudo MT   (MOD_LGUI | MOD_LSFT, S(KC_W)) for shifted key-codes, see process_record_user()
+ ,SL_LEFT   // pseudo LT   (_MOUSE, S(KC_LEFT))           for shifted key-codes, see process_record_user()
+ ,SP_DEL    // pseudo LT   (_MOUSE, KC_DEL)               for shifted key-codes, see process_record_user()
+ ,SL_TAB    // pseudo LT   (_FNCKEY, S(KC_TAB))           for shifted key-codes, see process_record_user()
+#ifdef CENTER_TT
+ ,TT_ESC
+#endif
+#ifdef STENO_ENABLE
+ ,PS_STNA = STN_A
+ ,PS_STNO = STN_O
+ ,PS_STNE = STN_E
+ ,PS_STNU = STN_U
+#else
+ ,LT_C    = LT (_NUMBER, KC_C)
+ ,LT_V    = LT (_FNCKEY, KC_V)
+ ,LT_N    = LT (_EDIT,   KC_N)
+ ,LT_M    = LT (_SYMBOL, KC_M)
+#endif
+};
+
+// modifier keys
+#define AT_B    ALT_T(KC_B)
+#define AT_DOWN ALT_T(KC_DOWN)
+#define CT_RGHT CTL_T(KC_RGHT)
+#define GT_C    GUI_T(KC_C)
+#define GT_UP   GUI_T(KC_UP)
+#define MT_E    MT   (MOD_LCTL | MOD_LALT, KC_E)
+#define ST_A    SFT_T(KC_A)
+#ifdef HOME_MODS
+#define HOME_H  GUI_T(KC_H)
+#define HOME_I  CTL_T(KC_I)
+#define HOME_E  ALT_T(KC_E)
+#define HOME_A  SFT_T(KC_A)
+#define HOME_T  SFT_T(KC_T)
+#define HOME_R  ALT_T(KC_R)
+#define HOME_S  CTL_T(KC_S)
+#define HOME_W  GUI_T(KC_W)
+#else
+#define HOME_H  KC_H
+#define HOME_I  KC_I
+#define HOME_E  KC_E
+#define HOME_A  KC_A
+#define HOME_T  KC_T
+#define HOME_R  KC_R
+#define HOME_S  KC_S
+#define HOME_W  KC_W
+#endif
+
+#define S_DOWN  S    (KC_DOWN)
+#define S_LEFT  S    (KC_LEFT)
+#define S_RGHT  S    (KC_RGHT)
+#define S_TAB   S    (KC_TAB)
+#define S_UP    S    (KC_UP)
+
+#include "tapdance.h"
+
+// keycodes
+#define ___x___ KC_TRNS
+#define ___fn__ KC_TRNS
+#ifdef _______
+#undef _______
+#endif
+#define _______ KC_NO
+
+#define COPY    LCTL(KC_C)
+#define CUT     LCTL(KC_X)
+#define EOT     LCTL(KC_D)
+#define NAK     LCTL(KC_U)
+#define PASTE   LCTL(KC_V)
+#define UNDO    LCTL(KC_Z)
+#define TMCOPY  LALT(LCTL(KC_C))
+#define TMPASTE LALT(LCTL(KC_V))
+#define LT_BSLS LT  (_MOUSE,  KC_BSLS)      // see process_record_user() for extended handling
+#define LT_BSPC LT  (_EDIT,   KC_BSPC)
+#define SP_LEFT LT  (_EDIT,   KC_LEFT)
+#define LT_ESC  LT  (_NUMBER, KC_ESC)
+#define LT_LEFT LT  (_SYMBOL, KC_LEFT)      // see process_record_user() for extended handling
+#define SP_BSPC LT  (_SYMBOL, KC_BSPC)      // see process_record_user() for extended handling
+#define LT_TAB  LT  (_FNCKEY, KC_TAB)
+#define LT_INS  LT  (_FNCKEY, KC_INS)
+#define ADJUST  MO  (_ADJUST)
+#define OS_ALT  OSM (MOD_LALT)
+#define OS_CTL  OSM (MOD_LCTL)
+#define OS_GUI  OSM (MOD_LGUI)
+#define OS_SFT  OSM (MOD_LSFT)
+
+#ifdef CENTER_TT
+#define CNTR_TL TT  (_TTFNCKEY)
+#define CNTR_TR     KC_CAPS
+#define CNTR_HL TT  (_TTCURSOR)
+#define CNTR_HR TT  (_TTMOUSE)
+#define CNTR_BL TT  (_TTNUMBER)
+#define CNTR_BR TT  (_TTREGEX)
+#else
+#define CNTR_TL OSM (MOD_LALT | MOD_LCTL)
+#define CNTR_TR OSM (MOD_LGUI | MOD_LCTL)
+#define CNTR_HL OSM (MOD_LALT | MOD_LSFT)
+#define CNTR_HR OSM (MOD_LGUI | MOD_LSFT)
+#define CNTR_BL TD  (_CAPS)
+#define CNTR_BR OSM (MOD_LSFT | MOD_LCTL)
+#endif
+
+#ifdef THUMB_0
+#define LT_EQL  LT  (_ADJUST, KC_EQL)
+#else
+#define LT_0    LT  (_ADJUST, KC_0)
+#endif
+
+// ........................................................ Default Alpha Layout
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+#include "hiea.h"
+#include "steno_layout.h"
+
+// ...................................................... Number / Function Keys
+
+#include "number_fkey_layout.h"
+
+// ......................................................... Symbol / Navigation
+
+#include "symbol_guifn_layout.h"
+
+// ............................................................... Toggle Layers
+
+#ifdef CENTER_TT
+#include "toggle_layout.h"
+#endif
+
+// ......................................................... Short Cuts / Adjust
+
+#include "chord_layout.h"
+
+};
+
+// ...................................................................... Sounds
+
+#include "sounds.h"
+
+// ........................................................... User Keycode Trap
+
+#include "keycode_functions.h"
+
+#define BASE_1  1
+#define BASE_2  2
+#define BASE_12 3
+static uint8_t base_n = 0;
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record)
+{
+  switch (keycode) {
+    case BASE1:
+      if (record->event.pressed) {
+        base_n = base_n | BASE_1;
+        if (base_n == BASE_12) {
+          base_layer();
+        }
+      }
+      else {
+        base_n = base_n & ~BASE_1;
+      }
+      return false;
+    case BASE2:
+      if (record->event.pressed) {
+        base_n = base_n | BASE_2;
+        if (base_n == BASE_12) {
+          base_layer();
+        }
+      }
+      else {
+        base_n = base_n & ~BASE_2;
+      }
+      return false;
+    case AT_DOWN:
+#ifdef HOME_MODS
+    case HOME_E:
+    case HOME_R:
+#endif
+      tap_mods(record, KC_LALT);
+      break;
+    case CT_RGHT:
+#ifdef HOME_MODS
+    case HOME_H:
+    case HOME_W:
+#endif
+      tap_mods(record, KC_LGUI);
+      break;
+    case GT_UP:
+#ifdef HOME_MODS
+    case HOME_I:
+    case HOME_S:
+#endif
+      tap_mods(record, KC_LCTL);
+      break;
+#ifdef HOME_MODS
+    case HOME_A:
+    case HOME_T:
+      tap_mods(record, KC_LSFT);
+      break;
+#endif
+#ifdef CENTER_TT
+    case TT_ESC:
+      clear_tt();                           // exit TT layer
+      return false;
+#endif
+    case LT_ESC:
+#ifdef CENTER_TT
+      if (tt_keycode != 0) {
+        clear_tt();                         // exit TT layer
+        return false;
+      }
+#endif
+      tap_layer(record, _NUMBER);
+      break;
+    case LT_LEFT:
+    case SP_BSPC:
+      tap_layer(record, _SYMBOL);
+      // LT (_SYMBOL, KC_LEFT) left right combination layer
+      thumb_layer(record, RIGHT, 0, 0, _SYMBOL, _LSHIFT);
+      break;
+    case OS_ALT:
+      tap_mods(record, KC_LALT);
+      break;
+    case OS_CTL:
+      tap_mods(record, KC_LCTL);
+      break;
+    case OS_GUI:
+      tap_mods(record, KC_LGUI);
+      break;
+    case SM_CIRC:
+      // GUI_T(S(KC_6))
+      mt_shift(record, KC_LGUI, 0, KC_6);
+      break;
+    case SM_DLR:
+      // SFT_T(S(KC_4))
+      mt_shift(record, KC_LSFT, 0, KC_4);
+      break;
+    case SM_G:
+      // MT(MOD_LALT | MOD_LSFT, S(KC_G))
+      mt_shift(record, KC_LALT, KC_LSFT, KC_G);
+      break;
+    case SM_H:
+      // MT(MOD_LCTL | MOD_LSFT, S(KC_K))
+      mt_shift(record, KC_LCTL, KC_LSFT, KC_H);
+      break;
+    case SM_W:
+      // MT(MOD_LGUI | MOD_LSFT, S(KC_W))
+      mt_shift(record, KC_LGUI, KC_LSFT, KC_W);
+      break;
+    case SM_PERC:
+      // ALT_T(S(KC_5))
+      mt_shift(record, KC_LALT, 0, KC_5);
+      break;
+    case LT_BSLS:
+      tap_layer(record, _MOUSE);
+      // LT (_MOUSE, KC_BSLS) left right combination layer, see #define LT_BSLS
+      thumb_layer(record, LEFT, 0, 0, _MOUSE, _SYMBOL);
+      break;
+    case SL_LEFT:
+      tap_layer(record, _MOUSE);
+      // LT (_MOUSE, S(KC_LEFT)) left right combination layer
+      thumb_layer(record, RIGHT, SHIFT, KC_LEFT, _MOUSE, _LSHIFT);
+      break;
+    case SP_DEL:
+      tap_layer(record, _MOUSE);
+      // LT (_MOUSE, S(KC_LEFT)) left right combination layer
+      thumb_layer(record, RIGHT, NOSHIFT, KC_DEL, _MOUSE, _LSHIFT);
+      break;
+    case SL_TAB:
+      // LT (_FNCKEY, S(KC_TAB)) emulation
+      lt_shift(record, KC_TAB, _FNCKEY);
+      break;
+    case TD_ENT:
+      tap_layer(record, _RSHIFT);
+      // LT (_RSHIFT, KC_ENT) emulation, see tap dance enter
+      break;
+    case TD_SPC:
+      tap_layer(record, _LSHIFT);
+      // LT (_LSHIFT, KC_SPC) left right combination layer, see tap dance TD_SPC
+      thumb_layer(record, LEFT, 0, 0, _LSHIFT, _SYMBOL);
+      break;
+#ifdef CENTER_TT
+    case CNTR_TL:
+    case CNTR_TR:
+    case CNTR_HL:
+    case CNTR_HR:
+    case CNTR_BL:
+    case CNTR_BR:
+      if (tt_keycode != keycode && tt_keycode != 0) {
+        clear_tt();                         // return to base layer first if different TT layer selected
+      }
+      tt_keycode = keycode;
+      break;
+#endif
+// #ifdef STENO_ENABLE
+//     case PS_STNA:
+//       stn_layer(record, STN_A, _NUMBER);
+//       break;
+//     case PS_STNO:
+//       stn_layer(record, STN_O, _FNCKEY);
+//       break;
+//     case PS_STNE:
+//       stn_layer(record, STN_E, _EDIT);
+//       break;
+//     case PS_STNU:
+//       stn_layer(record, STN_U, _SYMBOL);
+//       break;
+// #endif
+    case PLOVER:
+      steno(record);
+      return false;
+  }
+  return true;
+}
+
+#include "init.h"