[Keymap] ericgebhart keymap and userspace updates (#15727)
Co-authored-by: Drashna Jaelre <drashna@live.com> Co-authored-by: Dasky <32983009+daskygit@users.noreply.github.com> Co-authored-by: Drashna Jael're <drashna@live.com>fix_template_bootmagic
parent
0f110737db
commit
e865cab48e
@ -0,0 +1,24 @@ |
||||
/*
|
||||
This is the c configuration file for the keymap |
||||
|
||||
Copyright 2012 Jun Wako <wakojun@gmail.com> |
||||
Copyright 2015 Jack Humbert |
||||
|
||||
This program is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU General Public License as published by |
||||
the Free Software Foundation, either version 2 of the License, or |
||||
(at your option) any later version. |
||||
|
||||
This program is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU General Public License for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License |
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#pragma once |
||||
|
||||
// otherwise the other promicro v3 isn't found
|
||||
#define SPLIT_USB_DETECT |
@ -0,0 +1,60 @@ |
||||
/*
|
||||
Copyright 2018 Eric Gebhart <e.a.gebhart@gmail.com> |
||||
|
||||
This program is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU General Public License as published by |
||||
the Free Software Foundation, either version 2 of the License, or |
||||
(at your option) any later version. |
||||
|
||||
This program is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU General Public License for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License |
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
#include "ericgebhart.h" |
||||
|
||||
#define Crkbd_base(...) Base_3x6_3(__VA_ARGS__) |
||||
#define Crkbd_bepo(...) Base_bepo_3x6_3(__VA_ARGS__) |
||||
#define Crkbd_bepo6(...) Base_bepo6_3x6_3(__VA_ARGS__) |
||||
#define Crkbd_transient(...) Transient6_3x6_3(__VA_ARGS__) |
||||
|
||||
/*
|
||||
* The `Crkbd_base` macro is a template to allow the use of identical |
||||
* modifiers for the default layouts (eg QWERTY, Colemak, Dvorak, etc), so |
||||
* that there is no need to set them up for each layout, and modify all of |
||||
* them if I want to change them. This helps to keep consistency and ease |
||||
* of use. K## is a placeholder to pass through the individual keycodes |
||||
*/ |
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |
||||
// Qwerty based Base layers
|
||||
[_DVORAK] = Crkbd_base(___DVORAK___), |
||||
[_BEAKL] = Crkbd_base(___BEAKL15___), |
||||
[_COLEMAK] = Crkbd_base(___COLEMAK_DH___), |
||||
[_QWERTY] = Crkbd_base(___QWERTY___), |
||||
|
||||
// Bepo base layers
|
||||
[_BEAKL_BP] = Crkbd_bepo(___BEAKL15_FR___), |
||||
[_DVORAK_BP] = Crkbd_bepo(___DVORAK_FR___), |
||||
[_BEPO] = Crkbd_bepo6(___BEPO6___), |
||||
|
||||
// Transient layers.
|
||||
[_SYMB] = Crkbd_transient(___SYMB_BEAKLB_3x12___), |
||||
[_SYMB_BP] = Crkbd_transient(___SYMB_BEAKLB_BP_3x12___), |
||||
|
||||
[_KEYPAD] = Crkbd_transient(___KP_C_3x12___), |
||||
[_KEYPAD_BP] = Crkbd_transient(___KP_C_BP_3x12___), |
||||
|
||||
[_TOPROWS] = Crkbd_transient(___TOPROWS_3x12___), |
||||
[_TOPROWS_BP] = Crkbd_transient(___TOPROWS_BP_3x12___), |
||||
|
||||
[_NAV] = Crkbd_transient(___NAV_3x12___), |
||||
|
||||
[_LAYERS] = Crkbd_transient(___LAYERS_3x12___), |
||||
//[_RGB] = Crkbd_transient(___RGB_3x12___),
|
||||
[_ADJUST] = Crkbd_transient(___ADJUST_3x12___), |
||||
///HPT_TOG, KC_NUKE, ___, ___, TG_MODS, HPT_FBK
|
||||
}; |
@ -0,0 +1,139 @@ |
||||
/*
|
||||
Copyright 2018 Eric Gebhart <e.a.gebhart@gmail.com> |
||||
|
||||
This program is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU General Public License as published by |
||||
the Free Software Foundation, either version 2 of the License, or |
||||
(at your option) any later version. |
||||
|
||||
This program is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU General Public License for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License |
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
/********************************************************************/ |
||||
/* Ergodox EZ */ |
||||
/********************************************************************/ |
||||
// This one is is set up to pass in the number row.
|
||||
// Beakl and bepo both change the number row.
|
||||
// Left, middle, right, bottom, and thumbs all stay the same.
|
||||
#define Base_dox( \ |
||||
K01, K02, K03, K04, K05, \
|
||||
K06, K07, K08, K09, K0A, \
|
||||
K11, K12, K13, K14, K15, \
|
||||
K16, K17, K18, K19, K1A, \
|
||||
K21, K22, K23, K24, K25, \
|
||||
K26, K27, K28, K29, K2A, \
|
||||
K31, K32, K33, K34, K35, \
|
||||
K36, K37, K38, K39, K3A \
|
||||
) \
|
||||
LVARG_edox( \
|
||||
ROW0_LEFT(K01, K02, K03, K04, K05), \
|
||||
___2_MIDDLE_1___, \
|
||||
ROW0_RIGHT(K06, K07, K08, K09, K0A), \
|
||||
\
|
||||
ROW1_LEFT(K11, K12, K13, K14, K15), \
|
||||
___2_MIDDLE_2___, \
|
||||
ROW1_RIGHT(K16, K17, K18, K19, K1A), \
|
||||
\
|
||||
ROW2_LEFT(K21, K22, K23, K24, K25), \
|
||||
ROW2_RIGHT(K26, K27, K28, K29, K2A), \
|
||||
\
|
||||
ROW3_LEFT(K31, K32, K33, K34, K35), \
|
||||
___2_MIDDLE_3___, \
|
||||
ROW3_RIGHT(K36, K37, K38, K39, K3A), \
|
||||
___5_BOTTOM_LEFT___, ___5_BOTTOM_RIGHT___, \
|
||||
___12_DOX_ALL_THUMBS___ \
|
||||
) |
||||
|
||||
#define Base_dox_bepo( \ |
||||
K01, K02, K03, K04, K05, \
|
||||
K06, K07, K08, K09, K0A, \
|
||||
K11, K12, K13, K14, K15, \
|
||||
K16, K17, K18, K19, K1A, \
|
||||
K21, K22, K23, K24, K25, \
|
||||
K26, K27, K28, K29, K2A, \
|
||||
K31, K32, K33, K34, K35, \
|
||||
K36, K37, K38, K39, K3A \
|
||||
) \
|
||||
LVARG_edox( \
|
||||
ROW0_LEFT(K01, K02, K03, K04, K05), \
|
||||
___2_MIDDLE_1___, \
|
||||
ROW0_RIGHT(K06, K07, K08, K09, K0A), \
|
||||
\
|
||||
ROW1_LEFT(K11, K12, K13, K14, K15), \
|
||||
___2_MIDDLE_2___, \
|
||||
ROW1_RIGHT(K16, K17, K18, K19, K1A), \
|
||||
\
|
||||
ROW2_LEFT(K21, K22, K23, K24, K25), \
|
||||
ROW2_RIGHT(K26, K27, K28, K29, K2A), \
|
||||
\
|
||||
ROW3_LEFT(K31, K32, K33, K34, K35), \
|
||||
___2_MIDDLE_3___, \
|
||||
ROW3_RIGHT(K36, K37, K38, K39, K3A), \
|
||||
___5_BOTTOM_LEFT___, ___5_BOTTOM_RIGHT___, \
|
||||
___12_DOX_ALL_THUMBS_BP___ \
|
||||
) |
||||
|
||||
|
||||
#define Base_dox_bepo6( \ |
||||
K01, K02, K03, K04, K05, K06, \
|
||||
K07, K08, K09, K0A, K0B, K0C, \
|
||||
K11, K12, K13, K14, K15, K16, \
|
||||
K17, K18, K19, K1A, K1B, K1C, \
|
||||
K21, K22, K23, K24, K25, K26, \
|
||||
K27, K28, K29, K2A, K2B, K2C \
|
||||
) \
|
||||
LVARG_edox( \
|
||||
___6SYMBOL_BEPO_L___, \
|
||||
___2_MIDDLE_T_BP___, \
|
||||
___6SYMBOL_BEPO_R___, \
|
||||
ROW1_LEFT_BP6(K01, K02, K03, K04, K05, K06), \
|
||||
___2_MIDDLE_2_BP___, \
|
||||
ROW1_RIGHT_BP6(K07, K08, K09, K0A, K0B, K0C), \
|
||||
\
|
||||
ROW2_LEFT_BP6(K11, K12, K13, K14, K15, K16), \
|
||||
ROW2_RIGHT_BP6(K17, K18, K19, K1A, K1B, K1C), \
|
||||
\
|
||||
ROW3_LEFT_BP6(K21, K22, K23, K24, K25, K26), \
|
||||
___2_MIDDLE_3_BP___, \
|
||||
ROW3_RIGHT_BP6(K27, K28, K29, K2A, K2B, K2C), \
|
||||
\
|
||||
___5_BOTTOM_LEFT_BP___, ___5_BOTTOM_RIGHT_BP___, \
|
||||
___12_DOX_ALL_THUMBS_BP___ \
|
||||
) |
||||
|
||||
#define Transient_dox6( \ |
||||
K01, K02, K03, K04, K05, K06, \
|
||||
K07, K08, K09, K0A, K0B, K0C, \
|
||||
K11, K12, K13, K14, K15, K16, \
|
||||
K17, K18, K19, K1A, K1B, K1C, \
|
||||
K21, K22, K23, K24, K25, K26, \
|
||||
K27, K28, K29, K2A, K2B, K2C, \
|
||||
K31, K32, K33, K34, K35, K36, \
|
||||
K37, K38, K39, K3A, K3B, K3C \
|
||||
) \
|
||||
LVARG_edox( \
|
||||
K01, K02, K03, K04, K05, K06, \
|
||||
___2___, \
|
||||
K07, K08, K09, K0A, K0B, K0C, \
|
||||
K11, K12, K13, K14, K15, K16, \
|
||||
___2___, \
|
||||
K17, K18, K19, K1A, K1B, K1C, \
|
||||
K21, K22, K23, K24, K25, K26, \
|
||||
K27, K28, K29, K2A, K2B, K2C, \
|
||||
K31, K32, K33, K34, K35, K36, \
|
||||
___2___, \
|
||||
K37, K38, K39, K3A, K3B, K3C, \
|
||||
___5___, ___5___, \
|
||||
___12___ \
|
||||
) |
||||
|
||||
#define Dox_base(...) Base_dox(__VA_ARGS__) |
||||
#define Dox_bepo_base(...) Base_dox_bepo(__VA_ARGS__) |
||||
#define Dox_bepo_base6(...) Base_dox_bepo6(__VA_ARGS__) |
||||
#define Dox_transient(...) Transient_dox6(__VA_ARGS__) |
@ -0,0 +1,53 @@ |
||||
/*
|
||||
Copyright 2018 Eric Gebhart <e.a.gebhart@gmail.com> |
||||
|
||||
This program is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU General Public License as published by |
||||
the Free Software Foundation, either version 2 of the License, or |
||||
(at your option) any later version. |
||||
|
||||
This program is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU General Public License for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License |
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
#include "keymap_bepo.h" |
||||
#include "ericgebhart.h" |
||||
|
||||
#define LAYOUT_PVARG(...) LAYOUT_pretty(__VA_ARGS__) |
||||
|
||||
#define Kinesis_base(...) Base_4x6_4_6(__VA_ARGS__) |
||||
#define Kinesis_bepo_base(...) Base_bepo_4x6_4_6(__VA_ARGS__) |
||||
#define Kinesis_bepo_base6(...) Base_bepo6_4x6_4_6(__VA_ARGS__) |
||||
#define Kinesis_transient(...) Transient6_4x6_4_6(__VA_ARGS__) |
||||
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |
||||
|
||||
// Qwerty Base layers
|
||||
[_DVORAK] = Kinesis_base(___NUMS___, ___DVORAK___), |
||||
[_QWERTY] = Kinesis_base(___NUMS___, ___QWERTY___), |
||||
[_COLEMAK] = Kinesis_base(___NUMS___, ___COLEMAK_DH___), |
||||
[_BEAKL] = Kinesis_base(___BKLNUMS___, ___BEAKL15___), |
||||
// Bepo Base layers
|
||||
[_DVORAK_BP] = Kinesis_bepo_base(___NUMS_BP___, ___DVORAK_FR___), |
||||
[_BEAKL_BP] = Kinesis_bepo_base(___BKLNUMS_BP___, ___BEAKL15_FR___), |
||||
|
||||
[_BEPO] = Kinesis_bepo_base6(___BEPO6___), |
||||
|
||||
// transient layers.
|
||||
// Switch to using a transient layer macro
|
||||
[_SYMB] = Kinesis_transient(___12_FUNC___, ___SYMB_BEAKLA_3x12___), |
||||
[_SYMB_BP] = Kinesis_transient(___12_FUNC___, ___SYMB_BEAKLA_BP_3x12___), |
||||
|
||||
[_TOPROWS] = Kinesis_transient(___12___, ___TOPROWS_3x12___), |
||||
[_TOPROWS_BP] = Kinesis_transient(___12___, ___TOPROWS_BP_3x12___), |
||||
|
||||
[_NAV] = Kinesis_transient(___12___, ___NAV_3x12___), |
||||
[_LAYERS] = Kinesis_transient(___12___, ___LAYERS_3x12___), |
||||
[_ADJUST] = Kinesis_transient(___12___, ___ADJUST_3x12___), |
||||
//[_RGB] = Kinesis_transient(___12___, ___RGB_3x12___),
|
||||
}; |
@ -0,0 +1,5 @@ |
||||
Overview |
||||
======== |
||||
|
||||
These are my keymaps. There isn't much here. Go take a look at my Userspace readme. |
||||
That's where all the code is. |
@ -0,0 +1,16 @@ |
||||
# Build Options
|
||||
# change yes to no to disable
|
||||
#
|
||||
BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
|
||||
MOUSEKEY_ENABLE = yes # Mouse keys
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||
CONSOLE_ENABLE = no # Console for debug
|
||||
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||
NKRO_ENABLE = yes # Enable N-Key Rollover
|
||||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||
MIDI_ENABLE = no # MIDI controls
|
||||
AUDIO_ENABLE = no # Audio output
|
||||
UNICODE_ENABLE = no # Unicode
|
||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
|
@ -0,0 +1,101 @@ |
||||
/*
|
||||
Copyright 2018 Eric Gebhart <e.a.gebhart@gmail.com> |
||||
|
||||
This program is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU General Public License as published by |
||||
the Free Software Foundation, either version 2 of the License, or |
||||
(at your option) any later version. |
||||
|
||||
This program is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU General Public License for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License |
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
#include "ericgebhart.h" |
||||
#include "layouts.h" |
||||
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |
||||
// Qwerty based Base layers
|
||||
[_DVORAK] = Rebound_base(___DVORAK___), |
||||
[_BEAKL] = Rebound_base(___BEAKL15___), |
||||
[_COLEMAK] = Rebound_base(___COLEMAK_DH___), |
||||
[_QWERTY] = Rebound_base(___QWERTY___), |
||||
|
||||
// Bepo base layers
|
||||
[_BEAKL_BP] = Rebound_base_bepo(___BEAKL15_FR___), |
||||
[_DVORAK_BP] = Rebound_base_bepo(___DVORAK_FR___), |
||||
[_BEPO] = Rebound_base_bepo6(___BEPO6___), |
||||
|
||||
// Transient layers.
|
||||
[_SYMB] = Rebound_transient(___SYMB_BEAKLA_3x12___), |
||||
[_SYMB_BP] = Rebound_transient(___SYMB_BEAKLA_BP_3x12___), |
||||
|
||||
[_KEYPAD] = Rebound_transient(___KP_C_3x12___), |
||||
[_KEYPAD_BP] = Rebound_transient(___KP_C_BP_3x12___), |
||||
|
||||
[_TOPROWS] = Rebound_transient(___TOPROWS_3x12___), |
||||
[_TOPROWS_BP] = Rebound_transient(___TOPROWS_BP_3x12___), |
||||
[_NAV] = Rebound_transient(___NAV_3x12___), |
||||
[_LAYERS] = Rebound_transient(___LAYERS_3x12___), |
||||
}; |
||||
|
||||
|
||||
bool encoder_update_user(uint8_t index, bool clockwise) { |
||||
switch(get_highest_layer(layer_state)){ |
||||
case _DVORAK: |
||||
if (clockwise) { |
||||
tap_code16(KC_VOLD); |
||||
} else { |
||||
tap_code16(KC_VOLU); |
||||
} |
||||
break; |
||||
|
||||
case _NAV: |
||||
if (clockwise) { |
||||
tap_code16(S(KC_TAB)); |
||||
} else { |
||||
tap_code16(KC_TAB); |
||||
} |
||||
break; |
||||
} |
||||
return true; |
||||
} |
||||
|
||||
#ifdef OLED_ENABLE |
||||
void oled_task_user(void) { |
||||
// Host Keyboard Layer Status
|
||||
oled_write_P(PSTR(""), false); |
||||
|
||||
switch (get_highest_layer(layer_state)) { |
||||
case _BASE: |
||||
oled_write_P(PSTR("Rebound\n"), false); |
||||
oled_write_P(PSTR("Rev4\n"), false); |
||||
break; |
||||
case _NAV: |
||||
oled_write_P(PSTR("Nav\n"), false); |
||||
break; |
||||
case _SYMB_BEAKL: |
||||
case _SYMB: |
||||
oled_write_P(PSTR("Symbols\n"), false); |
||||
break; |
||||
case _KEYPAD: |
||||
oled_write_P(PSTR("Top Rows\n"), false); |
||||
break; |
||||
default: |
||||
// Or use the write_ln shortcut over adding '\n' to the end of your string
|
||||
oled_write_ln_P(PSTR("Undefined"), false); |
||||
} |
||||
|
||||
// Host Keyboard LED Status
|
||||
led_t led_state = host_keyboard_led_state(); |
||||
oled_write_P(led_state.num_lock ? PSTR("NUM ") : PSTR(" "), false); |
||||
oled_write_P(led_state.caps_lock ? PSTR("CAPS") : PSTR(" "), false); |
||||
oled_write_P(led_state.scroll_lock ? PSTR("SCR ") : PSTR(" "), false); |
||||
|
||||
} |
||||
|
||||
#endif |
@ -0,0 +1,113 @@ |
||||
/*
|
||||
Copyright 2018 Eric Gebhart <e.a.gebhart@gmail.com> |
||||
|
||||
This program is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU General Public License as published by |
||||
the Free Software Foundation, either version 2 of the License, or |
||||
(at your option) any later version. |
||||
|
||||
This program is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU General Public License for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License |
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
/********************************************************************/ |
||||
/* Rebound 4 rows, 1x12, 3x13 */ |
||||
/********************************************************************/ |
||||
|
||||
#define LVARG_rebound(...) LAYOUT_all(__VA_ARGS__) |
||||
#define LAYOUT_rebound_base( \ |
||||
K01, K02, K03, K04, K05, \
|
||||
K06, K07, K08, K09, K0A, \
|
||||
K11, K12, K13, K14, K15, \
|
||||
K16, K17, K18, K19, K1A, \
|
||||
K21, K22, K23, K24, K25, \
|
||||
K26, K27, K28, K29, K2A \
|
||||
) \
|
||||
LVARG_rebound( \
|
||||
ROW1_LEFT(K01, K02, K03, K04, K05), \
|
||||
ROW1_RIGHT(K06, K07, K08, K09, K0A), \
|
||||
\
|
||||
ROW2_LEFT(K11, K12, K13, K14, K15), \
|
||||
KC_CCCV, \
|
||||
ROW2_RIGHT(K16, K17, K18, K19, K1A), \
|
||||
\
|
||||
ROW3_LEFT(K21, K22, K23, K24, K25), \
|
||||
MO(_ADJUST), \
|
||||
ROW3_RIGHT(K26, K27, K28, K29, K2A), \
|
||||
___13_BOTTOM___ \
|
||||
) |
||||
|
||||
#define LAYOUT_rebound_base_bepo( \ |
||||
K01, K02, K03, K04, K05, \
|
||||
K06, K07, K08, K09, K0A, \
|
||||
K11, K12, K13, K14, K15, \
|
||||
K16, K17, K18, K19, K1A, \
|
||||
K21, K22, K23, K24, K25, \
|
||||
K26, K27, K28, K29, K2A \
|
||||
) \
|
||||
LVARG_rebound( \
|
||||
ROW1_LEFT_BP(K01, K02, K03, K04, K05), \
|
||||
ROW1_RIGHT_BP(K06, K07, K08, K09, K0A), \
|
||||
\
|
||||
ROW2_LEFT_BP(K11, K12, K13, K14, K15), \
|
||||
KC_CCCV, \
|
||||
ROW2_RIGHT_BP(K16, K17, K18, K19, K1A), \
|
||||
\
|
||||
ROW3_LEFT_BP(K21, K22, K23, K24, K25), \
|
||||
MO(_ADJUST), \
|
||||
ROW3_RIGHT_BP(K26, K27, K28, K29, K2A), \
|
||||
___13_BOTTOM_BP___ \
|
||||
) |
||||
|
||||
// Just for bepo because it's a 3x6 matrix on each side.
|
||||
// So 3 pairs of 6 keys, left and right.
|
||||
#define LAYOUT_rebound_base_bepo6( \ |
||||
K01, K02, K03, K04, K05, K06, \
|
||||
K07, K08, K09, K0A, K0B, K0C, \
|
||||
K11, K12, K13, K14, K15, K16, \
|
||||
K17, K18, K19, K1A, K1B, K1C, \
|
||||
K21, K22, K23, K24, K25, K26, \
|
||||
K27, K28, K29, K2A, K2B, K2C \
|
||||
) \
|
||||
LVARG_rebound( \
|
||||
ROW1_LEFT_BP6(K01, K02, K03, K04, K05, K06), \
|
||||
ROW1_RIGHT_BP6(K07, K08, K09, K0A, K0B, K0C), \
|
||||
\
|
||||
ROW2_LEFT_BP6(K11, K12, K13, K14, K15, K16), \
|
||||
KC_CCCV, \
|
||||
ROW2_RIGHT_BP6(K17, K18, K19, K1A, K1B, K1C), \
|
||||
\
|
||||
ROW3_LEFT_BP6(K21, K22, K23, K24, K25, K26), \
|
||||
MO(_ADJUST), \
|
||||
ROW3_RIGHT_BP6(K27, K28, K29, K2A, K2B, K2C), \
|
||||
___13_BOTTOM_BP___ \
|
||||
) |
||||
|
||||
#define LAYOUT_rebound_transient( \ |
||||
K01, K02, K03, K04, K05, K06, \
|
||||
K07, K08, K09, K0A, K0B, K0C, \
|
||||
K11, K12, K13, K14, K15, K16, \
|
||||
K17, K18, K19, K1A, K1B, K1C, \
|
||||
K21, K22, K23, K24, K25, K26, \
|
||||
K27, K28, K29, K2A, K2B, K2C \
|
||||
) \
|
||||
LVARG_rebound( \
|
||||
K01, K02, K03, K04, K05, K06, \
|
||||
K07, K08, K09, K0A, K0B, K0C, \
|
||||
K11, K12, K13, K14, K15, K16, \
|
||||
___, \
|
||||
K17, K18, K19, K1A, K1B, K1C, \
|
||||
K21, K22, K23, K24, K25, K26, \
|
||||
___, \
|
||||
K27, K28, K29, K2A, K2B, K2C, \
|
||||
___, ___12___) |
||||
|
||||
#define Rebound_base(...) LAYOUT_rebound_base(__VA_ARGS__) |
||||
#define Rebound_base_bepo(...) LAYOUT_rebound_base_bepo(__VA_ARGS__) |
||||
#define Rebound_base_bepo6(...) LAYOUT_rebound_base_bepo6(__VA_ARGS__) |
||||
#define Rebound_transient(...) LAYOUT_rebound_transient(__VA_ARGS__) |
@ -0,0 +1,5 @@ |
||||
Overview |
||||
======== |
||||
|
||||
These are my keymaps. There isn't much here. Go take a look at my Userspace readme. |
||||
That's where all the code is. |
@ -0,0 +1,16 @@ |
||||
# Build Options
|
||||
# change yes to no to disable
|
||||
#
|
||||
BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
|
||||
MOUSEKEY_ENABLE = yes # Mouse keys
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||
CONSOLE_ENABLE = no # Console for debug
|
||||
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||
NKRO_ENABLE = yes # Enable N-Key Rollover
|
||||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||
MIDI_ENABLE = no # MIDI controls
|
||||
AUDIO_ENABLE = no # Audio output
|
||||
UNICODE_ENABLE = no # Unicode
|
||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
TAP_DANCE_ENABLE = yes # Enable the tap dance feature.
|
@ -0,0 +1,94 @@ |
||||
/*
|
||||
Copyright 2018 Eric Gebhart <e.a.gebhart@gmail.com> |
||||
|
||||
This program is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU General Public License as published by |
||||
the Free Software Foundation, either version 2 of the License, or |
||||
(at your option) any later version. |
||||
|
||||
This program is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU General Public License for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License |
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include "ericgebhart.h" |
||||
#include "altlocal_keys.h" |
||||
|
||||
#include "keymap_bepo.h" |
||||
|
||||
// These are the keys for dvorak on bepo. column one is the keycode and mods for
|
||||
// the unshifted key, the second column is the keycode and mods for the shifted key.
|
||||
// GR is Good Range. It subtracts SAFE_RANGE from the keycode so we can make a
|
||||
// reasnably sized array without difficulties. The macro is for the constant declarations
|
||||
// the function is for when we use it.
|
||||
const uint16_t key_translations[][2][2] = { |
||||
[GR(DB_1)] = {{BP_DQUO, MOD_LSFT}, {BP_DCIR, MOD_LSFT}}, |
||||
[GR(DB_2)] = {{BP_LDAQ, MOD_LSFT}, {BP_AT, MOD_NONE}}, |
||||
[GR(DB_3)] = {{BP_RDAQ, MOD_LSFT}, {BP_DLR, MOD_LSFT}}, |
||||
[GR(DB_4)] = {{BP_LPRN, MOD_LSFT}, {BP_DLR, MOD_NONE}}, |
||||
[GR(DB_5)] = {{BP_RPRN, MOD_LSFT}, {BP_PERC, MOD_NONE}}, |
||||
[GR(DB_6)] = {{BP_AT, MOD_LSFT}, {BP_AT, MOD_BIT(KC_RALT)}}, |
||||
[GR(DB_7)] = {{BP_PLUS, MOD_LSFT}, {BP_P, MOD_BIT(KC_RALT)}}, |
||||
[GR(DB_8)] = {{BP_MINS, MOD_LSFT}, {BP_ASTR, MOD_NONE}}, |
||||
[GR(DB_9)] = {{BP_SLSH, MOD_LSFT}, {BP_LPRN, MOD_NONE}}, |
||||
[GR(DB_0)] = {{BP_ASTR, MOD_LSFT}, {BP_RPRN, MOD_NONE}}, |
||||
[GR(DB_GRV)] = {{BP_PERC, MOD_LSFT}, {BP_K, MOD_BIT(KC_RALT)}}, |
||||
[GR(DB_SCOLON)] = {{BP_COMM, MOD_LSFT}, {BP_DOT, MOD_LSFT}}, |
||||
[GR(DB_SLASH)] = {{BP_SLSH, MOD_NONE}, {BP_QUOT, MOD_LSFT}}, |
||||
[GR(DB_BACKSLASH)] = {{BP_AGRV, MOD_BIT(KC_RALT)}, {BP_B, MOD_BIT(KC_RALT)}}, |
||||
[GR(DB_EQL)] = {{BP_EQL, MOD_NONE}, {BP_PLUS, MOD_NONE}}, |
||||
[GR(DB_COMM)] = {{BP_COMM, MOD_NONE}, {BP_LDAQ, MOD_BIT(KC_RALT)}}, |
||||
[GR(DB_DOT)] = {{BP_DOT, MOD_NONE}, {BP_RDAQ, MOD_BIT(KC_RALT)}}, |
||||
[GR(DB_QUOT)] = {{BP_QUOT, MOD_NONE}, {BP_DQUO, MOD_NONE}}, |
||||
[GR(DB_MINUS)] = {{BP_MINS, MOD_NONE}, {KC_SPC, MOD_BIT(KC_RALT)}}, |
||||
[GR(DB_LPRN)] = {{BP_LPRN, MOD_NONE}, {BP_LPRN, MOD_BIT(KC_RALT)}}, |
||||
[GR(DB_RPRN)] = {{BP_RPRN, MOD_NONE}, {BP_RPRN, MOD_BIT(KC_RALT)}}, |
||||
[GR(DB_LBRC)] = {{BP_Y, MOD_BIT(KC_RALT)}, {BP_LPRN, MOD_BIT(KC_RALT)}}, |
||||
[GR(DB_RBRC)] = {{BP_X, MOD_BIT(KC_RALT)}, {BP_RPRN, MOD_BIT(KC_RALT)}}, |
||||
// For the symbol layer
|
||||
[GR(DB_HASH)] = {{BP_DLR, MOD_LSFT}, {BP_DLR, MOD_LSFT}}, |
||||
[GR(DB_LCBR)] = {{BP_LPRN, MOD_BIT(KC_RALT)}, {BP_LPRN, MOD_BIT(KC_RALT)}}, |
||||
[GR(DB_RCBR)] = {{BP_LPRN, MOD_BIT(KC_RALT)}, {BP_RPRN, MOD_BIT(KC_RALT)}}, |
||||
[GR(DB_PIPE)] = {{BP_B, MOD_BIT(KC_RALT)}, {BP_B, MOD_BIT(KC_RALT)}}, |
||||
[GR(DB_TILD)] = {{BP_K, MOD_BIT(KC_RALT)}, {BP_K, MOD_BIT(KC_RALT)}}, |
||||
[GR(DB_CIRC)] = {{BP_AT, MOD_BIT(KC_RALT)}, {BP_AT, MOD_BIT(KC_RALT)}}, |
||||
[GR(DB_LESS)] = {{BP_LDAQ, MOD_BIT(KC_RALT)}, {BP_LDAQ, MOD_BIT(KC_RALT)}}, |
||||
[GR(DB_GRTR)] = {{BP_RDAQ, MOD_BIT(KC_RALT)}, {BP_RDAQ, MOD_BIT(KC_RALT)}}, |
||||
// Keys for BEAKL on Qwerty
|
||||
[GR(BQ_COMM)] = {{KC_COMMA, MOD_NONE}, {KC_1, MOD_LSFT}}, |
||||
[GR(BQ_DOT)] = {{KC_DOT, MOD_NONE}, {KC_2, MOD_LSFT}}, |
||||
[GR(BQ_QUOT)] = {{KC_QUOT, MOD_NONE}, {KC_GRV, MOD_NONE}}, |
||||
}; |
||||
|
||||
|
||||
uint8_t gr(uint16_t kc){ |
||||
return (kc - SAFE_RANGE); |
||||
} |
||||
// send the right keycode for the right mod.
|
||||
// remove the mods we are taking care of,
|
||||
// send our keycodes then restore them.
|
||||
// all so we can make dvorak keys from bepo keycodes.
|
||||
void send_keycode(uint16_t kc){ |
||||
uint8_t tmp_mods = get_mods(); |
||||
bool is_shifted = ( tmp_mods & (MOD_BIT(KC_LSFT)|MOD_BIT(KC_RSFT)) ); |
||||
//uint8_t key[2][2] = key_translations[GR(kc)];
|
||||
// need to turn of the shift if it is on.
|
||||
unregister_mods((MOD_BIT(KC_LSFT)|MOD_BIT(KC_RSFT))); |
||||
if(is_shifted){ |
||||
register_mods(SHIFTED_MODS(kc)); |
||||
register_code(SHIFTED_KEY(kc)); |
||||
unregister_code(SHIFTED_KEY(kc)); |
||||
unregister_mods(SHIFTED_MODS(kc)); |
||||
} else{ |
||||
register_mods(UNSHIFTED_MODS(kc)); |
||||
register_code(UNSHIFTED_KEY(kc)); |
||||
unregister_code(UNSHIFTED_KEY(kc)); |
||||
unregister_mods(UNSHIFTED_MODS(kc)); |
||||
} |
||||
clear_mods(); |
||||
register_mods(tmp_mods); |
||||
} |
@ -0,0 +1,36 @@ |
||||
#pragma once |
||||
/*
|
||||
Copyright 2018 Eric Gebhart <e.a.gebhart@gmail.com> |
||||
|
||||
This program is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU General Public License as published by |
||||
the Free Software Foundation, either version 2 of the License, or |
||||
(at your option) any later version. |
||||
|
||||
This program is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU General Public License for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License |
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
// for the creation of dvorak keys on an Bepo keyboard at the OS layer.
|
||||
// so we can create an array of reasonable size
|
||||
// for our translation keys. We have to create a
|
||||
// good range of numbers
|
||||
#define GR(x) (x-SAFE_RANGE) |
||||
|
||||
// void tap(uint16_t keycode){ register_code(keycode); unregister_code(keycode); };
|
||||
|
||||
uint8_t gr(uint16_t); |
||||
void send_keycode(uint16_t); |
||||
|
||||
#define MOD_NONE 0x00 |
||||
|
||||
// indexs for the keycode translation table.
|
||||
#define UNSHIFTED_KEY(key) key_translations[gr(key)][0][0] |
||||
#define UNSHIFTED_MODS(key) key_translations[gr(key)][0][1] |
||||
#define SHIFTED_KEY(key) key_translations[gr(key)][1][0] |
||||
#define SHIFTED_MODS(key) key_translations[gr(key)][1][1] |
@ -1,283 +0,0 @@ |
||||
#pragma once |
||||
/*
|
||||
Copyright 2018 Eric Gebhart <e.a.gebhart@gmail.com> |
||||
|
||||
This program is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU General Public License as published by |
||||
the Free Software Foundation, either version 2 of the License, or |
||||
(at your option) any later version. |
||||
|
||||
This program is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU General Public License for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License |
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include "core_keysets.h" |
||||
|
||||
/******************************************************************/ |
||||
/* These are the keys for the middle and bottom edge of any layout*/ |
||||
/* That way we only need to set them once and use them everywhere */ |
||||
/* The thumb keys, the bottom rows, etc. */ |
||||
/******************************************************************/ |
||||
/******************************************************************/ |
||||
/* Middle Keysets for the XD75 */ |
||||
/******************************************************************/ |
||||
|
||||
// For the middle keys of an xd75. It's got one more column in the middle than
|
||||
// the ergodox, or the viterbi. And the Ergodox is missing a key in column 7
|
||||
// counting from either end. Which is the first and 3rd columns of these sets.
|
||||
|
||||
// it's all an experient. I'm not sure what make sense here.
|
||||
// stealing what I can from the ergodox layout.
|
||||
/* The XD75 has 3 keys inbetween the usual left and right hand */ |
||||
#define ___ORTHO_15_MIDDLE_T___ OSL(LAYERS), LCTL(KC_A), MDIA_SYMB_KP_LAYERS |
||||
#define ___ORTHO_15_MIDDLE_1___ LCTL(KC_C), LCTL(KC_X), LCTL(KC_V) |
||||
#define ___ORTHO_15_MIDDLE_2___ TO(SYMB), TO(_RGB), TO(KEYPAD) |
||||
#define ___ORTHO_15_MIDDLE_3___ OSL(SYMB), TO(MDIA), OSL(KEYPAD) |
||||
#define ___ORTHO_15_MIDDLE_4___ CTL_BSPC, ALT_DEL, XMONAD_ESC, ALT_ENT, CTL_SPC |
||||
|
||||
// The same, for BEPO
|
||||
#define ___ORTHO_15_MIDDLE_T_BP___ OSL(LAYERS), LCTL(BP_A), MDIA_SYMB_KP_LAYERS |
||||
#define ___ORTHO_15_MIDDLE_1_BP___ LCTL(BP_C), LCTL(BP_X), LCTL(BP_V) |
||||
#define ___ORTHO_15_MIDDLE_2_BP___ TO(SYMB_ON_BEPO), TO(_RGB), TO(KEYPAD_ON_BEPO) |
||||
#define ___ORTHO_15_MIDDLE_3_BP___ OSL(SYMB_ON_BEPO), TO(MDIA), OSL(KEYPAD_ON_BEPO) |
||||
|
||||
// The Viterbi only has 2 keys in the middle.
|
||||
#define ___ORTHO_14_MIDDLE_T___ OSL(LAYERS), MDIA_SYMB_KP_LAYERS |
||||
#define ___ORTHO_14_MIDDLE_1___ LCTL(KC_C), LCTL(KC_V) |
||||
#define ___ORTHO_14_MIDDLE_2___ TO(SYMB), TO(KEYPAD) |
||||
#define ___ORTHO_14_MIDDLE_3___ OSL(SYMB), OSL(KEYPAD) |
||||
|
||||
// becomes the upper thumbs, the real 4th row if we throw away
|
||||
// the number row at the top
|
||||
#define ___ORTHO_14_MIDDLE_4___ LSFT(KC_TAB), HOME_END, KC_PGDN, KC_TAB |
||||
// basically the thumb keys like on the ergodox.
|
||||
#define ___MIDDLE_THUMBS___ CTL_BSPC, ALT_DEL, XMONAD_ESC, KC_PGDN, ALT_ENT, CTL_SPC |
||||
|
||||
// The same, for BEPO
|
||||
#define ___ORTHO_14_MIDDLE_T_BP___ OSL(LAYERS), MDIA_SYMB_KP_LAYERS |
||||
#define ___ORTHO_14_MIDDLE_1_BP___ LCTL(BP_C), LCTL(BP_V) |
||||
#define ___ORTHO_14_MIDDLE_2_BP___ TO(SYMB_ON_BEPO), TO(KEYPAD_ON_BEPO) |
||||
#define ___ORTHO_14_MIDDLE_3_BP___ OSL(SYMB_ON_BEPO), OSL(KEYPAD_ON_BEPO) |
||||
|
||||
#define ___ORTHO_14_MIDDLE_4_BP___ LSFT(KC_TAB), HOME_END, KC_PGUP, KC_TAB |
||||
|
||||
|
||||
/********************************************************************/ |
||||
/** The top rows for numbers, symbols and Fkeys. **/ |
||||
/********************************************************************/ |
||||
#define ___ORTHO_15_N___ ___NUMBER_L___, ___ORTHO_15_MIDDLE_T___, ___NUMBER_R___ |
||||
#define ___ORTHO_15_B_N___ ___NUMBER_BEPO_L___, ___ORTHO_15_MIDDLE_T_BP___, ___NUMBER_BEPO_R___ |
||||
// the full bepo symbol row.
|
||||
#define ___ORTHO_15_B_SYMB___ BP_DLR, ___SYMBOL_BEPO_L___, ___ORTHO_15_MIDDLE_T_BP___, ___SYMBOL_BEPO_R___, BP_EQL |
||||
|
||||
// transparent in the middle because I only put this on transient layers.
|
||||
#define ___ORTHO_15_FUNC_1_12___ ___FUNC_1_6___, ___3___, ___FUNC_7_12___ |
||||
|
||||
|
||||
/********************************************************************/ |
||||
/** The bottom row and thumbs as needed. **/ |
||||
/********************************************************************/ |
||||
#define ___BOTTOM_LEFT___ LCTL(KC_C), LCTL(KC_V), KC_INS, KC_LEFT, KC_RIGHT |
||||
#define ___BOTTOM_RIGHT___ KC_UP, KC_DOWN, KC_BSLASH, LCTL(KC_V), LCTL(KC_C) |
||||
|
||||
// the bottom rows for keyboards on bepo.
|
||||
// bepo on bepo - not enough space to go around....
|
||||
#define ___BOTTOM_LEFT_BP___ LCTL(BP_C), BP_ECIR, LCTL(BP_V), KC_LEFT, KC_RIGHT |
||||
#define ___BOTTOM_RIGHT_BP___ KC_UP, KC_DOWN, DB_BACKSLASH, BP_CCED, BP_PERC |
||||
|
||||
// for dvorak on bepo
|
||||
#define ___BOTTOM_LEFT_FR___ LCTL(BP_C), LCTL(BP_C), LCTL(BP_V), KC_LEFT, KC_RIGHT |
||||
#define ___BOTTOM_RIGHT_FR___ KC_UP, KC_DOWN, DB_BACKSLASH, LCTL(KC_V), LCTL(KC_C) |
||||
|
||||
#define ___ORTHO_15_BOTTOM___ ___BOTTOM_LEFT___, ___ORTHO_15_MIDDLE_4___, ___BOTTOM_RIGHT___ |
||||
#define ___ORTHO_15_BOTTOM_FR___ ___BOTTOM_LEFT_FR___, ___ORTHO_15_MIDDLE_4___, ___BOTTOM_RIGHT_FR___ |
||||
#define ___ORTHO_15_BOTTOM_BP___ ___BOTTOM_LEFT_BP___, ___ORTHO_15_MIDDLE_4___, ___BOTTOM_RIGHT_BP___ |
||||
|
||||
#define ___ORTHO_14_BOTTOM___ ___BOTTOM_LEFT___, ___ORTHO_14_MIDDLE_4___, ___BOTTOM_RIGHT___ |
||||
#define ___ORTHO_14_BOTTOM_FR___ ___BOTTOM_LEFT_FR___, ___ORTHO_14_MIDDLE_4___, ___BOTTOM_RIGHT_FR___ |
||||
#define ___ORTHO_14_BOTTOM_BP___ ___BOTTOM_LEFT_BP___, ___ORTHO_14_MIDDLE_4___, ___BOTTOM_RIGHT_BP___ |
||||
#define ___ORTHO_14_THUMBS_BOTTOM___ ___4___, ___MIDDLE_THUMBS___, ___4___ |
||||
|
||||
|
||||
#define ___ERGODOX_THUMB_LEFT___ \ |
||||
OSL(SYMB), OSM(KC_LGUI), \
|
||||
HOME_END, \
|
||||
CTL_BSPC, ALT_DEL, XMONAD_ESC |
||||
|
||||
#define ___ERGODOX_THUMB_RIGHT___ \ |
||||
XXX, OSL(KEYPAD), \
|
||||
KC_PGUP, \
|
||||
KC_PGDN, ALT_ENT, CTL_SPC |
||||
|
||||
#define ___ERGODOX_THUMB_RIGHT_BP___ \ |
||||
XXX, OSL(KEYPAD_ON_BEPO), \
|
||||
KC_PGUP, \
|
||||
KC_PGDN, ALT_ENT, CTL_SPC |
||||
|
||||
#define ___ERGODOX_THUMB_LEFT_BP___ \ |
||||
OSL(SYMB_ON_BEPO), OSM(KC_LGUI), \
|
||||
HOME_END, \
|
||||
CTL_BSPC, ALT_DEL, XMONAD_ESC |
||||
|
||||
/********************************************************************************/ |
||||
/* the interior rows for ortholinear keyboards. the first number is the length */ |
||||
/* So you can put what you want on the outside ends, make new middles as needed */ |
||||
/* It would be nice to make this a little more dynamic. There is little */ |
||||
/* differenc between them. */ |
||||
/********************************************************************************/ |
||||
|
||||
//// ortho15 core rows. used with my xd75.
|
||||
/***********************************************************/ |
||||
/* ORTHO15 interior rows. used with my xd75 */ |
||||
/***********************************************************/ |
||||
#define ___13_DVORAK_1___ ___DVORAK_L1___, ___ORTHO_15_MIDDLE_1___, ___DVORAK_R1___ |
||||
#define ___13_DVORAK_2___ ___DVORAK_L2___, ___ORTHO_15_MIDDLE_2___, ___DVORAK_R2___ |
||||
#define ___13_DVORAK_3___ ___DVORAK_L3___, ___ORTHO_15_MIDDLE_3___, ___DVORAK_R3___ |
||||
|
||||
#define ___13_QWERTY_1___ ___QWERTY_L1___, ___ORTHO_15_MIDDLE_1___, ___QWERTY_R1___ |
||||
#define ___13_QWERTY_2___ ___QWERTY_L2___, ___ORTHO_15_MIDDLE_2___, ___QWERTY_R2___ |
||||
#define ___13_QWERTY_3___ ___QWERTY_L3___, ___ORTHO_15_MIDDLE_3___, ___QWERTY_R3___ |
||||
|
||||
#define ___13_COLEMAK_1___ ___COLEMAK_L1___, ___ORTHO_15_MIDDLE_1___, ___COLEMAK_R1___ |
||||
#define ___13_COLEMAK_2___ ___COLEMAK_L2___, ___ORTHO_15_MIDDLE_2___, ___COLEMAK_R2___ |
||||
#define ___13_COLEMAK_3___ ___COLEMAK_L3___, ___ORTHO_15_MIDDLE_3___, ___COLEMAK_R3___ |
||||
|
||||
#define ___13_WORKMAN_1___ ___WORKMAN_L1___, ___ORTHO_15_MIDDLE_1___, ___WORKMAN_R1___ |
||||
#define ___13_WORKMAN_2___ ___WORKMAN_L2___, ___ORTHO_15_MIDDLE_2___, ___WORKMAN_R2___ |
||||
#define ___13_WORKMAN_3___ ___WORKMAN_L3___, ___ORTHO_15_MIDDLE_3___, ___WORKMAN_R3___ |
||||
|
||||
#define ___13_NORMAN_1___ ___NORMAN_L1___, ___ORTHO_15_MIDDLE_1___, ___NORMAN_R1___ |
||||
#define ___13_NORMAN_2___ ___NORMAN_L2___, ___ORTHO_15_MIDDLE_2___, ___NORMAN_R2___ |
||||
#define ___13_NORMAN_3___ ___NORMAN_L3___, ___ORTHO_15_MIDDLE_3___, ___NORMAN_R3___ |
||||
|
||||
#define ___13_DVORAK_B_1___ ___DVORAK_FR_L1___, ___ORTHO_15_MIDDLE_1_BP___, ___DVORAK_FR_R1___ |
||||
#define ___13_DVORAK_B_2___ ___DVORAK_FR_L2___, ___ORTHO_15_MIDDLE_2_BP___, ___DVORAK_FR_R2___ |
||||
#define ___13_DVORAK_B_3___ ___DVORAK_FR_L3___, ___ORTHO_15_MIDDLE_3_BP___, ___DVORAK_FR_R3___ |
||||
|
||||
#define ___13_BEPO_1___ ___BEPO_FR_L1___, ___ORTHO_15_MIDDLE_1_BP___, ___BEPO_FR_R1___ |
||||
#define ___13_BEPO_2___ ___BEPO_FR_L2___, ___ORTHO_15_MIDDLE_2_BP___, ___BEPO_FR_R2___ |
||||
#define ___13_BEPO_3___ ___BEPO_FR_L3___, ___ORTHO_15_MIDDLE_3_BP___, ___BEPO_FR_R3___ |
||||
|
||||
// transparent xmonad/dvorak layer
|
||||
#define ___15_XMONAD_1___ ___, ___DVORAK_L1___, ___3___, ___DVORAK_R1___, ___ |
||||
#define ___15_XMONAD_2___ ___, ___DVORAK_L2___, ___3___, ___DVORAK_R2___, ___ |
||||
#define ___15_XMONAD_3___ ___, ___DVORAK_L3___, ___3___, ___DVORAK_R3___, ___ |
||||
|
||||
// transparent xmonad/dvorak layer in bepo
|
||||
#define ___15_XMONAD_B_1___ ___, ___DVORAK_FR_L1___, ___3___, ___DVORAK_FR_R1___, ___ |
||||
#define ___15_XMONAD_B_2___ ___, ___DVORAK_FR_L2___, ___3___, ___DVORAK_FR_R2___, ___ |
||||
#define ___15_XMONAD_B_3___ ___, ___DVORAK_FR_L3___, ___3___, ___DVORAK_FR_R3___, ___ |
||||
|
||||
#define ___15_SYMB_1___ ___SYMBOLS6_1___, ___3___, ___SYMPAD_1___ |
||||
#define ___15_SYMB_2___ ___SYMBOLS6_2___, ___3___, ___SYMPAD_2___ |
||||
#define ___15_SYMB_3___ ___SYMBOLS6_3___, ___3___, ___SYMPAD_3___ |
||||
#define ___15_SYMB_4___ ___SYMBOLS6_4___, ___3___, ___SYMPAD_4___ |
||||
|
||||
#define ___15_KP_1___ ___2___, ___FUNCPAD_T___, ___5___, ___KEYPAD_1___, ___ |
||||
#define ___15_KP_2___ ___2___, ___FUNCPAD_1___, ___5___, ___KEYPAD_2___, ___ |
||||
#define ___15_KP_3___ ___2___, ___FUNCPAD_2___, ___5___, ___KEYPAD_3___, KC_PENT |
||||
#define ___15_KP_4___ ___2___, ___FUNCPAD_3___, ___5___, ___KEYPAD_4___, ___ |
||||
|
||||
#define ___15_KP_B_1___ ___2___, ___FUNCPAD_T___, ___5___, ___KEYPAD_1_BP___, ___ |
||||
#define ___15_KP_B_2___ ___2___, ___FUNCPAD_1___, ___5___, ___KEYPAD_2_BP___, ___ |
||||
#define ___15_KP_B_3___ ___2___, ___FUNCPAD_2___, ___5___, ___KEYPAD_3_BP___, KC_PENT |
||||
#define ___15_KP_B_4___ ___2___, ___FUNCPAD_3___, ___5___, ___KEYPAD_4_BP___, ___ |
||||
|
||||
#define ___15_SYMB_B_1___ ___SYMBOLS6_1_BP___, ___3___, ___SYMPAD_1_BP___ |
||||
#define ___15_SYMB_B_2___ ___SYMBOLS6_2_BP___, ___3___, ___SYMPAD_2_BP___ |
||||
#define ___15_SYMB_B_3___ ___SYMBOLS6_3_BP___, ___3___, ___SYMPAD_3_BP___ |
||||
#define ___15_SYMB_B_4___ ___SYMBOLS6_4_BP___, ___3___, ___SYMPAD_4_BP___ |
||||
|
||||
#define ___15_MDIA_1___ ___MOUSE_BTNS_L___, ___4___, KC_VOLU, ___MUTE_PRV_PLAY_NXT_STOP___ |
||||
#define ___15_MDIA_2___ ___, ___MOUSE_LDUR___, ___4___, KC_VOLD, ___VI_ARROWS___, ___ |
||||
#define ___15_MDIA_3___ ___, ___MWHEEL_LDUR___, ___4___, KC_PGUP, ___MOUSE_BTNS_R___ |
||||
#define ___15_MDIA_4___ ___2___, ___MACCL___, ___4___, KC_PGDN, ___5___ |
||||
|
||||
#define ___15_LAYERS_1___ ___X3___, ___2_LAYERS_B1___, ___5___, ___3_LAYERS_T_BP___, ___X2___ |
||||
#define ___15_LAYERS_2___ ___X3___, ___2_LAYERS_B2___, ___5___, ___3_LAYERS_T___, ___X2___ |
||||
#define ___15_LAYERS_3___ ___X2___, ___3_LAYERS_B3___, ___5___, ___3_LAYERS_T_CTL___, ___X2___ |
||||
|
||||
#define ___15_RGB_1___ ___, ___RGB_HUE_SAT_INT_UP___, ___5___, ___5___ |
||||
#define ___15_RGB_2___ ___, ___RGB_HUE_SAT_INT_DN___, RGB_TOG, ___4___, ___RGB_P_B_R_SW_SN___ |
||||
#define ___15_RGB_3___ ___5___, ___5___, ___RGB_KXGT___, ___ |
||||
|
||||
|
||||
|
||||
/***********************************************************/ |
||||
/* ORTHO14 base layer interior rows. used with my viterbi */ |
||||
/***********************************************************/ |
||||
#define ___12_DVORAK_1___ ___DVORAK_L1___, ___ORTHO_14_MIDDLE_1___, ___DVORAK_R1___ |
||||
#define ___12_DVORAK_2___ ___DVORAK_L2___, ___ORTHO_14_MIDDLE_2___, ___DVORAK_R2___ |
||||
#define ___12_DVORAK_3___ ___DVORAK_L3___, ___ORTHO_14_MIDDLE_3___, ___DVORAK_R3___ |
||||
|
||||
#define ___12_QWERTY_1___ ___QWERTY_L1___, ___ORTHO_14_MIDDLE_1___, ___QWERTY_R1___ |
||||
#define ___12_QWERTY_2___ ___QWERTY_L2___, ___ORTHO_14_MIDDLE_2___, ___QWERTY_R2___ |
||||
#define ___12_QWERTY_3___ ___QWERTY_L3___, ___ORTHO_14_MIDDLE_3___, ___QWERTY_R3___ |
||||
|
||||
#define ___12_COLEMAK_1___ ___COLEMAK_L1___, ___ORTHO_14_MIDDLE_1___, ___COLEMAK_R1___ |
||||
#define ___12_COLEMAK_2___ ___COLEMAK_L2___, ___ORTHO_14_MIDDLE_2___, ___COLEMAK_R2___ |
||||
#define ___12_COLEMAK_3___ ___COLEMAK_L3___, ___ORTHO_14_MIDDLE_3___, ___COLEMAK_R3___ |
||||
|
||||
#define ___12_WORKMAN_1___ ___WORKMAN_L1___, ___ORTHO_14_MIDDLE_1___, ___WORKMAN_R1___ |
||||
#define ___12_WORKMAN_2___ ___WORKMAN_L2___, ___ORTHO_14_MIDDLE_2___, ___WORKMAN_R2___ |
||||
#define ___12_WORKMAN_3___ ___WORKMAN_L3___, ___ORTHO_14_MIDDLE_3___, ___WORKMAN_R3___ |
||||
|
||||
#define ___12_NORMAN_1___ ___NORMAN_L1___, ___ORTHO_14_MIDDLE_1___, ___NORMAN_R1___ |
||||
#define ___12_NORMAN_2___ ___NORMAN_L2___, ___ORTHO_14_MIDDLE_2___, ___NORMAN_R2___ |
||||
#define ___12_NORMAN_3___ ___NORMAN_L3___, ___ORTHO_14_MIDDLE_3___, ___NORMAN_R3___ |
||||
|
||||
#define ___12_DVORAK_B_1___ ___DVORAK_FR_L1___, ___ORTHO_14_MIDDLE_1_BP___, ___DVORAK_FR_R1___ |
||||
#define ___12_DVORAK_B_2___ ___DVORAK_FR_L2___, ___ORTHO_14_MIDDLE_2_BP___, ___DVORAK_FR_R2___ |
||||
#define ___12_DVORAK_B_3___ ___DVORAK_FR_L3___, ___ORTHO_14_MIDDLE_3_BP___, ___DVORAK_FR_R3___ |
||||
|
||||
#define ___12_BEPO_2___ ___BEPO_FR_L1___, ___ORTHO_14_MIDDLE_1_BP___, ___BEPO_FR_R1___ |
||||
#define ___12_BEPO_3___ ___BEPO_FR_L2___, ___ORTHO_14_MIDDLE_2_BP___, ___BEPO_FR_R2___ |
||||
#define ___12_BEPO_4___ ___BEPO_FR_L3___, ___ORTHO_14_MIDDLE_3_BP___, ___BEPO_FR_R3___ |
||||
|
||||
|
||||
// transparent layers.
|
||||
#define ___14_XMONAD_1___ ___, ___DVORAK_L1___, ___2___, ___DVORAK_R1___, ___ |
||||
#define ___14_XMONAD_2___ ___, ___DVORAK_L2___, ___2___, ___DVORAK_R2___, ___ |
||||
#define ___14_XMONAD_3___ ___, ___DVORAK_L3___, ___2___, ___DVORAK_R3___, ___ |
||||
|
||||
#define ___14_XMONAD_B_1___ ___, ___DVORAK_FR_L1___, ___2___, ___DVORAK_FR_R1___, ___ |
||||
#define ___14_XMONAD_B_2___ ___, ___DVORAK_FR_L2___, ___2___, ___DVORAK_FR_R2___, ___ |
||||
#define ___14_XMONAD_B_3___ ___, ___DVORAK_FR_L3___, ___2___, ___DVORAK_FR_R3___, ___ |
||||
|
||||
#define ___14_SYMB_1___ ___SYMBOLS6_1___, ___2___, ___SYMPAD_1___ |
||||
#define ___14_SYMB_2___ ___SYMBOLS6_2___, ___2___, ___SYMPAD_2___ |
||||
#define ___14_SYMB_3___ ___SYMBOLS6_3___, ___2___, ___SYMPAD_3___ |
||||
#define ___14_SYMB_4___ ___SYMBOLS6_4___, ___2___, ___SYMPAD_4___ |
||||
|
||||
#define ___14_KP_1___ ___2___, ___FUNCPAD_T___, ___4___, ___KEYPAD_1___, ___ |
||||
#define ___14_KP_2___ ___2___, ___FUNCPAD_1___, ___4___, ___KEYPAD_2___, ___ |
||||
#define ___14_KP_3___ ___2___, ___FUNCPAD_2___, ___4___, ___KEYPAD_3___, KC_PENT |
||||
#define ___14_KP_4___ ___2___, ___FUNCPAD_3___, ___4___, ___KEYPAD_4___, ___ |
||||
|
||||
#define ___14_KP_B_1___ ___2___, ___FUNCPAD_T___, ___4___, ___KEYPAD_1_BP___, ___ |
||||
#define ___14_KP_B_2___ ___2___, ___FUNCPAD_1___, ___4___, ___KEYPAD_2_BP___, ___ |
||||
#define ___14_KP_B_3___ ___2___, ___FUNCPAD_2___, ___4___, ___KEYPAD_3_BP___, KC_PENT |
||||
#define ___14_KP_B_4___ ___2___, ___FUNCPAD_3___, ___4___, ___KEYPAD_4_BP___, ___ |
||||
|
||||
#define ___14_SYMB_B_1___ ___SYMBOLS6_1_BP___, ___2___, ___SYMPAD_1_BP___ |
||||
#define ___14_SYMB_B_2___ ___SYMBOLS6_2_BP___, ___2___, ___SYMPAD_2_BP___ |
||||
#define ___14_SYMB_B_3___ ___SYMBOLS6_3_BP___, ___2___, ___SYMPAD_3_BP___ |
||||
#define ___14_SYMB_B_4___ ___SYMBOLS6_4_BP___, ___2___, ___SYMPAD_4_BP___ |
||||
|
||||
#define ___14_MDIA_1___ ___MOUSE_BTNS_L___, ___3___, KC_VOLU, ___MUTE_PRV_PLAY_NXT_STOP___ |
||||
#define ___14_MDIA_2___ ___, ___MOUSE_LDUR___, ___3___, KC_VOLD, ___VI_ARROWS___, ___ |
||||
#define ___14_MDIA_3___ ___, ___MWHEEL_LDUR___, ___3___, KC_PGUP, ___MOUSE_BTNS_R___ |
||||
#define ___14_MDIA_4___ ___2___, ___MACCL___, ___3___, KC_PGDN, ___5___ |
||||
|
||||
#define ___14_LAYERS_1___ ___X3___, ___2_LAYERS_B1___, ___4___, ___3_LAYERS_T_BP___, ___X2___ |
||||
#define ___14_LAYERS_2___ ___X3___, ___2_LAYERS_B2___, ___4___, ___3_LAYERS_T___, ___X2___ |
||||
#define ___14_LAYERS_3___ ___X2___, ___3_LAYERS_B3___, ___4___, ___3_LAYERS_T_CTL___, ___X2___ |
||||
|
||||
#define ___14_RGB_1___ ___, ___RGB_HUE_SAT_INT_UP___, ___4___, ___5___ |
||||
#define ___14_RGB_2___ ___, ___RGB_HUE_SAT_INT_DN___, RGB_TOG, ___3___, ___RGB_P_B_R_SW_SN___ |
||||
#define ___14_RGB_3___ ___5___, ___4___, ___RGB_KXGT___, ___ |
@ -0,0 +1,81 @@ |
||||
// Copyright 2021 Google LLC
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// https://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
//
|
||||
// For full documentation, see
|
||||
// https://getreuer.info/posts/keyboards/caps-word
|
||||
|
||||
#include "caps_word.h" |
||||
|
||||
bool process_caps_word(uint16_t keycode, keyrecord_t* record) { |
||||
static bool caps_word_enabled = false; |
||||
static bool shifted = false; |
||||
#ifndef NO_ACTION_ONESHOT |
||||
const uint8_t mods = get_mods() | get_oneshot_mods(); |
||||
#else |
||||
const uint8_t mods = get_mods(); |
||||
#endif // NO_ACTION_ONESHOT
|
||||
|
||||
if (!caps_word_enabled) { |
||||
// Pressing both shift keys at the same time enables caps word.
|
||||
if ((mods & MOD_MASK_SHIFT) == MOD_MASK_SHIFT) { |
||||
clear_mods(); |
||||
#ifndef NO_ACTION_ONESHOT |
||||
clear_oneshot_mods(); |
||||
#endif // NO_ACTION_ONESHOT
|
||||
shifted = false; |
||||
caps_word_enabled = true; |
||||
return false; |
||||
} |
||||
return true; |
||||
} |
||||
|
||||
if (!record->event.pressed) { return true; } |
||||
|
||||
if (!(mods & ~MOD_MASK_SHIFT)) { |
||||
switch (keycode) { |
||||
case QK_MOD_TAP ... QK_MOD_TAP_MAX: |
||||
case QK_LAYER_TAP ... QK_LAYER_TAP_MAX: |
||||
// Earlier return if this has not been considered tapped yet.
|
||||
if (record->tap.count == 0) { return true; } |
||||
// Get the base tapping keycode of a mod- or layer-tap key.
|
||||
keycode &= 0xff; |
||||
} |
||||
|
||||
switch (keycode) { |
||||
// Letter keys should be shifted.
|
||||
case KC_A ... KC_Z: |
||||
if (!shifted) { register_code(KC_LSFT); } |
||||
shifted = true; |
||||
return true; |
||||
|
||||
// Keycodes that continue caps word but shouldn't get shifted.
|
||||
case KC_1 ... KC_0: |
||||
case KC_BSPC: |
||||
case KC_MINS: |
||||
case KC_UNDS: |
||||
if (shifted) { unregister_code(KC_LSFT); } |
||||
shifted = false; |
||||
return true; |
||||
|
||||
// Any other keycode disables caps word.
|
||||
} |
||||
} |
||||
|
||||
// Disable caps word.
|
||||
caps_word_enabled = false; |
||||
if (shifted) { unregister_code(KC_LSFT); } |
||||
shifted = false; |
||||
return true; |
||||
} |
@ -0,0 +1,35 @@ |
||||
// Copyright 2021 Google LLC
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// https://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
//
|
||||
// Caps Word, activated by pressing both shift keys at the same time.
|
||||
//
|
||||
// This library implements "Caps Word", which is like conventional Caps Lock,
|
||||
// but automatically disables itself at the end of the word. This is useful for
|
||||
// typing all-caps identifiers like `MOD_MASK_ALT`.
|
||||
//
|
||||
// Caps Word is activated by pressing the left and right shift keys at the same
|
||||
// time. This way you don't need a dedicated key for using Caps Word. I've
|
||||
// tested that this works as expected with one-shot mods and Space Cadet Shift.
|
||||
// If your shift keys are mod-taps, activate Caps Word by holding both shift
|
||||
// mod-tap keys until the tapping term, release them, then begin typing.
|
||||
//
|
||||
// For full documentation, see
|
||||
// https://getreuer.info/posts/keyboards/caps-word
|
||||
|
||||
#pragma once |
||||
|
||||
#include QMK_KEYBOARD_H |
||||
|
||||
bool process_caps_word(uint16_t keycode, keyrecord_t* record); |
@ -0,0 +1,10 @@ |
||||
// name result chord keys |
||||
COMB(LNAV, TG(_NAV), SPC_TOPR, ENT_NAV) |
||||
COMB(OSLSYM, OSL(_SYMB), ESC_TOPR, BSPC_SYMB) |
||||
COMB(OSLSYMBP, OSL(_SYMB_BP), ESC_TOPR_BP, BSPC_SYMB_BP) |
||||
COMB(LKEYPAD, TG(_KEYPAD), SPC_TOPR, BSPC_SYMB) |
||||
COMB(LKEYPADBP, TG(_KEYPAD_BP), SPC_TOPR_BP, BSPC_SYMB_BP) |
||||
COMB(LLAYERS, OSL(_LAYERS), KC_TAB, ENT_NAV) |
||||
|
||||
//COMB(JKL_SPC, KC_SPC, KC_J, KC_X) |
||||
//SUBS(TH_THE, "the", KC_T, KC_H) // SUBS uses SEND_STRING to output the given string. |
@ -0,0 +1,238 @@ |
||||
#pragma once |
||||
/*
|
||||
Copyright 2018 Eric Gebhart <e.a.gebhart@gmail.com> |
||||
|
||||
This program is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU General Public License as published by |
||||
the Free Software Foundation, either version 2 of the License, or |
||||
(at your option) any later version. |
||||
|
||||
This program is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU General Public License for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License |
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include "core_keysets.h" |
||||
|
||||
/******************************************************************/ |
||||
/* This is where I put my Keyboard layouts, Everything on the */ |
||||
/* edges, the functions on keys like LT() and SFT_T() */ |
||||
/* can be applied here. The physical shape of the keyboard is */ |
||||
/* also accounted for here. This makes it very simple to add a */ |
||||
/* new keyboard and reuse all of my layouts and layers */ |
||||
/* */ |
||||
/* The particular pieces we define here (as needed) are: */ |
||||
/* * Edge pinky keys, */ |
||||
/* * Middle section keys */ |
||||
/* * Bottom/5th row */ |
||||
/* * Thumbkeys */ |
||||
/* * Any functional additions to wrap the keys. ie. LT() */ |
||||
/* */ |
||||
/* With all of that in hand, we then create a LAYOUT wrapper */ |
||||
/* macro that takes a list of keys, to create a keyboard matrix */ |
||||
/* that fits the keyboard. Simple. */ |
||||
/* */ |
||||
/* The thumb keys, the bottom rows, etc. */ |
||||
/* */ |
||||
/* An attempt has been made to adapt the kinesis and ergodox */ |
||||
/* Thumb keys to the rectangular shapes of the xd75 and viterbi. */ |
||||
/* which are 15x and 14x matrices respectively. */ |
||||
/* The Corne was a perfect fit */ |
||||
/******************************************************************/ |
||||
|
||||
/******************************************************************/ |
||||
/* * The XD75 is a 5x15 Ortholinear matrix which means it has 3 */ |
||||
/* keys inbetween the usual left and right hand keys */ |
||||
/* * The Viterbi is a split 5x14 Ortholinear with 2 middle keys. */ |
||||
/* * The Ergodox is a split 5x14 Ortholinear with 2 middle keys, */ |
||||
/* thumbkeys. It is missing middle keys on (home) row 3. */ |
||||
/* * The Corne is a split 3x12 with 6 thumb keys. It has no */ |
||||
/* extra middle keys */ |
||||
/* */ |
||||
/******************************************************************/ |
||||
|
||||
|
||||
/******************************************************************/ |
||||
/* In all cases these keyboards are defined in a matrix which is */ |
||||
/* a set of rows. Maybe like so, or not. */ |
||||
/* */ |
||||
/* -------------------------|------------------------ */ |
||||
/* | Left0 | Numbers L | mid|dle0 | numbers R | Right0 | */ |
||||
/* | Left1 | keys0-5 | mid|dle1 | Keys6-10 | Right1 | */ |
||||
/* | Left2 | keys11-15 | mid|dle2 | Keys16-20 | Right2 | */ |
||||
/* | Left3 | keys20-25 | mid|dle3 | Keys25-30 | Right3 | */ |
||||
/* | Row5L | Row5R | */ |
||||
/* | ThumbsL | ThumbsR | */ |
||||
/* -------------------------|------------------------ */ |
||||
|
||||
/* Generally speaking, the keys on the right and left don't change. */ |
||||
/* Neither does the bottom row or the thumbs. Frequently the numbers */ |
||||
/* row is identical across layers. Mostly, we want our Base layers to */ |
||||
/* be predctable. */ |
||||
|
||||
// EDGES
|
||||
// outside pinky keys row 0-3.
|
||||
// Qwerty and Bepo, - Applies
|
||||
// to foreign layouts on bepo. dvorak_bp, beakl_bp.
|
||||
#define LEFT0 KC_GRV |
||||
#define LEFT1 KC_GRV |
||||
#define LEFT2 KC_TAB |
||||
#define LEFT3 KC_BSLASH |
||||
//#define LEFT3 KC_COLN
|
||||
|
||||
#define LEFT0_BP DB_GRV |
||||
#define LEFT1_BP DB_GRV |
||||
#define LEFT2_BP KC_TAB |
||||
#define LEFT3_BP DB_BACKSLASH |
||||
//#define LEFT3_BP BP_COLN
|
||||
|
||||
#define RIGHT0 KC_EQL |
||||
#define RIGHT1 KC_SLASH |
||||
#define RIGHT2 KC_MINS |
||||
#define RIGHT3 KC_SCLN |
||||
|
||||
#define RIGHT0_BP BP_EQL |
||||
#define RIGHT1_BP BP_SLSH |
||||
#define RIGHT2_BP BP_MINS |
||||
#define RIGHT3_BP BP_SCLN |
||||
|
||||
/******************************************************************/ |
||||
/* Middle Keysets for various keyboards */ |
||||
// MIDDLES
|
||||
/// Middle left and right keys.
|
||||
/******************************************************************/ |
||||
#define ___MIDDLE_LT___ OSL(_LAYERS) |
||||
#define ___MIDDLE_L1___ KC_CCCV |
||||
#define ___MIDDLE_L2___ TO(_SYMB) |
||||
#define ___MIDDLE_L3___ TO(_NAV) |
||||
|
||||
#define ___MIDDLE_RT___ _X_ |
||||
#define ___MIDDLE_R1___ KC_CCCV |
||||
#define ___MIDDLE_R2___ TO(_TOPROWS) |
||||
#define ___MIDDLE_R3___ OSL(_KEYPAD) |
||||
|
||||
#define ___MIDDLE_L1_BP___ BP_CCCV |
||||
#define ___MIDDLE_L2_BP___ TO(_SYMB_BP) |
||||
|
||||
#define ___MIDDLE_R1_BP___ BP_CCCV |
||||
#define ___MIDDLE_R2_BP___ TO(_KEYPAD_BP) |
||||
#define ___MIDDLE_R3_BP___ OSL(_KEYPAD_BP) |
||||
|
||||
// 3 keys in the middle of a 15x matrix
|
||||
#define ___3_MIDDLE_T___ ___MIDDLE_LT___, LCTL(KC_A), ___MIDDLE_RT___ |
||||
#define ___3_MIDDLE_1___ ___MIDDLE_L1___, LCTL(KC_X), ___MIDDLE_R1___ |
||||
#define ___3_MIDDLE_2___ ___MIDDLE_L2___, TO(_RGB), ___MIDDLE_R2___ |
||||
#define ___3_MIDDLE_3___ ___MIDDLE_L3___, TO(_SYMB), ___MIDDLE_R3___ |
||||
|
||||
// The same, for BEPO
|
||||
#define ___3_MIDDLE_T_BP___ ___MIDDLE_LT___, LCTL(BP_A), ___MIDDLE_RT___ |
||||
#define ___3_MIDDLE_1_BP___ ___MIDDLE_L1_BP___, LCTL(BP_X), ___MIDDLE_R1_BP___ |
||||
#define ___3_MIDDLE_2_BP___ ___MIDDLE_L2_BP___, TO(_RGB), ___MIDDLE_R2_BP___ |
||||
#define ___3_MIDDLE_3_BP___ ___MIDDLE_L3___, TO(_SYMB_BP), ___MIDDLE_R3_BP___ |
||||
|
||||
// 2 keys in the middle of a 14x matrix - For viterbi and ergodox.
|
||||
#define ___2_MIDDLE_T___ ___MIDDLE_LT___, ___MIDDLE_RT___ |
||||
#define ___2_MIDDLE_1___ ___MIDDLE_L1___, ___MIDDLE_R1___ |
||||
#define ___2_MIDDLE_2___ ___MIDDLE_L2___, ___MIDDLE_R2___ |
||||
#define ___2_MIDDLE_3___ ___MIDDLE_L3___, ___MIDDLE_R3___ |
||||
|
||||
// The same, for BEPO
|
||||
#define ___2_MIDDLE_T_BP___ ___MIDDLE_LT___, ___MIDDLE_RT___ |
||||
#define ___2_MIDDLE_1_BP___ ___MIDDLE_L1_BP___, ___MIDDLE_R1_BP___ |
||||
#define ___2_MIDDLE_2_BP___ ___MIDDLE_L2_BP___, ___MIDDLE_R2_BP___ |
||||
#define ___2_MIDDLE_3_BP___ ___MIDDLE_L3___, ___MIDDLE_R3_BP___ |
||||
|
||||
/********************************************************************/ |
||||
/* THUMBS */ |
||||
/* Define the thumb clusters for all the keyboards. */ |
||||
/********************************************************************/ |
||||
|
||||
// for xd75 or other layouts with a center column.
|
||||
// #define ___5_MIDDLE_THUMBS___ CTL_BSPC, ALT_DEL, XMONAD_ESC, ALT_ENT, CTL_SPC
|
||||
#define ___5_MIDDLE_THUMBS___ ALT_DEL, BSPC_TOPR, ESC_SYMB, ENT_NAV, SPC_TOPR |
||||
#define ___5_MIDDLE_THUMBS_BP___ ALT_DEL, BSPC_TOPR_BP, ESC_SYMB_BP, ENT_NAV, SPC_TOPR_BP |
||||
|
||||
// for a last, 4th thumb row. for rebound.
|
||||
// backtab, home end, ----, pgup, pgdn, tab ?
|
||||
#define ___13_BOTTOM___ \ |
||||
KC_BKTAB, HOME_END, KC_TAB, TT(_NAV), BSPC_SYMB, ESC_TOPR, \
|
||||
OSL(_LAYERS), \
|
||||
ENT_NAV, SPC_TOPR, KC_LEFT, KC_PGUP, KC_PGDN, KC_RIGHT |
||||
|
||||
#define ___13_BOTTOM_BP___ \ |
||||
KC_BKTAB, HOME_END, KC_TAB, TT(_NAV), BSPC_SYMB_BP, ESC_TOPR_BP, \
|
||||
OSL(_LAYERS), \
|
||||
ENT_NAV, SPC_TOPR_BP, KC_LEFT, KC_PGUP, KC_PGDN, KC_RIGHT |
||||
|
||||
// becomes the upper thumbs, the real 4th row if we throw away
|
||||
// the number row at the top.
|
||||
// this is the 4th row on the viterbi above the thumbrow if the number
|
||||
// row is not used for numbers.
|
||||
#define ___4_MIDDLE_4___ LSFT(KC_TAB), HOME_END, KC_PGDN, KC_TAB |
||||
#define ___4_MIDDLE_4b___ TAB_BKTAB, HOME_END, KC_PGDN, KC_PGUP |
||||
|
||||
/********************************************************************/ |
||||
/** The bottom row and thumbs as needed. **/ |
||||
/********************************************************************/ |
||||
// I do not use those pinky keys. I had useful things there but there
|
||||
// are better more useful ways than those pinkys.
|
||||
#define ___5_BOTTOM_LEFT___ ___X2___, KC_INS, KC_LEFT, KC_RIGHT |
||||
#define ___5_BOTTOM_RIGHT___ KC_UP, KC_DOWN, KC_BSLASH, ___X2___ |
||||
|
||||
#define ___4_BOTTOM_LEFT___ LCTL(KC_V), KC_INS, KC_LEFT, KC_RIGHT |
||||
#define ___4_BOTTOM_RIGHT___ KC_UP, KC_DOWN, KC_BSLASH, LCTL(KC_C) |
||||
|
||||
// the bottom rows for keyboards on bepo.
|
||||
// bepo on bepo - not enough space to go around....
|
||||
#define ___5_BOTTOM_LEFT_BP___ _X_, BP_EACU, _X_, KC_LEFT, KC_RIGHT |
||||
#define ___5_BOTTOM_RIGHT_BP___ KC_UP, KC_DOWN, DB_BACKSLASH, BP_CCED, BP_PERC |
||||
|
||||
#define ___4_BOTTOM_LEFT_BP___ LCTL(BP_C), BP_EACU, KC_LEFT, KC_RIGHT |
||||
#define ___4_BOTTOM_RIGHT_BP___ KC_UP, KC_DOWN, DB_BACKSLASH, BP_CCED |
||||
|
||||
// for dvorak and beakl on bepo
|
||||
#define ___5_BOTTOM_LEFT_FR___ ___X3___, KC_LEFT, KC_RIGHT |
||||
#define ___5_BOTTOM_RIGHT_FR___ KC_UP, KC_DOWN, DB_BACKSLASH, ___X2___ |
||||
|
||||
// basically a 5th row in a 5x matrix. but maybe a 4th if there isnt a number row.
|
||||
#define ___15_BOTTOM___ ___5_BOTTOM_LEFT___, ___5_MIDDLE_THUMBS___, ___5_BOTTOM_RIGHT___ |
||||
#define ___15_BOTTOM_FR___ ___5_BOTTOM_LEFT_FR___, ___5_MIDDLE_THUMBS___, ___5_BOTTOM_RIGHT_FR___ |
||||
#define ___15_BOTTOM_BP___ ___5_BOTTOM_LEFT_BP___, ___5_MIDDLE_THUMBS___, ___5_BOTTOM_RIGHT_BP___ |
||||
|
||||
#define ___14_BOTTOM___ ___5_BOTTOM_LEFT___, ___4_MIDDLE_4b___, ___5_BOTTOM_RIGHT___ |
||||
#define ___14_BOTTOM_FR___ ___5_BOTTOM_LEFT_FR___, ___4_MIDDLE_4b___, ___5_BOTTOM_RIGHT_FR___ |
||||
#define ___14_BOTTOM_BP___ ___5_BOTTOM_LEFT_BP___, ___4_MIDDLE_4b___, ___5_BOTTOM_RIGHT_BP___ |
||||
#define ___14_THUMBS_BOTTOM___ ___X4___, ___6_MIDDLE_THUMBS___, ___X4___ |
||||
|
||||
// bottom row of ergodox thumbs, bottom middle of all layouts.
|
||||
// start with the minimilist thumb row of 6, like the Corne, 2x3.
|
||||
|
||||
#define ___THUMBS_1___ TT(_KEYPAD), MO(_ADJUST), MO(_LAYERS), OSL(_TOPROWS) |
||||
#define ___THUMBS_1_BP___ TT(_KEYPAD_BP), MO(_ADJUST), MO(_LAYERS), OSL(_TOPROWS_BP) |
||||
#define ___THUMBS_2___ HOME_END, KC_PGUP |
||||
#define ___THUMBS_3___ ___6_ERGO_THUMBS___ |
||||
|
||||
#define ___4_THUMBS_1_BP___ TT(_KEYPAD_BP), KC_HOME, KC_PGUP, OSL(_TOPROWS_BP) |
||||
#define ___4_THUMBS_1___ TT(_KEYPAD), KC_HOME, KC_PGUP, OSL(_TOPROWS) |
||||
#define ___6_THUMBS_2___ KC_LSFT, KC_BKTAB, KC_END, KC_PGDN, KC_TAB, KC_RSFT |
||||
|
||||
#define ___6_THUMBS_2b___ BSPC_SYMB, ESC_TOPR, KC_END, KC_PGUP, ENT_NAV, SPC_TOPR |
||||
#define ___6_ERGO_THUMBSb___ TT(_LAYERS), BSPC_SYMB, KC_XM_PORD, KC_PGDN, TT(_NAV), KC_XM_PORD |
||||
#define ___6_THUMBS_2b_BP___ BSPC_SYMB_BP, ESC_TOPR_BP, KC_END, KC_PGDN, ENT_TOPR_BP, SPC_NAV |
||||
|
||||
#define ___6_ERGO_THUMBS___ TT(_NAV), BSPC_SYMB, ESC_TOPR, ENT_NAV, SPC_TOPR, KC_XM_PORD |
||||
#define ___6_ERGO_THUMBS_BP___ TT(_NAV), BSPC_SYMB_BP, ESC_TOPR, ENT_NAV, SPC_TOPR_BP, BP_XM_PORD |
||||
|
||||
#define ___6_MIDDLE_THUMBS___ ___6_ERGO_THUMBS___ |
||||
|
||||
#define ___12_DOX_ALL_THUMBS___ ___THUMBS_1___, ___THUMBS_2___, ___THUMBS_3___ |
||||
#define ___12_DOX_ALL_THUMBS_BP___ ___THUMBS_1_BP___, ___THUMBS_2___, ___THUMBS_3___ |
||||
|
||||
#define ___16_ALL_THUMBSb___ ___4_THUMBS_1___, ___6_THUMBS_2b___, ___6_ERGO_THUMBSb___ |
||||
#define ___16_ALL_THUMBS___ ___4_THUMBS_1___, ___6_THUMBS_2___, ___6_ERGO_THUMBS___ |
||||
#define ___16_ALL_THUMBSb_BP___ ___4_THUMBS_1_BP___, ___6_THUMBS_2b_BP___, ___6_ERGO_THUMBS___ |
||||
#define ___16_ALL_THUMBS_BP___ ___4_THUMBS_1_BP___, ___6_THUMBS_2_BP___, ___6_ERGO_THUMBS_BP___ |
@ -1,32 +1,72 @@ |
||||
#pragma once |
||||
/*
|
||||
Copyright 2018 Eric Gebhart <e.a.gebhart@gmail.com> |
||||
|
||||
This program is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU General Public License as published by |
||||
the Free Software Foundation, either version 2 of the License, or |
||||
(at your option) any later version. |
||||
|
||||
This program is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU General Public License for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License |
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#ifndef ericgebhart |
||||
#define ericgebhart |
||||
|
||||
#include QMK_KEYBOARD_H |
||||
#include "base_layers.h" |
||||
#include "core_keysets.h" |
||||
#include "layouts.h" |
||||
#include "layers.h" |
||||
#if defined(OLED_ENABLE) |
||||
# include "oled_stuff.h" |
||||
#endif |
||||
|
||||
|
||||
//#define ONESHOT_TAP_TOGGLE 2 /* Tapping this number of times holds the key until tapped once again. */
|
||||
/* Define layer names */ |
||||
enum userspace_layers { |
||||
_DVORAK = 0, |
||||
_QWERTY, |
||||
_COLEMAK, |
||||
_BEAKL, |
||||
//_WORKMAN,
|
||||
//_NORMAN,
|
||||
//_MALTRON,
|
||||
//_EUCALYN,
|
||||
//_CARPLAX,
|
||||
_DVORAK_BP, // beginning of Bepo
|
||||
_BEAKL_BP, |
||||
_BEPO, |
||||
_LAYERS, |
||||
_NAV, // transient layers
|
||||
_SYMB, |
||||
_SYMB_BP, |
||||
_KEYPAD, |
||||
_KEYPAD_BP, |
||||
_TOPROWS, |
||||
_TOPROWS_BP, |
||||
_RGB, |
||||
_ADJUST, |
||||
}; |
||||
|
||||
#define DVORAK 0 // dvorak layout (default)
|
||||
#define QWERTY 1 |
||||
#define COLEMAK 2 |
||||
#define WORKMAN 3 |
||||
#define NORMAN 4 |
||||
// bepo layers
|
||||
#define DVORAK_ON_BEPO 6 // dvorak layout (default)
|
||||
#define BEPO 7 // Bepo
|
||||
// non-default layers
|
||||
#define SYMB 8 // symbols and numbers
|
||||
#define SYMB_ON_BEPO 9 // symbols and numbers
|
||||
#define MDIA 10 // mouse knd media eys
|
||||
#define LAYERS 11 // layers and right mousekeys.
|
||||
#define XMONAD 12 // xmonad ie. dvorak.
|
||||
#define XMONAD_FR 13 // xmonad ie. dvorak.
|
||||
#define KEYPAD 14 // number and Fkey pads
|
||||
#define KEYPAD_ON_BEPO 15 // number and Fkey pads.
|
||||
#define _RGB 16 // RGB stuff.
|
||||
|
||||
// clang-format off
|
||||
typedef union { |
||||
uint32_t raw; |
||||
struct { |
||||
bool rgb_layer_change :1; |
||||
bool is_overwatch :1; |
||||
bool nuke_switch :1; |
||||
bool swapped_numbers :1; |
||||
bool rgb_matrix_idle_anim :1; |
||||
}; |
||||
} userspace_config_t; |
||||
// clang-format on
|
||||
extern userspace_config_t userspace_config; |
||||
|
||||
#endif |
||||
|
@ -0,0 +1,677 @@ |
||||
#pragma once |
||||
/*
|
||||
Copyright 2018 Eric Gebhart <e.a.gebhart@gmail.com> |
||||
|
||||
This program is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU General Public License as published by |
||||
the Free Software Foundation, either version 2 of the License, or |
||||
(at your option) any later version. |
||||
|
||||
This program is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU General Public License for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License |
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include "core_keys.h" |
||||
/*********************************************************************/ |
||||
/* Non-Base Layer Definitions. */ |
||||
/* */ |
||||
/* Keypads, sympads, funcpads, symbols, RGB, Layers, Controls, etc. */ |
||||
/* Qwerty and Bepo versions exist as needed. */ |
||||
/* */ |
||||
/* This file defines every auxillary layer I use on every keyboard */ |
||||
/* Ergodox, keebio/viterbi, xd75, rebound, crkbd, morpho, dactyl,.. */ |
||||
/*********************************************************************/ |
||||
/********************************************************************************/ |
||||
/* The following Transient/Non-Base Layers are provided within. */ |
||||
/* Each layer is named with the size of Keymatrix it has entries for. */ |
||||
/* 3x12 or 4x12 are usual for these. Splitting is managed in the macros as */ |
||||
/* needed. BP indicates the Bepo equivalent to the Qwerty layer when needed. */ |
||||
/********************************************************************************/ |
||||
/* */ |
||||
/* Explore below to see what they all are. */ |
||||
/* Naming gives the sizes of things, a prefix number is the length. */ |
||||
/* BP is the bepo version of things. */ |
||||
/* BKL is the beakl 15 version of a layout or chunk. */ |
||||
/* C on the end of a name means its a compact version of something. */ |
||||
/* Compact meaning for use on a 3 row layout. */ |
||||
/* */ |
||||
/* TOPROWS - numbers, symbols, functions, all on one layer. */ |
||||
/* ___TOPROWS_3x12___ */ |
||||
/* ___TOPROWS_BP_3x12___ */ |
||||
/* // just numbers on the home row */ |
||||
/* ___NUM_HOME_BEAKL_3x12___ */ |
||||
/* ___NUM_HOME_BEAKL_BP_3x12___ */ |
||||
/* ___NUM_HOME_3x12___ */ |
||||
/* ___NUM_HOME_BP_3x12___ */ |
||||
/* */ |
||||
/* KEYPADS/FUNCPADS. */ |
||||
/* ___KEY_BKL_FUNC_4x12___ -- The BEAKL15 Keypad with a Funcpad on the right */ |
||||
/* ___KEY_BKL_FUNC_BP_4x12___ */ |
||||
/* ___FUNC_KEYPAD_4x12___ -- A Funcpad and a keypad */ |
||||
/* ___FUNC_KEYPAD_BP_4x12___ -- For Bepo */ |
||||
/* */ |
||||
/* // Compact Funcpad and keypad, 3x12 */ |
||||
/* ___KP_C_3x12___ */ |
||||
/* ___KP_C_BP_3x12___ */ |
||||
/* ___KP_C_BKL_FUNC_3x12___ -- BEAKL key/func pads. */ |
||||
/* ___KP_C_BKL_FUNC_BP_3x12___ */ |
||||
/* */ |
||||
/* SYMBOLS -Beakl or Beakl extended */ |
||||
/* ___SYMB_BEAKL_3x12___ */ |
||||
/* ___SYMB_BEAKL_BP_3x12___ */ |
||||
/* */ |
||||
/* Beakl extended symbol layer with additional corner symbols. */ |
||||
/* For use with non-beakl base layers. */ |
||||
/* ___SYMB_BEAKLA_3x12___ */ |
||||
/* ___SYMB_BEAKLA_BP_3x12___ */ |
||||
/* For use with vi bindings optimized */ |
||||
/* ___SYMB_BEAKLB_3x12___ */ |
||||
/* ___SYMB_BEAKLB_BP_3x12___ */ |
||||
/* */ |
||||
/* NAVIGATION */ |
||||
/* ___NAV_3x12___ */ |
||||
/* ___NAV_4x12___ */ |
||||
/* */ |
||||
/* CONTROLS */ |
||||
/* ___RGB_3x12___ */ |
||||
/* ___ADJUST_3x12___ */ |
||||
/* ___LAYERS_3x12___ */ |
||||
/********************************************************************************/ |
||||
/*********************************************************************/ |
||||
/* XXXXXX Layer chunk -- These are the final layers. */ |
||||
/* */ |
||||
/* Each section defines the necessary pieces to create a layer. */ |
||||
/* It builds them up into consistently shaped lists for the layout */ |
||||
/* wrapper. */ |
||||
/* */ |
||||
/* Each Section ends with a _Layer Chunk_. This is so the */ |
||||
/* layer can be easily given to the Layout Wrapper macros which */ |
||||
/* takes a list of keys in lengths of 2x3x5, 2x3x6, 2x4x5, or 2x4x6. */ |
||||
/* */ |
||||
/* All of my keyboard definitions use these same chunks with similar */ |
||||
/* macros. The differences between keyboards are all managed in the */ |
||||
/* macro. Here we just have nice rectangular sets of keys to */ |
||||
/* complete a layout. */ |
||||
/*********************************************************************/ |
||||
|
||||
|
||||
/*******************************************************************/ |
||||
/* A Top Rows layer. Pick your parts. Bepo and Qwerty */ |
||||
/* */ |
||||
/* This is, to me, a stop gap layer. If I need symbols, numbers or */ |
||||
/* function keys these rows are nicely predictable to most people. */ |
||||
/* I currently use the beakl number row with regular symbols. */ |
||||
/* I never use function keys for anything. */ |
||||
/*******************************************************************/ |
||||
#define ___12_SYMB___ ___, ___SYMS___, ___ |
||||
#define ___12_SYMB_BP___ ___12_SYMS_BEPO___, |
||||
|
||||
#define ___12_NUM___ ___, ___NUMS___, ___ |
||||
#define ___12_NUM_BP___ ___, ___NUMS_BP___, ___ |
||||
#define ___12_NUM_BEAKL___ ___, ___BKLNUMS___, ___ |
||||
#define ___12_NUM_BEAKL_BP___ ___, ___BKLNUMS_BP___, ___ |
||||
|
||||
#define ___12_FUNC___ ___FUNC_1_6___, ___FUNC_7_12___ |
||||
#define ___12_SYMS_BEPO___ ___6SYMBOL_BEPO_L___, ___6SYMBOL_BEPO_R___ |
||||
#define ___12_SYMS_FR___ ___SYMB_L_FR___, ___SYMB_R_FR___ |
||||
|
||||
// Kinesis function key row. I don't use them. but might as well define them.
|
||||
#define ___KINTFUNC_L___ KC_ESC, ___FUNC_1_6___, KC_F7, KC_F8 |
||||
// #define ___KINTFUNC_RIGHT___ KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, KC_FN0, RESET
|
||||
#define ___KINTFUNC_R___ KC_F9, KC_F10, KC_F11, KC_F12, XXX, XXX, XXX, XXX, RESET |
||||
|
||||
// A TOPROWS Layer.
|
||||
// set it how you like it, if you like it.
|
||||
#define ___TOPROW_1___ ___12_SYMB___ |
||||
#define ___TOPROW_2___ ___12_NUM_BEAKL___ |
||||
#define ___TOPROW_3___ ___12_FUNC___ |
||||
|
||||
#define ___TOPROW_1_BP___ ___12_SYMS_BEPO___ |
||||
#define ___TOPROW_2_BP___ ___12_NUM_BEAKL_BP___ |
||||
#define ___TOPROW_3_BP___ ___12_FUNC___ |
||||
|
||||
/********************************************************************************/ |
||||
/* TOPROWS Layer chunk */ |
||||
/********************************************************************************/ |
||||
// altogether in a chunk.
|
||||
#define ___TOPROWS_3x12___ ___TOPROW_1___, ___TOPROW_2___, ___TOPROW_3___ |
||||
#define ___TOPROWS_BP_3x12___ ___TOPROW_1_BP___, ___TOPROW_2_BP___, ___TOPROW_3_BP___ |
||||
|
||||
// Some layers with just a home row of numbers.
|
||||
// The beakl ones, r the usual ones.
|
||||
#define ___NUM_HOME_BEAKL_3x12___ ___12___, ___12_NUM_BEAKL___, ___12___ |
||||
#define ___NUM_HOME_BEAKL_BP_3x12___ ___12___, ___12_NUM_BEAKL_BP___, ___12___ |
||||
#define ___NUM_HOME_3x12___ ___12___, ___12_NUM___, ___12___ |
||||
#define ___NUM_HOME_BP_3x12___ ___12___, ___12_NUM_BP___, ___12___ |
||||
|
||||
|
||||
/********************************************************************************/ |
||||
/* KEYPADS. Mostly all in Bepo and Qwerty versions */ |
||||
/* 4 row Pads: */ |
||||
/* * The BEAKL 15 Number pad, for the left hand. */ |
||||
/* * Regular Number pad, for the right hand. */ |
||||
/* * 12 Function pad. */ |
||||
/* 3 row pads: */ |
||||
/* keypad */ |
||||
/* function pad */ |
||||
/* */ |
||||
/* LAYERS: */ |
||||
/* 4 Row: */ |
||||
/* * BEAKL with a compact FuncPad on the right. */ |
||||
/* * Funcpad on the left, keypad on the right. */ |
||||
/* 3 Row: */ |
||||
/* * Funcpad on the left, keypad on the right. */ |
||||
/* * BEAKL with a compact FuncPad on the right. */ |
||||
/* */ |
||||
/********************************************************************************/ |
||||
|
||||
// BEAKL 15 (numpad layer):
|
||||
/* +=* ^%~ */ |
||||
/* ↹523: */ |
||||
/* - 7.104 */ |
||||
/* /698, */ |
||||
|
||||
// Keypads
|
||||
#define ___6KEYPAD_BEAKL_L1___ ___, _X_, KC_PLUS, KC_PEQL, KC_ASTR, _X_ |
||||
#define ___6KEYPAD_BEAKL_L2___ ___, TAB_BKTAB, KC_5, KC_2, KC_3, KC_COLON |
||||
#define ___6KEYPAD_BEAKL_L3___ KC_MINS, KC_7, KC_DOT, KC_1, KC_0, KC_4 |
||||
#define ___6KEYPAD_BEAKL_L4___ ___, KC_SLASH, KC_6, KC_9, KC_8, KC_COMM |
||||
|
||||
#define ___5KEYPAD_BEAKL_R1___ ___, KC_CIRC, KC_PERC, KC_TILD, ___ |
||||
|
||||
#define ___6KEYPAD_BEAKL_L1_BP___ ___, _X_, BP_PLUS, BP_EQL, BP_ASTR, _X_ |
||||
#define ___6KEYPAD_BEAKL_L2_BP___ ___, TAB_BKTAB, BP_5, BP_2, BP_3, BP_COLN |
||||
#define ___6KEYPAD_BEAKL_L3_BP___ BP_MINS, BP_7, BP_DOT, BP_1, BP_0, BP_4 |
||||
#define ___6KEYPAD_BEAKL_L4_BP___ ___, BP_SLSH, BP_6, BP_9, BP_8, BP_COMM |
||||
|
||||
#define ___5KEYPAD_BEAKL_R1_BP___ ___, BP_CIRC, BP_PERC, BP_TILD, ___ |
||||
|
||||
#define ___5KEYPAD_1___ _X_, KC_7, KC_8, KC_9, KC_PSLS |
||||
#define ___5KEYPAD_2___ _X_, KC_4, KC_5, KC_6, KC_PAST |
||||
#define ___5KEYPAD_3___ _X_, KC_1, KC_2, KC_3, KC_PMNS |
||||
#define ___5KEYPAD_4___ _X_, KC_0, KC_DOT, KC_PEQL, KC_PPLS |
||||
// For Bepo
|
||||
#define ___5KEYPAD_1_BP___ _X_, DB_7, DB_8, DB_9, BP_SLSH |
||||
#define ___5KEYPAD_2_BP___ _X_, DB_4, DB_5, DB_6, BP_ASTR |
||||
#define ___5KEYPAD_3_BP___ _X_, DB_1, DB_2, DB_3, DB_MINUS |
||||
#define ___5KEYPAD_4_BP___ _X_, DB_0, DB_DOT, DB_EQL, BP_PLUS |
||||
|
||||
// Keypad from the default keymap.c of the xd75
|
||||
#define ___4KEYPAD_1_ALT___ _X_, KC_P7, KC_P8, KC_P9, KC_MINS |
||||
#define ___4KEYPAD_2_ALT___ _X_, KC_P4, KC_P5, KC_P6, KC_PLUS |
||||
#define ___4KEYPAD_3_ALT___ _X_, KC_P1, KC_P2, KC_P3, KC_PENT |
||||
#define ___4KEYPAD_4_ALT___ _X_, KC_P0, KC_DOT, KC_PENT, KC_PENT |
||||
|
||||
// Function pad. Same idea as above, but for function keys.
|
||||
// For the left side.
|
||||
#define ___5FUNCPAD_T___ _X_, KC_F10, KC_F11, KC_F12, _X_ |
||||
#define ___5FUNCPAD_1___ _X_, KC_F7, KC_F8, KC_F9, _X_ |
||||
#define ___5FUNCPAD_2___ _X_, KC_F4, KC_F5, KC_F6, _X_ |
||||
#define ___5FUNCPAD_3___ _X_, KC_F1, KC_F2, KC_F3, _X_ |
||||
|
||||
|
||||
// Put them together for complete left and right layers.
|
||||
// Beakl keypad with a funcpad
|
||||
#define ___12_KEYPAD_BKL_FUNCPAD_1___ ___6KEYPAD_BEAKL_L1___, _X_, ___5KEYPAD_BEAKL_R1___ |
||||
#define ___12_KEYPAD_BKL_FUNCPAD_2___ ___6KEYPAD_BEAKL_L2___, _X_, ___5_FUNCPADC_1___ |
||||
#define ___12_KEYPAD_BKL_FUNCPAD_3___ ___6KEYPAD_BEAKL_L3___, _X_, ___5_FUNCPADC_2___ |
||||
#define ___12_KEYPAD_BKL_FUNCPAD_4___ ___6KEYPAD_BEAKL_L4___, _X_, ___5_FUNCPADC_3___ |
||||
|
||||
#define ___12_KEYPAD_BKL_FUNCPAD_1_BP___ ___6KEYPAD_BEAKL_L1_BP___, _X_, ___5KEYPAD_BEAKL_R1_BP___ |
||||
#define ___12_KEYPAD_BKL_FUNCPAD_2_BP___ ___6KEYPAD_BEAKL_L2_BP___, _X_, ___5_FUNCPADC_1___ |
||||
#define ___12_KEYPAD_BKL_FUNCPAD_3_BP___ ___6KEYPAD_BEAKL_L3_BP___, _X_, ___5_FUNCPADC_2___ |
||||
#define ___12_KEYPAD_BKL_FUNCPAD_4_BP___ ___6KEYPAD_BEAKL_L4_BP___, _X_, ___5_FUNCPADC_3___ |
||||
|
||||
// Funcpad and keypad layer for Qwerty based layers.
|
||||
#define ___12_FUNCPAD_KEYPAD_1___ ___, ___5FUNCPAD_T___, ___5KEYPAD_1___, ___ |
||||
#define ___12_FUNCPAD_KEYPAD_2___ ___, ___5FUNCPAD_1___, ___5KEYPAD_2___, ___ |
||||
#define ___12_FUNCPAD_KEYPAD_3___ ___, ___5FUNCPAD_2___, ___5KEYPAD_3___, KC_PENT |
||||
#define ___12_FUNCPAD_KEYPAD_4___ ___, ___5FUNCPAD_3___, ___5KEYPAD_4___, ___ |
||||
|
||||
// Funcpad and keypad layer for BEPO
|
||||
#define ___12_FUNCPAD_KEYPAD_BP_1___ ___, ___5FUNCPAD_T_BP___, ___5KEYPAD_1_BP___, ___ |
||||
#define ___12_FUNCPAD_KEYPAD_BP_2___ ___, ___5FUNCPAD_1_BP___, ___5KEYPAD_2_BP___, ___ |
||||
#define ___12_FUNCPAD_KEYPAD_BP_3___ ___, ___5FUNCPAD_2_BP___, ___5KEYPAD_3_BP___, KC_PENT |
||||
#define ___12_FUNCPAD_KEYPAD_BP_4___ ___, ___5FUNCPAD_3_BP___, ___5KEYPAD_4_BP___, ___ |
||||
|
||||
/********************************************************************************/ |
||||
/* COMPACT - KEYPAD and FUNCPAD. 3 Rows. */ |
||||
/********************************************************************************/ |
||||
// Compact versions of each. 3 rows.
|
||||
//Compact keypad, 3 rows.
|
||||
#define ___6KEYPADC_1___ ___, KC_7, KC_8, KC_9, KC_PSLS, ___ |
||||
#define ___6KEYPADC_2___ KC_DOT, KC_4, KC_5, KC_6, KC_PAST, KC_PEQL |
||||
#define ___6KEYPADC_3___ KC_0, KC_1, KC_2, KC_3, KC_PMNS, KC_PPLS |
||||
// For Bepo
|
||||
#define ___6KEYPADC_1_BP___ ___, DB_7, DB_8, DB_9, BP_SLSH |
||||
#define ___6KEYPADC_2_BP___ DB_DOT, DB_4, DB_5, DB_6, BP_ASTR, DB_EQL |
||||
#define ___6KEYPADC_3_BP___ DB_0, DB_1, DB_2, DB_3, DB_MINUS, DB_PLUS |
||||
|
||||
// compact 1-12 funcpad for 3 row keyboards.
|
||||
#define ___5_FUNCPADC_1___ KC_F9, KC_F10, KC_F11, KC_F12, ___ |
||||
#define ___5_FUNCPADC_2___ KC_F5, KC_F6, KC_F7, KC_F8, ___ |
||||
#define ___5_FUNCPADC_3___ KC_F1, KC_F2, KC_F3, KC_F4, ___ |
||||
|
||||
// Compact funcpads/keypad Layer
|
||||
#define ___12_KP_1C___ ___, ___5_FUNCPADC_1___, ___5KEYPAD_1___, ___ |
||||
#define ___12_KP_2C___ ___, ___5_FUNCPADC_2___, ___5KEYPAD_2___, ___ |
||||
#define ___12_KP_3C___ ___, ___5_FUNCPADC_3___, ___5KEYPAD_3___, ___ |
||||
// Reversed
|
||||
#define ___12_KP_FP_1C___ ___, ___5KEYPAD_1___, ___5_FUNCPADC_1___, ___ |
||||
#define ___12_KP_FP_2C___ ___, ___5KEYPAD_2___, ___5_FUNCPADC_2___, ___ |
||||
#define ___12_KP_FP_3C___ ___, ___5KEYPAD_3___, ___5_FUNCPADC_3___, ___ |
||||
|
||||
//Bepo funcpad and keypad Layer
|
||||
#define ___12_KP_1_BP___ ___, ___5_FUNCPADC_1___, ___5KEYPAD_1_BP___, ___ |
||||
#define ___12_KP_2_BP___ ___, ___5_FUNCPADC_2___, ___5KEYPAD_2_BP___, ___ |
||||
#define ___12_KP_3_BP___ ___, ___5_FUNCPADC_3___, ___5KEYPAD_3_BP___, ___ |
||||
|
||||
/********************************************************************************/ |
||||
/* FUNCPAD and Keypad Layer chunks */ |
||||
/********************************************************************************/ |
||||
// Full size, 4x12
|
||||
#define ___KEYPAD_BKL_FUNC_4x12___ \ |
||||
___12_KEYPAD_BKL_FUNCPAD_1___, \
|
||||
___12_KEYPAD_BKL_FUNCPAD_2___, \
|
||||
___12_KEYPAD_BKL_FUNCPAD_3___, \
|
||||
___12_KEYPAD_BKL_FUNCPAD_4___ |
||||
#define ___KEYPAD_BKL_FUNC_BP_4x12___ \ |
||||
___12_KEYPAD_BKL_FUNCPAD_1_BP___, \
|
||||
___12_KEYPAD_BKL_FUNCPAD_2_BP___, \
|
||||
___12_KEYPAD_BKL_FUNCPAD_3_BP___, \
|
||||
___12_KEYPAD_BKL_FUNCPAD_4_BP___ |
||||
#define ___FUNC_KEYPAD_4x12___ \ |
||||
___12_FUNCPAD_KEYPAD_1___, \
|
||||
___12_FUNCPAD_KEYPAD_2___, \
|
||||
___12_FUNCPAD_KEYPAD_3___, \
|
||||
___12_FUNCPAD_KEYPAD_4___ |
||||
#define ___FUNC_KEYPAD_BP_4x12___ \ |
||||
___12_FUNCPAD_KEYPAD_BP_1___, \
|
||||
___12_FUNCPAD_KEYPAD_BP_2___, \
|
||||
___12_FUNCPAD_KEYPAD_BP_3___, \
|
||||
___12_FUNCPAD_KEYPAD_BP_4___ |
||||
|
||||
// Compact, 3x12
|
||||
#define ___KP_C_BKL_FUNC_3x12___ \ |
||||
___12_KEYPAD_BKL_FUNCPAD_2___, \
|
||||
___12_KEYPAD_BKL_FUNCPAD_3___, \
|
||||
___12_KEYPAD_BKL_FUNCPAD_4___ |
||||
#define ___KP_C_BKL_FUNC_BP_3x12___ \ |
||||
___12_KEYPAD_BKL_FUNCPAD_2_BP___, \
|
||||
___12_KEYPAD_BKL_FUNCPAD_3_BP___, \
|
||||
___12_KEYPAD_BKL_FUNCPAD_4_BP___ |
||||
|
||||
#define ___KP_C_3x12___ ___12_KP_1C___, ___12_KP_2C___, ___12_KP_3C___ |
||||
#define ___KP_FP_C_3x12___ ___12_KP_FP_1C___, ___12_KP_FP_2C___, ___12_KP_FP_3C___ |
||||
#define ___KP_C_BP_3x12___ ___12_KP_1_BP___, ___12_KP_2_BP___, ___12_KP_3_BP___ |
||||
|
||||
|
||||
|
||||
/********************************************************************************/ |
||||
/* SYMBOLS. The BEAKL15 Symbol layer with or without additions. */ |
||||
/* */ |
||||
/* Symbol layers: */ |
||||
/* */ |
||||
/* BEAKL symbol layer */ |
||||
/* <$> [_] */ |
||||
/* - \(")# %{=}| ; */ |
||||
/* :*+ &^~ */ |
||||
/* */ |
||||
/* BEAKL Extended symbol layer */ |
||||
/* `<$>' ?[_] */ |
||||
/* - \(")# %{=}| ; */ |
||||
/* @:*+; !&^~/ */ |
||||
/* */ |
||||
/* This layer has replaced my former Symbol pad and Symbols */ |
||||
/* layer. The Sympad was nice, But this incorporates the matching */ |
||||
/* (){}[] that I had and at the same time provides an easily */ |
||||
/* Learnable layer that makes sense. It was also easy to */ |
||||
/* Supplement with new keys that other layouts might need. */ |
||||
/* */ |
||||
/* The first Layer defined is the "Official" version. */ |
||||
/* The second Layer defined only adds to the original by */ |
||||
/* Placing 8 keys in the pinky and index corners */ |
||||
/* at the edges of the, 3x3, BEAKL home Region. */ |
||||
/* */ |
||||
/* Namely these: !?@`'/-; */ |
||||
/* */ |
||||
/* Beakl has these keys in it's base layer which isn't the case */ |
||||
/* for other layouts like dvorak, colemak, etc. */ |
||||
/* */ |
||||
/******************************************************************/ |
||||
|
||||
/******************************************************************/ |
||||
/* Official BEAKL15 Symbol layer. */ |
||||
/* BEAKL 15 (punctuation layer): */ |
||||
/* */ |
||||
/* <$> [_] */ |
||||
/* - \(")# %{=}| ; */ |
||||
/* :*+ &^~ */ |
||||
/******************************************************************/ |
||||
/********************************************************************************/ |
||||
/* The expanded Beakl Symbol Layer */ |
||||
/* */ |
||||
/* Expanded with: !?@`'/-; */ |
||||
/* */ |
||||
/* This insures access to all common symbols, regardless of availabilily on */ |
||||
/* other layers. All the extra characters are added to the pinky and index */ |
||||
/* corners which are empty in the BEAKL symbol layer. */ |
||||
/* */ |
||||
/* Both ; and ' could find their dvorak positions. */ |
||||
/* Analysis showed that only caused pinky overuse. Rotating the symbols around */ |
||||
/* Put better keys on the index finger which showed a huge improvement */ |
||||
/* in efficiency. The same is true of the exclamation point. */ |
||||
/* */ |
||||
/* A: */ |
||||
/* `<$>' ?[_] */ |
||||
/* - \(")# %{=}| ; */ |
||||
/* @:*+; !&^~/ */ |
||||
/* */ |
||||
/* B: */ |
||||
/* With vi bindings /:? and a leader key for vi/emacs.*/ |
||||
/* ; is popular, I use , it's easy in dvorak.: */ |
||||
/* */ |
||||
/* `<$>' ?[_]- */ |
||||
/* - \(")# !{:}/ ; */ |
||||
/* @=*+; %&^~| */ |
||||
/********************************************************************************/ |
||||
// Left
|
||||
#define ___SB_L1___ KC_OCLTGT, KC_DLR, KC_GT |
||||
#define ___SB_L2___ KC_BACKSLASH, KC_OCPRN, KC_OCDQUO, KC_RPRN, KC_HASH |
||||
#define ___SB_L3___ KC_COLON, KC_ASTR, KC_PLUS |
||||
#define ___SB_L3b___ KC_EQL, KC_ASTR, KC_PLUS |
||||
|
||||
// Bepo
|
||||
#define ___SB_L1_BP___ BP_OCLTGT, BP_DLR, DB_GRTR |
||||
#define ___SB_L2_BP___ DB_BACKSLASH, DB_LPRN, BP_OCDQUO, DB_RPRN, DB_HASH |
||||
#define ___SB_L3_BP___ KC_COLON, BP_ASTR, BP_PLUS |
||||
#define ___SB_L3b_BP___ BP_EQL, BP_ASTR, BP_PLUS |
||||
|
||||
// Right
|
||||
#define ___SB_R1___ KC_OCBRC, KC_UNDS, KC_RBRC |
||||
#define ___SB_R2___ KC_PERC, KC_OCCBR, KC_EQL, KC_RCBR, KC_PIPE |
||||
#define ___SB_R3___ KC_AMPR, KC_CIRC, KC_TILD |
||||
|
||||
#define ___SB_R2a___ KC_PERC, KC_OCCBR, KC_EXLM, KC_RCBR, KC_PIPE |
||||
#define ___SB_R2b___ KC_EXLM, KC_OCCBR, KC_COLN, KC_RCBR, KC_SLASH |
||||
|
||||
// Bepo
|
||||
#define ___SB_R1_BP___ BP_OCBRC, BP_UNDS, DB_RBRC |
||||
#define ___SB_R2_BP___ BP_PERC, BP_OCCBR, BP_EQL, DB_RCBR, DB_PIPE |
||||
#define ___SB_R3_BP___ BP_AMPR, DB_CIRC, DB_TILD |
||||
|
||||
#define ___SB_R2a_BP___ BP_PERC, BP_OCCBR, BP_EXLM, DB_RCBR, DB_PIPE |
||||
#define ___SB_R2b_BP___ BP_EXLM, BP_OCCBR, KC_COLON, DB_RCBR, DB_SLASH |
||||
|
||||
// ---------------------------
|
||||
// ---------------------------
|
||||
|
||||
// Square it to 6, Add in the - and ;.
|
||||
#define ___6SYMBOLS_BEAKL_L1___ ___, ___, ___SB_L1___, ___ |
||||
#define ___6SYMBOLS_BEAKL_L2___ KC_MINS, ___SB_L2___ |
||||
#define ___6SYMBOLS_BEAKL_L3___ ___, ___, ___SB_L3___, ___ |
||||
|
||||
#define ___6SYMBOLS_BEAKL_R1___ ___, ___SB_R1___, ___, ___ |
||||
#define ___6SYMBOLS_BEAKL_R2___ ___SB_R2___, KC_SCLN |
||||
#define ___6SYMBOLS_BEAKL_R3___ ___, ___SB_R3___, ___, ___ |
||||
// ---------------------------
|
||||
#define ___6SYMBOLS_BEAKL_L1a___ ___, KC_OCGRV, ___SB_L1___, KC_OCQUOT |
||||
#define ___6SYMBOLS_BEAKL_L2a___ ___6SYMBOLS_BEAKL_L2___ |
||||
#define ___6SYMBOLS_BEAKL_L3a___ ___, KC_AT, ___SB_L3___, KC_SCLN |
||||
|
||||
#define ___6SYMBOLS_BEAKL_R1a___ LSFT(KC_SLASH), ___SB_R1___, KC_MINS, ___ |
||||
#define ___6SYMBOLS_BEAKL_R2a___ ___SB_R2a___, KC_SCLN |
||||
#define ___6SYMBOLS_BEAKL_R3a___ KC_EXLM, ___SB_R3___, KC_SLASH, ___ |
||||
// ---------------------------
|
||||
#define ___6SYMBOLS_BEAKL_L1b___ ___, KC_OCGRV, ___SB_L1___, KC_OCQUOT |
||||
#define ___6SYMBOLS_BEAKL_L2b___ ___6SYMBOLS_BEAKL_L2___ |
||||
#define ___6SYMBOLS_BEAKL_L3b___ ___, KC_AT, ___SB_L3b___, KC_SCLN |
||||
|
||||
#define ___6SYMBOLS_BEAKL_R1b___ ___6SYMBOLS_BEAKL_R1a___ |
||||
#define ___6SYMBOLS_BEAKL_R2b___ ___SB_R2b___, KC_SCLN |
||||
#define ___6SYMBOLS_BEAKL_R3b___ KC_PERC, ___SB_R3___, KC_PIPE, ___ |
||||
|
||||
// ---------------------------
|
||||
// ---------------------------
|
||||
// Bepo
|
||||
#define ___6SYMBOLS_BEAKL_L1_BP___ ___, ___, ___SB_L1_BP___, ___ |
||||
#define ___6SYMBOLS_BEAKL_L2_BP___ BP_MINS, ___SB_L2_BP___ |
||||
#define ___6SYMBOLS_BEAKL_L3_BP___ ___, ___, ___SB_L3_BP___, ___ |
||||
|
||||
#define ___6SYMBOLS_BEAKL_R1_BP___ ___, ___SB_R1_BP___, ___, ___ |
||||
#define ___6SYMBOLS_BEAKL_R2_BP___ ___SB_R2_BP___, BP_SCLN |
||||
#define ___6SYMBOLS_BEAKL_R3_BP___ ___, ___SB_R3_BP___, ___, ___ |
||||
// ---------------------------
|
||||
#define ___6SYMBOLS_BEAKL_L1a_BP___ ___, BP_GRV, ___SB_L1_BP___, BP_AT |
||||
#define ___6SYMBOLS_BEAKL_L2a_BP___ ___6SYMBOLS_BEAKL_L2_BP___ |
||||
#define ___6SYMBOLS_BEAKL_L3a_BP___ ___, BP_AT, ___SB_L3_BP___, BP_SCLN |
||||
|
||||
#define ___6SYMBOLS_BEAKL_R1a_BP___ BP_QUES, ___SB_R1_BP___, BP_MINS, ___ |
||||
#define ___6SYMBOLS_BEAKL_R2a_BP___ ___SB_R2a_BP___, BP_SCLN |
||||
#define ___6SYMBOLS_BEAKL_R3a_BP___ BP_EXLM, ___SB_R3_BP___, BP_SLSH, ___ |
||||
// ---------------------------
|
||||
#define ___6SYMBOLS_BEAKL_L1b_BP___ ___, BP_GRV, ___SB_L1___, BP_OCQUOT |
||||
#define ___6SYMBOLS_BEAKL_L2b_BP___ ___6SYMBOLS_BEAKL_L2_BP___ |
||||
#define ___6SYMBOLS_BEAKL_L3b_BP___ ___, BP_AT, ___SB_L3b_BP___, BP_SCLN |
||||
|
||||
#define ___6SYMBOLS_BEAKL_R1b_BP___ ___, ___SB_R1_BP___, BP_MINS, ___ |
||||
#define ___6SYMBOLS_BEAKL_R2b_BP___ ___SB_R2b_BP___, BP_SCLN |
||||
#define ___6SYMBOLS_BEAKL_R3b_BP___ BP_PERC, ___SB_R3_BP___, BP_PIPE, ___ |
||||
// ---------------------------
|
||||
|
||||
// Some 12 column rows.
|
||||
#define ___12_SYM_BKL_1_BP___ ___6SYMBOLS_BEAKL_L1_BP___, ___6SYMBOLS_BEAKL_R1_BP___ |
||||
#define ___12_SYM_BKL_2_BP___ ___6SYMBOLS_BEAKL_L2_BP___, ___6SYMBOLS_BEAKL_R2_BP___ |
||||
#define ___12_SYM_BKL_3_BP___ ___6SYMBOLS_BEAKL_L3_BP___, ___6SYMBOLS_BEAKL_R3_BP___ |
||||
|
||||
#define ___12_SYM_BKL_1___ ___6SYMBOLS_BEAKL_L1___, ___6SYMBOLS_BEAKL_R1___ |
||||
#define ___12_SYM_BKL_2___ ___6SYMBOLS_BEAKL_L2___, ___6SYMBOLS_BEAKL_R2___ |
||||
#define ___12_SYM_BKL_3___ ___6SYMBOLS_BEAKL_L3___, ___6SYMBOLS_BEAKL_R3___ |
||||
|
||||
// Some 12 column rows.
|
||||
#define ___12_SYM_BKL_A1_BP___ ___6SYMBOLS_BEAKL_L1a_BP___, ___6SYMBOLS_BEAKL_R1a_BP___ |
||||
#define ___12_SYM_BKL_A2_BP___ ___6SYMBOLS_BEAKL_L2a_BP___, ___6SYMBOLS_BEAKL_R2a_BP___ |
||||
#define ___12_SYM_BKL_A3_BP___ ___6SYMBOLS_BEAKL_L3a_BP___, ___6SYMBOLS_BEAKL_R3a_BP___ |
||||
|
||||
#define ___12_SYM_BKL_A1___ ___6SYMBOLS_BEAKL_L1a___, ___6SYMBOLS_BEAKL_R1a___ |
||||
#define ___12_SYM_BKL_A2___ ___6SYMBOLS_BEAKL_L2a___, ___6SYMBOLS_BEAKL_R2a___ |
||||
#define ___12_SYM_BKL_A3___ ___6SYMBOLS_BEAKL_L3a___, ___6SYMBOLS_BEAKL_R3a___ |
||||
|
||||
#define ___12_SYM_BKL_B1_BP___ ___6SYMBOLS_BEAKL_L1b_BP___, ___6SYMBOLS_BEAKL_R1b_BP___ |
||||
#define ___12_SYM_BKL_B2_BP___ ___6SYMBOLS_BEAKL_L2b_BP___, ___6SYMBOLS_BEAKL_R2b_BP___ |
||||
#define ___12_SYM_BKL_B3_BP___ ___6SYMBOLS_BEAKL_L3b_BP___, ___6SYMBOLS_BEAKL_R3b_BP___ |
||||
|
||||
#define ___12_SYM_BKL_B1___ ___6SYMBOLS_BEAKL_L1b___, ___6SYMBOLS_BEAKL_R1b___ |
||||
#define ___12_SYM_BKL_B2___ ___6SYMBOLS_BEAKL_L2b___, ___6SYMBOLS_BEAKL_R2b___ |
||||
#define ___12_SYM_BKL_B3___ ___6SYMBOLS_BEAKL_L3b___, ___6SYMBOLS_BEAKL_R3b___ |
||||
|
||||
/********************************************************************************/ |
||||
/* The BEAKL and BEAKL-A SYMBOL LAYER Chunks */ |
||||
/********************************************************************************/ |
||||
// The Official beakl symbol layer as a chunk, Bepo and Qwerty
|
||||
#define ___SYMB_BEAKL_BP_3x12___ ___12_SYM_BKL_1_BP___, \ |
||||
___12_SYM_BKL_2_BP___, \
|
||||
___12_SYM_BKL_3_BP___ |
||||
|
||||
#define ___SYMB_BEAKL_3x12___ ___12_SYM_BKL_1___, \ |
||||
___12_SYM_BKL_2___, \
|
||||
___12_SYM_BKL_3___ |
||||
|
||||
// Alternate Beakle symbol layer with additional corner symbols.
|
||||
#define ___SYMB_BEAKLA_BP_3x12___ ___12_SYM_BKL_A1_BP___, \ |
||||
___12_SYM_BKL_A2_BP___, \
|
||||
___12_SYM_BKL_A3_BP___ |
||||
|
||||
#define ___SYMB_BEAKLA_3x12___ ___12_SYM_BKL_A1___, \ |
||||
___12_SYM_BKL_A2___, \
|
||||
___12_SYM_BKL_A3___ |
||||
|
||||
#define ___SYMB_BEAKLB_BP_3x12___ ___12_SYM_BKL_B1_BP___, \ |
||||
___12_SYM_BKL_B2_BP___, \
|
||||
___12_SYM_BKL_B3_BP___ |
||||
|
||||
#define ___SYMB_BEAKLB_3x12___ ___12_SYM_BKL_B1___, \ |
||||
___12_SYM_BKL_B2___, \
|
||||
___12_SYM_BKL_B3___ |
||||
|
||||
/********************************************************************************/ |
||||
/* NAVIGATION - MOUSE, Scroll, Buttons, Arrows, Tab, Home, page up/down, End */ |
||||
/* Navigation layers: */ |
||||
/* 3 row Layer */ |
||||
/* 4 Row Layer with repeated and swapped VI arrows, and Scroll wheel. */ |
||||
/********************************************************************************/ |
||||
/* */ |
||||
/* Navigation layer with optional 4th Row.... */ |
||||
/* */ |
||||
/* M = Mouse */ |
||||
/* B = Button */ |
||||
/* W = Wheel */ |
||||
/* AC = Acceleration */ |
||||
/* CCCV = Tap -> Ctrl-C, hold for double tap duration -> Ctrl-V */ |
||||
/* CTCN = Tap -> Ctrl-T, hold for double tap duration -> Ctrl-N */ |
||||
/* CWCQ = Tap -> Ctrl-W, hold for double tap duration -> Ctrl-Q */ |
||||
/* TAB = Tap -> Tab, Double-tap -> Back Tab */ |
||||
/* HOME = Tap -> Home, Double-tap -> End */ |
||||
/* */ |
||||
/* MB5 MB4 MB3 MB2 MB1 MAC0 | CTCN MB1 MB2 MB3 MB4 MB5 */ |
||||
/* TAB MLeft MDown MUp MRight MAC1 | CCCV Left Down UP Right TAB */ |
||||
/* WLeft WDown WUp WRight MAC2 | CWCQ HOME PGDN PGUP END */ |
||||
/* */ |
||||
/* Left Down Up Right CCCV | CCCV MLeft MDown MUp MRight */ |
||||
/* */ |
||||
/********************************************************************************/ |
||||
|
||||
#define ___MOUSE_LDUR___ KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R |
||||
#define ___MWHEEL_LDUR___ KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R |
||||
// really BTN 1, 2, 3, 8, 9 - according to xev.
|
||||
#define ___MOUSE_BTNS_R___ KC_BTN1, KC_BTN3, KC_BTN2, KC_BTN4, KC_BTN5 |
||||
// really BTN 9, 8, 3, 2, 1 - according to xev
|
||||
#define ___MOUSE_BTNS_L___ KC_BTN5, KC_BTN4, KC_BTN2, KC_BTN3, KC_BTN1 |
||||
#define ___MOUSE_ACCL_012___ KC_ACL0, KC_ACL1, KC_ACL2 |
||||
#define ___MACCL___ ___MOUSE_ACCL_012___ |
||||
|
||||
|
||||
#define ___VI_ARROWS___ KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT |
||||
#define ___HOME_PGDN_PGUP_END___ KC_HOME, KC_PGDN, KC_PGUP, KC_END |
||||
|
||||
#define ___6NAV_L_1___ ___MOUSE_BTNS_L___, KC_ACL0 |
||||
#define ___6NAV_L_2___ TAB_BKTAB, ___MOUSE_LDUR___, KC_ACL1 |
||||
#define ___6NAV_L_3___ ___, ___MWHEEL_LDUR___, KC_ACL2 |
||||
#define ___6NAV_L_4___ ___, ___VI_ARROWS___, KC_CCCV |
||||
|
||||
#define ___6NAV_R_1___ KC_CTCN, ___MOUSE_BTNS_R___ |
||||
#define ___6NAV_R_2___ KC_CCCV, ___VI_ARROWS___, TAB_BKTAB |
||||
#define ___6NAV_R_3___ KC_CWCQ, ___HOME_PGDN_PGUP_END___, ___ |
||||
#define ___6NAV_R_4___ KC_CCCV, ___MOUSE_LDUR___, ___ |
||||
|
||||
// compact. Initially for corne. So 3x12 per layer.
|
||||
#define ___12_NAV_1___ ___6NAV_L_1___, ___6NAV_R_1___ |
||||
#define ___12_NAV_2___ ___6NAV_L_2___, ___6NAV_R_2___ |
||||
#define ___12_NAV_3___ ___6NAV_L_3___, ___6NAV_R_3___ |
||||
|
||||
#define ___12_NAV_4___ ___6NAV_L_4___, ___6NAV_R_4___ |
||||
|
||||
/********************************************************************************/ |
||||
/* The Navigation LAYER Chunks */ |
||||
/********************************************************************************/ |
||||
// A Navigation Layer
|
||||
#define ___NAV_3x12___ ___12_NAV_1___, ___12_NAV_2___, ___12_NAV_3___ |
||||
#define ___NAV_4x12___ ___NAV_3x12___, ___12_NAV_4___ |
||||
|
||||
|
||||
/********************************************************************************/ |
||||
/* MEDIA - Mute, Vol, play, pause, stop, next, prev, etc. */ |
||||
/********************************************************************************/ |
||||
#define ___PRV_PLAY_NXT_STOP___ KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP |
||||
#define ___VDN_MUTE_VUP___ KC_VOLD, KC_MUTE, KC_VOLU |
||||
|
||||
#define ___MUTE_PRV_PLAY_NXT_STOP___ KC_MUTE, KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP |
||||
#define ___MUTE_PLAY_STOP___ KC_MUTE, KC_MPLY, KC_MSTP |
||||
|
||||
|
||||
/********************************************************************************/ |
||||
/* RGB - Control those lights. */ |
||||
|
||||
/* ___, HUE SAT_INT MOD (UP), | */ |
||||
/* ___, HUE SAT INT MOD (DOWN), RGB_TOG | P_B_R_SW_SN___, ___ */ |
||||
/* ___6___, | ___, ___RGB_KXGT___, ___ */ |
||||
/********************************************************************************/ |
||||
// RGB FUNCTION Keysets
|
||||
// RGB row for the _FN layer from the redo of the default keymap.c
|
||||
#define ___RGB_HUE_SAT_INT_UP___ RGB_HUI, RGB_SAI, RGB_VAI, RGB_RMOD |
||||
#define ___RGB_HUE_SAT_INT_DN___ RGB_HUD, RGB_SAD, RGB_VAD, RGB_MOD |
||||
#define ___RGB_MODE_PRV_NXT___ RGB_RMOD, RGB_MOD |
||||
#define ___RGB_TOGGLE___ RGB_TOG |
||||
#define ___RGB_P_B_R_SW_SN___ RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN |
||||
#define ___RGB_KXGT___ RGB_M_K, RGB_M_X, RGB_M_G, RGB_M_T |
||||
|
||||
/// An RGB Layer
|
||||
#define ___12_RGB_1___ ___, ___RGB_HUE_SAT_INT_UP___, ___, ___6___ |
||||
#define ___12_RGB_2___ ___, ___RGB_HUE_SAT_INT_DN___, RGB_TOG, ___RGB_P_B_R_SW_SN___, ___ |
||||
#define ___12_RGB_3___ ___6___, ___, ___RGB_KXGT___, ___ |
||||
|
||||
/********************************************************************************/ |
||||
/* The RGB LAYER Chunk */ |
||||
/********************************************************************************/ |
||||
#define ___RGB_3x12___ ___12_RGB_1___, ___12_RGB_2___, ___12_RGB_3___ |
||||
|
||||
|
||||
/********************************************************************************/ |
||||
/* ADJUST - Miscellaneous Melange. */ |
||||
/********************************************************************************/ |
||||
// For an Adjust layer. Like RBB with audio, flash, etc.
|
||||
#define ___6_ADJUST_L1___ KC_MAKE, ___RGB_HUE_SAT_INT_UP___, RGB_TOG |
||||
#define ___6_ADJUST_L2___ VRSN, MU_TOG, CK_TOGG, AU_ON, AU_OFF, CG_NORM |
||||
#define ___6_ADJUST_L3___ MG_NKRO, ___RGB_HUE_SAT_INT_DN___, KC_RGB_T |
||||
|
||||
#define ___6_ADJUST_R1___ ___5___, KC_RESET |
||||
#define ___6_ADJUST_R2___ ___, ___PRV_PLAY_NXT_STOP___, EEP_RST |
||||
#define ___6_ADJUST_R3___ MG_NKRO, ___VDN_MUTE_VUP___, ___, RGB_IDL |
||||
|
||||
/********************************************************************************/ |
||||
/* The Adjust LAYER Chunks */ |
||||
/********************************************************************************/ |
||||
#define ___ADJUST_3x12___ ___6_ADJUST_L1___, ___6_ADJUST_R1___, \ |
||||
___6_ADJUST_L2___, ___6_ADJUST_R2___, \
|
||||
___6_ADJUST_L3___, ___6_ADJUST_R3___ |
||||
|
||||
|
||||
/********************************************************************************/ |
||||
/* LAYERS - Define a base layer, switch to any layer. Get around. Experiment. */ |
||||
/* */ |
||||
/* Base Layers on the left hand, */ |
||||
/* transient layers on the right. Centered on the home region. */ |
||||
/* A good place to attach an experimental layer. */ |
||||
/* */ |
||||
/********************************************************************************/ |
||||
// Base Layers
|
||||
#define ___5_LAYERS_B1___ ___, KC_BEPO, KC_DVORAK_BP, KC_BEAKL_BP, ___ |
||||
#define ___5_LAYERS_B2___ KC_QWERTY, KC_COLEMAK, KC_DVORAK, KC_BEAKL, ___ |
||||
|
||||
#define ___5_LAYERS_B3___ ___, KC_QWERTY, KC_NORMAN, KC_WORKMAN, ___ |
||||
#define ___5_LAYERS_B4___ ___, DF(_MALTRON), DF(_EUCALYN), DF(_CARPLAX), ___ |
||||
|
||||
#define ___5_LAYERS_B1b___ DF(_NORMAN), DF(_MALTRON), DF(_CARPLAX), DF(_COLEMAK), ___ |
||||
#define ___5_LAYERS_B2b___ DF(_EUCALYN), DF(_WORKMAN), DF(_QWERTY), DF(_DVORAK), ___ |
||||
#define ___5_LAYERS_B3b___ ___, DF(_BEAKL), DF(_BEPO), DF(_DVORAK_BP), ___ |
||||
|
||||
// transient layers.
|
||||
#define ___5_LAYERS_T___ ___, MO(_NAV), MO(_SYMB), MO(_KEYPAD), MO(_TOPROWS) |
||||
#define ___5_LAYERS_T_BP___ ___, MO(_NAV), MO(_SYMB_BP), MO(_KEYPAD_BP), MO(_TOPROWS_BP) |
||||
#define ___5_LAYERS_T_CTL___ ___, MO(_RGB), ___, ___, MO(_ADJUST) |
||||
|
||||
|
||||
/// A Layers Layer
|
||||
#define ___12_LAYERS_1___ ___, ___5_LAYERS_B1___, ___5_LAYERS_T_BP___, ___ |
||||
#define ___12_LAYERS_2___ ___, ___5_LAYERS_B2___, ___5_LAYERS_T___, ___ |
||||
#define ___12_LAYERS_3___ KC_SPACETEST, ___5___, ___5_LAYERS_T_CTL___, ___ |
||||
|
||||
/********************************************************************************/ |
||||
/* The LAYERS LAYER Chunk */ |
||||
/********************************************************************************/ |
||||
#define ___LAYERS_3x12___ ___12_LAYERS_1___, ___12_LAYERS_2___, ___12_LAYERS_3___ |
@ -0,0 +1,720 @@ |
||||
#pragma once |
||||
/*
|
||||
Copyright 2018 Eric Gebhart <e.a.gebhart@gmail.com> |
||||
|
||||
This program is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU General Public License as published by |
||||
the Free Software Foundation, either version 2 of the License, or |
||||
(at your option) any later version. |
||||
|
||||
This program is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU General Public License for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License |
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include "core_keysets.h" |
||||
#include "mod_layer.h" |
||||
#include "edge_keys.h" |
||||
|
||||
/******************************************************************/ |
||||
/* This is where I put my Keyboard layouts. */ |
||||
/* The mod layer can be modified in mod_layer.h */ |
||||
/* can be applied here. The physical shape of the keyboard is */ |
||||
/* also accounted for here. This makes it very simple to add a */ |
||||
/* new keyboard and reuse all of my layouts and layers */ |
||||
/* */ |
||||
/* With all of that in hand, we then create a LAYOUT wrapper */ |
||||
/* macro that takes a list of keys, to create a keyboard matrix */ |
||||
/* that fits the keyboard. Simple. */ |
||||
/* */ |
||||
/* The thumb keys, the bottom rows, etc. */ |
||||
/* */ |
||||
/* An attempt has been made to adapt the kinesis and ergodox */ |
||||
/* Thumb keys to the rectangular shapes of the xd75, viterbi, */ |
||||
/* and rebound. */ |
||||
/******************************************************************/ |
||||
|
||||
/******************************************************************/ |
||||
/* * The XD75 is a 5x15 Ortholinear matrix which means it has 3 */ |
||||
/* keys inbetween the usual left and right hand keys */ |
||||
/* * The Viterbi is a split 5x14 Ortholinear with 2 middle keys. */ |
||||
/* * The Ergodox is a split 5x14 Ortholinear with 2 middle keys, */ |
||||
/* thumbkeys. It is missing middle keys on (home) row 3. */ |
||||
/* * The Corne is a split 3x12 with 6 thumb keys. It has no */ |
||||
/* extra middle keys */ |
||||
/* */ |
||||
/******************************************************************/ |
||||
|
||||
|
||||
/******************************************************************/ |
||||
/* In all cases these keyboards are defined in a matrix which is */ |
||||
/* a set of rows. Maybe like so, or not. */ |
||||
/* */ |
||||
/* -------------------------|------------------------ */ |
||||
/* | Left0 | Numbers L | mid|dle0 | numbers R | Right0 | */ |
||||
/* | Left1 | keys0-5 | mid|dle1 | Keys6-10 | Right1 | */ |
||||
/* | Left2 | keys11-15 | mid|dle2 | Keys16-20 | Right2 | */ |
||||
/* | Left3 | keys20-25 | mid|dle3 | Keys25-30 | Right3 | */ |
||||
/* | Row5L | Row5R | */ |
||||
/* | ThumbsL | ThumbsR | */ |
||||
/* -------------------------|------------------------ */ |
||||
|
||||
/* Generally speaking, the keys on the right and left don't change. */ |
||||
/* Neither does the bottom row or the thumbs. Frequently the numbers */ |
||||
/* row is identical across layers. Mostly, we want our Base layers to */ |
||||
/* be predctable. */ |
||||
|
||||
|
||||
// Since our quirky block definitions are basically a list of comma separated
|
||||
// arguments, we need a wrapper in order for these definitions to be
|
||||
// expanded before being used as arguments to the LAYOUT_xxx macro.
|
||||
#if (!defined(LAYOUT) && defined(KEYMAP)) |
||||
#define LAYOUT KEYMAP |
||||
#endif |
||||
|
||||
// every keyboard has it's Layout. We start there and make a var args
|
||||
// out of it.
|
||||
|
||||
#define LVARG_ergodox(...) LAYOUT_ergodox(__VA_ARGS__) |
||||
#define LVARG_edox(...) LAYOUT_ergodox_pretty(__VA_ARGS__) |
||||
#define LAYOUT_VARG(...) LAYOUT(__VA_ARGS__) |
||||
#define LAYOUT_PVARG(...) LAYOUT_pretty(__VA_ARGS__) |
||||
|
||||
#define LVARG_4x12(...) LAYOUT_ortho_4x12(__VA_ARGS__) |
||||
#define LVARG_5x12(...) LAYOUT_ortho_5x12(__VA_ARGS__) |
||||
#define LVARG_5x14(...) LAYOUT_ortho_5x14(__VA_ARGS__) |
||||
#define LVARG_5x15(...) LAYOUT_ortho_5x15(__VA_ARGS__) |
||||
|
||||
/*
|
||||
| Left | Numbers L | middle | numbers R | Right | |
||||
| Left | keys0-5 | middle | Keys6-10 | Right | |
||||
| Left | keys11-15 | middle | Keys16-20 | Right | |
||||
| Left | keys20-25 | middle | Keys25-30 | Right | |
||||
|Row5L Row5R | |
||||
|ThumbsL ThumbsR | |
||||
*/ |
||||
|
||||
/* Assuming that left, midddle, right, row5, and thumbs stay the same, */ |
||||
/* numbers, no numbers, numbers never change, whatever. */ |
||||
/* we can have a layout macro that takes a nice rectangle of keys. */ |
||||
|
||||
/* Actually, because of Bepo, each keyboard currently requires four of */ |
||||
/* these macros. One for Qwerty, One for foreign layouts on bepo like */ |
||||
/* dvorak and beakl on bepo instead of on Qwerty. Then another for the Bepo */ |
||||
/* layout because unlike the rest of the layouts Bepo doesn't fit in */ |
||||
/* 3x10. It wants 3x12. So there are potentially 4 macros per keyboard here. */ |
||||
/* XXXX_base, XXXX_base_bepo, XXXX_base_bepo6, The 4th macro */ |
||||
/* is XXXXX_transient and generally works for all other */ |
||||
/* non base layers. */ |
||||
/* The base and transient versions are all that is necessary, if bepo is */ |
||||
/* not needed. */ |
||||
|
||||
|
||||
/* All layouts are relatively simple to make. */ |
||||
/* The ROW macros add a universal mod layer so that mods can be defined once */ |
||||
/* and used everywhere. No matter the keymap or layer. this allows actual maps */ |
||||
/* like dvorak, qwerty, colemak, beakl, etc., to be defined simply. */ |
||||
|
||||
|
||||
/* Additional, more complicated layouts can be found here.*/ |
||||
/* examples can be found in crkbd/keymaps/ericgebhart */ |
||||
/* examples can be found in kinesis/keymaps/ericgebhart */ |
||||
/* examples can be found in ergodox/keymaps/ericgebhart */ |
||||
/* examples can be found in montsinger/rebound/rev4/keymaps/ericgebhart */ |
||||
|
||||
|
||||
|
||||
/********************************************************************/ |
||||
/* xiudi/xd75 - Ortholinear 5x15 */ |
||||
/********************************************************************/ |
||||
/// These first two base layout templates take sets of 5 keys, left and right.
|
||||
// Using 4 sets allows for changing the number row if you have one.
|
||||
// if you never change the number row, then use 3 sets of left and right.
|
||||
// and define the number row here.
|
||||
#define LAYOUT_5x15_base( \ |
||||
K01, K02, K03, K04, K05, \
|
||||
K06, K07, K08, K09, K0A, \
|
||||
K11, K12, K13, K14, K15, \
|
||||
K16, K17, K18, K19, K1A, \
|
||||
K21, K22, K23, K24, K25, \
|
||||
K26, K27, K28, K29, K2A, \
|
||||
K31, K32, K33, K34, K35, \
|
||||
K36, K37, K38, K39, K3A) \
|
||||
LVARG_5x15( \
|
||||
ROW0_LEFT(K01, K02, K03, K04, K05), \
|
||||
___3_MIDDLE_T___, \
|
||||
ROW0_RIGHT(K06, K07, K08, K09, K0A), \
|
||||
\
|
||||
ROW1_LEFT(K11, K12, K13, K14, K15), \
|
||||
___3_MIDDLE_1___, \
|
||||
ROW1_RIGHT(K16, K17, K18, K19, K1A), \
|
||||
\
|
||||
ROW2_LEFT(K21, K22, K23, K24, K25), \
|
||||
___3_MIDDLE_2___, \
|
||||
ROW2_RIGHT(K26, K27, K28, K29, K2A), \
|
||||
\
|
||||
ROW3_LEFT(K31, K32, K33, K34, K35), \
|
||||
___3_MIDDLE_3___, \
|
||||
ROW3_RIGHT(K36, K37, K38, K39, K3A), \
|
||||
___15_BOTTOM___ \
|
||||
) |
||||
|
||||
#define LAYOUT_5x15_base_bepo( \ |
||||
K01, K02, K03, K04, K05, \
|
||||
K06, K07, K08, K09, K0A, \
|
||||
K11, K12, K13, K14, K15, \
|
||||
K16, K17, K18, K19, K1A, \
|
||||
K21, K22, K23, K24, K25, \
|
||||
K26, K27, K28, K29, K2A, \
|
||||
K31, K32, K33, K34, K35, \
|
||||
K36, K37, K38, K39, K3A) \
|
||||
LVARG_5x15( \
|
||||
ROW0_LEFT_BP(K01, K02, K03, K04, K05), \
|
||||
___3_MIDDLE_T___, \
|
||||
ROW0_RIGHT_BP(K06, K07, K08, K09, K0A), \
|
||||
\
|
||||
ROW1_LEFT_BP(K11, K12, K13, K14, K15), \
|
||||
___3_MIDDLE_1_BP___, \
|
||||
ROW1_RIGHT_BP(K16, K17, K18, K19, K1A), \
|
||||
\
|
||||
ROW2_LEFT_BP(K21, K22, K23, K24, K25), \
|
||||
___3_MIDDLE_2_BP___, \
|
||||
ROW2_RIGHT_BP(K26, K27, K28, K29, K2A), \
|
||||
\
|
||||
ROW3_LEFT_BP(K31, K32, K33, K34, K35), \
|
||||
___3_MIDDLE_3_BP___, \
|
||||
ROW3_RIGHT_BP(K36, K37, K38, K39, K3A), \
|
||||
___15_BOTTOM_BP___ \
|
||||
) |
||||
|
||||
// Just for bepo because it's a 3x6 matrix on each side.
|
||||
// So 3 pairs of 6 keys, left and right.
|
||||
#define Layout_5x15_base_bepo6( \ |
||||
K01, K02, K03, K04, K05, K06, \
|
||||
K07, K08, K09, K0A, K0B, K0C, \
|
||||
K11, K12, K13, K14, K15, K16, \
|
||||
K17, K18, K19, K1A, K1B, K1C, \
|
||||
K21, K22, K23, K24, K25, K26, \
|
||||
K27, K28, K29, K2A, K2B, K2C \
|
||||
) \
|
||||
LVARG_5x15( \
|
||||
___15_B_SYMB___, \
|
||||
ROW1_LEFT_BP6(K01, K02, K03, K04, K05, K06), \
|
||||
___3_MIDDLE_1_BP___, \
|
||||
ROW1_RIGHT_BP6(K07, K08, K09, K0A, K0B, K0C), \
|
||||
\
|
||||
ROW2_LEFT_BP6(K11, K12, K13, K14, K15, K16), \
|
||||
___3_MIDDLE_2___, \
|
||||
ROW2_RIGHT_BP6(K17, K18, K19, K1A, K1B, K1C), \
|
||||
\
|
||||
ROW3_LEFT_BP6(K21, K22, K23, K24, K25, K26), \
|
||||
___3_MIDDLE_3___, \
|
||||
ROW3_RIGHT_BP6(K27, K28, K29, K2A, K2B, K2C), \
|
||||
___15_BOTTOM_BP___ \
|
||||
) |
||||
|
||||
// 4 rows of 12. 3 columns transparent in the middle.
|
||||
#define LAYOUT_5x15_transient( \ |
||||
K01, K02, K03, K04, K05, K06, \
|
||||
K07, K08, K09, K0A, K0B, K0C, \
|
||||
K11, K12, K13, K14, K15, K16, \
|
||||
K17, K18, K19, K1A, K1B, K1C, \
|
||||
K21, K22, K23, K24, K25, K26, \
|
||||
K27, K28, K29, K2A, K2B, K2C, \
|
||||
K31, K32, K33, K34, K35, K36, \
|
||||
K37, K38, K39, K3A, K3B, K3C \
|
||||
) \
|
||||
LVARG_5x15( \
|
||||
K01, K02, K03, K04, K05, K06, \
|
||||
___3___, \
|
||||
K07, K08, K09, K0A, K0B, K0C, \
|
||||
K11, K12, K13, K14, K15, K16, \
|
||||
___3___, \
|
||||
K17, K18, K19, K1A, K1B, K1C, \
|
||||
K21, K22, K23, K24, K25, K26, \
|
||||
___3___, \
|
||||
K27, K28, K29, K2A, K2B, K2C, \
|
||||
K31, K32, K33, K34, K35, K36, \
|
||||
___3___, \
|
||||
K37, K38, K39, K3A, K3B, K3C, \
|
||||
___15___) \
|
||||
|
||||
#define BASE_5x15(...) LAYOUT_5x15_base(__VA_ARGS__) |
||||
#define BASE_5x15_bepo(...) LAYOUT_5x15_base_bepo(__VA_ARGS__) |
||||
#define BASE_5x15_bepo6(...) LAYOUT_5x15_base_bepo6(__VA_ARGS__) |
||||
#define TRANSIENT_5x15(...) LAYOUT_5x15_transient(__VA_ARGS__) |
||||
|
||||
/********************************************************************/ |
||||
|
||||
|
||||
/********************************************************************/ |
||||
/* viterbi - Ortholinear 5x14 */ |
||||
/********************************************************************/ |
||||
#define LAYOUT_5x14_base( \ |
||||
K01, K02, K03, K04, K05, \
|
||||
K06, K07, K08, K09, K0A, \
|
||||
K11, K12, K13, K14, K15, \
|
||||
K16, K17, K18, K19, K1A, \
|
||||
K21, K22, K23, K24, K25, \
|
||||
K26, K27, K28, K29, K2A, \
|
||||
K31, K32, K33, K34, K35, \
|
||||
K36, K37, K38, K39, K3A) \
|
||||
LVARG_5x14( \
|
||||
ROW0_LEFT(K01, K02, K03, K04, K05), \
|
||||
___2_MIDDLE_T___, \
|
||||
ROW0_RIGHT(K06, K07, K08, K09, K0A), \
|
||||
\
|
||||
ROW1_LEFT(K11, K12, K13, K14, K15), \
|
||||
___2_MIDDLE_1___, \
|
||||
ROW1_RIGHT(K16, K17, K18, K19, K1A), \
|
||||
\
|
||||
ROW2_LEFT(K21, K22, K23, K24, K25), \
|
||||
___2_MIDDLE_2___, \
|
||||
ROW2_RIGHT(K26, K27, K28, K29, K2A), \
|
||||
\
|
||||
ROW3_LEFT(K31, K32, K33, K34, K35), \
|
||||
___2_MIDDLE_3___, \
|
||||
ROW3_RIGHT(K36, K37, K38, K39, K3A), \
|
||||
___14_BOTTOM___ \
|
||||
) |
||||
|
||||
#define LAYOUT_5x14_base_bepo( \ |
||||
K01, K02, K03, K04, K05, \
|
||||
K06, K07, K08, K09, K0A, \
|
||||
K11, K12, K13, K14, K15, \
|
||||
K16, K17, K18, K19, K1A, \
|
||||
K21, K22, K23, K24, K25, \
|
||||
K26, K27, K28, K29, K2A, \
|
||||
K31, K32, K33, K34, K35, \
|
||||
K36, K37, K38, K39, K3A) \
|
||||
LVARG_5x14( \
|
||||
ROW0_LEFT_BP(K01, K02, K03, K04, K05), \
|
||||
___2_MIDDLE_T___, \
|
||||
ROW0_RIGHT_BP(K06, K07, K08, K09, K0A), \
|
||||
\
|
||||
ROW1_LEFT_BP(K11, K12, K13, K14, K15), \
|
||||
___2_MIDDLE_1_BP___, \
|
||||
ROW1_RIGHT_BP(K16, K17, K18, K19, K1A), \
|
||||
\
|
||||
ROW2_LEFT_BP(K21, K22, K23, K24, K25), \
|
||||
___2_MIDDLE_2_BP___, \
|
||||
ROW2_RIGHT_BP(K26, K27, K28, K29, K2A), \
|
||||
\
|
||||
ROW3_LEFT_BP(K31, K32, K33, K34, K35), \
|
||||
___2_MIDDLE_3_BP___, \
|
||||
ROW3_RIGHT_BP(K36, K37, K38, K39, K3A), \
|
||||
___14_BOTTOM_BP___ \
|
||||
) |
||||
|
||||
// Just for bepo because it's a 3x6 matrix on each side.
|
||||
// So 3 pairs of 6 keys, left and right.
|
||||
#define LAYOUT_5x14_base_bepo6( \ |
||||
K01, K02, K03, K04, K05, K06, \
|
||||
K07, K08, K09, K0A, K0B, K0C, \
|
||||
K11, K12, K13, K14, K15, K16, \
|
||||
K17, K18, K19, K1A, K1B, K1C, \
|
||||
K21, K22, K23, K24, K25, K26, \
|
||||
K27, K28, K29, K2A, K2B, K2C \
|
||||
) \
|
||||
LVARG_5x14( \
|
||||
___14_B_SYMB___, \
|
||||
ROW1_LEFT_BP6(K01, K02, K03, K04, K05, K06), \
|
||||
___2_MIDDLE_1_BP___, \
|
||||
ROW1_RIGHT_BP6(K07, K08, K09, K0A, K0B, K0C), \
|
||||
\
|
||||
ROW2_LEFT_BP6(K11, K12, K13, K14, K15, K16), \
|
||||
___2_MIDDLE_2___, \
|
||||
ROW2_RIGHT_BP6(K17, K18, K19, K1A, K1B, K1C), \
|
||||
\
|
||||
ROW3_LEFT_BP6(K21, K22, K23, K24, K25, K26), \
|
||||
___2_MIDDLE_3___, \
|
||||
ROW3_RIGHT_BP6(K27, K28, K29, K2A, K2B, K2C), \
|
||||
___14_BOTTOM_BP___ \
|
||||
) |
||||
|
||||
// 4 rows of 12. 2 columns transparent in the middle.
|
||||
#define LAYOUT_5x14_transient( \ |
||||
K01, K02, K03, K04, K05, K06, \
|
||||
K07, K08, K09, K0A, K0B, K0C, \
|
||||
K11, K12, K13, K14, K15, K16, \
|
||||
K17, K18, K19, K1A, K1B, K1C, \
|
||||
K21, K22, K23, K24, K25, K26, \
|
||||
K27, K28, K29, K2A, K2B, K2C, \
|
||||
K31, K32, K33, K34, K35, K36, \
|
||||
K37, K38, K39, K3A, K3B, K3C \
|
||||
) \
|
||||
LVARG_5x14( \
|
||||
K01, K02, K03, K04, K05, K06, \
|
||||
___2___, \
|
||||
K07, K08, K09, K0A, K0B, K0C, \
|
||||
K11, K12, K13, K14, K15, K16, \
|
||||
___2___, \
|
||||
K17, K18, K19, K1A, K1B, K1C, \
|
||||
K21, K22, K23, K24, K25, K26, \
|
||||
___2___, \
|
||||
K27, K28, K29, K2A, K2B, K2C, \
|
||||
K31, K32, K33, K34, K35, K36, \
|
||||
___2___, \
|
||||
K37, K38, K39, K3A, K3B, K3C, \
|
||||
___14___ \
|
||||
) \
|
||||
|
||||
#define BASE_5x14(...) LAYOUT_5x14_base(__VA_ARGS__) |
||||
#define BASE_5x14_bepo(...) LAYOUT_5x14_base_bepo(__VA_ARGS__) |
||||
#define BASE_5x14_bepo6(...) LAYOUT_5x14_base_bepo6(__VA_ARGS__) |
||||
#define TRANSIENT_5x14(...) LAYOUT_5x14_transient(__VA_ARGS__) |
||||
|
||||
/********************************************************************/ |
||||
/* Ortholinear 4x12 */ |
||||
/********************************************************************/ |
||||
#define LAYOUT_4x12_base( \ |
||||
K01, K02, K03, K04, K05, \
|
||||
K06, K07, K08, K09, K0A, \
|
||||
K11, K12, K13, K14, K15, \
|
||||
K16, K17, K18, K19, K1A, \
|
||||
K21, K22, K23, K24, K25, \
|
||||
K26, K27, K28, K29, K2A \
|
||||
) \
|
||||
LVARG_4x12( \
|
||||
ROW1_LEFT(K01, K02, K03, K04, K05), \
|
||||
ROW1_RIGHT(K06, K07, K08, K09, K0A), \
|
||||
\
|
||||
ROW2_LEFT(K11, K12, K13, K14, K15), \
|
||||
ROW2_RIGHT(K16, K17, K18, K19, K1A), \
|
||||
\
|
||||
ROW3_LEFT(K21, K22, K23, K24, K25), \
|
||||
ROW3_RIGHT(K26, K27, K28, K29, K2A), \
|
||||
\
|
||||
___12_BOTTOM___ \
|
||||
) |
||||
|
||||
#define LAYOUT_4x12_base_bepo( \ |
||||
K01, K02, K03, K04, K05, \
|
||||
K06, K07, K08, K09, K0A, \
|
||||
K11, K12, K13, K14, K15, \
|
||||
K16, K17, K18, K19, K1A, \
|
||||
K21, K22, K23, K24, K25, \
|
||||
K26, K27, K28, K29, K2A \
|
||||
) \
|
||||
LVARG_4x12( \
|
||||
ROW1_LEFT_BP(K01, K02, K03, K04, K05), \
|
||||
ROW1_RIGHT_BP(K06, K07, K08, K09, K0A), \
|
||||
\
|
||||
ROW2_LEFT_BP(K11, K12, K13, K14, K15), \
|
||||
ROW2_RIGHT_BP(K16, K17, K18, K19, K1A), \
|
||||
\
|
||||
ROW3_LEFT_BP(K21, K22, K23, K24, K25), \
|
||||
ROW3_RIGHT_BP(K26, K27, K28, K29, K2A), \
|
||||
\
|
||||
___12_BOTTOM_BP___ \
|
||||
) |
||||
|
||||
// Just for bepo because it's a 3x6 matrix on each side.
|
||||
// So 3 pairs of 6 keys, left and right.
|
||||
#define Layout_4x12_base_bepo6( \ |
||||
K01, K02, K03, K04, K05, K06, \
|
||||
K07, K08, K09, K0A, K0B, K0C, \
|
||||
K11, K12, K13, K14, K15, K16, \
|
||||
K17, K18, K19, K1A, K1B, K1C, \
|
||||
K21, K22, K23, K24, K25, K26, \
|
||||
K27, K28, K29, K2A, K2B, K2C \
|
||||
) \
|
||||
LVARG_4x12( \
|
||||
ROW1_LEFT_BP6(K01, K02, K03, K04, K05, K06), \
|
||||
ROW1_RIGHT_BP6(K07, K08, K09, K0A, K0B, K0C), \
|
||||
\
|
||||
ROW2_LEFT_BP6(K11, K12, K13, K14, K15, K16), \
|
||||
ROW2_RIGHT_BP6(K17, K18, K19, K1A, K1B, K1C), \
|
||||
\
|
||||
ROW3_LEFT_BP6(K21, K22, K23, K24, K25, K26), \
|
||||
ROW3_RIGHT_BP6(K27, K28, K29, K2A, K2B, K2C), \
|
||||
___12_BOTTOM_BP___ \
|
||||
) |
||||
|
||||
// takes 3 makes 4 rows of 12.
|
||||
#define LAYOUT_4x12_transient( \ |
||||
K01, K02, K03, K04, K05, K06, \
|
||||
K07, K08, K09, K0A, K0B, K0C, \
|
||||
K11, K12, K13, K14, K15, K16, \
|
||||
K17, K18, K19, K1A, K1B, K1C, \
|
||||
K21, K22, K23, K24, K25, K26, \
|
||||
K27, K28, K29, K2A, K2B, K2C \
|
||||
) \
|
||||
LVARG_4x12( \
|
||||
K01, K02, K03, K04, K05, K06, \
|
||||
K07, K08, K09, K0A, K0B, K0C, \
|
||||
K11, K12, K13, K14, K15, K16, \
|
||||
K17, K18, K19, K1A, K1B, K1C, \
|
||||
K21, K22, K23, K24, K25, K26, \
|
||||
K27, K28, K29, K2A, K2B, K2C, \
|
||||
___12___) \
|
||||
|
||||
#define BASE_4x12(...) LAYOUT_4x12_base(__VA_ARGS__) |
||||
#define BASE_4x12_bepo(...) LAYOUT_4x12_base_bepo(__VA_ARGS__) |
||||
#define BASE_4x12_bepo6(...) LAYOUT_4x12_base_bepo6(__VA_ARGS__) |
||||
#define TRANSIENT_4x12(...) LAYOUT_4x12_transient(__VA_ARGS__) |
||||
|
||||
/********************************************************************/ |
||||
/* CRKBD Corne */ |
||||
/* The Corne has 3x6 matrix on both sides with 6 thumbs total */ |
||||
/* This Macro takes 2x3x5 and gives it pinkies, and thumbs. */ |
||||
/* Arg chunks are in the middle with the passthrough modifiers as */ |
||||
/* needed. Sama Sama apres cette fois. */ |
||||
/********************************************************************/ |
||||
#define Base_3x6_3( \ |
||||
K01, K02, K03, K04, K05, \
|
||||
K06, K07, K08, K09, K0A, \
|
||||
K11, K12, K13, K14, K15, \
|
||||
K16, K17, K18, K19, K1A, \
|
||||
K21, K22, K23, K24, K25, \
|
||||
K26, K27, K28, K29, K2A) \
|
||||
LAYOUT_VARG( \
|
||||
ROW1_LEFT(K01, K02, K03, K04, K05), \
|
||||
ROW1_RIGHT(K06, K07, K08, K09, K0A), \
|
||||
\
|
||||
ROW2_LEFT(K11, K12, K13, K14, K15), \
|
||||
ROW2_RIGHT(K16, K17, K18, K19, K1A), \
|
||||
\
|
||||
ROW3_LEFT(K21, K22, K23, K24, K25), \
|
||||
ROW3_RIGHT(K26, K27, K28, K29, K2A), \
|
||||
___6_ERGO_THUMBS___ \
|
||||
) |
||||
|
||||
// So we can have different transient layers for symbols and numbers on bepo.
|
||||
// for layouts like dvorak on bepo.
|
||||
#define Base_bepo_3x6_3( \ |
||||
K01, K02, K03, K04, K05, \
|
||||
K06, K07, K08, K09, K0A, \
|
||||
K11, K12, K13, K14, K15, \
|
||||
K16, K17, K18, K19, K1A, \
|
||||
K21, K22, K23, K24, K25, \
|
||||
K26, K27, K28, K29, K2A \
|
||||
) \
|
||||
LAYOUT_VARG( \
|
||||
ROW1_LEFT_BP(K01, K02, K03, K04, K05), \
|
||||
ROW1_RIGHT_BP(K06, K07, K08, K09, K0A), \
|
||||
\
|
||||
ROW2_LEFT_BP(K11, K12, K13, K14, K15), \
|
||||
ROW2_RIGHT_BP(K16, K17, K18, K19, K1A), \
|
||||
\
|
||||
ROW3_LEFT_BP(K21, K22, K23, K24, K25), \
|
||||
ROW3_RIGHT_BP(K26, K27, K28, K29, K2A), \
|
||||
___6_ERGO_THUMBS_BP___ \
|
||||
) |
||||
|
||||
// No room for pinkies.
|
||||
// Just for bepo because it's a 3x6 matrix on each side.
|
||||
// So 3 pairs of 6 keys, And we lose our left and right.
|
||||
// Except it keeps the layer toggles along with the keycode
|
||||
// on the bottom.
|
||||
#define Base_bepo6_3x6_3( \ |
||||
K01, K02, K03, K04, K05, K06, \
|
||||
K07, K08, K09, K0A, K0B, K0C, \
|
||||
K11, K12, K13, K14, K15, K16, \
|
||||
K17, K18, K19, K1A, K1B, K1C, \
|
||||
K21, K22, K23, K24, K25, K26, \
|
||||
K27, K28, K29, K2A, K2B, K2C \
|
||||
) \
|
||||
LAYOUT_VARG( \
|
||||
ROW1_LEFT_BP6(K01, K02, K03, K04, K05, K06), \
|
||||
ROW1_RIGHT_BP6(K07, K08, K09, K0A, K0B, K0C), \
|
||||
\
|
||||
ROW2_LEFT_BP6(K11, K12, K13, K14, K15, K16), \
|
||||
ROW2_RIGHT_BP6(K17, K18, K19, K1A, K1B, K1C), \
|
||||
\
|
||||
ROW3_LEFT_BP6(K21, K22, K23, K24, K25, K26), \
|
||||
ROW3_RIGHT_BP6(K27, K28, K29, K2A, K2B, K2C), \
|
||||
___6_ERGO_THUMBS_BP___ \
|
||||
) |
||||
|
||||
// All we really need is to add the see through thumbs to the end.
|
||||
#define Transient6_3x6_3( \ |
||||
K01, K02, K03, K04, K05, K06, \
|
||||
K07, K08, K09, K0A, K0B, K0C, \
|
||||
K11, K12, K13, K14, K15, K16, \
|
||||
K17, K18, K19, K1A, K1B, K1C, \
|
||||
K21, K22, K23, K24, K25, K26, \
|
||||
K27, K28, K29, K2A, K2B, K2C \
|
||||
) \
|
||||
LAYOUT_VARG( \
|
||||
K01, K02, K03, K04, K05, K06, \
|
||||
K07, K08, K09, K0A, K0B, K0C, \
|
||||
K11, K12, K13, K14, K15, K16, \
|
||||
K17, K18, K19, K1A, K1B, K1C, \
|
||||
K21, K22, K23, K24, K25, K26, \
|
||||
K27, K28, K29, K2A, K2B, K2C, \
|
||||
___6___) |
||||
|
||||
//---------------------------------------------------------
|
||||
// 3x5
|
||||
#define Base_3x5_3( \ |
||||
K01, K02, K03, K04, K05, \
|
||||
K06, K07, K08, K09, K0A, \
|
||||
K11, K12, K13, K14, K15, \
|
||||
K16, K17, K18, K19, K1A, \
|
||||
K21, K22, K23, K24, K25, \
|
||||
K26, K27, K28, K29, K2A) \
|
||||
LAYOUT_VARG( \
|
||||
ROW1_LEFT5(K01, K02, K03, K04, K05), \
|
||||
ROW1_RIGHT5(K06, K07, K08, K09, K0A), \
|
||||
\
|
||||
ROW2_LEFT5(K11, K12, K13, K14, K15), \
|
||||
ROW2_RIGHT5(K16, K17, K18, K19, K1A), \
|
||||
\
|
||||
ROW3_LEFT5(K21, K22, K23, K24, K25), \
|
||||
ROW3_RIGHT5(K26, K27, K28, K29, K2A), \
|
||||
___6_ERGO_THUMBS___ \
|
||||
) |
||||
|
||||
// So we can have different transient layers for symbols and numbers on bepo.
|
||||
// for layouts like dvorak on bepo.
|
||||
#define Base_bepo_3x5_3( \ |
||||
K01, K02, K03, K04, K05, \
|
||||
K06, K07, K08, K09, K0A, \
|
||||
K11, K12, K13, K14, K15, \
|
||||
K16, K17, K18, K19, K1A, \
|
||||
K21, K22, K23, K24, K25, \
|
||||
K26, K27, K28, K29, K2A \
|
||||
) \
|
||||
LAYOUT_VARG( \
|
||||
ROW1_LEFT5_BP(K01, K02, K03, K04, K05), \
|
||||
ROW1_RIGHT5_BP(K06, K07, K08, K09, K0A), \
|
||||
\
|
||||
ROW2_LEFT5_BP(K11, K12, K13, K14, K15), \
|
||||
ROW2_RIGHT5_BP(K16, K17, K18, K19, K1A), \
|
||||
\
|
||||
ROW3_LEFT5_BP(K21, K22, K23, K24, K25), \
|
||||
ROW3_RIGHT5_BP(K26, K27, K28, K29, K2A), \
|
||||
___6_ERGO_THUMBS_BP___ \
|
||||
) |
||||
|
||||
// All we really need is to add the see through thumbs to the end.
|
||||
#define Transient5_3x5_3( \ |
||||
K01, K02, K03, K04, K05, \
|
||||
K07, K08, K09, K0A, K0B, \
|
||||
K11, K12, K13, K14, K15, \
|
||||
K17, K18, K19, K1A, K1B, \
|
||||
K21, K22, K23, K24, K25, \
|
||||
K27, K28, K29, K2A, K2B \
|
||||
) \
|
||||
LAYOUT_VARG( \
|
||||
K01, K02, K03, K04, K05, \
|
||||
K07, K08, K09, K0A, K0B, \
|
||||
K11, K12, K13, K14, K15, \
|
||||
K17, K18, K19, K1A, K1B, \
|
||||
K21, K22, K23, K24, K25, \
|
||||
K27, K28, K29, K2A, K2B, \
|
||||
___6___) |
||||
|
||||
/********************************************************************/ |
||||
/* Kinesis*/ |
||||
/********************************************************************/ |
||||
// Basically an ergodox ez without the 3 pairs of middle keys.
|
||||
// Left, right, bottom, and thumbs all stay the same.
|
||||
#define Base_4x6_4_6( \ |
||||
K01, K02, K03, K04, K05, \
|
||||
K06, K07, K08, K09, K0A, \
|
||||
K11, K12, K13, K14, K15, \
|
||||
K16, K17, K18, K19, K1A, \
|
||||
K21, K22, K23, K24, K25, \
|
||||
K26, K27, K28, K29, K2A, \
|
||||
K31, K32, K33, K34, K35, \
|
||||
K36, K37, K38, K39, K3A \
|
||||
) \
|
||||
LAYOUT_PVARG( \
|
||||
___KINTFUNC_L___, ___KINTFUNC_R___, \
|
||||
ROW0_LEFT(K01, K02, K03, K04, K05), \
|
||||
ROW0_RIGHT(K06, K07, K08, K09, K0A), \
|
||||
\
|
||||
ROW1_LEFT(K11, K12, K13, K14, K15), \
|
||||
ROW1_RIGHT(K16, K17, K18, K19, K1A), \
|
||||
\
|
||||
ROW2_LEFT(K21, K22, K23, K24, K25), \
|
||||
ROW2_RIGHT(K26, K27, K28, K29, K2A), \
|
||||
\
|
||||
ROW3_LEFT(K31, K32, K33, K34, K35), \
|
||||
ROW3_RIGHT(K36, K37, K38, K39, K3A), \
|
||||
___4_BOTTOM_LEFT___, ___4_BOTTOM_RIGHT___, \
|
||||
___12_DOX_ALL_THUMBS___ \
|
||||
) |
||||
|
||||
#define Base_bepo_4x6_4_6( \ |
||||
K01, K02, K03, K04, K05, \
|
||||
K06, K07, K08, K09, K0A, \
|
||||
K11, K12, K13, K14, K15, \
|
||||
K16, K17, K18, K19, K1A, \
|
||||
K21, K22, K23, K24, K25, \
|
||||
K26, K27, K28, K29, K2A, \
|
||||
K31, K32, K33, K34, K35, \
|
||||
K36, K37, K38, K39, K3A \
|
||||
) \
|
||||
LAYOUT_PVARG( \
|
||||
___KINTFUNC_L___, ___KINTFUNC_R___, \
|
||||
ROW0_LEFT(K01, K02, K03, K04, K05), \
|
||||
ROW0_RIGHT(K06, K07, K08, K09, K0A), \
|
||||
\
|
||||
ROW1_LEFT(K11, K12, K13, K14, K15), \
|
||||
ROW1_RIGHT(K16, K17, K18, K19, K1A), \
|
||||
\
|
||||
ROW2_LEFT(K21, K22, K23, K24, K25), \
|
||||
ROW2_RIGHT(K26, K27, K28, K29, K2A), \
|
||||
\
|
||||
ROW3_LEFT(K31, K32, K33, K34, K35), \
|
||||
ROW3_RIGHT(K36, K37, K38, K39, K3A), \
|
||||
___4_BOTTOM_LEFT___, ___4_BOTTOM_RIGHT___, \
|
||||
___12_DOX_ALL_THUMBS_BP___ \
|
||||
) |
||||
|
||||
|
||||
// So 3 pairs of 6 keys, left and right.
|
||||
#define Base_bepo6_4x6_4_6( \ |
||||
K01, K02, K03, K04, K05, K06, \
|
||||
K07, K08, K09, K0A, K0B, K0C, \
|
||||
K11, K12, K13, K14, K15, K16, \
|
||||
K17, K18, K19, K1A, K1B, K1C, \
|
||||
K21, K22, K23, K24, K25, K26, \
|
||||
K27, K28, K29, K2A, K2B, K2C \
|
||||
) \
|
||||
LAYOUT_PVARG( \
|
||||
___KINTFUNC_L___, ___KINTFUNC_R___, \
|
||||
___6SYMBOL_BEPO_L___, \
|
||||
___6SYMBOL_BEPO_R___, \
|
||||
ROW1_LEFT_BP6(K01, K02, K03, K04, K05, K06), \
|
||||
ROW1_RIGHT_BP6(K07, K08, K09, K0A, K0B, K0C), \
|
||||
\
|
||||
ROW2_LEFT_BP6(K11, K12, K13, K14, K15, K16), \
|
||||
ROW2_RIGHT_BP6(K17, K18, K19, K1A, K1B, K1C), \
|
||||
\
|
||||
ROW3_LEFT_BP6(K21, K22, K23, K24, K25, K26), \
|
||||
ROW3_RIGHT_BP6(K27, K28, K29, K2A, K2B, K2C), \
|
||||
___4_BOTTOM_LEFT_BP___, ___4_BOTTOM_RIGHT_BP___, \
|
||||
___12_DOX_ALL_THUMBS_BP___ \
|
||||
) |
||||
|
||||
#define Transient6_4x6_4_6( \ |
||||
K01, K02, K03, K04, K05, K06, \
|
||||
K07, K08, K09, K0A, K0B, K0C, \
|
||||
K11, K12, K13, K14, K15, K16, \
|
||||
K17, K18, K19, K1A, K1B, K1C, \
|
||||
K21, K22, K23, K24, K25, K26, \
|
||||
K27, K28, K29, K2A, K2B, K2C, \
|
||||
K31, K32, K33, K34, K35, K36, \
|
||||
K37, K38, K39, K3A, K3B, K3C \
|
||||
) \
|
||||
LAYOUT_PVARG( \
|
||||
___KINTFUNC_L___, ___KINTFUNC_R___, \
|
||||
K01, K02, K03, K04, K05, K06, \
|
||||
K07, K08, K09, K0A, K0B, K0C, \
|
||||
K11, K12, K13, K14, K15, K16, \
|
||||
K17, K18, K19, K1A, K1B, K1C, \
|
||||
K21, K22, K23, K24, K25, K26, \
|
||||
K27, K28, K29, K2A, K2B, K2C, \
|
||||
K31, K32, K33, K34, K35, K36, \
|
||||
K37, K38, K39, K3A, K3B, K3C, \
|
||||
___4___, ___4___, \
|
||||
___12___ \
|
||||
) |
@ -0,0 +1,178 @@ |
||||
#pragma once |
||||
|
||||
/*
|
||||
Copyright 2018 Eric Gebhart <e.a.gebhart@gmail.com> |
||||
|
||||
This program is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU General Public License as published by |
||||
the Free Software Foundation, either version 2 of the License, or |
||||
(at your option) any later version. |
||||
|
||||
This program is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU General Public License for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License |
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
// define our rows for the mod layer
|
||||
// takes 5 keycodes, adds mods, and left and right
|
||||
// so we get keycodes in groups of 6.
|
||||
// There are 3 sets of 4 rows.
|
||||
// 1 for normal 6 columns, qwerty, dvorak etc.
|
||||
// 1 for bepo/normal 6 columns, qwerty, dvorak etc. on bepo.
|
||||
// 1 for bepo 6 columns provided instead of a 5, for bepo which needs 3x12.
|
||||
// A 5 column keyboard would need another set of MACROS.
|
||||
|
||||
// These macros are used in the layout wrapper macros to introduce a mod
|
||||
// layer. HomeRow mods and other things like that go here.
|
||||
|
||||
|
||||
#include "core_keys.h" |
||||
|
||||
//number row.
|
||||
#define ROW0_LEFT(K01, K02, K03, K04, K05) \ |
||||
LEFT0, K01, K02, K03, K04, K05 |
||||
|
||||
#define ROW0_RIGHT(K01, K02, K03, K04, K05) \ |
||||
K01, K02, K03, K04, K05, RIGHT0 |
||||
|
||||
#define ROW1_LEFT(K01, K02, K03, K04, K05) \ |
||||
LEFT1, K01, K02, K03, LT(_NAV, K04), K05 |
||||
|
||||
#define ROW1_RIGHT(K01, K02, K03, K04, K05) \ |
||||
K01, K02, K03, K04, K05, RIGHT1 |
||||
|
||||
// home row, shift, alt, ctl, gui - gui, ctl, alt, shift.
|
||||
// using MT so we can specify left and right.
|
||||
// caps_word needs left and right shift.
|
||||
#define ROW2_LEFT(K01, K02, K03, K04, K05) \ |
||||
LEFT2, MT(MOD_LSFT, K01), MT(MOD_LALT, K02), MT(MOD_LCTL, K03), MT(MOD_LGUI, K04), K05 |
||||
|
||||
#define ROW2_RIGHT(K01, K02, K03, K04, K05) \ |
||||
K01, MT(MOD_RGUI, K02), MT(MOD_RCTL, K03), MT(MOD_RALT, K04), MT(MOD_RSFT, K05), RIGHT2 \
|
||||
|
||||
#define ROW3_LEFT(K01, K02, K03, K04, K05) \ |
||||
LEFT3, K01, LT(_TOPROWS, K02), K03, LT(_SYMB, K04), K05 |
||||
|
||||
#define ROW3_RIGHT(K01, K02, K03, K04, K05) \ |
||||
K01, LT(_SYMB, K02), LT(_NAV, K03), LT(_TOPROWS, K04), K05, RIGHT3 |
||||
|
||||
|
||||
//-----------------------------------------------y
|
||||
// For a 5 column keyboard - no edges added.
|
||||
//number row.
|
||||
#define ROW0_LEFT5(K01, K02, K03, K04, K05) \ |
||||
K01, K02, K03, K04, K05 |
||||
|
||||
#define ROW0_RIGHT5(K01, K02, K03, K04, K05) \ |
||||
K01, K02, K03, K04, K05 |
||||
|
||||
#define ROW1_LEFT5(K01, K02, K03, K04, K05) \ |
||||
LT(_LAYERS, K01), K02, LT(_KEYPAD, K03), K04, K05 |
||||
|
||||
#define ROW1_RIGHT5(K01, K02, K03, K04, K05) \ |
||||
K01, K02, LT(_KEYPAD, K03), K04, LT(_LAYERS, K05) |
||||
|
||||
// home row, shift, alt, ctl, gui - gui, ctl, alt, shift.
|
||||
// using MT so we can specify left and right.
|
||||
// caps_word needs left and right shift.
|
||||
#define ROW2_LEFT5(K01, K02, K03, K04, K05) \ |
||||
MT(MOD_LSFT, K01), MT(MOD_LALT, K02), MT(MOD_LCTL, K03), MT(MOD_LGUI, K04), K05 |
||||
|
||||
#define ROW2_RIGHT5(K01, K02, K03, K04, K05) \ |
||||
K01, MT(MOD_RGUI, K02), MT(MOD_RCTL, K03), MT(MOD_RALT, K04), MT(MOD_RSFT, K05) |
||||
|
||||
#define ROW3_LEFT5(K01, K02, K03, K04, K05) \ |
||||
K01, LT(_TOPROWS, K02), LT(_NAV, K03), LT(_SYMB, K04), K05 |
||||
|
||||
#define ROW3_RIGHT5(K01, K02, K03, K04, K05) \ |
||||
K01, LT(_SYMB, K02), LT(_NAV, K03), LT(_TOPROWS, K04), K05 |
||||
|
||||
|
||||
//--------------------------------------------
|
||||
//bepo
|
||||
#define ROW0_LEFT_BP(K01, K02, K03, K04, K05) \ |
||||
LEFT0_BP, K01, K02, K03, K04, K05 |
||||
|
||||
#define ROW0_RIGHT_BP(K01, K02, K03, K04, K05) \ |
||||
K01, K02, K03, K04, K05, RIGHT0_BP |
||||
|
||||
#define ROW1_LEFT_BP(K01, K02, K03, K04, K05) \ |
||||
LEFT1_BP, K01, K02, K03, LT(_KEYPAD, K04), K05 |
||||
|
||||
#define ROW1_RIGHT_BP(K01, K02, K03, K04, K05) \ |
||||
K01, K02, LT(_KEYPAD, K03), K04, K05, RIGHT1_BP |
||||
|
||||
#define ROW2_LEFT_BP(K01, K02, K03, K04, K05) \ |
||||
LEFT2_BP, MT(MOD_RSFT, K01), MT(MOD_LALT,K02), MT(MOD_RCTL, K03), \
|
||||
MT(MOD_LGUI, K04), K05 |
||||
|
||||
#define ROW2_RIGHT_BP(K01, K02, K03, K04, K05) \ |
||||
K01, MT(MOD_RGUI, K02), MT(MOD_RCTL, K03), MT(MOD_RALT, K04), \
|
||||
MT(MOD_RSFT, K05), RIGHT2_BP \
|
||||
|
||||
#define ROW3_LEFT_BP(K01, K02, K03, K04, K05) \ |
||||
LEFT3_BP, K01, LT(_SYMB_BP, K02), LT(_NAV, K03), LT(_TOPROWS_BP, K04), K05 |
||||
|
||||
#define ROW3_RIGHT_BP(K01, K02, K03, K04, K05) \ |
||||
K01, LT(_SYMB_BP, K02), LT(_NAV, K03), LT(_TOPROWS_BP, K04), K05, RIGHT3_BP |
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
//bepo - 6 args, no left or right added.
|
||||
#define ROW0_LEFT_BP6(K01, K02, K03, K04, K05, K06) \ |
||||
K01, K02, K03, K04, K05, K06 |
||||
|
||||
#define ROW0_RIGHT_BP6(K01, K02, K03, K04, K05, K06 ) \ |
||||
K01, K02, K03, K04, K05, K06 |
||||
|
||||
#define ROW1_LEFT_BP6(K01, K02, K03, K04, K05, K06) \ |
||||
K01, K02, K03, K04, K05, K06 |
||||
|
||||
#define ROW1_RIGHT_BP6(K01, K02, K03, K04, K05, K06 ) \ |
||||
K01, K02, K03, K04, K05, K06 |
||||
|
||||
#define ROW2_LEFT_BP6(K01, K02, K03, K04, K05, K06) \ |
||||
K01, SFT_T(K02), ALT_T(K03), CTL_T(K04), GUI_T(K05), K06 |
||||
|
||||
#define ROW2_RIGHT_BP6(K01, K02, K03, K04, K05, K06) \ |
||||
K01, GUI_T(K02), RCTL_T(K03), RALT_T(K04), RSFT_T(K05), K06 |
||||
|
||||
#define ROW3_LEFT_BP6(K01, K02, K03, K04, K05, K06) \ |
||||
K01, K02, K03, K04, K05, K06 |
||||
|
||||
#define ROW3_RIGHT_BP6(K01, K02, K03, K04, K05, K06 ) \ |
||||
K01, K02, K03, K04, K05, K06 |
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// For a 5 column keyboard - no edges added.
|
||||
//number row.
|
||||
#define ROW0_LEFT5_BP(K01, K02, K03, K04, K05) \ |
||||
K01, K02, K03, K04, K05 |
||||
|
||||
#define ROW0_RIGHT5_BP(K01, K02, K03, K04, K05) \ |
||||
K01, K02, K03, K04, K05 |
||||
|
||||
#define ROW1_LEFT5_BP(K01, K02, K03, K04, K05) \ |
||||
LT(_LAYERS, K01), K02, K03, LT(_KEYPAD_BP, K04), K05 |
||||
|
||||
#define ROW1_RIGHT5_BP(K01, K02, K03, K04, K05) \ |
||||
K01, LT(_KEYPAD_BP, K02), K03, K04, K05 |
||||
|
||||
// home row, shift, alt, ctl, gui - gui, ctl, alt, shift.
|
||||
// using MT so we can specify left and right.
|
||||
// caps_word needs left and right shift.
|
||||
#define ROW2_LEFT5_BP(K01, K02, K03, K04, K05) \ |
||||
MT(MOD_LSFT, K01), MT(MOD_LALT, K02), MT(MOD_LCTL, K03), MT(MOD_LGUI, K04), K05 |
||||
|
||||
#define ROW2_RIGHT5_BP(K01, K02, K03, K04, K05) \ |
||||
K01, MT(MOD_RGUI, K02), MT(MOD_RCTL, K03), MT(MOD_RALT, K04), MT(MOD_RSFT, K05) |
||||
|
||||
#define ROW3_LEFT5_BP(K01, K02, K03, K04, K05) \ |
||||
K01, LT(_TOPROWS_BP, K02), LT(_NAV, K03), LT(_SYMB_BP, K04), K05 |
||||
|
||||
#define ROW3_RIGHT5_BP(K01, K02, K03, K04, K05) \ |
||||
K01, LT(_SYMB_BP, K02), LT(_NAV, K03), LT(_TOPROWS_BP, K04), K05 |
@ -0,0 +1,303 @@ |
||||
/*
|
||||
Copyright 2018 Eric Gebhart <e.a.gebhart@gmail.com> |
||||
|
||||
This program is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU General Public License as published by |
||||
the Free Software Foundation, either version 2 of the License, or |
||||
(at your option) any later version. |
||||
|
||||
This program is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU General Public License for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License |
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
#include "ericgebhart.h" |
||||
#include <string.h> |
||||
#include <stdio.h> |
||||
|
||||
void oled_render_default_layer_state(void) { |
||||
oled_write_P(PSTR("Layout: "), false); |
||||
switch (get_highest_layer(default_layer_state)) { |
||||
case _QWERTY: |
||||
oled_write_ln_P(PSTR("Qwerty"), false); |
||||
break; |
||||
case _COLEMAK: |
||||
oled_write_ln_P(PSTR("Colemak"), false); |
||||
break; |
||||
case _DVORAK_BP: |
||||
case _DVORAK: |
||||
oled_write_ln_P(PSTR("Dvorak"), false); |
||||
break; |
||||
|
||||
|
||||
/* case _WORKMAN: */ |
||||
// oled_write_ln_P(PSTR("Workman\n"), false);
|
||||
/* break; */ |
||||
/* case _NORMAN: */ |
||||
// oled_write_ln_P(PSTR("Norman\n"), false);
|
||||
/* break; */ |
||||
/* case _MALTRON: */ |
||||
// oled_write_ln_P(PSTR("Maltron\n"), false);
|
||||
/* break; */ |
||||
|
||||
/* case _EUCALYN: */ |
||||
// oled_write_ln_P(PSTR("Eucalyn\n"), false);
|
||||
/* break; */ |
||||
/* case _CARPLAX: */ |
||||
// oled_write_ln_P(PSTR("Carplax\n"), false);
|
||||
/* break; */ |
||||
|
||||
case _BEAKL: |
||||
case _BEAKL_BP: |
||||
oled_write_ln_P(PSTR("Beakl"), false); |
||||
break; |
||||
case _BEPO: |
||||
oled_write_ln_P(PSTR("Bepo"), false); |
||||
break; |
||||
} |
||||
} |
||||
|
||||
void oled_render_layer_state(void) { |
||||
oled_write_P(PSTR("Layer: "), false); |
||||
switch (get_highest_layer(layer_state)) { |
||||
case _NAV: |
||||
oled_write_P(PSTR("Navigation"), false); |
||||
break; |
||||
case _LAYERS: |
||||
oled_write_P(PSTR("Layers"), false); |
||||
break; |
||||
case _RGB: |
||||
oled_write_P(PSTR("RGB"), false); |
||||
break; |
||||
case _TOPROWS: |
||||
case _TOPROWS_BP: |
||||
oled_write_P(PSTR("TopRows"), false); |
||||
break; |
||||
case _SYMB: |
||||
case _SYMB_BP: |
||||
oled_write_P(PSTR("Symbols"), false); |
||||
break; |
||||
case _KEYPAD: |
||||
case _KEYPAD_BP: |
||||
oled_write_P(PSTR("Keypad"), false); |
||||
break; |
||||
case _ADJUST: |
||||
oled_write_P(PSTR("Adjust"), false); |
||||
break; |
||||
} |
||||
oled_write_ln_P(PSTR(" "), false); |
||||
} |
||||
|
||||
// this is part of my answer to a challenge.
|
||||
// My friend Ross thinks that the only use of an oled
|
||||
// is to say which layer.
|
||||
// I think there is more. this is just a beginning.
|
||||
void oled_render_layer_map(void) { |
||||
uint8_t lyr = get_highest_layer(layer_state); |
||||
if (lyr <= _BEPO) { |
||||
switch (get_highest_layer(default_layer_state)) { |
||||
case _QWERTY: |
||||
oled_write_ln_P(PSTR(" qwert yuiop"), false); |
||||
oled_write_ln_P(PSTR(" asdfg hjkl;"), false); |
||||
oled_write_ln_P(PSTR(" zxcvb nm,./"), false); |
||||
break; |
||||
case _COLEMAK: |
||||
oled_write_ln_P(PSTR(" qwfpb jluy;"), false); |
||||
oled_write_ln_P(PSTR(" arstg mneio"), false); |
||||
oled_write_ln_P(PSTR(" zxcdv kh,./"), false); |
||||
break; |
||||
case _DVORAK_BP: |
||||
case _DVORAK: |
||||
oled_write_ln_P(PSTR(" \",.py fgcrl"), false); |
||||
oled_write_ln_P(PSTR(" aoeui dhtns"), false); |
||||
oled_write_ln_P(PSTR(" ;qjkx bmwvz "), false); |
||||
break; |
||||
|
||||
case _BEAKL: |
||||
case _BEAKL_BP: |
||||
oled_write_ln_P(PSTR(" qhoux gcrfz"), false); |
||||
oled_write_ln_P(PSTR(" yiea. dstnb"), false); |
||||
oled_write_ln_P(PSTR(" j/,k' wmlpv"), false); |
||||
break; |
||||
|
||||
case _BEPO: |
||||
oled_write_P(PSTR(" cbe'po`e vdljz %"), false); |
||||
oled_write_P(PSTR(" auie, tsrnmc"), false); |
||||
oled_write_P(PSTR(" e^a'yx.k 'qghfw"), false); |
||||
break; |
||||
} |
||||
|
||||
} else { |
||||
|
||||
switch (lyr) { |
||||
case _TOPROWS: |
||||
case _TOPROWS_BP: |
||||
oled_write_ln_P(PSTR(" !@#$% ^&*()"), false); |
||||
oled_write_ln_P(PSTR(" 40123 76598"), false); |
||||
oled_write_ln_P(PSTR(" F1- -- -F12"), false); |
||||
break; |
||||
|
||||
case _SYMB: |
||||
case _SYMB_BP: |
||||
oled_write_ln_P(PSTR(" `<$>' ?[_]-"), false); |
||||
oled_write_ln_P(PSTR(" -\\(\")# !{:}/;"), false); |
||||
oled_write_ln_P(PSTR(" @=*+; %&^~|"), false); |
||||
break; |
||||
|
||||
case _NAV: |
||||
oled_write_ln_P(PSTR("54321 0 ctn 12345"), false); |
||||
oled_write_ln_P(PSTR(" ldur 1 ccv ldur"), false); |
||||
oled_write_ln_P(PSTR(" ldur 2 cwq hdue"), false); |
||||
break; |
||||
|
||||
case _KEYPAD: |
||||
oled_write_ln_P(PSTR(" 523: F9-F12"), false); |
||||
oled_write_ln_P(PSTR(" -7.104 F5-F8"), false); |
||||
oled_write_ln_P(PSTR(" /698, F1-F4"), false); |
||||
break; |
||||
|
||||
case _LAYERS: |
||||
oled_write_ln_P(PSTR(" Bp Dv Bk|Nv S K TR"), false); |
||||
oled_write_ln_P(PSTR("Q Cl Dv Bk|Nv S K TR"), false); |
||||
oled_write_P(PSTR(" "), false); |
||||
//oled_write_ln_P(PSTR("Ctrls?-> RGB ___ ___ Adjust"), false);
|
||||
break; |
||||
} |
||||
} |
||||
} |
||||
|
||||
void oled_render_keylock_status(uint8_t led_usb_state) { |
||||
oled_write_P(PSTR(" Lock:"), false); |
||||
oled_write_P(PSTR(" "), false); |
||||
oled_write_P(PSTR("N"), led_usb_state & (1 << USB_LED_NUM_LOCK)); |
||||
oled_write_P(PSTR("C"), led_usb_state & (1 << USB_LED_CAPS_LOCK)); |
||||
oled_write_ln_P(PSTR("S"), led_usb_state & (1 << USB_LED_SCROLL_LOCK)); |
||||
} |
||||
|
||||
void oled_render_mod_status(uint8_t modifiers) { |
||||
oled_write_P(PSTR("Mods:"), false); |
||||
oled_write_P(PSTR("S"), (modifiers & MOD_MASK_SHIFT)); |
||||
oled_write_P(PSTR("C"), (modifiers & MOD_MASK_CTRL)); |
||||
oled_write_P(PSTR("A"), (modifiers & MOD_MASK_ALT)); |
||||
oled_write_P(PSTR("G"), (modifiers & MOD_MASK_GUI)); |
||||
} |
||||
|
||||
void oled_render_mod_lock_status(){ |
||||
oled_render_mod_status(get_mods() | get_oneshot_mods()); |
||||
oled_render_keylock_status(host_keyboard_leds()); |
||||
} |
||||
|
||||
|
||||
char mkeylog_str[22] = {}; |
||||
|
||||
const char mcode_to_name[60] = { |
||||
' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f', |
||||
'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', |
||||
'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', |
||||
'1', '2', '3', '4', '5', '6', '7', '8', '9', '0', |
||||
'R', 'E', 'B', 'T', '_', '-', '=', '[', ']', '\\', |
||||
'#', ';', '\'', '`', ',', '.', '/', ' ', ' ', ' '}; |
||||
|
||||
|
||||
void oled_render_keylog(void) { |
||||
oled_write_ln(mkeylog_str, false); |
||||
// sometimes there's an extra row. this is because sometimes it drops
|
||||
// to the last line. and this clears it.
|
||||
oled_write_ln_P(PSTR(" "), false); |
||||
} |
||||
|
||||
|
||||
void add_keylog(uint16_t keycode, keyrecord_t *record) { |
||||
char name = ' '; |
||||
if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) || |
||||
(keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)) { |
||||
keycode = keycode & 0xFF; |
||||
} |
||||
if (keycode < 60) { |
||||
name = mcode_to_name[keycode]; |
||||
} |
||||
|
||||
// update keylog
|
||||
memset(mkeylog_str, ' ', sizeof(mkeylog_str) - 1); |
||||
snprintf(mkeylog_str, sizeof(mkeylog_str), "%dx%d, k%2d : %c", |
||||
record->event.key.row, record->event.key.col, |
||||
keycode, name); |
||||
} |
||||
|
||||
__attribute__((weak)) oled_rotation_t oled_init_keymap(oled_rotation_t rotation) { return rotation; } |
||||
|
||||
oled_rotation_t oled_init_user(oled_rotation_t rotation) { |
||||
|
||||
// for the big screen.
|
||||
#ifdef OLED_DISPLAY_128X64 |
||||
return OLED_ROTATION_180; |
||||
#endif |
||||
|
||||
return oled_init_keymap(rotation); |
||||
} |
||||
|
||||
/* oled_rotation_t oled_init_user(oled_rotation_t rotation) { */ |
||||
/* memset(mkeylog_str, ' ', sizeof(mkeylog_str) - 1); */ |
||||
/* if (is_keyboard_master()) { */ |
||||
/* return OLED_ROTATION_270; */ |
||||
/* } else { */ |
||||
/* return OLED_ROTATION_180; */ |
||||
/* } */ |
||||
/* } */ |
||||
|
||||
bool process_record_user_oled(uint16_t keycode, keyrecord_t *record) { |
||||
if (record->event.pressed) { |
||||
//oled_timer = timer_read32();
|
||||
add_keylog(keycode, record); |
||||
//add_keylog(keycode);
|
||||
} |
||||
return true; |
||||
} |
||||
|
||||
void render_bootmagic_status(bool status) { |
||||
/* Show Ctrl-Gui Swap options */ |
||||
static const char PROGMEM logo[][2][3] = { |
||||
{{0x97, 0x98, 0}, {0xb7, 0xb8, 0}}, |
||||
{{0x95, 0x96, 0}, {0xb5, 0xb6, 0}}, |
||||
}; |
||||
if (status) { |
||||
oled_write_ln_P(logo[0][0], false); |
||||
oled_write_ln_P(logo[0][1], false); |
||||
} else { |
||||
oled_write_ln_P(logo[1][0], false); |
||||
oled_write_ln_P(logo[1][1], false); |
||||
} |
||||
} |
||||
|
||||
|
||||
__attribute__((weak)) void oled_render_logo(void) { |
||||
// clang-format off
|
||||
static const char PROGMEM qmk_logo[] = { |
||||
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94, |
||||
0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4, |
||||
0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,0}; |
||||
// clang-format on
|
||||
oled_write_P(qmk_logo, false); |
||||
} |
||||
|
||||
bool oled_task_user(void) { |
||||
if (is_keyboard_master()) { |
||||
oled_render_mod_lock_status(); |
||||
oled_render_default_layer_state(); |
||||
oled_render_layer_state(); |
||||
#ifdef OLED_DISPLAY_128X64 |
||||
oled_render_layer_map(); |
||||
#endif |
||||
oled_render_keylog(); |
||||
} else { |
||||
oled_render_logo(); |
||||
oled_render_default_layer_state(); |
||||
} |
||||
return(true); |
||||
|
||||
} |
||||
/* oled_render_keylock_status(host_keyboard_leds()); */ |
||||
/* oled_render_mod_status(get_mods() | get_oneshot_mods()); */ |
@ -0,0 +1,24 @@ |
||||
#pragma once |
||||
/*
|
||||
Copyright 2018 Eric Gebhart <e.a.gebhart@gmail.com> |
||||
|
||||
This program is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU General Public License as published by |
||||
the Free Software Foundation, either version 2 of the License, or |
||||
(at your option) any later version. |
||||
|
||||
This program is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU General Public License for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License |
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include "quantum.h" |
||||
#include "oled_driver.h" |
||||
|
||||
void oled_render_mod_lock_status(void); |
||||
void oled_driver_render_logo(void); |
||||
bool process_record_user_oled(uint16_t keycode, keyrecord_t *record); |
@ -0,0 +1,255 @@ |
||||
/*
|
||||
Copyright 2018 Eric Gebhart <e.a.gebhart@gmail.com> |
||||
|
||||
This program is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU General Public License as published by |
||||
the Free Software Foundation, either version 2 of the License, or |
||||
(at your option) any later version. |
||||
|
||||
This program is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU General Public License for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License |
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
#include "ericgebhart.h" |
||||
#include "caps_word.h" |
||||
#include "g/keymap_combo.h" |
||||
|
||||
__attribute__((weak)) bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { return true; } |
||||
|
||||
__attribute__((weak)) bool process_record_secrets(uint16_t keycode, keyrecord_t *record) { return true; } |
||||
|
||||
|
||||
uint16_t tap_taplong_timer; |
||||
|
||||
inline void tap_taplong(uint16_t kc1, uint16_t kc2, keyrecord_t *record) { |
||||
if (record->event.pressed) { |
||||
tap_taplong_timer = timer_read(); |
||||
} else { |
||||
if (timer_elapsed(tap_taplong_timer) > TAPPING_TERM) { |
||||
tap_code16(kc2); |
||||
} else { |
||||
tap_code16(kc1); |
||||
} |
||||
} |
||||
} |
||||
|
||||
/* for (){}[]""''<>``. tap for open. Hold for open and close, ending inbetween. */ |
||||
/* Assumes a one character length. */ |
||||
inline void open_openclose(uint16_t kc1, uint16_t kc2, keyrecord_t *record) { |
||||
if (record->event.pressed) { |
||||
tap_taplong_timer = timer_read(); |
||||
}else{ |
||||
if (timer_elapsed(tap_taplong_timer) > TAPPING_TERM) { |
||||
tap_code16(kc1); |
||||
tap_code16(kc2); |
||||
tap_code16(KC_LEFT); |
||||
} else { |
||||
tap_code16(kc1); |
||||
} |
||||
} |
||||
} |
||||
|
||||
// Defines actions for my global custom keycodes. Defined in ericgebhart.h file
|
||||
// Then runs the _keymap's record handier if not processed here
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) { |
||||
// If console is enabled, it will print the matrix position and status of each key pressed
|
||||
|
||||
#ifdef OLED_ENABLE |
||||
process_record_user_oled(keycode, record); |
||||
#endif // OLED
|
||||
|
||||
if (!process_caps_word(keycode, record)) { return false; } |
||||
|
||||
if (process_record_keymap(keycode, record) && process_record_secrets(keycode, record)) { |
||||
switch (keycode) { |
||||
|
||||
// Handle the key translations for Dvorak on bepo. It's best if these are the first
|
||||
// enums after SAFE_RANGE.
|
||||
case DB_1 ... BB_QUOT: |
||||
if(record->event.pressed) |
||||
send_keycode(keycode); |
||||
unregister_code(keycode); |
||||
break; |
||||
|
||||
// Set the default layer. eeprom if shifted.
|
||||
case KC_DVORAK ... KC_BEPO: |
||||
if (record->event.pressed) { |
||||
uint8_t mods = mod_config(get_mods() | get_oneshot_mods()); |
||||
if (!mods) { |
||||
default_layer_set(1UL << (keycode - KC_DVORAK)); |
||||
} else if (mods & MOD_MASK_SHIFT) { |
||||
set_single_persistent_default_layer(1UL << (keycode - KC_DVORAK)); |
||||
} |
||||
} |
||||
break; |
||||
|
||||
|
||||
case KC_RESET: // Custom RESET code
|
||||
if (!record->event.pressed) { |
||||
reset_keyboard(); |
||||
} |
||||
return false; |
||||
break; |
||||
|
||||
case KC_SPACETEST: // test something.
|
||||
// default_layer_set(1UL << _BEAKL);
|
||||
// tap_code16(LSFT(KC_SPACE));
|
||||
break; |
||||
|
||||
|
||||
// tap or long tap for different key.
|
||||
case KC_CCCV: // One key copy/paste
|
||||
tap_taplong(LCTL(KC_C), LCTL(KC_V), record); |
||||
break; |
||||
|
||||
case BP_CCCV: // One key copy/paste
|
||||
tap_taplong(LCTL(BP_C), LCTL(BP_V), record); |
||||
break; |
||||
|
||||
case KC_CTCN: // New TaB/Window
|
||||
tap_taplong(LCTL(KC_T), LCTL(KC_N), record); |
||||
break; |
||||
|
||||
case BP_CTCN: // New TaB/Window
|
||||
tap_taplong(LCTL(BP_T), LCTL(BP_N), record); |
||||
break; |
||||
|
||||
case KC_CWCQ: // Close Tab-window/Quit
|
||||
tap_taplong(LCTL(KC_W), LCTL(KC_Q), record); |
||||
break; |
||||
|
||||
case BP_CWCQ: // Close Tab-window/Quit
|
||||
tap_taplong(LCTL(BP_W), LCTL(BP_Q), record); |
||||
break; |
||||
|
||||
case KC_XM_PORD: // Xmonad scratch pads or desktop
|
||||
tap_taplong(LGUI(KC_E), LGUI(KC_T), record); |
||||
break; |
||||
|
||||
case BP_XM_PORD: // Xmonad scratch pads or desktop
|
||||
tap_taplong(LGUI(BP_E), LGUI(BP_T), record); |
||||
break; |
||||
|
||||
|
||||
// Open on tap and Open with close and back arrow on hold.
|
||||
case KC_OCPRN: |
||||
open_openclose(KC_LPRN, KC_RPRN, record); |
||||
break; |
||||
|
||||
case BP_OCPRN: |
||||
open_openclose(DB_LPRN, DB_RPRN, record); |
||||
break; |
||||
|
||||
case KC_OCBRC: |
||||
open_openclose(KC_LBRC, KC_RBRC, record); |
||||
break; |
||||
|
||||
case BP_OCBRC: |
||||
open_openclose(KC_RBRC, KC_LBRC, record); |
||||
break; |
||||
|
||||
case KC_OCCBR: |
||||
open_openclose(KC_LCBR, KC_RCBR, record); |
||||
break; |
||||
|
||||
case BP_OCCBR: |
||||
open_openclose(BP_LCBR, BP_RCBR, record); |
||||
break; |
||||
|
||||
case KC_OCDQUO: |
||||
open_openclose(KC_DQUO, KC_DQUO, record); |
||||
break; |
||||
|
||||
case BP_OCDQUO: |
||||
open_openclose(BP_DQUO, BP_DQUO, record); |
||||
break; |
||||
|
||||
case KC_OCQUOT: |
||||
open_openclose(KC_QUOT, KC_QUOT, record); |
||||
break; |
||||
|
||||
case BP_OCQUOT: |
||||
open_openclose(BP_QUOT, BP_QUOT, record); |
||||
break; |
||||
|
||||
case KC_OCGRV: |
||||
open_openclose(KC_GRAVE, KC_GRAVE, record); |
||||
break; |
||||
|
||||
case BP_OCGRV: |
||||
open_openclose(BP_GRV, BP_GRV, record); |
||||
break; |
||||
|
||||
case KC_OCLTGT: |
||||
open_openclose(KC_LT, KC_GT, record); |
||||
break; |
||||
|
||||
case BP_OCLTGT: |
||||
open_openclose(BP_LDAQ, BP_RDAQ, record); |
||||
break; |
||||
|
||||
|
||||
//Turn shift backspace into delete.
|
||||
/* case KC_BSPC: */ |
||||
/* { */ |
||||
/* // Initialize a boolean variable that keeps track */ |
||||
/* // of the delete key status: registered or not? */ |
||||
/* static bool delkey_registered; */ |
||||
/* if (record->event.pressed) { */ |
||||
/* uint8_t mod_state = get_mods(); */ |
||||
/* // Detect the activation of either shift keys */ |
||||
/* if (mod_state & MOD_MASK_SHIFT) { */ |
||||
/* // First temporarily canceling both shifts so that */ |
||||
/* // shift isn't applied to the KC_DEL keycode */ |
||||
/* del_mods(MOD_MASK_SHIFT); */ |
||||
/* register_code(KC_DEL); */ |
||||
/* // Update the boolean variable to reflect the status of KC_DEL */ |
||||
/* delkey_registered = true; */ |
||||
/* // Reapplying modifier state so that the held shift key(s) */ |
||||
/* // still work even after having tapped the Backspace/Delete key. */ |
||||
/* set_mods(mod_state); */ |
||||
/* return false; */ |
||||
/* } */ |
||||
/* } else { // on release of KC_BSPC */ |
||||
/* // In case KC_DEL is still being sent even after the release of KC_BSPC */ |
||||
/* if (delkey_registered) { */ |
||||
/* unregister_code(KC_DEL); */ |
||||
/* delkey_registered = false; */ |
||||
/* return false; */ |
||||
/* } */ |
||||
/* } */ |
||||
/* // Let QMK process the KC_BSPC keycode as usual outside of shift */ |
||||
/* return true; */ |
||||
/* } */ |
||||
|
||||
|
||||
#ifdef UNICODE_ENABLE |
||||
case UC_FLIP: // (ノಠ痊ಠ)ノ彡┻━┻
|
||||
if (record->event.pressed) { |
||||
send_unicode_string("(ノಠ痊ಠ)ノ彡┻━┻"); |
||||
} |
||||
break; |
||||
case UC_TABL: // ┬─┬ノ( º _ ºノ)
|
||||
if (record->event.pressed) { |
||||
send_unicode_string("┬─┬ノ( º _ ºノ)"); |
||||
} |
||||
break; |
||||
case UC_SHRG: // ¯\_(ツ)_/¯
|
||||
if (record->event.pressed) { |
||||
send_unicode_string("¯\\_(ツ)_/¯"); |
||||
} |
||||
break; |
||||
case UC_DISA: // ಠ_ಠ
|
||||
if (record->event.pressed) { |
||||
send_unicode_string("ಠ_ಠ"); |
||||
} |
||||
break; |
||||
#endif |
||||
} |
||||
} |
||||
return true; |
||||
} |
@ -1,124 +1,212 @@ |
||||
Overview |
||||
======== |
||||
|
||||
This is my personal userspace. Most of my code exists here. I only have one keymap, and that |
||||
is for an ergodox_ez. There are a lot of layers, 7 of them are default layers. I primarily use |
||||
dvorak and Bepo. I've been using emacs in vi mode for over 23 years. I also us Xmonad as my |
||||
window manager, additionally I've been using a Kinesis advantage keyboard in dvorak for over 20 |
||||
years. All of those things tend to color the layouts I have. |
||||
|
||||
The Bepo layer needs some love. It is true to the layout at Bepo.fr, but I find it a little |
||||
cumbersome, and I miss some of my favorite keys. |
||||
|
||||
There are 2 dvorak layers, one for a qwerty OS keyboard, and one for a Bepo OS keyboard. |
||||
There is a symbol/keypad layer for bepo and qwerty. And of course there is a mouse/media layer. |
||||
There are 2 Xmonad layers one for qwerty and one for Bepo. Layer selection happens automatically |
||||
based on your current default layer. I use 2 tap dance keys for layer selection. |
||||
|
||||
There are also Qwerty, Colemak, Workman and Norman layers for qwerty. |
||||
|
||||
|
||||
Keyboard Layout Templates |
||||
------------------------- |
||||
|
||||
I borrowed the idea for the keyboard defines and some of the definitions from @drashna. |
||||
I think it is an awesome idea, It makes consistency between layout definitions so much easier. |
||||
@drashna had this to say about it. |
||||
|
||||
|
||||
This borrows from @jola5's "Not quite neo" code. This allows me to maintain blocks of keymaps in the userspace, so that I can modify the userspace, and this is reflected in all of the keyboards that use it, at once. |
||||
|
||||
This makes adding tap/hold mods, or other special keycodes or functions to all keyboards super easy, as it's done to all of them at once. |
||||
|
||||
The caveat here is that the keymap needs a processor/wrapper, as it doesn't like the substitutions. However, this is as simple as just pushing it through a define. For instance: |
||||
|
||||
`#define LAYOUT_ergodox_wrapper(...) LAYOUT_ergodox(__VA_ARGS__)` |
||||
|
||||
Once that's been done and you've switched the keymaps to use the "wrapper", it will read the substitution blocks just fine. |
||||
|
||||
Credit goes to @jola5 for first implementing this awesome idea. |
||||
|
||||
|
||||
Custom Keycodes |
||||
--------------- |
||||
|
||||
Keycodes are defined in the ericgebhart.h file and need to be included in the keymap.c files, so that they can be used there. The keymap.c file has very little in it, the most important thing to see there are the keys that are at the ends of each row, ie. the 1st and last key on each row is defined there. |
||||
Everything else is in ericgebhart.h. |
||||
|
||||
Layer Indication |
||||
---------------- |
||||
|
||||
The ergodox_ez only has 3 leds, layer indication is pretty lame. |
||||
Currently the first led lights up if the default layer is not qwerty. The symbol and media layers get |
||||
the other 2 leds, and all the leds light up if you are on the "layers" layer. |
||||
I hope I can figure out how to make it better, but I just don't see a way with 3 leds and 11 layers. |
||||
|
||||
|
||||
BEPO vs Qwerty Layers |
||||
Warning: dvorak touch typist, that uses qwerty and bepo locales on my |
||||
computer. 40+ years of vi, 30 years of vi in Emacs. |
||||
|
||||
Recent years I have gone minimal, I don't use most of the keys on my ergodox, |
||||
or original edition dactyl. These maps work great on large and small keyboards, |
||||
my preference seems to be 40% split ergo keyboards like the corne. |
||||
|
||||
I think that what is special here is the layouts. I don't worry too |
||||
much about leds, or RGB, although I do like oled. But really its mod_layer.h, |
||||
all the simple layer chunks and definitions, and the ability to apply that |
||||
to any keyboard with minimal effort. The other thing is the example it |
||||
provides for defining keymaps based on different OS locales. I use both |
||||
dvorak on Qwerty, and bepo/dvorak on bepo. That means I must change my |
||||
locale on my OS to match my keyboard which can do qwerty or bepo locales. |
||||
|
||||
It is possible, as I do, to send a keycode invoking xmonad, to execute my |
||||
qwerty - bepo switch on my computer. |
||||
|
||||
Besides using dvorak, another thing that colors my keyboard code is that I |
||||
have used the kinesis |
||||
advantage for for more than 2 decades. I have used the ergodox ez for several years |
||||
as well, so the evolution of my keymaps starts there with space, enter, backspace |
||||
and delete keys on the thumbs. |
||||
|
||||
Layouts |
||||
----------- |
||||
This evolved from the old layout...wrapper code. Calling everything a wrapper seems |
||||
silly. So I took a step back. |
||||
|
||||
Also, with all these layers it was a real pain to apply mods consistently and |
||||
easily. So I changed the way I use keymap macro wrappers and added in my own |
||||
mod layer. The only thing it has is the mods to apply. No more editing keymaps |
||||
to apply mods. I do it once, and it works everywhere I want. |
||||
|
||||
All layouts, almost, boil down to a 3x5 x 2 matrix. Bepo is 3x6. Mostly, I want |
||||
my controls to stay the same. As we have been conditioned, these are the keys on |
||||
the edges, or middle. Not that they can't change but I don't usually change them |
||||
much, except the side edges, - the extra pinky columns. |
||||
the F keys, the columns to the left and right and the row on the bottom. |
||||
Thumb keys if you have them. Even the number row is practically the same. |
||||
|
||||
With that in mind, reducing my layouts to 3x10 or 12 matrices would be great. |
||||
At the same time extracting my mods so they are easy to apply to any matrix. |
||||
So that's what is here. |
||||
|
||||
At the bottom is the LAYOUT, needed by the keeb you have. Then I have my Layouts |
||||
to feed it with my ROWS macros which are my MOD layer. At the end of it all, |
||||
I give a 3x10 or 12 to a layout and I have a complete keyboard definition. |
||||
Creating a new keyboard map is super simple. |
||||
|
||||
* mod_layer.h is the place for home row mods or any other mods. |
||||
* layouts.h is where I define a new matrix using the ROW macros when I need one. |
||||
* core_keys.h - where I define my custom keys. Ya know, the big enum. |
||||
* altlocal_keys.c - Alternate key/shift keys for emulation on other locales. |
||||
* core_keysets.h - Base layers; qwerty, dvorak, beakl, colemak, norman, carplax... |
||||
* edge_keys.h - defines the edges and bottom/thumb keys of a keyboard. |
||||
* layers.h - defines actual layers for navigation, symbols, keypad, layers, top rows, etc. |
||||
|
||||
Process_records.c |
||||
-------------------- |
||||
This is where the keycodes are processed... |
||||
|
||||
Custom keys |
||||
------------------- |
||||
I have a lot of custom keys because of bepo. It is somewhat confusing this interaction |
||||
between a keyboard and the software that receives it. |
||||
|
||||
A lot of my pain is invoked by my desire to have dvorak on bepo. Which works just fine, |
||||
although an english/cyrillic situation may not work so well. Currently I have |
||||
dvorak and beakl on bepo in addition to bepo it's self. |
||||
|
||||
Alternate keycodes for emulating a layout on another locale/language. |
||||
----------------------------- |
||||
Because of wanting dvorak and beakl on bepo there was the necessity to create keys |
||||
from keycodes which were not combined. For this I have a special function that |
||||
takes a keycode and gives a proper shifted character for it. It is only a 2 keycode |
||||
definition, but it does the basic non-shifted and shifted characters as you define them. |
||||
|
||||
Combos/Chords |
||||
---------------------------- |
||||
This is recently new to me. I'm using them on my thumb keys which are all LT's. |
||||
the combos allow for layer locking for the Nav layer, and a oneshot for symbols |
||||
among other things. |
||||
|
||||
I followed the simple example at the end of the doc than uses the |
||||
combos.def file to define the combos. |
||||
|
||||
Tap-mods |
||||
------------------------------------- |
||||
I had been using MT on my thumbs for GUI,CTRL,ALT on hold along with |
||||
Escape, Enter, space and backspace, my thumb keys. I then added shift to my home row pinky key. |
||||
I had layer shifts to symbols, numbers, navigation all on the home row of both hands. |
||||
It worked nicely but choppy I think, switching hands for the holder of the layer is |
||||
a little like having no caps lock. It was a lot of work adding them to all my maps. |
||||
This is what prompted my mod_layer. So much easier. No maps to modify. |
||||
|
||||
Then I moved to all home row mods with layers on my thumb keys. |
||||
|
||||
This does allow for more rolls, and I have found chord/rolls simply from having my |
||||
xmonad controls be GUI-some-home-row-key-or-close. When Gui is your index finger, |
||||
everything gets easier. |
||||
|
||||
Somewhere along the way I got a corne, and everything had to be small. and I realized |
||||
that everything really was small. My layers are blending back, with LTs near the |
||||
home row, and all the thumbs. On my dactyl I currently have 8 thumb keys per thumb, |
||||
I don't know what to do with them all. Remembering a time I thought that would be |
||||
awesome. |
||||
|
||||
### tap_taplong and open_openclose |
||||
In process_records.c I have a nice couple of functions, |
||||
tap_taplong(), and open_openclose() for my non MT/LT functionality. |
||||
|
||||
* I have home row mods for Shift, Ctrl, Alt, and Gui on both hands. |
||||
* I have a number of LT mods to raise layers nearby. Nav, toprows, symbol, keypad |
||||
are on both hands on the first and third rows around home row. |
||||
* Xmonad tap_taplong to pull up desktops or terminals with tap or hold. |
||||
* C-c/C-v, C-t/C-n, C-w/C-q are all on my Navigation layer as custom keys with tap_taplong. |
||||
* My thumbs are Enter/space and Esc/backspace which are also Navigation and toprows and symbol layers. They used to be GUI,CTRL,ALT,SFT. but all that's on the home row now. |
||||
* All of the paired characters on my symbol layer have a hold which closes them, and moves the cursor back between. |
||||
|
||||
### caps word |
||||
Holding both pinkies on home row for double tapping term, is effectively |
||||
right-shift and left-shift, invokes caps-word. The next word will be capitalized. |
||||
It continues until it shouldn't. |
||||
|
||||
BEPO vs Qwerty Locale/language/Layers |
||||
--------------------- |
||||
Essentially they are different keycode sets. So anything that needs them, causes a layer. |
||||
So there are two symbol layers, two toprows layers, two keypad layers. |
||||
One for Qwerty and one for bepo. The Navigation layer is not affected. |
||||
|
||||
There are 7 base layers. Dvorak, qwerty, Colemak, Workman, and Norman work on a Qwerty software layer on the OS. Dvorak_on_bepo and Bepo both work on a Bepo software layer on the os. |
||||
Dvorak on qwerty is the default. There is a function in ericgebhart.c which will allow the keyboard |
||||
to persist it's default layer through power down. It is currently commented out. |
||||
|
||||
I don't actually use Qwerty, but it seemed like I should have it, |
||||
@drashna had it along with Colemak, Workman and Norman so I added them |
||||
to my existing dvorak and bepo definitions. |
||||
|
||||
There are two tap dance functions that allow switching the default layers |
||||
and the overlay layers. |
||||
I only have bepo, dvorak and beakl on bepo. There are a bunch for Qwerty. |
||||
I have a ton of basic layers. I'm most interested in beakl at the moment, but I've used Dvorak for more than 20 years. There is also qwerty, colemak, norman, carplax, etc. |
||||
|
||||
The default layers switch according to the current OS keyboard of the current Default layer. |
||||
Shifting the key, causes the selection to use the other OS keyboard selections. ie, |
||||
if you are on qwerty, you get dvorak, qwerty, colemak, workman and norman. If you shift it you get |
||||
dvorak on bepo and bepo. If you are not on qwerty the unshifted taps get dvorak and bepo on bepo. |
||||
The navigation/mouse layer is not affected by bepo/qwerty, but symbols and numbers are. |
||||
There are bepo versions of everything that needs it. |
||||
|
||||
The other tap dance for layers is for the symbol, mouse and layers layers. The layers layer is just a |
||||
safety layer, knowing I can get to if I screw something up... |
||||
Navigation Layer |
||||
----------------------- |
||||
I do not use a mouse. I use Xmonad as my window manager, and I have |
||||
practically no use for one. They are necessary however. So I have |
||||
a Navigation layer which is all mouse, arrows, home, end, tab, page |
||||
up, down, 5 mouse buttons and so on. |
||||
This layer is not affected by bepo/qwerty, but symbols and numbers are. |
||||
There are bepo versions of everything that needs it. |
||||
|
||||
Arrow combos work just fine, in emacs I use SFT(arrows) to move between windows. |
||||
To do this; shift is my left pinky home, Nav is right thumb Enter, and one of the four |
||||
home keys of my left hand are the arrows. Home row mods allow this to work well. |
||||
|
||||
I don't use the arrows on the dactyl and kinesis, even though they are there. |
||||
|
||||
Symbol Layer |
||||
------------------- |
||||
The symbol layer is based on the Beakl15 symbol layer. |
||||
The beakl symbol layer is intuitive and fairly easy to remember. There are 3 versions. |
||||
The original, an extended called A, and an extended and enhanced for vi, called B. |
||||
The primary purpose of the extension was to provide keys which might not be available |
||||
elsewhere on the default layer. B, takes this further and moves :/? to better places. |
||||
|
||||
TopRows Layer |
||||
-------------------- |
||||
I think, truly this is the layer that makes tiny keyboards accessible in the beginning. |
||||
This is basically the number row, the shifted number row and the function key row. |
||||
I have them so it is numbers on the home row, shifted keys above and functions below. |
||||
There are multiple choices, I currently use the beakl number row, with everything |
||||
else as you would expect. |
||||
|
||||
Keypad Layer |
||||
-------------- |
||||
There are several variations of keypads and function key pads in various sizes. |
||||
Currently I am using a Beakl Keypad on the left hand and 3x4 funcpad on the right. |
||||
|
||||
OLED |
||||
-------------------- |
||||
It shows the basic stuff I could find in most places. The |
||||
default layer, the current layer, the mods, the locks, the last key pressed, and |
||||
a map of the current layer as simply as possible. I'm sure there is more that could |
||||
be done. @Drashna has some fancy stuff. If the display is big enough, there is even |
||||
a display of the current layer's keymap. |
||||
|
||||
XMonad |
||||
--------------------- |
||||
I use xmonad. Gui is my hot key for that. With home row mods I have home |
||||
row chords which give me access to my desktops, my scratchpads/terminals, |
||||
custom key KC_XM_PORD, among others. It sometimes feels that I am playing |
||||
an instrument when I invoke xmonad to do something. |
||||
|
||||
I had an xmonad layer at one time, it was basically dvorak, I would invoke it |
||||
with a GUI mod, so that even on bepo, or colemak, my xmonad commands remain the same. |
||||
|
||||
Additionally there is an advanced tap dance called XMONAD_ESC. One tap is Escape, tap and hold is |
||||
LGUI with the proper XMONAD layer, it is essentially dvorak, for the |
||||
given OS layer. 2 taps is Shift lgui with xmonad, and 2 taps and hold |
||||
is Control LGUI with Xmonad. This allows for the finger patterns for |
||||
Xmonad to remain the same regarless of the keyboard in use. The hold |
||||
versions allow for secondary menu selection in Xmonad, the 2 tap function |
||||
must be for a key that is in the top level keymap of Xmonad. This is how |
||||
many people use xmonad so it's not a real problem. There are plenty of |
||||
keys combinations to choose from with these choices. The function can |
||||
be expanded to 3 taps and 3 tap and hold, and on and on.... |
||||
I'm going to need to revisit that, as things are, all the commands move when I change |
||||
to a different default layer from dvorak. |
||||
|
||||
I have a few other special keys, for momentary symbols or shift on the home row of each hand. |
||||
Combo's can alleviate some of this pain. More to play with. |
||||
|
||||
Also, after using a kinesis for many years I'm very accustomed to the |
||||
space, enter, backspace and delete keys on the thumbs. I've added control |
||||
and alt as a secondary function. These are also the Control and Alt keys |
||||
if held down. |
||||
|
||||
Tap Dance |
||||
-------------------- |
||||
|
||||
Additionally there are other tap dance functions, tab-backtab, home-end as well as I few I'm not actually using. |
||||
|
||||
Building and flashing |
||||
----------------------- |
||||
|
||||
```make ergodox_z:ericgebhart``` will compile the code. |
||||
|
||||
I use the teensy-loader cli so that's all I know. There is a script here called flash_ergodox |
||||
|
||||
Use it like this, |
||||
|
||||
```flash-ergodox <path to your hex file>``` |
||||
|
||||
then use a paperclip to push the reset button on your keyboard. |
||||
I have a lot of tap dance, It's turned off. It's big. tap-hold works pretty well most of the time, instead. |
||||
My favorites were tab-backtab, home-end. |
||||
|
||||
Switching the OS keyboard |
||||
------------------------- |
||||
|
||||
This varies from system to system. I use Arch Linux, so I use ```setxkbmap```. |
||||
I've included a helper script which makes it easy to switch between EN and FR Bepo, |
||||
called switch-kbd. |
||||
called switch-kbd. In xmonad I invoke this with a keystroke. so, same deal. just map |
||||
the keystroke to a key. |
||||
|
||||
|
@ -1,14 +1,34 @@ |
||||
SRC += ericgebhart.c
|
||||
SRC += tap_dances.c
|
||||
SRC += process_records.c
|
||||
SRC += caps_word.c
|
||||
SRC += altlocal_keys.c
|
||||
|
||||
VPATH += keyboards/gboards
|
||||
|
||||
OLED_ENABLE = yes
|
||||
|
||||
ifeq ($(strip $(OLED_ENABLE)), yes) |
||||
SRC += $(USER_PATH)/oled_stuff.c
|
||||
endif |
||||
|
||||
|
||||
MOUSEKEY_ENABLE = yes # Mouse keys
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||
NKRO_ENABLE = no # USB Nkey Rollover - for issues, see github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
NKRO_ENABLE = no # Enable N-Key Rollover
|
||||
SWAP_HANDS_ENABLE= no # Allow swapping hands of keyboard
|
||||
KEY_LOCK_ENABLE = yes # Enable the KC_LOCK key
|
||||
TAP_DANCE_ENABLE = yes # Enable the tap dance feature.
|
||||
KEY_LOCK_ENABLE = no # Enable the KC_LOCK key
|
||||
TAP_DANCE_ENABLE = no # Enable the tap dance feature.
|
||||
CONSOLE_ENABLE = no # Console for debug
|
||||
|
||||
BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
|
||||
BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
|
||||
UNICODE_ENABLE = no
|
||||
SLEEP_LED_ENABLE = no
|
||||
|
||||
LTO_ENABLE = yes
|
||||
|
||||
SPACE_CADET_ENABLE = no
|
||||
GRAVE_ESC_ENABLE = no
|
||||
MAGIC_ENABLE = no
|
||||
COMBO_ENABLE = yes
|
||||
|
@ -0,0 +1,269 @@ |
||||
/*
|
||||
Copyright 2018 Eric Gebhart <e.a.gebhart@gmail.com> |
||||
|
||||
This program is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU General Public License as published by |
||||
the Free Software Foundation, either version 2 of the License, or |
||||
(at your option) any later version. |
||||
|
||||
This program is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU General Public License for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License |
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
#ifdef TAP_DANCES_ENABLE |
||||
|
||||
#include "tap_dances.h" |
||||
|
||||
#include "action.h" |
||||
#include "action_layer.h" |
||||
#include "process_keycode/process_tap_dance.h" |
||||
|
||||
void tap_dance_mouse_btns (qk_tap_dance_state_t *state, void *user_data) { |
||||
switch(state->count){ |
||||
case 1: |
||||
register_code(KC_BTN1); |
||||
break; |
||||
case 2: |
||||
register_code(KC_BTN2); |
||||
break; |
||||
case 3: |
||||
register_code(KC_BTN3); |
||||
break; |
||||
case 4: |
||||
register_code(KC_BTN4); |
||||
break; |
||||
case 5: |
||||
register_code(KC_BTN5); |
||||
break; |
||||
default: |
||||
break; |
||||
} |
||||
reset_tap_dance(state); |
||||
} |
||||
|
||||
// counting on all the qwerty layers to be less than dvorak_on_bepo
|
||||
int on_qwerty(){ |
||||
uint8_t deflayer = (biton32(default_layer_state)); |
||||
return (deflayer < _DVORAK_BP); |
||||
} |
||||
|
||||
static void switch_default_layer(uint8_t layer) { |
||||
default_layer_set(1UL<<layer); |
||||
clear_keyboard(); |
||||
} |
||||
|
||||
// so the keyboard remembers which layer it's in after power disconnect.
|
||||
/*
|
||||
uint32_t default_layer_state_set_kb(uint32_t state) { |
||||
eeconfig_update_default_layer(state); |
||||
return state; |
||||
} |
||||
*/ |
||||
|
||||
void tap_dance_df_bepo_layers_switch (qk_tap_dance_state_t *state, void *user_data) { |
||||
switch(state->count){ |
||||
case 1: |
||||
switch_default_layer(_DVORAK_BP); |
||||
break; |
||||
case 2: |
||||
switch_default_layer(_BEPO); |
||||
break; |
||||
case 3: |
||||
layer_invert(_LAYERS); |
||||
break; |
||||
default: |
||||
break; |
||||
} |
||||
reset_tap_dance(state); |
||||
} |
||||
|
||||
void tap_dance_layer_switch (qk_tap_dance_state_t *state, void *user_data) { |
||||
switch(state->count){ |
||||
case 1: |
||||
if(on_qwerty()) |
||||
layer_invert(_SYMB); |
||||
else |
||||
layer_invert(_SYMB_BP); |
||||
break; |
||||
case 2: |
||||
layer_invert(_NAV); |
||||
break; |
||||
case 3: |
||||
layer_invert(_LAYERS); |
||||
break; |
||||
case 4: |
||||
if(on_qwerty()) |
||||
layer_invert(_KEYPAD); |
||||
else |
||||
layer_invert(_KEYPAD_BP); |
||||
break; |
||||
default: |
||||
break; |
||||
} |
||||
reset_tap_dance(state); |
||||
} |
||||
|
||||
void tap_dance_default_layer_switch (qk_tap_dance_state_t *state, void *user_data) { |
||||
switch(state->count){ |
||||
case 1: |
||||
switch_default_layer(_DVORAK); |
||||
break; |
||||
case 2: |
||||
switch_default_layer(_DVORAK_BP); |
||||
break; |
||||
case 3: |
||||
switch_default_layer(_BEPO); |
||||
break; |
||||
default: |
||||
break; |
||||
} |
||||
reset_tap_dance(state); |
||||
} |
||||
|
||||
// switch the default layer to another qwerty based layer.
|
||||
void switch_default_layer_on_qwerty(int count) { |
||||
switch(count){ |
||||
case 1: |
||||
switch_default_layer(_DVORAK); |
||||
break; |
||||
case 2: |
||||
switch_default_layer(_QWERTY); |
||||
break; |
||||
case 3: |
||||
switch_default_layer(_COLEMAK); |
||||
break; |
||||
|
||||
/* case 4: */ |
||||
/* switch_default_layer(_WORKMAN); */ |
||||
/* break; */ |
||||
/* case 5: */ |
||||
/* switch_default_layer(_NORMAN); */ |
||||
/* break; */ |
||||
|
||||
default: |
||||
switch_default_layer(_DVORAK); |
||||
break; |
||||
} |
||||
} |
||||
|
||||
// switch the default layer to another bepo based layer.
|
||||
void switch_default_layer_on_bepo(int count) { |
||||
switch(count){ |
||||
case 1: |
||||
switch_default_layer(_DVORAK_BP); |
||||
break; |
||||
case 2: |
||||
switch_default_layer(_BEPO); |
||||
break; |
||||
default: |
||||
switch_default_layer(_DVORAK_BP); |
||||
break; |
||||
} |
||||
} |
||||
|
||||
|
||||
// tap to change the default layer. Distinguishes between layers that are based on
|
||||
// a qwerty software keyboard and a bepo software keyboard.
|
||||
// if shifted, choose layers based on the other software keyboard, otherwise choose only
|
||||
// layers that work on the current software keyboard.
|
||||
void tap_dance_default_os_layer_switch (qk_tap_dance_state_t *state, void *user_data) { |
||||
//uint8_t shifted = (get_mods() & MOD_BIT(KC_LSFT|KC_RSFT));
|
||||
bool shifted = ( keyboard_report->mods & (MOD_BIT(KC_LSFT)|MOD_BIT(KC_RSFT)) ); |
||||
int qwerty = on_qwerty(); |
||||
|
||||
|
||||
// shifted, choose between layers on the other software keyboard
|
||||
if(shifted){ |
||||
if (qwerty) |
||||
switch_default_layer_on_bepo(state->count); |
||||
else |
||||
switch_default_layer_on_qwerty(state->count); |
||||
|
||||
// not shifted, choose between layers on the same software keyboard
|
||||
} else { |
||||
if (qwerty) |
||||
switch_default_layer_on_qwerty(state->count); |
||||
else |
||||
switch_default_layer_on_bepo(state->count); |
||||
} |
||||
|
||||
reset_tap_dance(state); |
||||
} |
||||
|
||||
|
||||
/* Return an integer that corresponds to what kind of tap dance should be executed.
|
||||
* |
||||
* How to figure out tap dance state: interrupted and pressed. |
||||
* |
||||
* Interrupted: If the state of a dance dance is "interrupted", that means that another key has been hit |
||||
* under the tapping term. This is typically indicitive that you are trying to "tap" the key. |
||||
* |
||||
* Pressed: Whether or not the key is still being pressed. If this value is true, that means the tapping term |
||||
* has ended, but the key is still being pressed down. This generally means the key is being "held". |
||||
* |
||||
* One thing that is currenlty not possible with qmk software in regards to tap dance is to mimic the "permissive hold" |
||||
* feature. In general, advanced tap dances do not work well if they are used with commonly typed letters. |
||||
* For example "A". Tap dances are best used on non-letter keys that are not hit while typing letters. |
||||
* |
||||
* Good places to put an advanced tap dance: |
||||
* z,q,x,j,k,v,b, any function key, home/end, comma, semi-colon |
||||
* |
||||
* Criteria for "good placement" of a tap dance key: |
||||
* Not a key that is hit frequently in a sentence |
||||
* Not a key that is used frequently to double tap, for example 'tab' is often double tapped in a terminal, or |
||||
* in a web form. So 'tab' would be a poor choice for a tap dance. |
||||
* Letters used in common words as a double. For example 'p' in 'pepper'. If a tap dance function existed on the |
||||
* letter 'p', the word 'pepper' would be quite frustating to type. |
||||
* |
||||
* For the third point, there does exist the 'DOUBLE_SINGLE_TAP', however this is not fully tested |
||||
* |
||||
*/ |
||||
int cur_dance (qk_tap_dance_state_t *state) { |
||||
if (state->count == 1) { |
||||
if (state->interrupted || !state->pressed) return SINGLE_TAP; |
||||
//key has not been interrupted, but they key is still held. Means you want to send a 'HOLD'.
|
||||
else return SINGLE_HOLD; |
||||
} |
||||
else if (state->count == 2) { |
||||
/*
|
||||
* DOUBLE_SINGLE_TAP is to distinguish between typing "pepper", and actually wanting a double tap |
||||
* action when hitting 'pp'. Suggested use case for this return value is when you want to send two |
||||
* keystrokes of the key, and not the 'double tap' action/macro. |
||||
*/ |
||||
if (state->interrupted) return DOUBLE_SINGLE_TAP; |
||||
else if (state->pressed) return DOUBLE_HOLD; |
||||
else return DOUBLE_TAP; |
||||
} |
||||
//Assumes no one is trying to type the same letter three times (at least not quickly).
|
||||
//If your tap dance key is 'KC_W', and you want to type "www." quickly - then you will need to add
|
||||
//an exception here to return a 'TRIPLE_SINGLE_TAP', and define that enum just like 'DOUBLE_SINGLE_TAP'
|
||||
if (state->count == 3) { |
||||
if (state->interrupted || !state->pressed) return TRIPLE_TAP; |
||||
else return TRIPLE_HOLD; |
||||
} |
||||
else return 8; //magic number. At some point this method will expand to work for more presses
|
||||
} |
||||
|
||||
//Tap Dance Definitions
|
||||
qk_tap_dance_action_t tap_dance_actions[] = { |
||||
//Tap once for Esc, twice for Caps Lock
|
||||
[TD_ESC_CAPS] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_CAPS), |
||||
[TD_TAB_BKTAB] = ACTION_TAP_DANCE_DOUBLE(KC_TAB, LSFT(KC_TAB)), |
||||
[TD_RIGHT_TAB] = ACTION_TAP_DANCE_DOUBLE(KC_RIGHT, KC_TAB), |
||||
[TD_LEFT_BACKTAB] = ACTION_TAP_DANCE_DOUBLE(KC_LEFT, LSFT(KC_TAB)), |
||||
[TD_UP_HOME] = ACTION_TAP_DANCE_DOUBLE(KC_UP, KC_HOME), |
||||
[TD_DOWN_END] = ACTION_TAP_DANCE_DOUBLE(KC_DOWN, KC_END), |
||||
[TD_MDIA_SYMB] = ACTION_TAP_DANCE_FN(tap_dance_layer_switch), |
||||
[TD_DVORAK_BEPO] = ACTION_TAP_DANCE_FN(tap_dance_df_bepo_layers_switch), |
||||
[TD_DEF_LAYER_SW] = ACTION_TAP_DANCE_FN(tap_dance_default_layer_switch), |
||||
[TD_DEF_OS_LAYER_SW] = ACTION_TAP_DANCE_FN(tap_dance_default_os_layer_switch), |
||||
[TD_HOME_END] = ACTION_TAP_DANCE_DOUBLE(KC_HOME, KC_END), |
||||
[TD_MOUSE_BTNS] = ACTION_TAP_DANCE_FN(tap_dance_mouse_btns) |
||||
|
||||
}; |
||||
|
||||
#endif |
@ -0,0 +1,19 @@ |
||||
#pragma once |
||||
/*
|
||||
Copyright 2018 Eric Gebhart <e.a.gebhart@gmail.com> |
||||
|
||||
This program is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU General Public License as published by |
||||
the Free Software Foundation, either version 2 of the License, or |
||||
(at your option) any later version. |
||||
|
||||
This program is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU General Public License for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License |
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include "ericgebhart.h" |
Loading…
Reference in new issue