#include "planck.h"
#include "action_layer.h"
-#ifdef AUDIO_ENABLE
- #include "audio.h"
-#endif
-#include "eeconfig.h"
+
+#define a KC_A
+#define b KC_B
+#define c KC_C
+#define d KC_D
+#define e KC_E
+#define f KC_F
+#define g KC_G
+#define h KC_H
+#define i KC_I
+#define j KC_J
+#define k KC_K
+#define l KC_L
+#define m KC_M
+#define n KC_N
+#define o KC_O
+#define p KC_P
+#define q KC_Q
+#define r KC_R
+#define s KC_S
+#define t KC_T
+#define u KC_U
+#define v KC_V
+#define w KC_W
+#define x KC_X
+#define y KC_Y
+#define z KC_Z
+
+#define lalt KC_LALT
+#define lctl KC_LCTL
+#define lsft KC_LSFT
+#define ralt KC_RALT
+#define rctl KC_RCTL
+#define rsft KC_RSFT
+
+#define n0 KC_0
+#define n1 KC_1
+#define n2 KC_2
+#define n3 KC_3
+#define n4 KC_4
+#define n5 KC_5
+#define n6 KC_6
+#define n7 KC_7
+#define n8 KC_8
+#define n9 KC_9
+
+#define bspc KC_BSPC
+#define caps KC_CAPS
+#define comm KC_COMM
+#define dash A(KC_MINS)
+#define scln KC_SCLN
+#define slsh KC_SLSH
+#define spc KC_SPC
+#define tab KC_TAB
+#define del KC_DEL
+#define dot KC_DOT
+#define ent KC_ENT
+#define mins KC_MINS
+#define quot KC_QUOT
+#define esc KC_ESC
+#define gbp A(KC_3)
+
+#define down KC_DOWN
+#define home KC_HOME
+#define end KC_END
+#define up KC_UP
+#define pgdn KC_PGDN
+#define pgup KC_PGUP
+#define left KC_LEFT
+#define rght KC_RGHT
+
+#define tabl S(C(KC_TAB))
+#define tabr C(KC_TAB)
+#define fwd G(KC_RBRC)
+#define back G(KC_LBRC)
+#define dtl C(KC_LEFT)
+#define dtr C(KC_RGHT)
+#define slup S(A(KC_UP))
+#define sldn S(A(KC_DOWN))
+
+#define f1 KC_F1
+#define f2 KC_F2
+#define f3 KC_F3
+#define f4 KC_F4
+#define f5 KC_F5
+#define f6 KC_F6
+#define f7 KC_F7
+#define f8 KC_F8
+#define f9 KC_F9
+#define f10 KC_F10
+#define f11 KC_F11
+#define f12 KC_F12
+#define f13 KC_F13
+#define f14 KC_F14
+#define f15 KC_F15
+#define f16 KC_F16
+#define f17 KC_F17
+#define f18 KC_F18
+#define f19 KC_F19
+#define f20 KC_F20
+
+#define mute KC_MUTE
+#define next KC_MNXT
+#define play KC_MPLY
+#define prev KC_MPRV
+#define vold KC_F11
+#define volu KC_F12
+
+#define symb MO(SYMB)
+#define move MO(MOVE)
+#define func MO(FUNC)
+
+#define rset RESET
+#define powr KC_POWER
+
+#define ____ KC_TRNS
+#define xxxx KC_NO
extern keymap_config_t keymap_config;
-#define _BASE 0
-#define _MOVE 1
-#define _SYMB 2
-#define _MOUSE 3
-#define _FUNC 4
-#define ENDASH LALT(KC_MINS)
-#define POUND LALT(KC_3)
-#define H(X) LALT(LCTL(X))
+enum planck_layers {
+ BASE,
+ SYMB,
+ MOVE,
+ FUNC,
+};
enum planck_keycodes {
- MOVE = SAFE_RANGE,
- SYMB,
- FUNC
-};
+ ampr = SAFE_RANGE,
+ astr,
+ at,
+ bsls,
+ circ,
+ dlr,
+ eql,
+ exlm,
+ grv,
+ hash,
+ lbrc,
+ lcbr,
+ lprn,
+ perc,
+ pipe,
+ plus,
+ rbrc,
+ rcbr,
+ rprn,
+ tild,
-// Fillers to make layering more clear
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
+ cmd,
+};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [BASE] = LAYOUT_planck_grid(
+ tab, q, w, f, p, g, j, l, u, y, scln, mins,
+ bspc, a, r, s, t, d, h, n, e, i, o, quot,
+ lsft, z, x, c, v, b, k, m, comm, dot, slsh, rsft,
+ func, lctl, lalt, cmd, move, ent, spc, symb, cmd, ralt, rctl, func
+ ),
-/* BASE
- * ,-----------------------------------------------------------------------------------.
- * | Tab | Q | W | F | P | G | J | L | U | Y | ; | - |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Bksp | A | R | S | T | D | H | N | E | I | O | " |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Shift| Z | X | C | V | B | K | M | , | . | / | Shift|
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Func | Ctrl | Alt | Cmd | Symb | Enter| Space| Move | Cmd | Alt | Ctrl | Func |
- * `-----------------------------------------------------------------------------------'
- */
-[_BASE] = {
- {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS},
- {KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
- {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT},
- {FUNC, KC_LCTL, KC_LALT, KC_LGUI, SYMB, KC_ENT, KC_SPC, MOVE, KC_RGUI, KC_RALT, KC_RCTL, FUNC }
-},
-
-/* MOVE
- * ,-----------------------------------------------------------------------------------.
- * | H(F7)| H(F8)| H(6) | H(5) | H(4) | H(F9)|H(F10)| Home | Up | End | H(A) | Esc |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | H(F3)| H(F4)| H(3) | H(2) | H(1) | H(F5)| H(F6)| Left | Down | Right| Caps | Del |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | H(0) | H(9) | H(8) | H(7) | H(F1)| H(F2)| Pg Dn| Pg Up|H(F11)|H(F12)| |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | | | | | |
- * `-----------------------------------------------------------------------------------'
- */
-[_MOVE] = {
- {H(KC_F7),H(KC_F8),H(KC_6), H(KC_5), H(KC_4), H(KC_F9),H(KC_F10),KC_HOME,KC_UP, KC_END, H(KC_A), KC_ESC },
- {H(KC_F3),H(KC_F4),H(KC_3), H(KC_2), H(KC_1), H(KC_F5),H(KC_F6),KC_LEFT, KC_DOWN, KC_RGHT, KC_CAPS, KC_DEL },
- {_______, H(KC_0), H(KC_9), H(KC_8), H(KC_7), H(KC_F1),H(KC_F2),KC_PGDN,KC_PGUP,H(KC_F11),H(KC_F12),_______},
- {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
-},
-
-/* SYMB
- * ,-----------------------------------------------------------------------------------.
- * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | – |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | £ |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | ~ | ` | + | = | | | \ | [ | ] | { | } | |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | | | | | |
- * `-----------------------------------------------------------------------------------'
- */
-[_SYMB] = {
- {KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, ENDASH },
- {KC_DEL, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, POUND },
- {_______, KC_TILD, KC_GRV, KC_PLUS, KC_EQL, KC_PIPE, KC_BSLS, KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR, _______},
- {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
-},
-
-/* MOUSE
- * ,-----------------------------------------------------------------------------------.
- * | | | ACC-2| ACC-1| ACC-0| | | SW-L | M-U | SW-R | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | MB-3 | MB-2 | MB-1 | | | M-L | M-D | M-R | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | SW-D | SW-U | | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | | | | | |
- * `-----------------------------------------------------------------------------------'
- */
-[_MOUSE] = {
- {XXXXXXX, XXXXXXX, KC_ACL2, KC_ACL1, KC_ACL0, XXXXXXX, XXXXXXX, KC_WH_L, KC_MS_U, KC_WH_R, XXXXXXX, XXXXXXX},
- {XXXXXXX, XXXXXXX, KC_BTN3, KC_BTN2, KC_BTN1, XXXXXXX, XXXXXXX, KC_MS_L, KC_MS_D, KC_MS_R, XXXXXXX, XXXXXXX},
- {_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_D, KC_WH_U, XXXXXXX, XXXXXXX, _______},
- {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
-},
-
-/* FUNC
- * ,-----------------------------------------------------------------------------------.
- * | Reset| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | Vol+ |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | Vol- |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | F21 | F22 | F23 | F24 | | | Power| | | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | Prev | Mute | Play | Next | | | | |
- * `-----------------------------------------------------------------------------------'
- */
-[_FUNC] = {
- {RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_VOLU},
- {XXXXXXX, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_VOLD},
- {_______, KC_F21, KC_F22, KC_F23, KC_F24, XXXXXXX, XXXXXXX, KC_POWER,XXXXXXX, XXXXXXX, XXXXXXX, _______},
- {_______, _______, _______, _______, KC_MPRV, KC_MUTE, KC_MPLY, KC_MNXT, _______, _______, _______, _______}
-}
+ [SYMB] = LAYOUT_planck_grid(
+ esc, n7, n5, n3, n1, n9, n8, n0, n2, n4, n6, dash,
+ del, bsls, hash, astr, eql, pipe, at, rprn, lprn, dlr, ampr, gbp,
+ caps, grv, exlm, lbrc, rbrc, circ, tild, rcbr, lcbr, plus, perc, caps,
+ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____
+ ),
+ [MOVE] = LAYOUT_planck_grid(
+ esc, xxxx, slup, dtl, dtr, xxxx, xxxx, home, up, end, xxxx, xxxx,
+ del, xxxx, sldn, tabl, tabr, xxxx, xxxx, left, down, rght, xxxx, xxxx,
+ ____, xxxx, xxxx, back, fwd, xxxx, xxxx, pgdn, pgup, xxxx, xxxx, ____,
+ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____
+ ),
+
+ [FUNC] = LAYOUT_planck_grid(
+ rset, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, volu,
+ powr, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, vold,
+ ____, xxxx, xxxx, xxxx, xxxx, xxxx, xxxx, xxxx, xxxx, xxxx, xxxx, ____,
+ ____, ____, ____, ____, prev, mute, play, next, ____, ____, ____, ____
+ ),
};
+bool send_string_if_keydown(keyrecord_t *record, const char *s) {
+ if (record->event.pressed) {
+ SEND_STRING(s);
+ }
+ return true;
+}
+
+int cmd_keys_down = 0;
+
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case MOVE:
- if (record->event.pressed) {
- layer_on(_MOVE);
- update_tri_layer(_MOVE, _SYMB, _MOUSE);
- } else {
- layer_off(_MOVE);
- update_tri_layer(_MOVE, _SYMB, _MOUSE);
- }
- return false;
- break;
- case SYMB:
- if (record->event.pressed) {
- layer_on(_SYMB);
- update_tri_layer(_MOVE, _SYMB, _MOUSE);
- } else {
- layer_off(_SYMB);
- update_tri_layer(_MOVE, _SYMB, _MOUSE);
- }
- return false;
- break;
- case FUNC:
- if (record->event.pressed) {
- layer_on(_FUNC);
- } else {
- layer_off(_FUNC);
- }
- return false;
- break;
- }
- return true;
+ switch (keycode) {
+ // Override the defualt auto shifted symbols to use SEND_STRING See
+ // https://github.com/qmk/qmk_firmware/issues/4072
+ case ampr:
+ return send_string_if_keydown(record, "&");
+ case astr:
+ return send_string_if_keydown(record, "*");
+ case at:
+ return send_string_if_keydown(record, "@");
+ case bsls:
+ return send_string_if_keydown(record, "\\");
+ case circ:
+ return send_string_if_keydown(record, "^");
+ case dlr:
+ return send_string_if_keydown(record, "$");
+ case eql:
+ return send_string_if_keydown(record, "=");
+ case exlm:
+ return send_string_if_keydown(record, "!");
+ case grv:
+ return send_string_if_keydown(record, "`");
+ case hash:
+ return send_string_if_keydown(record, "#");
+ case lbrc:
+ return send_string_if_keydown(record, "[");
+ case lcbr:
+ return send_string_if_keydown(record, "{");
+ case lprn:
+ return send_string_if_keydown(record, "(");
+ case perc:
+ return send_string_if_keydown(record, "%");
+ case pipe:
+ return send_string_if_keydown(record, "|");
+ case plus:
+ return send_string_if_keydown(record, "+");
+ case rbrc:
+ return send_string_if_keydown(record, "]");
+ case rcbr:
+ return send_string_if_keydown(record, "}");
+ case rprn:
+ return send_string_if_keydown(record, ")");
+ case tild:
+ return send_string_if_keydown(record, "~");
+
+ // cmd + cmd -> cmd + ctl
+ case cmd:
+ if (record->event.pressed) {
+ if (cmd_keys_down == 0) {
+ register_code(KC_LCMD);
+ } else {
+ register_code(KC_LCTL);
+ }
+ cmd_keys_down++;
+ } else {
+ if (cmd_keys_down == 1) {
+ unregister_code(KC_LCMD);
+ } else {
+ unregister_code(KC_LCTL);
+ }
+ cmd_keys_down--;
+ }
+ return true;
+ }
+ return true;
}