@ -17,7 +17,7 @@
# include "space_oddity.h"
# include "space_oddity.h"
// Planck keycodes needed for dynamic macros
// Planck keycodes needed for dynamic macros .
enum planck_keycodes {
enum planck_keycodes {
QWERTY = SAFE_RANGE ,
QWERTY = SAFE_RANGE ,
@ -25,7 +25,7 @@ enum planck_keycodes {
} ;
} ;
// Tap Dance
// Tap Dance initializer.
enum {
enum {
SFT_CAPS = 0 ,
SFT_CAPS = 0 ,
@ -36,12 +36,14 @@ enum {
# define MOUSE_LAYER 2
# define MOUSE_LAYER 2
// Toggle MOUSE_LAYER. Additional layers can be added for additional layouts or other special functions.
const uint16_t PROGMEM fn_actions [ ] = {
const uint16_t PROGMEM fn_actions [ ] = {
[ 2 ] = ACTION_LAYER_TOGGLE ( MOUSE_LAYER ) ,
[ 2 ] = ACTION_LAYER_TOGGLE ( MOUSE_LAYER ) ,
} ;
} ;
// Tap dance actions - double tap for Caps Lock.
qk_tap_dance_action_t tap_dance_actions [ ] = {
qk_tap_dance_action_t tap_dance_actions [ ] = {
[ SFT_CAPS ] = ACTION_TAP_DANCE_DOUBLE ( KC_LSFT , KC_CAPS ) ,
[ SFT_CAPS ] = ACTION_TAP_DANCE_DOUBLE ( KC_LSFT , KC_CAPS ) ,
@ -50,6 +52,29 @@ qk_tap_dance_action_t tap_dance_actions[] = {
const uint16_t PROGMEM keymaps [ ] [ MATRIX_ROWS ] [ MATRIX_COLS ] = {
const uint16_t PROGMEM keymaps [ ] [ MATRIX_ROWS ] [ MATRIX_COLS ] = {
/* Here is an ASCII version of the base layout. Note that Dynamic Macros 1 and 2 are considered Macro 5 and Macro 6.
___________________________________________________________________________________
| | | | | | Dynamic | Dynamic |
| Macro 0 | Macro 1 | Macro 2 | Macro 3 | Macro 4 | Macro 1 | Macro 2 |
| ___________ | ___________ | ___________ | ___________ | ___________ | ___________ | ___________ |
| | | | | | | | | | | | |
| ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | BKSP |
| ___________ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | ___________ |
| | | | | | | | | | | | |
| TAB | Q | W | E | R | T | Y | U | I | O | P | - |
| ___________ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | ___________ |
| | | | | | | | | | | | |
| ESC ( CTL_T ) | A | S | D | F | G | H | J | K | L | ; | ' |
| ___________ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | ___________ |
| | | | | | | | | | | | |
| SHFT | Z | X | C | V | B | N | M | , | . | / | SHFT ( ENT ) |
| _________ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | _________ |
| | | | | | | ALT | HYP | LT 1 | LT 2 |
| M2 | M1 | GUI | ALT | CTRL | SPC | ( LFT ) | ( RGT ) | ( UP ) | ( DWN ) |
| _____ | _____ | _____ | _____ | ___________ | ___________ | _____ | _____ | _____ | _____ |
*/
KEYMAP (
KEYMAP (
M ( 0 ) , M ( 1 ) , M ( 2 ) , M ( 3 ) , M ( 4 ) , DYN_MACRO_PLAY1 , DYN_MACRO_PLAY2 ,
M ( 0 ) , M ( 1 ) , M ( 2 ) , M ( 3 ) , M ( 4 ) , DYN_MACRO_PLAY1 , DYN_MACRO_PLAY2 ,
KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_BSPC ,
KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_BSPC ,
@ -57,6 +82,31 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
CTL_T ( KC_ESC ) , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN , KC_QUOT ,
CTL_T ( KC_ESC ) , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN , KC_QUOT ,
TD ( SFT_CAPS ) , KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM , KC_DOT , KC_SLSH , SFT_T ( KC_ENT ) ,
TD ( SFT_CAPS ) , KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM , KC_DOT , KC_SLSH , SFT_T ( KC_ENT ) ,
MO ( 2 ) , MO ( 1 ) , KC_LGUI , KC_RALT , KC_LCTRL , KC_SPC , ALT_T ( KC_LEFT ) , ALL_T ( KC_RGHT ) , LT ( 1 , KC_UP ) , LT ( 2 , KC_DOWN ) ) ,
MO ( 2 ) , MO ( 1 ) , KC_LGUI , KC_RALT , KC_LCTRL , KC_SPC , ALT_T ( KC_LEFT ) , ALL_T ( KC_RGHT ) , LT ( 1 , KC_UP ) , LT ( 2 , KC_DOWN ) ) ,
/* Function layer.
Blank keys correspond to the KC_TRNS keycode .
___________________________________________________________________________________
| | | | | | DYN REC | DYN REC |
| Macro 7 | | | | | 1 | 2 |
| ___________ | ___________ | ___________ | ___________ | ___________ | ___________ | ___________ |
| DYN REC | | | | | | | | | | | |
| STOP | F1 | F2 | F3 | F4 | F5 | [ | 7 | 8 | 9 | * | DEL |
| ___________ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | ___________ |
| | | | | | | | | | | | |
| | F6 | F7 | F8 | F9 | F10 | ] | 4 | 5 | 6 | + | = |
| ___________ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | ___________ |
| | | | | | | | | | | | |
| \ | F11 | F12 | F13 | F14 | F15 | { | 1 | 2 | 3 | - | | |
| ___________ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | ___________ |
| | | | | | | | | | | | |
| | F16 | F17 | F18 | F19 | F20 | } | 0 | , | . | / | |
| _________ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | _________ |
| | | | | | | | | | |
| | | | | | | | | | |
| _____ | _____ | _____ | _____ | ___________ | ___________ | _____ | _____ | _____ | _____ |
*/
KEYMAP (
KEYMAP (
M ( 7 ) , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , DYN_REC_START1 , DYN_REC_START2 ,
M ( 7 ) , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , DYN_REC_START1 , DYN_REC_START2 ,
@ -65,6 +115,30 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_BSLS , KC_F11 , KC_F12 , KC_F13 , KC_F14 , KC_F15 , KC_LCBR , KC_P1 , KC_P2 , KC_P3 , KC_MINS , KC_PIPE ,
KC_BSLS , KC_F11 , KC_F12 , KC_F13 , KC_F14 , KC_F15 , KC_LCBR , KC_P1 , KC_P2 , KC_P3 , KC_MINS , KC_PIPE ,
KC_TRNS , KC_F16 , KC_F17 , KC_F18 , KC_F19 , KC_F20 , KC_RCBR , KC_P0 , KC_COMM , KC_DOT , KC_SLSH , KC_TRNS ,
KC_TRNS , KC_F16 , KC_F17 , KC_F18 , KC_F19 , KC_F20 , KC_RCBR , KC_P0 , KC_COMM , KC_DOT , KC_SLSH , KC_TRNS ,
KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS ) ,
KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS ) ,
/* Mouse layer.
___________________________________________________________________________________
| | | | | | | |
| | | | | | | |
| ___________ | ___________ | ___________ | ___________ | ___________ | ___________ | ___________ |
| | | | MS | | | | | | | | |
| | | | UP | | | | | | | | |
| ___________ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | ___________ |
| | | MS | MS | MS | | | | | | | |
| | | LFT | DWN | RGT | | | MS1 | MS3 | MS2 | | |
| ___________ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | ___________ |
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| ___________ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | ___________ |
| | | | | | | | | | | | |
| | RESET | | | | | | | | | | |
| _________ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | _____ | _________ |
| | | | | | | | | | |
| | | | | | | | | | F ( 2 ) |
| _____ | _____ | _____ | _____ | ___________ | ___________ | _____ | _____ | _____ | _____ |
*/
KEYMAP (
KEYMAP (
KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS ,
KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS ,
@ -75,6 +149,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , F ( 2 ) )
KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , F ( 2 ) )
} ;
} ;
// Simple macro ideas follow. Each of them is designed to give you a quick way to create pairs of
// delimiters and then position the cursor between them, much like Emacs' ParEdit does. This way,
// you can have some convenient coding "helpers" even when not using Emacs. It is also nice for
// LaTeX editing.
//
// Customize to your heart's content!
const macro_t * action_get_macro ( keyrecord_t * record , uint8_t id , uint8_t opt ) {
const macro_t * action_get_macro ( keyrecord_t * record , uint8_t id , uint8_t opt ) {
switch ( id ) {
switch ( id ) {
@ -95,7 +175,8 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
SEND_STRING ( " {} " SS_TAP ( X_LEFT ) ) ;
SEND_STRING ( " {} " SS_TAP ( X_LEFT ) ) ;
}
}
break ;
break ;
// Probably something only Lisp users will appreciate...
case 7 :
case 7 :
if ( record - > event . pressed ) {
if ( record - > event . pressed ) {
SEND_STRING ( " (lambda ()) " SS_TAP ( X_LEFT ) SS_TAP ( X_LEFT ) ) ;
SEND_STRING ( " (lambda ()) " SS_TAP ( X_LEFT ) SS_TAP ( X_LEFT ) ) ;