mirror of
https://github.com/openstenoproject/qmk
synced 2024-11-10 10:39:09 +00:00
[Keymap] ninjonas keymap updates (#8373)
* [keymap(ninjonas)] ninjonas keymap updates * [refactor] switching encoder rotation logic. recent pull seems to have flipped encoder stuff * [keymap(lily58)] added chrome change profile key on RAISE Co-authored-by: Jonas Avellana <jonas.avellana@workday.com>
This commit is contained in:
parent
40e8d60ecd
commit
0fdd37ee19
20 changed files with 293 additions and 173 deletions
|
@ -20,7 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
|
||||
#pragma once
|
||||
|
||||
#define TAPPING_TERM 300
|
||||
#define TAPPING_TERM 200
|
||||
|
||||
#define MASTER_LEFT
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#define TAPPING_TERM 300
|
||||
#define TAPPING_TERM 200
|
||||
|
||||
#ifdef OLED_DRIVER_ENABLE
|
||||
#define OLED_DISPLAY_128X64
|
||||
|
|
|
@ -1,84 +0,0 @@
|
|||
/* Copyright 2020 ninjonas
|
||||
*
|
||||
* 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 "ninjonas.h"
|
||||
|
||||
#ifdef ENCODER_ENABLE
|
||||
void encoder_update_user(uint8_t index, bool clockwise) {
|
||||
if (index == 0) {
|
||||
switch (get_highest_layer(layer_state)) {
|
||||
case _LOWER:
|
||||
if (clockwise) {
|
||||
tap_code16(SGUI(KC_TAB));
|
||||
} else {
|
||||
tap_code16(LGUI(KC_TAB));
|
||||
}
|
||||
break;
|
||||
case _RAISE:
|
||||
if (clockwise) {
|
||||
tap_code(KC_PGUP);
|
||||
} else {
|
||||
tap_code(KC_PGDN);
|
||||
}
|
||||
break;
|
||||
case _ADJUST:
|
||||
if (clockwise) {
|
||||
rgblight_increase_hue();
|
||||
} else {
|
||||
rgblight_decrease_hue();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (clockwise) {
|
||||
tap_code(KC_BRIU);
|
||||
} else {
|
||||
tap_code(KC_BRID);
|
||||
}
|
||||
break;
|
||||
}
|
||||
} else if (index == 1) {
|
||||
switch (get_highest_layer(layer_state)) {
|
||||
case _LOWER:
|
||||
if (clockwise) {
|
||||
tap_code(KC_UP);
|
||||
} else {
|
||||
tap_code(KC_DOWN);
|
||||
}
|
||||
break;
|
||||
case _RAISE:
|
||||
if (clockwise) {
|
||||
tap_code16(LCTL(KC_TAB));
|
||||
} else {
|
||||
tap_code16(LCTL(LSFT(KC_TAB)));
|
||||
}
|
||||
break;
|
||||
case _ADJUST:
|
||||
if (clockwise) {
|
||||
rgblight_increase_val();
|
||||
} else {
|
||||
rgblight_decrease_val();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (clockwise) {
|
||||
tap_code(KC_VOLU);
|
||||
} else {
|
||||
tap_code(KC_VOLD);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
|
@ -24,7 +24,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||
// |--------+-----——-+——------+-——-----+——------+——-----| |------—+——------+——------+——------+——------+--------|
|
||||
_____________________QWERTY_L2______________________, _____________________QWERTY_R2______________________,
|
||||
// |--------+-----——-+——------+-——-----+——------+——-----+———-----------. ,——————————————+------—+——------+——------+——------+——------+--------|
|
||||
_____________________QWERTY_L3______________________,XXXXXXX,KC_LALT, T_CPNU,XXXXXXX,_____________________QWERTY_R3______________________,
|
||||
_____________________QWERTY_L3______________________,XXXXXXX,KC_LALT, T_CPAP,XXXXXXX,_____________________QWERTY_R3______________________,
|
||||
// `--------------------------+--------+--------+-------+-------+------| |------+-------+-------+--------+--------+--------+--------+--------'
|
||||
_____________MOD_LEFT_____________,T_LBRC, T_RBRC,________MOD_RIGHT________,KC_MUTE
|
||||
// `----------------------------------------' `----------------------------------------'
|
||||
|
@ -36,7 +36,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||
// |--------+-----——-+——------+-——-----+——------+——-----| |------—+——------+——------+——------+——------+--------|
|
||||
_____________________DVORAK_L2______________________, _____________________DVORAK_R2______________________,
|
||||
// |--------+-----——-+——------+-——-----+——------+——-----+———-----------. ,——————————————+------—+——------+——------+——------+——------+--------|
|
||||
_____________________DVORAK_L3______________________,XXXXXXX,KC_LALT, T_CPNU,XXXXXXX,_____________________DVORAK_R3______________________,
|
||||
_____________________DVORAK_L3______________________,XXXXXXX,KC_LALT, T_CPAP,XXXXXXX,_____________________DVORAK_R3______________________,
|
||||
// `--------------------------+--------+--------+-------+-------+------| |------+-------+-------+--------+--------+--------+--------+--------'
|
||||
_____________MOD_LEFT_____________,T_LBRC, T_RBRC,________MOD_RIGHT________,KC_MUTE
|
||||
// `----------------------------------------' `----------------------------------------'
|
||||
|
@ -48,7 +48,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||
// |--------+-----——-+——------+-——-----+——------+——-----| |------—+——------+——------+——------+——------+--------|
|
||||
_____________________COLEMAK_L2_____________________, _____________________COLEMAK_R2_____________________,
|
||||
// |--------+-----——-+——------+-——-----+——------+——-----+———-----------. ,——————————————+------—+——------+——------+——------+——------+--------|
|
||||
_____________________COLEMAK_L3_____________________,XXXXXXX,KC_LALT, T_CPNU,XXXXXXX,_____________________COLEMAK_R3_____________________,
|
||||
_____________________COLEMAK_L3_____________________,XXXXXXX,KC_LALT, T_CPAP,XXXXXXX,_____________________COLEMAK_R3_____________________,
|
||||
// `--------------------------+--------+--------+-------+-------+------| |------+-------+-------+--------+--------+--------+--------+--------'
|
||||
_____________MOD_LEFT_____________,T_LBRC, T_RBRC,________MOD_RIGHT________,KC_MUTE
|
||||
// `----------------------------------------' `----------------------------------------'
|
||||
|
|
|
@ -105,8 +105,12 @@ void oled_white_space(void){
|
|||
oled_write_P(PSTR(" "), false);
|
||||
}
|
||||
|
||||
void oled_slash_separator(void){
|
||||
oled_write_P(PSTR(" / "), false);
|
||||
}
|
||||
|
||||
void render_layout_state(void) {
|
||||
oled_write_P(PSTR("\nLayout: "), false);
|
||||
oled_write_P(PSTR("Layout: "), false);
|
||||
switch (biton32(default_layer_state)) {
|
||||
case _COLEMAK:
|
||||
oled_write_P(PSTR("Colemak"), false);
|
||||
|
@ -121,6 +125,37 @@ void render_layout_state(void) {
|
|||
oled_write_ln_P(PSTR("Undefined"), false);
|
||||
}
|
||||
}
|
||||
#ifdef ENCODER_ENABLE
|
||||
static void render_encoder_state(void) {
|
||||
oled_write_P(PSTR("\nEnc: "), false);
|
||||
bool lower = layer_state_is(_LOWER) & !layer_state_is(_ADJUST);
|
||||
bool raise = layer_state_is(_RAISE) & !layer_state_is(_ADJUST);
|
||||
bool adjust = layer_state_is(_ADJUST);
|
||||
|
||||
if(lower){
|
||||
oled_write_P(PSTR("APPSW"), left_encoder_rotated);
|
||||
oled_slash_separator();
|
||||
oled_write_P(PSTR("UPDN"), right_encoder_rotated);
|
||||
} else if(raise){
|
||||
oled_write_P(PSTR("PGUD"), left_encoder_rotated);
|
||||
oled_slash_separator();
|
||||
oled_write_P(PSTR("TABSW"), right_encoder_rotated);
|
||||
} else if(adjust){
|
||||
oled_write_P(PSTR("RHUE"), left_encoder_rotated);
|
||||
oled_slash_separator();
|
||||
oled_write_P(PSTR("RBRI"), right_encoder_rotated);
|
||||
} else {
|
||||
oled_write_P(PSTR("BRI"), left_encoder_rotated);
|
||||
oled_slash_separator();
|
||||
oled_write_P(PSTR("VOL"), right_encoder_rotated);
|
||||
}
|
||||
|
||||
if (timer_elapsed(encoder_rotated_timer) > 200) {
|
||||
left_encoder_rotated = false;
|
||||
right_encoder_rotated = false;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static void render_layer_state(void) {
|
||||
oled_write_P(PSTR("\nLayer:"), false);
|
||||
|
@ -156,6 +191,9 @@ void render_mod_state(uint8_t modifiers) {
|
|||
static void render_status(void) {
|
||||
render_qmk_logo();
|
||||
render_layout_state();
|
||||
#ifdef ENCODER_ENABLE
|
||||
render_encoder_state();
|
||||
#endif
|
||||
render_layer_state();
|
||||
render_mod_state(get_mods()|get_oneshot_mods());
|
||||
}
|
||||
|
|
|
@ -3,5 +3,4 @@ ENCODER_ENABLE = yes # Enables the use of one or more encoders
|
|||
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
|
||||
LINK_TIME_OPTIMIZATION_ENABLE = yes
|
||||
|
||||
SRC += encoder.c \
|
||||
oled.c
|
||||
SRC += oled.c
|
|
@ -125,7 +125,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||
XXXXXXX, XXXXXXX, _____________MOUSE_1______________, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, _____________MOUSE_2______________, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
__________________________________, __________________________________
|
||||
__________________________________, _______, _______, _______, K_CPRF
|
||||
),
|
||||
|
||||
/* ADJUST
|
||||
|
|
|
@ -1 +1,2 @@
|
|||
OLED_DRIVER_ENABLE = yes
|
||||
LINK_TIME_OPTIMIZATION_ENABLE = yes
|
|
@ -27,5 +27,5 @@
|
|||
#define USE_SERIAL_PD2
|
||||
|
||||
#define TAPPING_FORCE_HOLD
|
||||
#define TAPPING_TERM 300
|
||||
#define TAPPING_TERM 200
|
||||
#define RETRO_TAPPPING
|
|
@ -31,7 +31,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||
//|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
|
||||
_____________________QWERTY_L3______________________, LT_RAI, LT_LOW, _____________________QWERTY_R3______________________,
|
||||
//|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
|
||||
________MOD_LEFT_________, K_LAPP, K_RAPP, ________MOD_RIGHT________
|
||||
________MOD_LEFT_________, XXXXXXX, XXXXXXX, ________MOD_RIGHT________
|
||||
//`---------------------------------------' `---------------------------------------'
|
||||
),
|
||||
|
||||
|
@ -43,7 +43,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||
//|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
|
||||
_____________________DVORAK_L3______________________, LT_RAI, LT_LOW, _____________________DVORAK_R3______________________,
|
||||
//|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
|
||||
________MOD_LEFT_________, K_LAPP, K_RAPP, ________MOD_RIGHT________
|
||||
________MOD_LEFT_________, XXXXXXX, XXXXXXX, ________MOD_RIGHT________
|
||||
//`---------------------------------------' `---------------------------------------'
|
||||
),
|
||||
|
||||
|
@ -55,7 +55,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||
//|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
|
||||
_____________________COLEMAK_L3_____________________, LT_RAI, LT_LOW, _____________________COLEMAK_R3_____________________,
|
||||
//|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
|
||||
________MOD_LEFT_________, K_LAPP, K_RAPP, ________MOD_RIGHT________
|
||||
________MOD_LEFT_________, XXXXXXX, XXXXXXX, ________MOD_RIGHT________
|
||||
//`---------------------------------------' `---------------------------------------'
|
||||
),
|
||||
|
||||
|
|
|
@ -23,8 +23,6 @@ See: https://docs.qmk.fm/#/feature_userspace
|
|||
|K_LOCK | MacOS shortcut to execute lock command Cmd + CTRL + Q |
|
||||
|K_CSCN | MacOS shortcut to copy a portion of the screen to the clipboard |
|
||||
|K_MDSH | MacOS shortcut to get em-dash `–` |
|
||||
|K_RAPP | MacOS shortcut to switch apps to the right |
|
||||
|K_LAPP | MacOS shortcut to switch apps to the left |
|
||||
|K_CPRF | Cmd + Shift + M. Used for switching Google Chrome profiles |
|
||||
|
||||
### [Layers](ninjonas.h)
|
||||
|
@ -32,17 +30,12 @@ See: https://docs.qmk.fm/#/feature_userspace
|
|||
|---|---|
|
||||
|LT_LOW | Tap for ENTER, hold for RAISE |
|
||||
|LT_RAI | Tap for SPACE, hold for LOWER |
|
||||
|LT_LOW + LT_RAI | Hold for ADJUST |
|
||||
|LM_LOW | Dedicated key to momentarily toggle to use LOWER layer |
|
||||
|LM_RAI | Dedicated key to momentarily toggle to use RAISE layer |
|
||||
|LG_LOW | Press to toggle LOWER layer |
|
||||
|LG_RAI | Press to toggle RAISE layer |
|
||||
|
||||
### [Mod-Taps](ninjonas.h)
|
||||
|Code | Description |
|
||||
|---|---|
|
||||
|MT_DEL | Tap for Delete, hold for Cmd + ALT + SHIFT |
|
||||
|MT_EQL | Tap for =, hold for ALT + SHIFT |
|
||||
|MT_DEL | Tap for Delete, hold for ALT + SHIFT |
|
||||
|MT_EQL | Tap for =, SHIFT |
|
||||
|
||||
### [Layout Blocks](ninjonas.h)
|
||||
Predefined keyboard layout templates to speed up configuring split keyboards
|
||||
|
@ -72,7 +65,6 @@ Predefined keyboard layout templates to speed up configuring split keyboards
|
|||
|M_SHFT | Sends Cmd + alt + shift to a keycode to activate [ShiftIt](https://github.com/fikovnik/ShiftIt) |
|
||||
|M_CODE | Opens [Visual Studio Code](https://code.visualstudio.com/) on current directory |
|
||||
|M_TERM | Launches Spotlight and calls Terminal |
|
||||
|M_COPA | Single key copy/paste |
|
||||
|M_XXX1 to M_XXX5 | Reserved for secret macros see [Secrets](#secrets) |
|
||||
|
||||
### [Tap-Dance](tap_dances.h)
|
||||
|
@ -84,11 +76,18 @@ Predefined keyboard layout templates to speed up configuring split keyboards
|
|||
|T_TAB | Tap once for TAB, double for CTRL + TAB |
|
||||
|T_GRV | Tap once for GRV, double for Cmd + GRV |
|
||||
|T_GUI | Tap once for Cmd, double to open spotlight |
|
||||
|T_W | Tap for W, double tap for Cmd + W |
|
||||
|T_Q | Tap for Q, double tap for Cmd + Q |
|
||||
|T_CPNU | Tap for Cmd + V, hold for Cmd + C, double tap for NUMPAD layer |
|
||||
|T_CPAP | Tap for Cmd + V, hold for Cmd + C, double tap to open [Line](https://line.me/en/) app, triple tap for itunes. |
|
||||
|T_Y | Tap for Y, double tap for NUMPAD layer |
|
||||
|
||||
### [Combos](combos.h)
|
||||
|Code | Description |
|
||||
|---|---|
|
||||
|EQ_QUIT | Press E + Q will trigger Cmd + Q |
|
||||
|RW_CLOSE | Press R + W will trigger Cmd + W|
|
||||
|ET_TAB | Press E + T will trigger Cmd + T|
|
||||
|ZC_COPY | Press Z + C will trigger Cmd + C|
|
||||
|XV_PASTE | Press X + V will trigger Cmd + V|
|
||||
|
||||
### Secrets
|
||||
There's times where you have macros you don't want to share like emails, an address you need but you always forget, passwords 😱, & and private strings. Based off [drashna's secret macros](https://github.com/qmk/qmk_firmware/blob/master/users/drashna/readme_secrets.md), it's now possible to do this. All you need to do is create a `secrets.c` file. Below is an example of how this is used.
|
||||
|
||||
|
|
55
users/ninjonas/combos.c
Normal file
55
users/ninjonas/combos.c
Normal file
|
@ -0,0 +1,55 @@
|
|||
#include "ninjonas.h"
|
||||
|
||||
#ifdef COMBO_ENABLE
|
||||
enum combo_events {
|
||||
EQ_QUIT,
|
||||
RW_CLOSE,
|
||||
QT_TAB,
|
||||
ZC_COPY,
|
||||
XV_PASTE
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM quit_combo[] = {KC_E, KC_Q, COMBO_END};
|
||||
const uint16_t PROGMEM close_combo[] = {KC_R, KC_W, COMBO_END};
|
||||
const uint16_t PROGMEM tab_combo[] = {KC_Q, KC_T, COMBO_END};
|
||||
const uint16_t PROGMEM copy_combo[] = {KC_Z, KC_C, COMBO_END};
|
||||
const uint16_t PROGMEM paste_combo[] = {KC_X, KC_V, COMBO_END};
|
||||
|
||||
combo_t key_combos[COMBO_COUNT] = {
|
||||
[EQ_QUIT] = COMBO_ACTION(quit_combo),
|
||||
[RW_CLOSE] = COMBO_ACTION(close_combo),
|
||||
[QT_TAB] = COMBO_ACTION(tab_combo),
|
||||
[ZC_COPY] = COMBO_ACTION(copy_combo),
|
||||
[XV_PASTE] = COMBO_ACTION(paste_combo),
|
||||
};
|
||||
|
||||
void process_combo_event(uint8_t combo_index, bool pressed) {
|
||||
switch(combo_index) {
|
||||
case EQ_QUIT:
|
||||
if (pressed) {
|
||||
tap_code16(LGUI(KC_Q));
|
||||
}
|
||||
break;
|
||||
case RW_CLOSE:
|
||||
if (pressed) {
|
||||
tap_code16(LGUI(KC_W));
|
||||
}
|
||||
break;
|
||||
case QT_TAB:
|
||||
if (pressed) {
|
||||
tap_code16(LGUI(KC_T));
|
||||
}
|
||||
break;
|
||||
case ZC_COPY:
|
||||
if (pressed) {
|
||||
tap_code16(LGUI(KC_C));
|
||||
}
|
||||
break;
|
||||
case XV_PASTE:
|
||||
if (pressed) {
|
||||
tap_code16(LGUI(KC_V));
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
|
@ -1,6 +1,6 @@
|
|||
#ifdef TAPPING_TERM
|
||||
#undef TAPPING_TERM
|
||||
#define TAPPING_TERM 300
|
||||
#define TAPPING_TERM 200
|
||||
#endif
|
||||
|
||||
// Mouse Settings: Smoothing out mouse movement on keypress
|
||||
|
@ -11,4 +11,11 @@
|
|||
#define MOUSEKEY_DELAY 0
|
||||
#define MOUSEKEY_TIME_TO_MAX 60
|
||||
#define MOUSEKEY_MAX_SPEED 7
|
||||
#define MOUSEKEY_WHEEL_DELAY 0
|
||||
#define MOUSEKEY_WHEEL_DELAY 0
|
||||
|
||||
#ifdef COMBO_ENABLE
|
||||
#undef COMBO_COUNT
|
||||
#undef COMBO_TERM
|
||||
#define COMBO_COUNT 5
|
||||
#define COMBO_TERM 60
|
||||
#endif
|
104
users/ninjonas/encoder.c
Normal file
104
users/ninjonas/encoder.c
Normal file
|
@ -0,0 +1,104 @@
|
|||
/* Copyright 2020 ninjonas
|
||||
*
|
||||
* 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 "ninjonas.h"
|
||||
|
||||
#ifdef ENCODER_ENABLE
|
||||
void left_encoder_cw(void) {
|
||||
switch (get_highest_layer(layer_state)) {
|
||||
case _LOWER:
|
||||
tap_code16(LGUI(KC_TAB));
|
||||
break;
|
||||
case _RAISE:
|
||||
tap_code(KC_PGDN);
|
||||
break;
|
||||
case _ADJUST:
|
||||
rgblight_decrease_hue();
|
||||
break;
|
||||
default:
|
||||
tap_code(KC_BRID);
|
||||
break;
|
||||
}
|
||||
}
|
||||
void left_encoder_acw(void) {
|
||||
switch (get_highest_layer(layer_state)) {
|
||||
case _LOWER:
|
||||
tap_code16(SGUI(KC_TAB));
|
||||
break;
|
||||
case _RAISE:
|
||||
tap_code(KC_PGUP);
|
||||
break;
|
||||
case _ADJUST:
|
||||
rgblight_increase_hue();
|
||||
break;
|
||||
default:
|
||||
tap_code(KC_BRIU);
|
||||
break;
|
||||
}
|
||||
}
|
||||
void right_encoder_cw(void) {
|
||||
switch (get_highest_layer(layer_state)) {
|
||||
case _LOWER:
|
||||
tap_code(KC_DOWN);
|
||||
break;
|
||||
case _RAISE:
|
||||
tap_code16(LCTL(LSFT(KC_TAB)));
|
||||
break;
|
||||
case _ADJUST:
|
||||
rgblight_decrease_val();
|
||||
break;
|
||||
default:
|
||||
tap_code(KC_VOLD);
|
||||
break;
|
||||
}
|
||||
}
|
||||
void right_encoder_acw(void) {
|
||||
switch (get_highest_layer(layer_state)) {
|
||||
case _LOWER:
|
||||
tap_code(KC_UP);
|
||||
break;
|
||||
case _RAISE:
|
||||
tap_code16(LCTL(KC_TAB));
|
||||
break;
|
||||
case _ADJUST:
|
||||
rgblight_increase_val();
|
||||
break;
|
||||
default:
|
||||
tap_code(KC_VOLU);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void encoder_update_user(uint8_t index, bool clockwise) {
|
||||
encoder_rotated_timer = timer_read();
|
||||
if (index == 0) {
|
||||
left_encoder_rotated = true;
|
||||
if (clockwise) {
|
||||
left_encoder_cw();
|
||||
} else {
|
||||
left_encoder_acw();
|
||||
}
|
||||
}
|
||||
else if (index == 1) {
|
||||
right_encoder_rotated = true;
|
||||
if (clockwise) {
|
||||
right_encoder_cw();
|
||||
} else {
|
||||
right_encoder_acw();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
|
@ -27,6 +27,12 @@
|
|||
#include "split_util.h"
|
||||
#endif
|
||||
|
||||
#ifdef ENCODER_ENABLE
|
||||
bool left_encoder_rotated;
|
||||
bool right_encoder_rotated;
|
||||
uint16_t encoder_rotated_timer;
|
||||
#endif
|
||||
|
||||
#define _QWERTY 0
|
||||
#define _DVORAK 1
|
||||
#define _COLEMAK 2
|
||||
|
@ -40,24 +46,17 @@
|
|||
#define K_CSCN LGUI(LCTL(LSFT(KC_4))) // Copy a portion of the screen to the clipboard
|
||||
#define K_CPRF LGUI(LSFT(KC_M)) // Cmd + Shift + M. Used for switching Google Chrome profiles
|
||||
#define K_MDSH LSFT(LALT(KC_MINS))
|
||||
#define K_LAPP SGUI(KC_TAB) // Cmd + Shift + Tab
|
||||
#define K_RAPP LGUI(KC_TAB) // Cmd + Tab
|
||||
|
||||
// Layer Keys
|
||||
#define LM_LOW MO(_LOWER)
|
||||
#define LM_RAI MO(_RAISE)
|
||||
#define LG_LOW TG(_LOWER)
|
||||
#define LG_RAI TG(_RAISE)
|
||||
#define LG_NUM TG(_NUMPAD)
|
||||
#define LT_LOW LT(_LOWER, KC_ENT)
|
||||
#define LT_RAI LT(_RAISE, KC_SPC)
|
||||
|
||||
// Mod-Tap Keys
|
||||
#define MT_DEL MT(MOD_LGUI | MOD_LALT | MOD_LSFT, KC_DEL)
|
||||
#define MT_EQL MT(MOD_LALT | MOD_LSFT, KC_EQL)
|
||||
#define MT_DEL MT(MOD_LALT | MOD_LSFT, KC_DEL)
|
||||
#define MT_EQL MT(MOD_RSFT, KC_EQL)
|
||||
|
||||
// Layout blocks
|
||||
#define _____________________QWERTY_L1______________________ T_TAB, T_Q, KC_W, KC_E, KC_R, KC_T
|
||||
#define _____________________QWERTY_L1______________________ T_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T
|
||||
#define _____________________QWERTY_L2______________________ T_ESC, KC_A, KC_S, KC_D, KC_F, KC_G
|
||||
#define _____________________QWERTY_L3______________________ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B
|
||||
|
||||
|
@ -130,7 +129,7 @@
|
|||
#define __________________________________ _______, _______, _______, _______
|
||||
|
||||
#define _____________MOD_LEFT_____________ KC_LALT, T_GUI, KC_LCTL, LT_RAI
|
||||
#define _____________MOD_RIGHT____________ LT_LOW, KC_BSPC, MT_DEL, T_CPNU
|
||||
#define _____________MOD_RIGHT____________ LT_LOW, KC_BSPC, MT_DEL, T_CPAP
|
||||
|
||||
#define _________MEDIA_1_________ KC_BRIU, KC_MPLY, KC_MUTE
|
||||
#define _________MEDIA_2_________ KC_BRID, KC_MFFD, KC__VOLUP
|
||||
|
@ -141,7 +140,7 @@
|
|||
#define ________MOD_RIGHT________ LT_LOW, KC_BSPC, MT_DEL
|
||||
#else
|
||||
#define ________MOD_LEFT_________ KC_LALT, T_GUI, KC_LCTL
|
||||
#define ________MOD_RIGHT________ KC_BSPC, MT_DEL, T_CPNU
|
||||
#define ________MOD_RIGHT________ KC_BSPC, MT_DEL, T_CPAP
|
||||
#endif
|
||||
|
||||
// Layout wrappers
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
#include "ninjonas.h"
|
||||
|
||||
uint16_t copy_paste_timer;
|
||||
|
||||
__attribute__((weak))
|
||||
bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { return true; }
|
||||
|
||||
|
@ -92,18 +90,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
|||
}
|
||||
break;
|
||||
|
||||
// Single key copy/paste
|
||||
case M_COPA:
|
||||
if (record->event.pressed) {
|
||||
copy_paste_timer = timer_read();
|
||||
} else {
|
||||
if (timer_elapsed(copy_paste_timer) > TAPPING_TERM) {
|
||||
tap_code16(LGUI(KC_C)); // Hold Cmd + C
|
||||
} else {
|
||||
tap_code16(LGUI(KC_V)); // Tap Cmd + V
|
||||
}
|
||||
}
|
||||
|
||||
// BEGIN: Layer macros
|
||||
case QWERTY:
|
||||
if (record->event.pressed) {
|
||||
|
|
|
@ -15,7 +15,6 @@ enum custom_keycodes {
|
|||
M_VRSN,
|
||||
M_CODE,
|
||||
M_TERM,
|
||||
M_COPA,
|
||||
// Secret Macros
|
||||
M_XXX1,
|
||||
M_XXX2,
|
||||
|
|
|
@ -2,11 +2,14 @@ BOOTMAGIC_ENABLE = no # Disable Boot Magic (https://beta.docs.qmk.fm/featu
|
|||
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||
TAP_DANCE_ENABLE = yes # Enable Tap Dance.
|
||||
COMBO_ENABLE = yes # Enable Combos
|
||||
|
||||
SRC += ninjonas.c \
|
||||
process_records.c \
|
||||
tap_dances.c \
|
||||
oled.c
|
||||
oled.c \
|
||||
encoder.c \
|
||||
combos.c
|
||||
|
||||
ifneq ("$(wildcard $(USER_PATH)/secrets.c)","")
|
||||
SRC += secrets.c
|
||||
|
|
|
@ -2,28 +2,41 @@
|
|||
|
||||
//// BEGIN: Advanced Tap Dances
|
||||
int cur_dance (qk_tap_dance_state_t *state) {
|
||||
if (state->count == 1) {
|
||||
if (!state->pressed) {
|
||||
return SINGLE_TAP;
|
||||
} else {
|
||||
return SINGLE_HOLD;
|
||||
}
|
||||
} else if (state->count == 2) {
|
||||
return DOUBLE_TAP;
|
||||
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 return 8;
|
||||
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
|
||||
}
|
||||
|
||||
// BEGIN: Copy, Paste, NUMPAD
|
||||
// BEGIN: Copy, Paste, Apps
|
||||
// https://beta.docs.qmk.fm/features/feature_tap_dance#example-6-using-tap-dance-for-momentary-layer-switch-and-layer-toggle-keys
|
||||
static tap copy_paste_numpad_tap_state = {
|
||||
static tap copy_paste_app_tap_state = {
|
||||
.is_press_action = true,
|
||||
.state = 0
|
||||
};
|
||||
|
||||
void copy_paste_numpad_finished (qk_tap_dance_state_t *state, void *user_data) {
|
||||
copy_paste_numpad_tap_state.state = cur_dance(state);
|
||||
switch (copy_paste_numpad_tap_state.state) {
|
||||
void copy_paste_app_finished (qk_tap_dance_state_t *state, void *user_data) {
|
||||
copy_paste_app_tap_state.state = cur_dance(state);
|
||||
switch (copy_paste_app_tap_state.state) {
|
||||
case SINGLE_TAP:
|
||||
tap_code16(LGUI(KC_V)); // Tap Cmd + V
|
||||
break;
|
||||
|
@ -31,19 +44,22 @@ void copy_paste_numpad_finished (qk_tap_dance_state_t *state, void *user_data) {
|
|||
tap_code16(LGUI(KC_C)); // Hold Cmd + C
|
||||
break;
|
||||
case DOUBLE_TAP:
|
||||
if (layer_state_is(_NUMPAD)) {
|
||||
layer_off(_NUMPAD);
|
||||
} else {
|
||||
layer_on(_NUMPAD);
|
||||
}
|
||||
SEND_STRING(SS_DOWN(X_LGUI) SS_TAP(X_SPACE) SS_UP(X_LGUI));
|
||||
wait_ms(250);
|
||||
SEND_STRING("line\n");
|
||||
break;
|
||||
case TRIPLE_TAP:
|
||||
SEND_STRING(SS_DOWN(X_LGUI) SS_TAP(X_SPACE) SS_UP(X_LGUI));
|
||||
wait_ms(250);
|
||||
SEND_STRING("itunes\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void copy_paste_numpad_reset (qk_tap_dance_state_t *state, void *user_data) {
|
||||
copy_paste_numpad_tap_state.state = 0;
|
||||
void copy_paste_app_reset (qk_tap_dance_state_t *state, void *user_data) {
|
||||
copy_paste_app_tap_state.state = 0;
|
||||
}
|
||||
// END: Copy, Paste, NUMPAD
|
||||
// END: Copy, Paste, Apps
|
||||
|
||||
// BEGIN: Y, NUMPAD
|
||||
static tap y_numpad_tap_state = {
|
||||
|
@ -89,10 +105,8 @@ qk_tap_dance_action_t tap_dance_actions[] = {
|
|||
[TD_TAB_CTRLTAB] = ACTION_TAP_DANCE_DOUBLE(KC_TAB, LCTL(KC_TAB)),
|
||||
[TD_GRV_CTRLGRV] = ACTION_TAP_DANCE_DOUBLE(KC_GRV, LGUI(KC_GRV)),
|
||||
[TD_GUI_GUISPC] = ACTION_TAP_DANCE_DOUBLE(KC_LGUI, LGUI(KC_SPC)),
|
||||
[TD_W_CTRLW] = ACTION_TAP_DANCE_DOUBLE(KC_W, LGUI(KC_W)),
|
||||
[TD_Q_GUIQ] = ACTION_TAP_DANCE_DOUBLE(KC_Q, LGUI(KC_Q)),
|
||||
|
||||
// Advanced Tap Dances
|
||||
[TD_COPY_PASTE_NUMPAD] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, copy_paste_numpad_finished, copy_paste_numpad_reset),
|
||||
[TD_Y_NUMPAD] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, y_numpad_finished, y_numpad_reset),
|
||||
[TD_COPY_PASTE_APP] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(NULL, copy_paste_app_finished, copy_paste_app_reset, 300),
|
||||
[TD_Y_NUMPAD] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(NULL, y_numpad_finished, y_numpad_reset, 300),
|
||||
};
|
|
@ -9,7 +9,11 @@ typedef struct {
|
|||
enum tapdance_types{
|
||||
SINGLE_TAP = 1,
|
||||
SINGLE_HOLD = 2,
|
||||
DOUBLE_TAP = 3
|
||||
DOUBLE_TAP = 3,
|
||||
DOUBLE_HOLD = 4,
|
||||
DOUBLE_SINGLE_TAP = 5, //send two single taps
|
||||
TRIPLE_TAP = 6,
|
||||
TRIPLE_HOLD = 7
|
||||
};
|
||||
|
||||
enum custom_tapdances{
|
||||
|
@ -19,9 +23,7 @@ enum custom_tapdances{
|
|||
TD_TAB_CTRLTAB,
|
||||
TD_GRV_CTRLGRV,
|
||||
TD_GUI_GUISPC,
|
||||
TD_W_CTRLW,
|
||||
TD_Q_GUIQ,
|
||||
TD_COPY_PASTE_NUMPAD,
|
||||
TD_COPY_PASTE_APP,
|
||||
TD_Y_NUMPAD,
|
||||
};
|
||||
|
||||
|
@ -31,7 +33,5 @@ enum custom_tapdances{
|
|||
#define T_TAB TD(TD_TAB_CTRLTAB) // Tap for TAB, double tap for CTRL + TAB
|
||||
#define T_GRV TD(TD_GRV_CTRLGRV) // Tap for GRV, double tap for Cmd + GRV
|
||||
#define T_GUI TD(TD_GUI_GUISPC) // Tap for Cmd, double tap for Cmd + Space
|
||||
#define T_W TD(TD_W_CTRLW) // Tap for W, double tap for Cmd + W
|
||||
#define T_Q TD(TD_Q_GUIQ) // Tap for Q, double tap for Cmd + Q
|
||||
#define T_CPNU TD(TD_COPY_PASTE_NUMPAD) // Tap for paste, hold for copy, double tap for NUMPAD
|
||||
#define T_CPAP TD(TD_COPY_PASTE_APP) // Tap for paste, hold for copy, double tap for Line App
|
||||
#define T_Y TD(TD_Y_NUMPAD) // Tap for Y, double tap for NUMPAD
|
Loading…
Reference in a new issue