[Keymap] the results of some experiments and radically simplify keymap.c (#6172)

* keymap simplification and fancy alt tab behaviour

* move symbols around and try ergo numbers

* mess with symbol positions

* f11 and f12 for volume control (for ease of remapping)

* slack unread navigation

* experiment with mods on home row

* mods on symbol layer

* dedicated tab left and tab right keys

* swap next and prev

* remove hold to shift on a and o

* revert to simpler keymap

* restore readme

* point to keymap image

* cmd + cmd -> cmd + ctrl

* expand readme

* slack unread channel navigation

* Update keyboards/planck/keymaps/callum/keymap.c

Co-Authored-By: Drashna Jaelre <drashna@live.com>

* return true from cmd handling block
This commit is contained in:
Callum Oakley
2019-06-25 07:13:40 +01:00
committed by Drashna Jaelre
parent 48b5903677
commit 5b776cfc2d
4 changed files with 257 additions and 321 deletions

View File

@@ -1,331 +1,259 @@
#include "planck.h"
#include "action_layer.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 AC(X) A(C(X))
#define SC(X) S(C(X))
enum planck_layers {
_COLEMAK,
_QWERTY,
_SYMB,
_MOVE,
_FUNC,
_MOUSE,
};
enum planck_keycodes {
COLEMAK = SAFE_RANGE,
QWERTY,
BASE,
SYMB,
MOVE,
FUNC,
MOUSE,
};
enum planck_keycodes {
ampr = SAFE_RANGE,
astr,
at,
bsls,
circ,
dlr,
eql,
exlm,
grv,
hash,
lbrc,
lcbr,
lprn,
perc,
pipe,
plus,
rbrc,
rcbr,
rprn,
tild,
cmd,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* COLEMAK
* ,-----------------------------------------------------------------------.
* |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 |Super|Symb |Enter|Space|Move |Super| Alt |Ctrl |Func |
* `-----------------------------------------------------------------------'
*/
[_COLEMAK] = LAYOUT_planck_grid(
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
[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
),
/* QWERTY
* ,-----------------------------------------------------------------------.
* |Tab | Q | W | E | R | T | Y | U | I | O | P | - |
* |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
* |Bksp | A | S | D | F | G | H | J | K | L | ; | ' |
* |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
* |Shift| Z | X | C | V | B | N | M | , | . | / |Shift|
* |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
* |Func |Ctrl | Alt |Super|Symb |Enter|Space|Move |Super| Alt |Ctrl |Func |
* `-----------------------------------------------------------------------'
*/
[_QWERTY] = LAYOUT_planck_grid(
KC_TAB, KC_Q, KC_W, KC_E,
KC_R, KC_T, KC_Y, KC_U,
KC_I, KC_O, KC_P, KC_MINS,
KC_BSPC, KC_A, KC_S, KC_D,
KC_F, KC_G, KC_H, KC_J,
KC_K, KC_L, KC_SCLN, KC_QUOT,
KC_LSFT, KC_Z, KC_X, KC_C,
KC_V, KC_B, KC_N, 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
[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,
____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____
),
/* SYMB
* ,-----------------------------------------------------------------------.
* | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 |ndash|
* |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
* | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | £ |
* |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
* | | ~ | ` | + | = | | | \ | [ | ] | { | } | |
* |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
* | | | | | | | | | | | | |
* `-----------------------------------------------------------------------'
*/
[_SYMB] = LAYOUT_planck_grid(
KC_ESC, KC_1, KC_2, KC_3,
KC_4, KC_5, KC_6, KC_7,
KC_8, KC_9, KC_0, A(KC_MINS),
KC_DEL, KC_EXLM, KC_AT, KC_HASH,
KC_DLR, KC_PERC, KC_CIRC, KC_AMPR,
KC_ASTR, KC_LPRN, KC_RPRN, A(KC_3),
_______, KC_TILD, KC_GRV, KC_PLUS,
KC_EQL, KC_PIPE, KC_BSLS, KC_LBRC,
KC_RBRC, KC_LCBR, KC_RCBR, _______,
_______, _______, _______, _______,
_______, _______, _______, _______,
_______, _______, _______, _______
[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, ____,
____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____
),
/* MOVE
* ,-----------------------------------------------------------------------.
* | | | | | | |CtrUp|Home | Up | End |Caps |Mouse|
* |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
* | | | | | | |CtrL |Left |Down |Right|CtrR | |
* |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
* | | | | | | |CtrDn|PgDn |PgUp |TabL |TabR | |
* |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
* | | | | | | | | | | | | |
* `-----------------------------------------------------------------------'
*/
[_MOVE] = LAYOUT_planck_grid(
AC(KC_A), AC(KC_B), AC(KC_C), AC(KC_D),
AC(KC_E), AC(KC_F), C(KC_UP), KC_HOME,
KC_UP, KC_END, KC_CAPS, MOUSE,
AC(KC_G), AC(KC_H), AC(KC_I), AC(KC_J),
AC(KC_K), AC(KC_L), C(KC_LEFT), KC_LEFT,
KC_DOWN, KC_RGHT, C(KC_RIGHT), XXXXXXX,
_______, AC(KC_M), AC(KC_N), AC(KC_O),
AC(KC_P), AC(KC_Q), C(KC_DOWN), KC_PGDN,
KC_PGUP, SC(KC_TAB), C(KC_TAB), _______,
_______, _______, _______, _______,
_______, _______, _______, _______,
_______, _______, _______, _______
[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, ____, ____, ____, ____
),
/* FUNC
* ,-----------------------------------------------------------------------.
* |Reset| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 |VolUp|
* |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
* |Power| F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 |VolDn|
* |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
* | | | | | | | | | |Clmak|Qwrty| |
* |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
* | | | | |Prev |Mute |Play |Next | | | | |
* `-----------------------------------------------------------------------'
*/
[_FUNC] = LAYOUT_planck_grid(
RESET, KC_F1, KC_F2, KC_F3,
KC_F4, KC_F5, KC_F6, KC_F7,
KC_F8, KC_F9, KC_F10, KC_VOLU,
KC_POWER, KC_F11, KC_F12, KC_F13,
KC_F14, KC_F15, KC_F16, KC_F17,
KC_F18, KC_F19, KC_F20, KC_VOLD,
_______, XXXXXXX, KC_HOME, SC(KC_TAB),
C(KC_TAB), KC_END, XXXXXXX, XXXXXXX,
XXXXXXX, COLEMAK, QWERTY, _______,
_______, _______, _______, _______,
KC_MPRV, KC_MUTE, KC_MPLY, KC_MNXT,
_______, _______, _______, _______
),
/* MOUSE
* ,-----------------------------------------------------------------------.
* | | |CtrL |CtrU |CtrR | B5 |CtrU | ScL |Up | ScR | | |
* |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
* | | | Ac0 | Ac1 | Ac2 | B4 |CtrL |Left |Down |Right|CtrR | |
* |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
* | | | |Home | End | B3 |CtrD | ScD | ScU |TabL |TabR | |
* |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
* | | | | | | B2 | B1 | | | | | |
* `-----------------------------------------------------------------------'
*/
[_MOUSE] = LAYOUT_planck_grid(
_______, XXXXXXX, C(KC_LEFT), C(KC_UP),
C(KC_RIGHT), KC_BTN5, C(KC_UP), KC_WH_R,
KC_MS_U, KC_WH_L, XXXXXXX, XXXXXXX,
_______, XXXXXXX, KC_ACL0, KC_ACL1,
KC_ACL2, KC_BTN4, C(KC_LEFT), KC_MS_L,
KC_MS_D, KC_MS_R, C(KC_RIGHT), XXXXXXX,
_______, XXXXXXX, XXXXXXX, KC_HOME,
KC_END, KC_BTN3, C(KC_DOWN), KC_WH_U,
KC_WH_D, SC(KC_TAB), C(KC_TAB), _______,
_______, _______, _______, _______,
_______, KC_BTN2, KC_BTN1, _______,
_______, _______, _______, _______
)
};
#ifdef AUDIO_ENABLE
float colemak_song[][2] = SONG(COLEMAK_SOUND);
float qwerty_song[][2] = SONG(QWERTY_SOUND);
#endif
void set_colemak(void) {
#ifdef AUDIO_ENABLE
stop_all_notes();
PLAY_SONG(colemak_song);
#endif
set_single_persistent_default_layer(_COLEMAK);
}
void set_qwerty(void) {
#ifdef AUDIO_ENABLE
stop_all_notes();
PLAY_SONG(qwerty_song);
#endif
set_single_persistent_default_layer(_QWERTY);
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case COLEMAK:
if (record->event.pressed) {
set_colemak();
}
return false;
case QWERTY:
if (record->event.pressed) {
set_qwerty();
}
return false;
case SYMB:
if (record->event.pressed) {
layer_off(_MOUSE);
layer_on(_SYMB);
} else {
layer_off(_SYMB);
}
return false;
case MOVE:
if (record->event.pressed) {
layer_off(_MOUSE);
layer_on(_MOVE);
} else {
layer_off(_MOVE);
}
return false;
case FUNC:
if (record->event.pressed) {
layer_off(_MOUSE);
layer_on(_FUNC);
} else {
layer_off(_FUNC);
}
return false;
case MOUSE:
if (record->event.pressed) {
layer_on(_MOUSE);
}
return false;
// Override the defualt auto shifted symbols to use SEND_STRING
// See https://github.com/qmk/qmk_firmware/issues/4072
case KC_EXLM:
if (record->event.pressed) { SEND_STRING("!"); }
return false;
case KC_AT:
if (record->event.pressed) { SEND_STRING("@"); }
return false;
case KC_HASH:
if (record->event.pressed) { SEND_STRING("#"); }
return false;
case KC_DLR:
if (record->event.pressed) { SEND_STRING("$"); }
return false;
case KC_PERC:
if (record->event.pressed) { SEND_STRING("%"); }
return false;
case KC_CIRC:
if (record->event.pressed) { SEND_STRING("^"); }
return false;
case KC_AMPR:
if (record->event.pressed) { SEND_STRING("&"); }
return false;
case KC_ASTR:
if (record->event.pressed) { SEND_STRING("*"); }
return false;
case KC_LPRN:
if (record->event.pressed) { SEND_STRING("("); }
return false;
case KC_RPRN:
if (record->event.pressed) { SEND_STRING(")"); }
return false;
case KC_TILD:
if (record->event.pressed) { SEND_STRING("~"); }
return false;
case KC_GRV:
if (record->event.pressed) { SEND_STRING("`"); }
return false;
case KC_PLUS:
if (record->event.pressed) { SEND_STRING("+"); }
return false;
case KC_EQL:
if (record->event.pressed) { SEND_STRING("="); }
return false;
case KC_PIPE:
if (record->event.pressed) { SEND_STRING("|"); }
return false;
case KC_BSLS:
if (record->event.pressed) { SEND_STRING("\\"); }
return false;
case KC_LBRC:
if (record->event.pressed) { SEND_STRING("["); }
return false;
case KC_RBRC:
if (record->event.pressed) { SEND_STRING("]"); }
return false;
case KC_LCBR:
if (record->event.pressed) { SEND_STRING("{"); }
return false;
case KC_RCBR:
if (record->event.pressed) { SEND_STRING("}"); }
return false;
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) {
// 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;
}