mirror of
https://github.com/qmk/qmk_firmware.git
synced 2026-09-23 20:52:15 +08:00
[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>
This commit is contained in:
co-authored by
Drashna Jaelre
Dasky
parent
0f110737db
commit
e865cab48e
Executable
+24
@@ -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
|
||||
Executable
+60
@@ -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
|
||||
};
|
||||
@@ -16,369 +16,33 @@
|
||||
*/
|
||||
#include "keymap_bepo.h"
|
||||
#include "ericgebhart.h"
|
||||
|
||||
#include "layouts.h"
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
[DVORAK] = LAYOUT_ergodox_wrapper(
|
||||
// left hand
|
||||
KC_GRV, ___NUMBER_L___, OSL(LAYERS),
|
||||
KC_LOCK, ___DVORAK_L1___, LCTL(KC_C),
|
||||
TAB_BKTAB, ___DVORAK_L2___,
|
||||
KC_LSFT, ___DVORAK_L3___, TO(MDIA),
|
||||
|
||||
___BOTTOM_LEFT___,
|
||||
___ERGODOX_THUMB_LEFT___,
|
||||
|
||||
// right hand
|
||||
MDIA_SYMB_KP_LAYERS, ___NUMBER_R___, KC_EQL,
|
||||
LCTL(KC_V), ___DVORAK_R1___, KC_SLASH,
|
||||
/* */ ___DVORAK_R2___, KC_MINUS,
|
||||
TO(KEYPAD), ___DVORAK_R3___, KC_RSFT,
|
||||
|
||||
___BOTTOM_RIGHT___,
|
||||
___ERGODOX_THUMB_RIGHT___
|
||||
),
|
||||
|
||||
[XMONAD] = LAYOUT_ergodox_wrapper(
|
||||
// left hand
|
||||
___, ___FUNC_L___, ___,
|
||||
___, ___DVORAK_L1___, ___,
|
||||
___, ___DVORAK_L2___,
|
||||
___, ___DVORAK_L3___, ___,
|
||||
|
||||
___BOTTOM_LEFT___,
|
||||
___ERGODOX_THUMB_LEFT___,
|
||||
|
||||
// right hand
|
||||
___, ___FUNC_R___, ___,
|
||||
___, ___DVORAK_R1___, ___,
|
||||
/**/ ___DVORAK_R2___, ___,
|
||||
___, ___DVORAK_R3___, ___,
|
||||
|
||||
___BOTTOM_RIGHT___,
|
||||
___ERGODOX_THUMB_RIGHT___
|
||||
),
|
||||
|
||||
[QWERTY] = LAYOUT_ergodox_wrapper(
|
||||
// left hand
|
||||
KC_GRV, ___NUMBER_L___, OSL(LAYERS),
|
||||
KC_LOCK, ___QWERTY_L1___, LCTL(KC_C),
|
||||
TAB_BKTAB, ___QWERTY_L2___,
|
||||
KC_LSFT, ___QWERTY_L3___, TO(MDIA),
|
||||
|
||||
___BOTTOM_LEFT___,
|
||||
___ERGODOX_THUMB_LEFT___,
|
||||
|
||||
// right hand
|
||||
MDIA_SYMB_KP_LAYERS, ___NUMBER_R___, KC_EQL,
|
||||
LCTL(KC_V), ___QWERTY_R1___, KC_SLASH,
|
||||
/* */ ___QWERTY_R2___, KC_MINUS,
|
||||
TO(KEYPAD), ___QWERTY_R3___, KC_RSFT,
|
||||
|
||||
___BOTTOM_RIGHT___,
|
||||
___ERGODOX_THUMB_RIGHT___
|
||||
),
|
||||
|
||||
[COLEMAK] = LAYOUT_ergodox_wrapper(
|
||||
// left hand
|
||||
KC_GRV, ___NUMBER_L___, OSL(LAYERS),
|
||||
KC_LOCK, ___COLEMAK_L1___, LCTL(KC_C),
|
||||
TAB_BKTAB, ___COLEMAK_L2___,
|
||||
KC_LSFT, ___COLEMAK_L3___, TO(MDIA),
|
||||
|
||||
___BOTTOM_LEFT___,
|
||||
___ERGODOX_THUMB_LEFT___,
|
||||
|
||||
// right hand
|
||||
MDIA_SYMB_KP_LAYERS, ___NUMBER_R___, KC_EQL,
|
||||
LCTL(KC_V), ___COLEMAK_R1___, KC_SLASH,
|
||||
/* */ ___COLEMAK_R2___, KC_MINUS,
|
||||
TO(KEYPAD), ___COLEMAK_R3___, KC_RSFT,
|
||||
|
||||
___BOTTOM_RIGHT___,
|
||||
___ERGODOX_THUMB_RIGHT___
|
||||
),
|
||||
|
||||
[WORKMAN] = LAYOUT_ergodox_wrapper(
|
||||
// left hand
|
||||
KC_GRV, ___NUMBER_L___, OSL(LAYERS),
|
||||
KC_LOCK, ___WORKMAN_L1___, LCTL(KC_C),
|
||||
TAB_BKTAB, ___WORKMAN_L2___,
|
||||
KC_LSFT, ___WORKMAN_L3___, TO(MDIA),
|
||||
|
||||
___BOTTOM_LEFT___,
|
||||
___ERGODOX_THUMB_LEFT___,
|
||||
|
||||
// right hand
|
||||
MDIA_SYMB_KP_LAYERS, ___NUMBER_R___, KC_EQL,
|
||||
LCTL(KC_V), ___WORKMAN_R1___, KC_SLASH,
|
||||
/* */ ___WORKMAN_R2___, KC_MINUS,
|
||||
TO(KEYPAD), ___WORKMAN_R3___, KC_RSFT,
|
||||
|
||||
___BOTTOM_RIGHT___,
|
||||
___ERGODOX_THUMB_RIGHT___
|
||||
),
|
||||
|
||||
[NORMAN] = LAYOUT_ergodox_wrapper(
|
||||
// left hand
|
||||
KC_GRV, ___NUMBER_L___, OSL(LAYERS),
|
||||
KC_LOCK, ___NORMAN_L1___, LCTL(KC_C),
|
||||
TAB_BKTAB, ___NORMAN_L2___,
|
||||
KC_LSFT, ___NORMAN_L3___, TO(MDIA),
|
||||
|
||||
___BOTTOM_LEFT___,
|
||||
___ERGODOX_THUMB_LEFT___,
|
||||
|
||||
// right hand
|
||||
MDIA_SYMB_KP_LAYERS, ___NUMBER_R___, KC_EQL,
|
||||
LCTL(KC_V), ___NORMAN_R1___, KC_SLASH,
|
||||
/* */ ___NORMAN_R2___, KC_MINUS,
|
||||
TO(KEYPAD), ___NORMAN_R3___, KC_RSFT,
|
||||
|
||||
___BOTTOM_RIGHT___,
|
||||
___ERGODOX_THUMB_RIGHT___
|
||||
),
|
||||
|
||||
[DVORAK_ON_BEPO] = LAYOUT_ergodox_wrapper(
|
||||
// left hand
|
||||
DB_GRV, ___NUMBER_BEPO_L___, OSL(LAYERS),
|
||||
KC_LOCK, ___DVORAK_FR_L1___, DB_LBRC,
|
||||
TAB_BKTAB, ___DVORAK_FR_L2___,
|
||||
KC_LSFT, ___DVORAK_FR_L3___, DB_LPRN,
|
||||
|
||||
___BOTTOM_LEFT_FR___,
|
||||
___ERGODOX_THUMB_LEFT_BP___,
|
||||
// Qwerty Base layers
|
||||
[_DVORAK] = Dox_base(___NUMS___, ___DVORAK___),
|
||||
[_QWERTY] = Dox_base(___NUMS___, ___QWERTY___),
|
||||
[_COLEMAK] = Dox_base(___NUMS___, ___COLEMAK_DH___),
|
||||
[_BEAKL] = Dox_base(___NUMS___, ___BEAKL15___),
|
||||
// Bepo Base layers
|
||||
[_DVORAK_BP] = Dox_bepo_base(___NUMS_BP___, ___DVORAK_FR___),
|
||||
[_BEAKL_BP] = Dox_bepo_base(___BKLNUMS_BP___, ___BEAKL15_FR___),
|
||||
[_BEPO] = Dox_bepo_base6(___BEPO6___),
|
||||
|
||||
|
||||
// right hand
|
||||
MDIA_SYMB_KP_LAYERS, ___NUMBER_BEPO_R___, DB_EQL,
|
||||
DB_RBRC, ___DVORAK_FR_R1___, DB_SLASH,
|
||||
// transient layers.
|
||||
// Switch to using a transient layer macro
|
||||
[_SYMB] = Dox_transient(___12_FUNC___, ___SYMB_BEAKLA_3x12___),
|
||||
[_SYMB_BP] = Dox_transient(___12_FUNC___, ___SYMB_BEAKLA_BP_3x12___),
|
||||
|
||||
/* */ ___DVORAK_FR_R2___, DB_MINUS,
|
||||
DB_RPRN, ___DVORAK_FR_R3___, KC_RSFT,
|
||||
[_TOPROWS] = Dox_transient(___12___, ___TOPROWS_3x12___),
|
||||
[_TOPROWS_BP] = Dox_transient(___12___, ___TOPROWS_BP_3x12___),
|
||||
|
||||
___BOTTOM_RIGHT_FR___,
|
||||
___ERGODOX_THUMB_RIGHT_BP___
|
||||
),
|
||||
[_KEYPAD] = Dox_transient(___KEYPAD_BKL_FUNC_4x12___),
|
||||
[_KEYPAD_BP] = Dox_transient(___KEYPAD_BKL_FUNC_BP_4x12___),
|
||||
|
||||
[BEPO] = LAYOUT_ergodox_wrapper(
|
||||
// Left hand
|
||||
BP_DLR, ___SYMBOL_BEPO_L___, OSL(LAYERS),
|
||||
KC_LOCK, ___BEPO_FR_L1___, DB_LBRC,
|
||||
TAB_BKTAB, ___BEPO_FR_L2___,
|
||||
BP_SFT_T_ECRC, ___BEPO_FR_L3___, DB_RBRC,
|
||||
|
||||
___5___,
|
||||
___6___,
|
||||
|
||||
|
||||
// Right hand
|
||||
MDIA_SYMB_KP_LAYERS, ___SYMBOL_BEPO_R___, BP_EQL,
|
||||
BP_DCIR, ___BEPO_FR_R1___, BP_W,
|
||||
/* */ ___BEPO_FR_R2___, BP_CCED,
|
||||
BP_C, ___BEPO_FR_R3___, KC_RSFT,
|
||||
|
||||
___5___,
|
||||
___6___
|
||||
),
|
||||
|
||||
[XMONAD_FR] = LAYOUT_ergodox_wrapper(
|
||||
// left hand
|
||||
___, ___FUNC_L___, ___,
|
||||
___, ___DVORAK_FR_L1___, ___,
|
||||
___, ___DVORAK_FR_L2___,
|
||||
___, ___DVORAK_FR_L3___, ___,
|
||||
|
||||
___BOTTOM_LEFT_FR___,
|
||||
___ERGODOX_THUMB_LEFT_BP___,
|
||||
|
||||
|
||||
// right hand
|
||||
___, ___FUNC_R___, ___,
|
||||
___, ___DVORAK_FR_R1___, ___,
|
||||
/**/ ___DVORAK_FR_R2___, ___,
|
||||
___, ___DVORAK_FR_R3___, ___,
|
||||
|
||||
___BOTTOM_RIGHT_FR___,
|
||||
___ERGODOX_THUMB_RIGHT_BP___
|
||||
),
|
||||
|
||||
// SYMBOLS
|
||||
[SYMB] = LAYOUT_ergodox_wrapper(
|
||||
// left hand
|
||||
___FUNC_1_6___, ___,
|
||||
___SYMBOLS6_1___, ___,
|
||||
___SYMBOLS6_2___,
|
||||
___SYMBOLS6_3___, ___,
|
||||
___SYMBOLS5_4___,
|
||||
___6___,
|
||||
|
||||
|
||||
// right hand
|
||||
___, ___FUNC_7_12___,
|
||||
___, ___SYMPAD_1___,
|
||||
/**/ ___SYMPAD_2___,
|
||||
___, ___SYMPAD_3___,
|
||||
/**/ ___5_SYMPAD_4___,
|
||||
___6___
|
||||
),
|
||||
|
||||
[SYMB_ON_BEPO] = LAYOUT_ergodox_wrapper(
|
||||
// left hand
|
||||
___FUNC_1_6___, ___,
|
||||
___SYMBOLS6_1_BP___, ___,
|
||||
___SYMBOLS6_2_BP___,
|
||||
___SYMBOLS6_3_BP___, ___,
|
||||
___SYMBOLS5_4_BP___,
|
||||
___6___,
|
||||
|
||||
|
||||
// right hand
|
||||
___, ___FUNC_7_12___,
|
||||
___, ___SYMPAD_1_BP___,
|
||||
/**/ ___SYMPAD_2_BP___,
|
||||
___, ___SYMPAD_3_BP___,
|
||||
/**/ ___5_SYMPAD_4_BP___,
|
||||
___6___
|
||||
),
|
||||
|
||||
[KEYPAD] = LAYOUT_ergodox_wrapper(
|
||||
___FUNC_1_6___, ___,
|
||||
___2___, ___FUNCPAD_T___, ___, ___,
|
||||
___2___, ___FUNCPAD_1___, ___,
|
||||
___2___, ___FUNCPAD_2___, ___, ___,
|
||||
___2___, ___FUNCPAD_3___,
|
||||
___6___,
|
||||
|
||||
// right hand
|
||||
___, ___FUNC_7_12___,
|
||||
___, ___, ___KEYPAD_1___, ___,
|
||||
/**/ ___, ___KEYPAD_2___, ___,
|
||||
___, ___, ___KEYPAD_3___, ___,
|
||||
/* */ ___KEYPAD_4___, ___,
|
||||
___6___
|
||||
),
|
||||
|
||||
[KEYPAD_ON_BEPO] = LAYOUT_ergodox_wrapper(
|
||||
___FUNC_1_6___, ___,
|
||||
___2___, ___FUNCPAD_T___, ___, ___,
|
||||
___2___, ___FUNCPAD_1___, ___,
|
||||
___2___, ___FUNCPAD_2___, ___, ___,
|
||||
___2___, ___FUNCPAD_3___,
|
||||
___6___,
|
||||
|
||||
// right hand
|
||||
___, ___FUNC_7_12___,
|
||||
___, ___, ___KEYPAD_1_BP___, ___,
|
||||
/**/ ___, ___KEYPAD_2_BP___, ___,
|
||||
___, ___, ___KEYPAD_3_BP___, ___,
|
||||
/* */ ___KEYPAD_4_BP___, ___,
|
||||
___6___
|
||||
),
|
||||
|
||||
// MEDIA AND MOUSE
|
||||
[MDIA] = LAYOUT_ergodox_wrapper(
|
||||
// left hand
|
||||
___FUNC_1_6___, ___,
|
||||
___MOUSE_BTNS_L___, ___, ___,
|
||||
___, ___MOUSE_LDUR___, ___,
|
||||
___, ___MWHEEL_LDUR___, XXX, ___,
|
||||
___, ___, ___MOUSE_ACCL_012___,
|
||||
___6___,
|
||||
|
||||
// right hand
|
||||
___, ___FUNC_7_12___,
|
||||
___, KC_VOLU, ___MUTE_PRV_PLAY_NXT_STOP___,
|
||||
/**/ KC_VOLD, ___VI_ARROWS___, ___,
|
||||
___, ___, ___MOUSE_BTNS_R___,
|
||||
/* */ KC_PGDN, KC_PGUP, ___3___,
|
||||
___6___
|
||||
),
|
||||
|
||||
[LAYERS] = LAYOUT_ergodox_wrapper(
|
||||
// left hand
|
||||
___FUNC_1_6___, ___,
|
||||
XXX, XXX, XXX, ___2_LAYERS_B1___, XXX, ___,
|
||||
XXX, XXX, XXX, ___2_LAYERS_B2___, XXX,
|
||||
XXX, XXX, ___3_LAYERS_B3___, XXX, ___,
|
||||
___5___,
|
||||
___6___,
|
||||
|
||||
// right hand
|
||||
___, ___FUNC_7_12___,
|
||||
___, XXX, ___3_LAYERS_T_BP___, ___2___,
|
||||
/**/ XXX, ___3_LAYERS_T___, ___2___,
|
||||
___, XXX, ___3_LAYERS_T_CTL___, ___2___,
|
||||
___5___,
|
||||
___6___
|
||||
),
|
||||
[_NAV] = Dox_transient(___12___, ___NAV_3x12___),
|
||||
[_LAYERS] = Dox_transient(___12___, ___LAYERS_3x12___),
|
||||
[_RGB] = Dox_transient(___12___, ___RGB_3x12___),
|
||||
};
|
||||
|
||||
|
||||
|
||||
// Runs constantly in the background, in a loop.
|
||||
void matrix_scan_user(void) {
|
||||
|
||||
uint8_t layer = biton32(layer_state);
|
||||
|
||||
ergodox_board_led_off();
|
||||
ergodox_right_led_1_off();
|
||||
ergodox_right_led_2_off();
|
||||
ergodox_right_led_3_off();
|
||||
if(!on_qwerty())
|
||||
ergodox_right_led_1_on();
|
||||
switch (layer) {
|
||||
//case DVORAK:
|
||||
//ergodox_right_led_1_off();
|
||||
//break;
|
||||
// first led on for a bepo software keyboard layer
|
||||
case DVORAK_ON_BEPO:
|
||||
ergodox_right_led_2_on();
|
||||
break;
|
||||
case BEPO:
|
||||
ergodox_right_led_1_on();
|
||||
ergodox_right_led_1_off();
|
||||
ergodox_right_led_1_on();
|
||||
ergodox_right_led_1_off();
|
||||
ergodox_right_led_1_on();
|
||||
break;
|
||||
case SYMB:
|
||||
ergodox_right_led_3_on();
|
||||
break;
|
||||
case MDIA:
|
||||
ergodox_right_led_3_on();
|
||||
break;
|
||||
case LAYERS:
|
||||
ergodox_right_led_1_on();
|
||||
ergodox_right_led_2_on();
|
||||
ergodox_right_led_3_on();
|
||||
break;
|
||||
default:
|
||||
ergodox_board_led_off();
|
||||
break;
|
||||
|
||||
/* default: */
|
||||
/* // none */
|
||||
/* break; */
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
clear_oneshot_mods();
|
||||
set_oneshot_locked_mods(mods);
|
||||
register_mods(mods);
|
||||
|
||||
register_code(action.key.code);
|
||||
unregister_code(action.key.code);
|
||||
|
||||
layer_on(action.layer_tap.val);
|
||||
layer_off(action.layer_tap.val);
|
||||
|
||||
clear_oneshot_locked_mods();
|
||||
clear_oneshot_mods();
|
||||
unregister_mods(mods);
|
||||
|
||||
*/
|
||||
|
||||
@@ -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__)
|
||||
@@ -19,175 +19,30 @@
|
||||
#include "ericgebhart.h"
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
// 4x10
|
||||
[_DVORAK] = BASE_5x14(___NUMS___, ___DVORAK___),
|
||||
[_QWERTY] = BASE_5x14(___NUMS___, ___QWERTY___),
|
||||
[_COLEMAK] = BASE_5x14(___NUMS___, ___COLEMAK_DH___),
|
||||
[_BEAKL] = BASE_5x14(___BKLNUMS___, ___BEAKL15___),
|
||||
|
||||
[DVORAK] = LAYOUT_ortho_5x14_wrapper(
|
||||
KC_GRV, ___12_DVORAK_1___, KC_SLASH,
|
||||
TAB_BKTAB, ___12_DVORAK_2___, KC_MINUS,
|
||||
KC_LSFT, ___12_DVORAK_3___, KC_RSFT,
|
||||
___ORTHO_14_BOTTOM___,
|
||||
___ORTHO_14_THUMBS_BOTTOM___
|
||||
),
|
||||
//[_DVORAK_BP] = BASE_5x14_bepo(___DVORAK_FR___),
|
||||
//[_BEAKL_BP] = BASE_5x14_bepo(___BEAKL15_FR___),
|
||||
|
||||
[QWERTY] = LAYOUT_ortho_5x14_wrapper(
|
||||
KC_GRV, ___12_QWERTY_1___, KC_SLASH,
|
||||
TAB_BKTAB, ___12_QWERTY_2___, KC_MINUS,
|
||||
KC_LSFT, ___12_QWERTY_3___, KC_RSFT,
|
||||
___ORTHO_14_BOTTOM___,
|
||||
___ORTHO_14_THUMBS_BOTTOM___
|
||||
),
|
||||
// 4x12
|
||||
//[_BEPO] = BASE_5x14_bepo6(___BEPO6_FR___),
|
||||
|
||||
[COLEMAK] = LAYOUT_ortho_5x14_wrapper(
|
||||
KC_GRV, ___12_COLEMAK_1___, KC_SLASH,
|
||||
TAB_BKTAB, ___12_COLEMAK_2___, KC_MINUS,
|
||||
KC_LSFT, ___12_COLEMAK_3___, KC_RSFT,
|
||||
___ORTHO_14_BOTTOM___,
|
||||
___ORTHO_14_THUMBS_BOTTOM___
|
||||
),
|
||||
// transient macro takes a 3x12 for args
|
||||
[_SYMB] = TRANSIENT_5x14(___12___, ___SYMB_BEAKLA_3x12___),
|
||||
//[_SYMB_BP] = TRANSIENT_5x14(___SYMB_BEAKLA_BP_3x12___),
|
||||
|
||||
[WORKMAN] = LAYOUT_ortho_5x14_wrapper(
|
||||
KC_GRV, ___12_WORKMAN_1___, KC_SLASH,
|
||||
TAB_BKTAB, ___12_WORKMAN_2___, KC_MINUS,
|
||||
KC_LSFT, ___12_WORKMAN_3___, KC_RSFT,
|
||||
___ORTHO_14_BOTTOM___,
|
||||
___ORTHO_14_THUMBS_BOTTOM___
|
||||
),
|
||||
[_TOPROWS] = TRANSIENT_5x14(___12___, ___TOPROWS_3x12___),
|
||||
//[_TOPROWS_BP] = TRANSIENT_5x14(___TOPROWS_BP_3x12___),
|
||||
|
||||
[NORMAN] = LAYOUT_ortho_5x14_wrapper(
|
||||
KC_GRV, ___12_NORMAN_1___, KC_SLASH,
|
||||
TAB_BKTAB, ___12_NORMAN_2___, KC_MINUS,
|
||||
KC_LSFT, ___12_NORMAN_3___, KC_RSFT,
|
||||
___ORTHO_14_BOTTOM___,
|
||||
___ORTHO_14_THUMBS_BOTTOM___
|
||||
),
|
||||
[_KEYPAD] = TRANSIENT_5x14(___12___, ___KP_C_3x12___),
|
||||
//[_KEYPAD_BP] = TRANSIENT_5x14(___KP_C_BP_3x12___),
|
||||
|
||||
[DVORAK_ON_BEPO] = LAYOUT_ortho_5x14_wrapper(
|
||||
KC_GRV, ___12_DVORAK_B_1___, KC_SLASH,
|
||||
TAB_BKTAB, ___12_DVORAK_B_2___, KC_MINUS,
|
||||
KC_LSFT, ___12_DVORAK_B_3___, KC_RSFT,
|
||||
___ORTHO_14_BOTTOM_FR___,
|
||||
___ORTHO_14_THUMBS_BOTTOM___
|
||||
),
|
||||
|
||||
[BEPO] = LAYOUT_ortho_5x14_wrapper(
|
||||
KC_GRV, ___12_DVORAK_B_1___, KC_SLASH,
|
||||
TAB_BKTAB, ___12_DVORAK_B_2___, KC_MINUS,
|
||||
KC_LSFT, ___12_DVORAK_B_3___, KC_RSFT,
|
||||
___ORTHO_14_BOTTOM_BP___,
|
||||
___ORTHO_14_THUMBS_BOTTOM___
|
||||
),
|
||||
|
||||
[XMONAD] = LAYOUT_ortho_5x14_wrapper(
|
||||
___, ___12_DVORAK_1___, ___,
|
||||
___, ___12_DVORAK_2___, ___,
|
||||
___, ___12_DVORAK_3___, ___,
|
||||
___14___,
|
||||
___14___
|
||||
),
|
||||
|
||||
[XMONAD_FR] = LAYOUT_ortho_5x14_wrapper(
|
||||
___, ___12_DVORAK_B_1___, ___,
|
||||
___, ___12_DVORAK_B_2___, ___,
|
||||
___, ___12_DVORAK_B_3___, ___,
|
||||
___14___,
|
||||
___14___
|
||||
),
|
||||
|
||||
|
||||
// SYMBOLS
|
||||
[SYMB] = LAYOUT_ortho_5x14_wrapper(
|
||||
___14_SYMB_1___,
|
||||
___14_SYMB_2___,
|
||||
___14_SYMB_3___,
|
||||
___14_SYMB_4___,
|
||||
___14___
|
||||
),
|
||||
|
||||
[KEYPAD] = LAYOUT_ortho_5x14_wrapper(
|
||||
___14_KP_1___,
|
||||
___14_KP_2___,
|
||||
___14_KP_3___,
|
||||
___14_KP_4___,
|
||||
___14___
|
||||
),
|
||||
|
||||
[KEYPAD_ON_BEPO] = LAYOUT_ortho_5x14_wrapper(
|
||||
___14_KP_B_1___,
|
||||
___14_KP_B_2___,
|
||||
___14_KP_B_3___,
|
||||
___14_KP_B_4___,
|
||||
___14___
|
||||
),
|
||||
|
||||
[SYMB_ON_BEPO] = LAYOUT_ortho_5x14_wrapper(
|
||||
___14_SYMB_B_1___,
|
||||
___14_SYMB_B_2___,
|
||||
___14_SYMB_B_3___,
|
||||
___14_SYMB_B_4___,
|
||||
___14___
|
||||
),
|
||||
|
||||
// MEDIA AND MOUSE
|
||||
[MDIA] = LAYOUT_ortho_5x14_wrapper(
|
||||
___14_MDIA_1___,
|
||||
___14_MDIA_2___,
|
||||
___14_MDIA_3___,
|
||||
___14_MDIA_4___,
|
||||
___14___
|
||||
),
|
||||
|
||||
[LAYERS] = LAYOUT_ortho_5x14_wrapper(
|
||||
___14_LAYERS_1___,
|
||||
___14_LAYERS_2___,
|
||||
___14_LAYERS_3___,
|
||||
___14___,
|
||||
___14___
|
||||
),
|
||||
|
||||
[_RGB] = LAYOUT_ortho_5x14_wrapper(
|
||||
___14_RGB_1___,
|
||||
___14_RGB_2___,
|
||||
___14_RGB_3___,
|
||||
___14___,
|
||||
___14___
|
||||
),
|
||||
// Navigation and control
|
||||
[_NAV] = TRANSIENT_5x14(___12___, ___NAV_3x12___),
|
||||
[_LAYERS] = TRANSIENT_5x14(___12___, ___LAYERS_3x12___),
|
||||
//[_RGB] = TRANSIENT_5x14(___12___, ___RGB_3x12___),
|
||||
};
|
||||
|
||||
/* bool process_record_user(uint16_t keycode, keyrecord_t *record) { */
|
||||
/* switch (keycode) { */
|
||||
/* case QWERTY: */
|
||||
/* if (record->event.pressed) { */
|
||||
/* set_single_persistent_default_layer(_QWERTY); */
|
||||
/* } */
|
||||
/* return false; */
|
||||
/* break; */
|
||||
/* case LOWER: */
|
||||
/* if (record->event.pressed) { */
|
||||
/* layer_on(_LOWER); */
|
||||
/* update_tri_layer(_LOWER, _RAISE, _ADJUST); */
|
||||
/* } else { */
|
||||
/* layer_off(_LOWER); */
|
||||
/* update_tri_layer(_LOWER, _RAISE, _ADJUST); */
|
||||
/* } */
|
||||
/* return false; */
|
||||
/* break; */
|
||||
/* case RAISE: */
|
||||
/* if (record->event.pressed) { */
|
||||
/* layer_on(_RAISE); */
|
||||
/* update_tri_layer(_LOWER, _RAISE, _ADJUST); */
|
||||
/* } else { */
|
||||
/* layer_off(_RAISE); */
|
||||
/* update_tri_layer(_LOWER, _RAISE, _ADJUST); */
|
||||
/* } */
|
||||
/* return false; */
|
||||
/* break; */
|
||||
/* case ADJUST: */
|
||||
/* if (record->event.pressed) { */
|
||||
/* layer_on(_ADJUST); */
|
||||
/* } else { */
|
||||
/* layer_off(_ADJUST); */
|
||||
/* } */
|
||||
/* return false; */
|
||||
/* break; */
|
||||
/* } */
|
||||
/* return true; */
|
||||
/* } */
|
||||
|
||||
@@ -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.
|
||||
@@ -20,136 +20,33 @@
|
||||
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
// 4x10
|
||||
[_DVORAK] = BASE_5x15(___NUMS___, ___DVORAK___),
|
||||
[_QWERTY] = BASE_5x15(___NUMS___, ___QWERTY___),
|
||||
[_COLEMAK] = BASE_5x15(___NUMS___, ___COLEMAK_DH___),
|
||||
[_BEAKL] = BASE_5x15(___BKLNUMS___, ___BEAKL15___),
|
||||
|
||||
[DVORAK] = LAYOUT_ortho_5x15_wrapper(
|
||||
KC_GRV, ___ORTHO_15_N___, KC_EQL,
|
||||
KC_LOCK, ___13_DVORAK_1___, KC_SLASH,
|
||||
TAB_BKTAB, ___13_DVORAK_2___, KC_MINUS,
|
||||
KC_LSFT, ___13_DVORAK_3___, KC_RSFT,
|
||||
___ORTHO_15_BOTTOM___
|
||||
),
|
||||
//[_DVORAK_BP] = BASE_5x15_bepo(___DVORAK_FR___),
|
||||
//[_BEAKL_BP] = BASE_5x15_bepo(___BEAKL15_FR___),
|
||||
|
||||
[QWERTY] = LAYOUT_ortho_5x15_wrapper(
|
||||
KC_GRV, ___ORTHO_15_N___, KC_EQL,
|
||||
KC_LOCK, ___13_QWERTY_1___, KC_SLASH,
|
||||
TAB_BKTAB, ___13_QWERTY_2___, KC_MINUS,
|
||||
KC_LSFT, ___13_QWERTY_3___, KC_RSFT,
|
||||
___ORTHO_15_BOTTOM___
|
||||
),
|
||||
// 4x12
|
||||
//[_BEPO] = BASE_5x15_bepo6(___BEPO6_FR___),
|
||||
|
||||
[COLEMAK] = LAYOUT_ortho_5x15_wrapper(
|
||||
KC_GRV, ___ORTHO_15_N___, KC_EQL,
|
||||
KC_LOCK, ___13_COLEMAK_1___, KC_SLASH,
|
||||
TAB_BKTAB, ___13_COLEMAK_2___, KC_MINUS,
|
||||
KC_LSFT, ___13_COLEMAK_3___, KC_RSFT,
|
||||
___ORTHO_15_BOTTOM___
|
||||
),
|
||||
// transient macro takes a 4x12 for args
|
||||
[_SYMB] = TRANSIENT_5x15(___12___, ___SYMB_BEAKLA_3x12___),
|
||||
//[_SYMB_BP] = TRANSIENT_5x15(___12___, ___SYMB_BEAKLA_BP_3x12___),
|
||||
|
||||
[WORKMAN] = LAYOUT_ortho_5x15_wrapper(
|
||||
KC_GRV, ___ORTHO_15_N___, KC_EQL,
|
||||
KC_LOCK, ___13_WORKMAN_1___, KC_SLASH,
|
||||
TAB_BKTAB, ___13_WORKMAN_2___, KC_MINUS,
|
||||
KC_LSFT, ___13_WORKMAN_3___, KC_RSFT,
|
||||
___ORTHO_15_BOTTOM___
|
||||
),
|
||||
[_TOPROWS] = TRANSIENT_5x15(___12___, ___TOPROWS_3x12___),
|
||||
//[_TOPROWS_BP] = TRANSIENT_5x15(___12___, ___TOPROWS_BP_3x12___),
|
||||
|
||||
[NORMAN] = LAYOUT_ortho_5x15_wrapper(
|
||||
KC_GRV, ___ORTHO_15_N___, KC_EQL,
|
||||
KC_LOCK, ___13_NORMAN_1___, KC_SLASH,
|
||||
TAB_BKTAB, ___13_NORMAN_2___, KC_MINUS,
|
||||
KC_LSFT, ___13_NORMAN_3___, KC_RSFT,
|
||||
___ORTHO_15_BOTTOM___
|
||||
),
|
||||
[_KEYPAD] = TRANSIENT_5x15(___12___, ___KP_C_3x12___),
|
||||
//[_KEYPAD_BP] = TRANSIENT_5x15(___12___, ___KP_C_BP_3x12___),
|
||||
|
||||
[DVORAK_ON_BEPO] = LAYOUT_ortho_5x15_wrapper(
|
||||
DB_GRV, ___ORTHO_15_B_N___, DB_EQL,
|
||||
KC_LOCK, ___13_DVORAK_B_1___, DB_SLASH,
|
||||
TAB_BKTAB, ___13_DVORAK_B_2___, DB_MINUS,
|
||||
KC_LSFT, ___13_DVORAK_B_3___, KC_RSFT,
|
||||
___ORTHO_15_BOTTOM_FR___
|
||||
),
|
||||
|
||||
[XMONAD] = LAYOUT_ortho_5x15_wrapper(
|
||||
___ORTHO_15_FUNC_1_12___,
|
||||
___, ___13_DVORAK_1___, ___,
|
||||
___, ___13_DVORAK_2___, ___,
|
||||
___, ___13_DVORAK_3___, ___,
|
||||
___15___
|
||||
),
|
||||
|
||||
[XMONAD_FR] = LAYOUT_ortho_5x15_wrapper(
|
||||
___ORTHO_15_FUNC_1_12___,
|
||||
___, ___13_DVORAK_B_1___, ___,
|
||||
___, ___13_DVORAK_B_2___, ___,
|
||||
___, ___13_DVORAK_B_3___, ___,
|
||||
___15___
|
||||
),
|
||||
|
||||
[BEPO] = LAYOUT_ortho_5x15_wrapper(
|
||||
___ORTHO_15_B_SYMB___,
|
||||
KC_LOCK, ___13_BEPO_1___, BP_W,
|
||||
TAB_BKTAB, ___13_BEPO_2___, BP_CCED,
|
||||
BP_SFT_T_ECRC, ___13_BEPO_3___, BP_SFT_T_W,
|
||||
___ORTHO_15_BOTTOM_BP___
|
||||
),
|
||||
|
||||
// SYMBOLS
|
||||
[SYMB] = LAYOUT_ortho_5x15_wrapper(
|
||||
___ORTHO_15_FUNC_1_12___,
|
||||
___15_SYMB_1___,
|
||||
___15_SYMB_2___,
|
||||
___15_SYMB_3___,
|
||||
___15_SYMB_4___
|
||||
),
|
||||
|
||||
[KEYPAD] = LAYOUT_ortho_5x15_wrapper(
|
||||
___ORTHO_15_FUNC_1_12___,
|
||||
___15_KP_1___,
|
||||
___15_KP_2___,
|
||||
___15_KP_3___,
|
||||
___15_KP_4___
|
||||
),
|
||||
|
||||
[KEYPAD_ON_BEPO] = LAYOUT_ortho_5x15_wrapper(
|
||||
___ORTHO_15_FUNC_1_12___,
|
||||
___15_KP_B_1___,
|
||||
___15_KP_B_2___,
|
||||
___15_KP_B_3___,
|
||||
___15_KP_B_4___
|
||||
),
|
||||
|
||||
[SYMB_ON_BEPO] = LAYOUT_ortho_5x15_wrapper(
|
||||
___ORTHO_15_FUNC_1_12___,
|
||||
___15_SYMB_B_1___,
|
||||
___15_SYMB_B_2___,
|
||||
___15_SYMB_B_3___,
|
||||
___15_SYMB_B_4___
|
||||
),
|
||||
|
||||
// MEDIA AND MOUSE
|
||||
[MDIA] = LAYOUT_ortho_5x15_wrapper(
|
||||
___ORTHO_15_FUNC_1_12___,
|
||||
___15_MDIA_1___,
|
||||
___15_MDIA_2___,
|
||||
___15_MDIA_3___,
|
||||
___15_MDIA_4___
|
||||
),
|
||||
|
||||
[LAYERS] = LAYOUT_ortho_5x15_wrapper(
|
||||
___ORTHO_15_FUNC_1_12___,
|
||||
___15_LAYERS_1___,
|
||||
___15_LAYERS_2___,
|
||||
___15_LAYERS_3___,
|
||||
___15___
|
||||
),
|
||||
|
||||
[_RGB] = LAYOUT_ortho_5x15_wrapper(
|
||||
___ORTHO_15_FUNC_1_12___,
|
||||
___15_RGB_1___,
|
||||
___15_RGB_2___,
|
||||
___15_RGB_3___,
|
||||
___15___
|
||||
),
|
||||
// Navigation and control
|
||||
[_NAV] = TRANSIENT_5x15(___12___, ___NAV_3x12___),
|
||||
[_LAYERS] = TRANSIENT_5x15(___12___, ___LAYERS_3x12___),
|
||||
//[_RGB] = TRANSIENT_5x15(___12___, ___RGB_3x12___),
|
||||
[_ADJUST] = TRANSIENT_5x15(___12___, ___ADJUST_3x12___),
|
||||
};
|
||||
|
||||
|
||||
@@ -199,18 +96,18 @@ void keyboard_post_init_user(void) {
|
||||
|
||||
layer_state_t layer_state_set_user(layer_state_t state) {
|
||||
// rgblight_set_layer_state(0, !on_qwerty());
|
||||
rgblight_set_layer_state(0, layer_state_cmp(state, DVORAK));
|
||||
rgblight_set_layer_state(0, layer_state_cmp(state, _DVORAK));
|
||||
|
||||
rgblight_set_layer_state(1, layer_state_cmp(state, BEPO));
|
||||
rgblight_set_layer_state(2, layer_state_cmp(state, DVORAK));
|
||||
rgblight_set_layer_state(1, layer_state_cmp(state, _BEPO));
|
||||
rgblight_set_layer_state(2, layer_state_cmp(state, _DVORAK));
|
||||
//|| layer_state_cmp(state, DVORAK_ON_BEPO)));
|
||||
rgblight_set_layer_state(3, layer_state_cmp(state, MDIA));
|
||||
rgblight_set_layer_state(4, layer_state_cmp(state, SYMB) );
|
||||
rgblight_set_layer_state(3, layer_state_cmp(state, _NAV));
|
||||
rgblight_set_layer_state(4, layer_state_cmp(state, _SYMB) );
|
||||
|
||||
//(layer_state_cmp(state, SYMB) || (layer_state_cmp(state, SYMB_ON_BEPO))));
|
||||
rgblight_set_layer_state(5, layer_state_cmp(state, KEYPAD) );
|
||||
rgblight_set_layer_state(5, layer_state_cmp(state, _KEYPAD) );
|
||||
///(layer_state_cmp(state, KEYPAD) || (layer_state_cmp(state, KEYPAD_ON_BEPO))));
|
||||
rgblight_set_layer_state(6, layer_state_cmp(state, LAYERS));
|
||||
rgblight_set_layer_state(6, layer_state_cmp(state, _LAYERS));
|
||||
rgblight_set_layer_state(7, layer_state_cmp(state, _RGB));
|
||||
return state;
|
||||
}
|
||||
|
||||
Executable
+94
@@ -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.
|
||||
@@ -1,8 +1,29 @@
|
||||
/*
|
||||
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 USERSPACE_CONFIG_H
|
||||
#define USERSPACE_CONFIG_H
|
||||
|
||||
#include "../../config.h"
|
||||
|
||||
#define NO_ACTION_MACRO
|
||||
#define NO_ACTION_FUNCTION
|
||||
#define COMBO_MUST_HOLD_MODS
|
||||
#define COMBO_HOLD_TERM 150
|
||||
// Sets good default for the speed of the mouse.
|
||||
#undef MOUSEKEY_INTERVAL
|
||||
#undef MOUSEKEY_DELAY
|
||||
@@ -26,7 +47,7 @@
|
||||
#undef TAPPING_TERM
|
||||
#undef IGNORE_MOD_TAP_INTERRUPT
|
||||
|
||||
#define TAPPING_TOGGLE 1
|
||||
#define TAPPING_TOGGLE 2
|
||||
#define TAPPING_TERM 200
|
||||
#define IGNORE_MOD_TAP_INTERRUPT
|
||||
|
||||
|
||||
Regular → Executable
+108
-121
@@ -19,42 +19,13 @@
|
||||
#include "quantum.h"
|
||||
#include "process_keycode/process_tap_dance.h"
|
||||
#include "eeconfig.h"
|
||||
#include "keymap_bepo.h"
|
||||
#include "altlocal_keys.h"
|
||||
|
||||
//#define ONESHOT_TAP_TOGGLE 2 /* Tapping this number of times holds the key until tapped once again. */
|
||||
|
||||
void tap(uint16_t keycode);
|
||||
bool process_record_secrets(uint16_t keycode, keyrecord_t *record);
|
||||
|
||||
|
||||
typedef union {
|
||||
uint8_t raw;
|
||||
struct {
|
||||
bool clicky_enable :1;
|
||||
bool rgb_layer_change :1;
|
||||
bool is_overwatch :1;
|
||||
bool nuke_switch :1;
|
||||
};
|
||||
} userspace_config_t;
|
||||
|
||||
|
||||
// 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)
|
||||
|
||||
uint8_t gr(uint8_t);
|
||||
void send_keycode(uint8_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]
|
||||
|
||||
|
||||
enum userspace_custom_keycodes {
|
||||
// keep the keycodes using the send_key function close to SAFE_RANGE
|
||||
// so the array of keycodes remains a reasonbale size.
|
||||
@@ -91,37 +62,106 @@ enum userspace_custom_keycodes {
|
||||
DB_LESS,
|
||||
DB_GRTR,
|
||||
// End of dvorak on bepo translation keys.
|
||||
// BEAKL on Qwerty..
|
||||
BQ_DOT,
|
||||
BQ_COMM,
|
||||
BQ_QUOT,
|
||||
// End of beakl on qwerty
|
||||
BB_DOT,
|
||||
BB_COMM,
|
||||
BB_QUOT,
|
||||
// End of beakl on Bepo
|
||||
|
||||
EPRM,
|
||||
VRSN,
|
||||
KC_DVORAK_ON_BEPO,
|
||||
KC_BEPO,
|
||||
KC_NORMAN,
|
||||
// Default keyboard layouts - Same order as enum.
|
||||
KC_DVORAK,
|
||||
KC_QWERTY,
|
||||
KC_COLEMAK,
|
||||
KC_DVORAK,
|
||||
KC_WORKMAN,
|
||||
KC_BEAKL,
|
||||
// KC_WORKMAN,
|
||||
// KC_NORMAN,
|
||||
// KC_MALTRON,
|
||||
// KC_EUCALYN,
|
||||
// KC_CARPLAX,
|
||||
KC_DVORAK_BP,
|
||||
KC_BEAKL_BP,
|
||||
KC_BEPO,
|
||||
KC_LAYERS,
|
||||
|
||||
// Misc.
|
||||
KC_MAKE,
|
||||
KC_RESET,
|
||||
KC_RGB_T,
|
||||
RGB_IDL,
|
||||
KC_SECRET_1,
|
||||
KC_SECRET_2,
|
||||
KC_SECRET_3,
|
||||
KC_SECRET_4,
|
||||
KC_SECRET_5,
|
||||
KC_CCCV
|
||||
KC_CCCV, // Ctrl-C V in one key.
|
||||
BP_CCCV,
|
||||
KC_CTCN, // Ctrl-T N in one key.
|
||||
BP_CTCN,
|
||||
KC_CWCQ, // Ctrl-W Q in one key.
|
||||
BP_CWCQ,
|
||||
KC_XM_PORD, // Xmonad gui-e, gui-t for the scratchpads or desktops.
|
||||
BP_XM_PORD,
|
||||
KC_OCPRN, // Open, or open and close, cursor in the middle with hold.
|
||||
BP_OCPRN,
|
||||
KC_OCBRC,
|
||||
BP_OCBRC,
|
||||
KC_OCCBR,
|
||||
BP_OCCBR,
|
||||
KC_OCDQUO,
|
||||
BP_OCDQUO,
|
||||
KC_OCQUOT,
|
||||
BP_OCQUOT,
|
||||
KC_OCGRV,
|
||||
BP_OCGRV,
|
||||
KC_OCLTGT,
|
||||
BP_OCLTGT,
|
||||
UC_FLIP,
|
||||
UC_TABL,
|
||||
UC_SHRG,
|
||||
UC_DISA,
|
||||
KC_SPACETEST,
|
||||
NEW_SAFE_RANGE
|
||||
};
|
||||
|
||||
#define SFTGUI_T(kc) { MT(MOD_LGUI | MOD_LSFT, kc) }
|
||||
#define SFT_GUI_ESC MT(MOD_LSFT | MOD_LGUI, KC_PGDN) // shift LGUI or Escape.
|
||||
#define ALT_ENT ALT_T(KC_ENT) // Alt or enter
|
||||
#define CTL_SPC CTL_T(KC_SPC) // ctrl or space
|
||||
#define CTL_BSPC CTL_T(KC_BSPC) // ctrl or backspace
|
||||
#define ALT_DEL ALT_T(KC_DEL) // Alt or delete
|
||||
#define GUI_ESC GUI_T(KC_ESC) // Gui or escape
|
||||
#define ALGR_SYMB ALGR_T(TG(SYMB)) // Alt gre or toggle symbol layer
|
||||
#define CTLGUI_T(kc) MT(MOD_LGUI | MOD_LCTL, kc)
|
||||
#define SFTGUI_T(kc) MT(MOD_LGUI | MOD_LSFT, kc)
|
||||
#define ALTGUI_T(kc) MT(MOD_LGUI | MOD_LALT, kc)
|
||||
|
||||
#define ALT_ENT ALT_T(KC_ENT) // Alt or enter
|
||||
#define CTL_SPC CTL_T(KC_SPC) // ctrl or space
|
||||
#define CTL_BSPC CTL_T(KC_BSPC) // ctrl or backspace
|
||||
#define ALT_DEL ALT_T(KC_DEL) // Alt or delete
|
||||
#define GUI_ESC GUI_T(KC_ESC) // Gui or escape
|
||||
#define ALGR_SYMB ALGR_T(TG(_SYMB)) // Alt gre or toggle symbol layer
|
||||
|
||||
#define ENT_NAV LT(_NAV, KC_ENT)
|
||||
#define ENT_TOPR LT(_TOPROWS, KC_ENT)
|
||||
#define ENT_TOPR_BP LT(_TOPROWS_BP, KC_ENT)
|
||||
#define ESC_TOPR LT(_TOPROWS, KC_ESC)
|
||||
#define ESC_TOPR_BP LT(_TOPROWS_BP, KC_ESC)
|
||||
#define ESC_SYMB LT(_SYMB, KC_ESC)
|
||||
#define ESC_SYMB_BP LT(_SYMB_BP, KC_ESC)
|
||||
#define SPC_NAV LT(_NAV, KC_SPC)
|
||||
#define SPC_TOPR LT(_TOPROWS, KC_SPC)
|
||||
#define SPC_TOPR_BP LT(_TOPROWS_BP, KC_SPC)
|
||||
#define SPC_LAYR LT(_LAYERS, KC_SPC)
|
||||
#define SPC_LAYR_BP LT(_LAYERS, KC_SPC)
|
||||
#define SPC_ADJ LT(_ADJUST, KC_SPC)
|
||||
#define SPC_ADJ_BP LT(_ADJUST, KC_SPC)
|
||||
#define BSPC_SYMB LT(_SYMB, KC_BSPC)
|
||||
#define BSPC_SYMB_BP LT(_SYMB_BP, KC_BSPC)
|
||||
#define BSPC_TOPR LT(_TOPROWS, KC_BSPC)
|
||||
#define BSPC_TOPR_BP LT(_TOPROWS_BP, KC_BSPC)
|
||||
#define SPC_NUM LT(_KEYPAD, KC_SPC)
|
||||
#define SPC_NUM_BP LT(_KEYPAD_BP, KC_SPC)
|
||||
#define BSPC_NUM LT(_KEYPAD, KC_BSPC)
|
||||
#define BSPC_NUM_BP LT(_KEYPAD_BP, KC_BSPC)
|
||||
|
||||
// OSM keycodes, to keep things clean and easy to change
|
||||
#define KC_MLSF OSM(MOD_LSFT)
|
||||
@@ -138,6 +178,9 @@ enum userspace_custom_keycodes {
|
||||
|
||||
#define MG_NKRO MAGIC_TOGGLE_NKRO
|
||||
|
||||
#define UC_IRNY UC(0x2E2E)
|
||||
#define UC_CLUE UC(0x203D)
|
||||
|
||||
|
||||
//// TAP DANCE
|
||||
|
||||
@@ -166,11 +209,16 @@ enum {
|
||||
TD_DEF_LAYER_SW = 5,
|
||||
TD_DEF_OS_LAYER_SW = 6,
|
||||
TD_MOUSE_BTNS = 7,
|
||||
TD_DVORAK_BEPO = 8
|
||||
TD_DVORAK_BEPO = 8,
|
||||
TD_UP_HOME = 9,
|
||||
TD_DOWN_END = 10,
|
||||
TD_RIGHT_TAB = 11,
|
||||
TD_LEFT_BACKTAB = 12
|
||||
};
|
||||
|
||||
|
||||
// Tap dance
|
||||
#define KC_BKTAB LSFT(KC_TAB)
|
||||
#define TAB_BKTAB TD(TD_TAB_BKTAB) // Tab or backtab tapdance.
|
||||
#define MDIA_SYMB_KP_LAYERS TD(TD_MDIA_SYMB) // MDIA, symb, keypad, layouts layer tapdance toggle.
|
||||
#define DEF_LAYER_SW TD(TD_DEF_LAYER_SW) // dvorak, dvorak_on_bepo, bepo default layer
|
||||
@@ -179,100 +227,34 @@ enum {
|
||||
#define XMONAD_ESC TD(TD_XMONAD_ESC) // Escape, dvorak, media or symb. - tap and hold tap dance. 1-4
|
||||
#define DVORAK_ET_BEPO TD(TD_DVORAK_BEPO) // Escape, dvorak, media or symb. - tap and hold tap dance. 1-4
|
||||
#define TDMOUSE_BTNS TD(TD_MOUSE_BTNS) // hmmm. 1-5
|
||||
#define RIGHT_TAB TD(TD_RIGHT_TAB) // Bad idea these 4. Maybe with good timing...
|
||||
#define LEFT_BACKTAB TD(TD_LEFT_BACKTAB)
|
||||
#define UP_HOME TD(TD_UP_HOME)
|
||||
#define DOWN_END TD(TD_DOWN_END) // No! Down Down Not End....
|
||||
|
||||
// HOME ROW LAYER TOGGLE (LT) and Shift.
|
||||
// both sides of the home row have "shift, ___, media , symb, ___" and "___, symb, media, ___, shift".
|
||||
// so pinky fingers are shift when held and the index and second fingers are symbol and
|
||||
// media layers when held.
|
||||
|
||||
// Dvorak
|
||||
// shift and layer switch on hold on the home row.
|
||||
#define KC_SFT_T_A SFT_T(KC_A)
|
||||
#define KC_SFT_T_S SFT_T(KC_S)
|
||||
|
||||
#define KC_LT_SYMB_U LT(SYMB, KC_U)
|
||||
#define KC_LT_SYMB_H LT(SYMB, KC_H)
|
||||
|
||||
#define KC_LT_MDIA_E LT(MDIA, KC_E)
|
||||
#define KC_LT_MDIA_T LT(MDIA, KC_T)
|
||||
|
||||
// Need to add this to the others.
|
||||
#define KC_LT_KP_N LT(KEYPAD, KC_N)
|
||||
#define KC_LT_KP_O LT(KEYPAD, KC_O)
|
||||
|
||||
// for dvorak on bepo
|
||||
#define BP_SFT_T_A SFT_T(BP_A)
|
||||
#define BP_SFT_T_S SFT_T(BP_S)
|
||||
|
||||
#define BP_LT_SYMB_U LT(SYMB, BP_U)
|
||||
#define BP_LT_SYMB_H LT(MDIA, BP_H)
|
||||
|
||||
#define BP_LT_MDIA_E LT(MDIA, BP_E)
|
||||
#define BP_LT_MDIA_T LT(MDIA, BP_T)
|
||||
|
||||
// Need to add this to the others.
|
||||
#define BP_LT_KP_N LT(KEYPAD, BP_N)
|
||||
#define BP_LT_KP_O LT(KEYPAD, BP_O)
|
||||
|
||||
// for bepo on bepo
|
||||
#define BP_SFT_T_T SFT_T(BP_T)
|
||||
#define BP_SFT_T_W SFT_T(BP_W)
|
||||
|
||||
#define BP_LT_SYMB_I LT(SYMB_ON_BEPO, BP_I)
|
||||
#define BP_LT_MDIA_E LT(MDIA, BP_E)
|
||||
#define BP_LT_KP_U LT(KEYPAD, BP_U)
|
||||
|
||||
#define BP_LT_SYMB_S LT(SYMB_ON_BEPO, BP_S)
|
||||
#define BP_LT_MDIA_R LT(MDIA, BP_R)
|
||||
#define BP_LT_KP_N LT(KEYPAD, BP_N)
|
||||
|
||||
#define BP_SFT_T_A SFT_T(BP_A)
|
||||
#define BP_SFT_T_S SFT_T(BP_S)
|
||||
#define BP_SFT_T_E SFT_T(BP_E)
|
||||
#define BP_SFT_T_M SFT_T(BP_M)
|
||||
|
||||
#define BP_SFT_T_ECRC SFT_T(BP_ECIR)
|
||||
#define BP_SFT_T_CCED SFT_T(BP_CCED)
|
||||
#define BP_LT_SYMB_COMM LT(SYMB,BP_COMM)
|
||||
|
||||
//QWERTY
|
||||
#define KC_SFT_T_SCLN SFT_T(KC_SCLN)
|
||||
|
||||
#define KC_LT_MDIA_D LT(MDIA, KC_D)
|
||||
#define KC_LT_MDIA_K LT(MDIA, KC_K)
|
||||
#define KC_LT_SYMB_F LT(SYMB, KC_F)
|
||||
#define KC_LT_SYMB_J LT(SYMB, KC_J)
|
||||
|
||||
//COLEMAK
|
||||
#define KC_SFT_T_O SFT_T(KC_O)
|
||||
#define KC_LT_MDIA_S LT(MDIA, KC_S)
|
||||
#define KC_LT_SYMB_T LT(SYMB, KC_T)
|
||||
|
||||
#define KC_LT_MDIA_E LT(MDIA, KC_E)
|
||||
#define KC_LT_SYMB_N LT(SYMB, KC_N)
|
||||
|
||||
//WORKMAN
|
||||
#define KC_SFT_T_I SFT_T(KC_I)
|
||||
#define KC_LT_MDIA_H LT(MDIA, KC_H)
|
||||
|
||||
//NORMAN
|
||||
// For keys on the homerow. Hold for shift, keypad,mouse,and smbol layers
|
||||
#define KC_SFT_T_U SFT_T(KC_U)
|
||||
#define KC_LT_MDIA_I LT(MDIA, KC_I)
|
||||
|
||||
// The most portable copy/paste keys (windows (mostly), linux, and some terminal emulators).
|
||||
// The KC_CCCV key takes care of the last two...
|
||||
#define MK_CUT LSFT(KC_DEL) // shift + delete
|
||||
#define MK_COPY LCTL(KC_INS) // ctrl + insert
|
||||
#define MK_PASTE LSFT(KC_INS) // shift + insert
|
||||
|
||||
#undef ___ //kint defines it as KC_NO
|
||||
#define ___ KC_TRNS
|
||||
#define XXX KC_NO
|
||||
|
||||
// Blocking keys
|
||||
#define _X_ XXX
|
||||
#define ___X___ XXX
|
||||
#define ___X2___ XXX, XXX
|
||||
#define ___X3___ ___X2___, XXX
|
||||
#define ___X5___ ___X3___, XXX, XXX
|
||||
#define ___X6___ ___X5___, XXX
|
||||
#define ___X12___ ___X6___, ___X6___
|
||||
#define ___X15___ ___X5___, ___X5___, ___X5___
|
||||
|
||||
// Transparent keys
|
||||
@@ -281,13 +263,18 @@ enum {
|
||||
#define ___4___ ___3___, ___
|
||||
#define ___5___ ___4___, ___
|
||||
#define ___6___ ___5___, ___
|
||||
#define ___12___ ___6___, ___6___
|
||||
#define ___14___ ___5___, ___4___, ___5___
|
||||
#define ___15___ ___5___, ___5___, ___5___
|
||||
#define ___16___ ___15___, ___
|
||||
|
||||
int on_qwerty(void);
|
||||
int get_xmonad_layer(void);
|
||||
|
||||
#ifdef TAP_DANCES_ENABLE
|
||||
int cur_dance (qk_tap_dance_state_t *state);
|
||||
|
||||
//for the x tap dance. Put it here so it can be used in any keymap
|
||||
void x_finished (qk_tap_dance_state_t *state, void *user_data);
|
||||
void x_reset (qk_tap_dance_state_t *state, void *user_data);
|
||||
#endif
|
||||
|
||||
Regular → Executable
+280
-228
File diff suppressed because it is too large
Load Diff
@@ -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___
|
||||
Regular → Executable
-590
File diff suppressed because it is too large
Load Diff
Regular → Executable
+60
-20
@@ -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
|
||||
|
||||
Executable
+677
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
Executable
+303
@@ -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()); */
|
||||
Executable
+24
@@ -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);
|
||||
Executable
+255
@@ -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;
|
||||
}
|
||||
Regular → Executable
+168
-80
@@ -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.
|
||||
Warning: dvorak touch typist, that uses qwerty and bepo locales on my
|
||||
computer. 40+ years of vi, 30 years of vi in Emacs.
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
There are also Qwerty, Colemak, Workman and Norman layers for qwerty.
|
||||
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.
|
||||
|
||||
Keyboard Layout Templates
|
||||
-------------------------
|
||||
Layouts
|
||||
-----------
|
||||
This evolved from the old layout...wrapper code. Calling everything a wrapper seems
|
||||
silly. So I took a step back.
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
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:
|
||||
* 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.
|
||||
|
||||
`#define LAYOUT_ergodox_wrapper(...) LAYOUT_ergodox(__VA_ARGS__)`
|
||||
Process_records.c
|
||||
--------------------
|
||||
This is where the keycodes are processed...
|
||||
|
||||
Once that's been done and you've switched the keymaps to use the "wrapper", it will read the substitution blocks just fine.
|
||||
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.
|
||||
|
||||
Credit goes to @jola5 for first implementing this awesome idea.
|
||||
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.
|
||||
|
||||
Custom Keycodes
|
||||
---------------
|
||||
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.
|
||||
|
||||
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.
|
||||
I followed the simple example at the end of the doc than uses the
|
||||
combos.def file to define the combos.
|
||||
|
||||
Layer Indication
|
||||
----------------
|
||||
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.
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
BEPO vs Qwerty Layers
|
||||
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 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.
|
||||
|
||||
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.
|
||||
The navigation/mouse layer is not affected by bepo/qwerty, but symbols and numbers are.
|
||||
There are bepo versions of everything that needs it.
|
||||
|
||||
There are two tap dance functions that allow switching the default layers
|
||||
and the overlay layers.
|
||||
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.
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
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...
|
||||
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.
|
||||
|
||||
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 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.
|
||||
|
||||
I have a few other special keys, for momentary symbols or shift on the home row of each hand.
|
||||
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.
|
||||
|
||||
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
|
||||
|
||||
Executable
+269
@@ -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
|
||||
Executable
+19
@@ -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"
|
||||
Reference in New Issue
Block a user