From b0335b273142ead24cb4177893fafdf2fda88810 Mon Sep 17 00:00:00 2001 From: Pete Sevander Date: Thu, 16 Jul 2020 15:39:01 +0300 Subject: Bigger combo index (#9318) * Add change log * Change combo index from uint8_t to uint16_t --- users/issmirnov/issmirnov.c | 2 +- users/kuchosauronad0/combo.c | 2 +- users/ninjonas/combos.c | 2 +- users/yet-another-developer/combo.c | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) (limited to 'users') diff --git a/users/issmirnov/issmirnov.c b/users/issmirnov/issmirnov.c index 665afbcfd7..45ef7b19a7 100644 --- a/users/issmirnov/issmirnov.c +++ b/users/issmirnov/issmirnov.c @@ -26,7 +26,7 @@ combo_t key_combos[COMBO_COUNT] = { }; -void process_combo_event(uint8_t combo_index, bool pressed) { +void process_combo_event(uint16_t combo_index, bool pressed) { switch(combo_index) { case XC_COPY: if (pressed) { diff --git a/users/kuchosauronad0/combo.c b/users/kuchosauronad0/combo.c index b4e8e84ae5..0a58e02770 100644 --- a/users/kuchosauronad0/combo.c +++ b/users/kuchosauronad0/combo.c @@ -1,6 +1,6 @@ #include "combo.h" -void process_combo_event(uint8_t combo_index, bool pressed){ +void process_combo_event(uint16_t combo_index, bool pressed){ switch(combo_index) { case ZV_COPY: if (pressed) { diff --git a/users/ninjonas/combos.c b/users/ninjonas/combos.c index 9453ba84dc..8d1cd6510f 100644 --- a/users/ninjonas/combos.c +++ b/users/ninjonas/combos.c @@ -23,7 +23,7 @@ combo_t key_combos[COMBO_COUNT] = { [XV_PASTE] = COMBO_ACTION(paste_combo), }; -void process_combo_event(uint8_t combo_index, bool pressed) { +void process_combo_event(uint16_t combo_index, bool pressed) { switch(combo_index) { case EQ_QUIT: if (pressed) { diff --git a/users/yet-another-developer/combo.c b/users/yet-another-developer/combo.c index b4e8e84ae5..0a58e02770 100644 --- a/users/yet-another-developer/combo.c +++ b/users/yet-another-developer/combo.c @@ -1,6 +1,6 @@ #include "combo.h" -void process_combo_event(uint8_t combo_index, bool pressed){ +void process_combo_event(uint16_t combo_index, bool pressed){ switch(combo_index) { case ZV_COPY: if (pressed) { -- cgit v1.2.3 From 92385b3fb617326b129609726020453c8949c7f8 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Sat, 22 Aug 2020 01:21:06 -0700 Subject: Better handle LTO_ENABLE (#9832) * Better handle LTO_ENABLE Especially when calling from command line * Replace LINK_TIME_OPTIMIZATION_ENABLE with LTO_ENABLE * Remove long for LTO from show_options.mk --- users/bcat/rules.mk | 2 +- users/dshields/rules.mk | 3 +-- users/issmirnov/rules.mk | 2 +- users/kuchosauronad0/rules.mk | 4 ++-- users/pvinis/rules.mk | 2 +- users/yanfali/rules.mk | 2 +- users/yet-another-developer/rules.mk | 2 +- 7 files changed, 8 insertions(+), 9 deletions(-) (limited to 'users') diff --git a/users/bcat/rules.mk b/users/bcat/rules.mk index a595d1f588..f87974ed96 100644 --- a/users/bcat/rules.mk +++ b/users/bcat/rules.mk @@ -14,7 +14,7 @@ EXTRAKEY_ENABLE = yes NKRO_ENABLE = yes # Enable link-time optimization to reduce binary size. -LINK_TIME_OPTIMIZATION_ENABLE = yes +LTO_ENABLE = yes # Disable unused build options on all keyboards. COMMAND_ENABLE = no diff --git a/users/dshields/rules.mk b/users/dshields/rules.mk index abfbe5e40e..462649289b 100644 --- a/users/dshields/rules.mk +++ b/users/dshields/rules.mk @@ -10,7 +10,7 @@ SPACE_CADET_ENABLE = no LEADER_ENABLE = no DYNAMIC_MACRO_ENABLE = yes -LINK_TIME_OPTIMIZATION_ENABLE = yes +LTO_ENABLE = yes ifeq ($(strip $(KEYBOARD)), planck/rev3) AUDIO_ENABLE = no @@ -29,4 +29,3 @@ ifeq ($(strip $(KEYBOARD)), planck/light) BACKLIGHT_ENABLE = no RGB_MATRIX_ENABLE = yes endif - diff --git a/users/issmirnov/rules.mk b/users/issmirnov/rules.mk index 096d7b4c0d..93ec21b01b 100644 --- a/users/issmirnov/rules.mk +++ b/users/issmirnov/rules.mk @@ -4,7 +4,7 @@ SRC += issmirnov.c # https://www.reddit.com/r/olkb/comments/bmpgjm/programming_help/ # Should shave 2000 bytes -LINK_TIME_OPTIMIZATION_ENABLE = yes +LTO_ENABLE = yes # Enable debugging only when needed. CONSOLE_ENABLE = yes # +400 bytes (hid_listen support) diff --git a/users/kuchosauronad0/rules.mk b/users/kuchosauronad0/rules.mk index b844d12c92..dfab85703c 100644 --- a/users/kuchosauronad0/rules.mk +++ b/users/kuchosauronad0/rules.mk @@ -1,7 +1,7 @@ SRC += kuchosauronad0.c \ process_records.c -LINK_TIME_OPTIMIZATION_ENABLE = yes +LTO_ENABLE = yes SPACE_CADET_ENABLE = no ifneq ($(strip $(RGBLIGHT_ENABLE)),yes ) @@ -24,7 +24,7 @@ ifeq ($(strip $(LEADER_ENABLE)), yes) SRC += leader.c endif -ifneq ("$(wildcard $(USER_PATH)/secrets.c)","") +ifneq ("$(wildcard $(USER_PATH)/secrets.c)","") SRC += secrets.c endif ifeq ($(strip $(NO_SECRETS)), yes) diff --git a/users/pvinis/rules.mk b/users/pvinis/rules.mk index f6f09e54d9..6c7b47399a 100644 --- a/users/pvinis/rules.mk +++ b/users/pvinis/rules.mk @@ -14,6 +14,6 @@ SRC += pvinis.c # add userspace file ## Some extra stuff to make firmware smaller. -# LINK_TIME_OPTIMIZATION_ENABLE = yes +# LTO_ENABLE = yes # CONSOLE_ENABLE = no # COMMAND_ENABLE = no diff --git a/users/yanfali/rules.mk b/users/yanfali/rules.mk index 456d3bf320..a7208daa2c 100644 --- a/users/yanfali/rules.mk +++ b/users/yanfali/rules.mk @@ -2,7 +2,7 @@ BOOTMAGIC = lite DYNAMIC_KEYMAP_ENABLE = no CONSOLE_ENABLE = yes COMMAND_ENABLE = yes -LINK_TIME_OPTIMIZATION_ENABLE = yes +LTO_ENABLE = yes AUDIO_ENABLE = no # only enable audio on specific boards diff --git a/users/yet-another-developer/rules.mk b/users/yet-another-developer/rules.mk index 597df6d0b9..64cf1f2fce 100644 --- a/users/yet-another-developer/rules.mk +++ b/users/yet-another-developer/rules.mk @@ -1,7 +1,7 @@ SRC += yet-another-developer.c \ process_records.c -LINK_TIME_OPTIMIZATION_ENABLE = yes +LTO_ENABLE = yes SPACE_CADET_ENABLE = no ifeq ($(strip $(TAP_DANCE_ENABLE)), yes) -- cgit v1.2.3 From 8ac9940a76f09d4a47be342fc123306ecbfb27f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Rodr=C3=ADguez=20Rivero?= Date: Sun, 6 Sep 2020 22:13:18 +0200 Subject: [Keymap] danielo515/redox-1 (#9935) * chore: pulled the latest from master Bring my redox layout from my latest redox branch Bring my latest user stuff from my redox branch * Update users/danielo515/config.h Co-authored-by: Drashna Jaelre * chore: small cleanup Co-authored-by: Drashna Jaelre --- users/danielo515/combo.c | 44 ++++--- users/danielo515/config.h | 4 +- users/danielo515/process_records.c | 247 +++++++++++++++++++++---------------- users/danielo515/process_records.h | 94 +++++++------- 4 files changed, 216 insertions(+), 173 deletions(-) (limited to 'users') diff --git a/users/danielo515/combo.c b/users/danielo515/combo.c index 1c84143772..b33cb838bc 100644 --- a/users/danielo515/combo.c +++ b/users/danielo515/combo.c @@ -6,31 +6,39 @@ enum combos { UI_COM, IO_COM, QW_COM, - COM_SLS, + DOT_SLS, COM_DOT, M_COMM, N_M, OP_COM, + M_CM_DOT, }; -const uint16_t PROGMEM ui_combo[] = {KC_U, KC_I, COMBO_END}; -const uint16_t PROGMEM jk_combo[] = {KC_J, KC_K, COMBO_END}; -const uint16_t PROGMEM yu_combo[] = {KC_Y, KC_U, COMBO_END}; -const uint16_t PROGMEM io_combo[] = {KC_I, KC_O, COMBO_END}; -const uint16_t PROGMEM qw_combo[] = {KC_Q, KC_W, COMBO_END}; -const uint16_t PROGMEM com_sls[] = {KC_COMMA, KC_SLSH, COMBO_END}; -const uint16_t PROGMEM com_dot[] = {KC_COMMA, KC_DOT, COMBO_END}; -const uint16_t PROGMEM m_comm[] = {KC_M,KC_COMMA, COMBO_END}; -const uint16_t PROGMEM n_m[] = {KC_N, KC_M,COMBO_END}; +const uint16_t PROGMEM ui_combo[] = {KC_U, KC_I, COMBO_END}; +const uint16_t PROGMEM jk_combo[] = {KC_J, KC_K, COMBO_END}; +const uint16_t PROGMEM yu_combo[] = {KC_Y, KC_U, COMBO_END}; +const uint16_t PROGMEM io_combo[] = {KC_I, KC_O, COMBO_END}; +const uint16_t PROGMEM qw_combo[] = {KC_Q, KC_W, COMBO_END}; +const uint16_t PROGMEM dot_sls[] = {KC_DOT, KC_SLSH, COMBO_END}; +const uint16_t PROGMEM com_dot[] = {KC_COMMA, KC_DOT, COMBO_END}; +const uint16_t PROGMEM m_comm[] = {KC_M, KC_COMMA, COMBO_END}; +const uint16_t PROGMEM n_m[] = {KC_N, KC_M, COMBO_END}; +const uint16_t PROGMEM o_p_combo[] = {KC_O, KC_P, COMBO_END}; +const uint16_t PROGMEM m_cm_dot_combo[] = {KC_M, KC_COMMA, KC_DOT, COMBO_END}; combo_t key_combos[COMBO_COUNT] = { - [JK_ESC] = COMBO(jk_combo, KC_ESC), - [YU_COM] = COMBO(yu_combo, KC_CIRC), - [UI_COM] = COMBO(ui_combo, KC_DLR), - [IO_COM] = COMBO(io_combo, KC_TILD), + [JK_ESC] = COMBO(jk_combo, KC_ESC), + [YU_COM] = COMBO(yu_combo, KC_AMPR), + [UI_COM] = COMBO(ui_combo, KC_CIRC), + [IO_COM] = COMBO(io_combo, KC_TILD), + [DOT_SLS] = COMBO(dot_sls, KC_EXLM), + [COM_DOT] = COMBO(com_dot, KC_QUES), + [N_M] = COMBO(n_m, KC_DLR), + [OP_COM] = COMBO(o_p_combo, KC_HASH), + // m + , = { + [M_COMM] = COMBO(m_comm, KC_LCBR), + // m + , + . = } + // [M_CM_DOT] = COMBO(m_cm_dot_combo, KC_RCBR), + // Right hand side combos [QW_COM] = COMBO(qw_combo, KC_AT), - [COM_SLS] = COMBO(com_sls, KC_QUES), - [COM_DOT] = COMBO(com_dot, KC_QUES), - [M_COMM] = COMBO(m_comm, KC_ESC), - [N_M] = COMBO(n_m, KC_DLR), }; diff --git a/users/danielo515/config.h b/users/danielo515/config.h index fb2472645c..d7efcd5367 100644 --- a/users/danielo515/config.h +++ b/users/danielo515/config.h @@ -1,8 +1,8 @@ #pragma once #if defined(COMBO_ENABLE) - #define COMBO_COUNT 9 - #define COMBO_TERM 40 +# define COMBO_COUNT 11 +# define COMBO_TERM 25 #endif // !COMBO_ENABLE // Timeout settings for leader key #undef LEADER_TIMEOUT diff --git a/users/danielo515/process_records.c b/users/danielo515/process_records.c index b1a8b92552..22a46789ad 100644 --- a/users/danielo515/process_records.c +++ b/users/danielo515/process_records.c @@ -4,11 +4,11 @@ extern bool onMac; // ======== INCREMENTAL MACROS STUFF ============= #define MAX_INCREMENTAL_MACRO 20 #define TAP_ROTATION_TIMEOUT 400 -uint16_t latest_kc = 0; +uint16_t latest_kc = 0; uint16_t latest_rotation = 0; -int key_count = 0; +int key_count = 0; -const char incremental_macros[][MAX_INCREMENTAL_MACRO] = { "String1"SS_TAP(X_HOME)"X-", "String2"SS_TAP(X_HOME) }; +const char incremental_macros[][MAX_INCREMENTAL_MACRO] = {"String1" SS_TAP(X_HOME) "X-", "String2" SS_TAP(X_HOME)}; bool process_incremental_macro(uint16_t kc) { if (kc < INC_MACROS_START || kc > INC_MACROS_END) { @@ -44,124 +44,157 @@ void refresh_incremental_macros(uint16_t kc) { } // Send control or GUI depending if we are on windows or mac bool CMD(uint16_t kc) { - if(onMac){ tap_code16(LGUI(kc)); } else { tap_code16(LCTL(kc)); } + if (onMac) { + tap_code16(LGUI(kc)); + } else { + tap_code16(LCTL(kc)); + } return false; } bool process_record_user(uint16_t keycode, keyrecord_t *record) { bool pressed = record->event.pressed; - if(pressed){ + if (pressed) { refresh_incremental_macros(keycode); - if(process_incremental_macro(keycode)){ + if (process_incremental_macro(keycode)) { return false; } switch (keycode) { case MAC_TGL: - onMac = !onMac; - onMac ? SEND_STRING("On mac") : SEND_STRING("Not on MAC"); - return false; + onMac = !onMac; + onMac ? SEND_STRING("On mac") : SEND_STRING("Not on MAC"); + return false; } } switch (keycode) { - case QWERTY: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_SONG(tone_qwerty); - #endif - layer_on(_QWERTY); - } - return false; - case LOWER: - if (record->event.pressed) { - layer_on(_LOWER); - } else { - layer_off(_LOWER); - } - return false; - case RAISE: - if (record->event.pressed) { - layer_on(_RAISE); - } else { - layer_off(_RAISE); - } - return false; - case ADJUST: - if (record->event.pressed) { - layer_on(_ADJUST); - } else { - layer_off(_ADJUST); - } - return false; - // == Macros START === - case IARROW: if (record->event.pressed) SEND_STRING("<-"); return false; - case ARROW: if (record->event.pressed) SEND_STRING("->"); return false; - case F_ARROW: if (record->event.pressed) SEND_STRING("=>"); return false; - case GREP: if (record->event.pressed) SEND_STRING(" | grep "); return false; - case CLN_EQ: if (record->event.pressed) SEND_STRING(":="); return false; - // == Macros END === - // == Multi Os START === - case KC_HOME:// make the home behave the same on OSX - if (record->event.pressed && onMac) { - SEND_STRING(SS_LCTRL("a")); - return false; - } - case KC_END:// make the end behave the same on OSX - if (record->event.pressed && onMac) { - tap_code16(C(KC_E)); - return false; - } - case AC_A:// Accent á - if (record->event.pressed) SEND_STRING(SS_LALT("e") "a"); return false; - case AC_E:// Accent é - if (record->event.pressed) SEND_STRING(SS_LALT("e") "e"); return false; - case AC_I:// Accent í - if (record->event.pressed) SEND_STRING(SS_LALT("e") "i"); return false; - case AC_O:// Accent ó - if (record->event.pressed) SEND_STRING(SS_LALT("e") "o"); return false; - case CUT: if (record->event.pressed) return CMD(KC_X); - case COPY: - if (record->event.pressed) { - onMac ? SEND_STRING(SS_LGUI("c")) : SEND_STRING(SS_LCTRL("c")); - } - return false; - case PASTE: - if (record->event.pressed) { - onMac ? SEND_STRING(SS_LGUI("v")) : SEND_STRING(SS_LCTRL("v")); - } - return false; - case SAVE: - if (record->event.pressed) { - onMac ? SEND_STRING(SS_LGUI("s")) : SEND_STRING(SS_LCTRL("s")); - } - return false; - case UNDO: - if (record->event.pressed) { - onMac ? SEND_STRING(SS_LGUI("z")) : SEND_STRING(SS_LCTRL("z")); - } - return false; - case FIND: - if (record->event.pressed) { - onMac ? SEND_STRING(SS_LGUI("f")) : SEND_STRING(SS_LCTRL("f")); - } - return false; - case CHG_LAYOUT: - if (record->event.pressed) { - onMac ? SEND_STRING(SS_LCTRL(" ")) : SEND_STRING(SS_LCTRL("f")); - } - return false; - // == Multi Os END === + case QWERTY: + if (record->event.pressed) { +#ifdef AUDIO_ENABLE + PLAY_SONG(tone_qwerty); +#endif + layer_on(_QWERTY); + } + return false; + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + } else { + layer_off(_LOWER); + } + return false; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + } else { + layer_off(_RAISE); + } + return false; + case ADJUST: + if (record->event.pressed) { + layer_on(_ADJUST); + } else { + layer_off(_ADJUST); + } + return false; + // == Macros START === + case IARROW: + if (record->event.pressed) SEND_STRING("<-"); + return false; + case ARROW: + if (record->event.pressed) SEND_STRING("->"); + return false; + case F_ARROW: + if (record->event.pressed) SEND_STRING("=>"); + return false; + case GREP: + if (record->event.pressed) SEND_STRING(" | grep "); + return false; + case CLN_EQ: + if (record->event.pressed) SEND_STRING(":="); + return false; + // == Macros END === + // == Multi Os START === + case KC_HOME: // make the home behave the same on OSX + if (record->event.pressed && onMac) { + SEND_STRING(SS_LCTRL("a")); + return false; + } + case KC_END: // make the end behave the same on OSX + if (record->event.pressed && onMac) { + tap_code16(C(KC_E)); + return false; + } + case AC_A: // Accent á + if (record->event.pressed) SEND_STRING(SS_LALT("e") "a"); + return false; + case AC_E: // Accent é + if (record->event.pressed) SEND_STRING(SS_LALT("e") "e"); + return false; + case AC_I: // Accent í + if (record->event.pressed) SEND_STRING(SS_LALT("e") "i"); + return false; + case AC_O: // Accent ó + if (record->event.pressed) SEND_STRING(SS_LALT("e") "o"); + return false; + case CUT: + if (record->event.pressed) return CMD(KC_X); + case COPY: + if (record->event.pressed) { + onMac ? SEND_STRING(SS_LGUI("c")) : SEND_STRING(SS_LCTRL("c")); + } + return false; + case PASTE: + if (record->event.pressed) { + onMac ? SEND_STRING(SS_LGUI("v")) : SEND_STRING(SS_LCTRL("v")); + } + return false; + case SAVE: + if (record->event.pressed) { + onMac ? SEND_STRING(SS_LGUI("s")) : SEND_STRING(SS_LCTRL("s")); + } + return false; + case UNDO: + if (record->event.pressed) { + onMac ? SEND_STRING(SS_LGUI("z")) : SEND_STRING(SS_LCTRL("z")); + } + return false; + case REDO: + if (record->event.pressed) { + onMac ? SEND_STRING(SS_LGUI(SS_LSFT("z"))) : SEND_STRING(SS_LCTRL("y")); + } + return false; + case FIND: + if (record->event.pressed) { + onMac ? SEND_STRING(SS_LGUI("f")) : SEND_STRING(SS_LCTRL("f")); + } + return false; + case WIN_TO_RIGHT: + if (record->event.pressed) { + onMac ? tap_code16(SGUI(A(KC_RIGHT))) : tap_code16(G(KC_RIGHT)); + } + return false; + case WIN_TO_LEFT: + if (record->event.pressed) { + onMac ? tap_code16(SGUI(A(KC_LEFT))) : tap_code16(G(KC_LEFT)); + } + return false; + case CHG_LAYOUT: + if (record->event.pressed) { + onMac ? SEND_STRING(SS_LCTRL(" ")) : SEND_STRING(SS_LCTRL("f")); + } + return false; + // == Multi Os END === #ifdef RGBLIGHT_ENABLE - case RGB_SLD: - if (record->event.pressed) { rgblight_mode(1); } - return false; - break; - //First time alt + tab, and alt stays sticky. Next press we just send tab. Any other key releases the alt + case RGB_SLD: + if (record->event.pressed) { + rgblight_mode(1); + } + return false; + break; + // First time alt + tab, and alt stays sticky. Next press we just send tab. Any other key releases the alt #endif - } -// =============== ALT_TAB single key handling - return process_alt_tab(keycode, record); + } + // =============== ALT_TAB single key handling + return process_alt_tab(keycode, record); }; - - - diff --git a/users/danielo515/process_records.h b/users/danielo515/process_records.h index c994511a5f..0efd690d40 100644 --- a/users/danielo515/process_records.h +++ b/users/danielo515/process_records.h @@ -1,35 +1,36 @@ #pragma once #include "quantum.h" -enum custom_keycodes -{ - EPRM = SAFE_RANGE, - RGB_SLD, +enum custom_keycodes { + RGB_SLD = SAFE_RANGE, ALT_TAB, QWERTY, SYM, NAV, ADJUST, -// Macros + // Macros ARROW, IARROW, CLN_EQ, F_ARROW, GREP, -// Accented characters + // Accented characters AC_A, AC_E, AC_I, AC_O, -// Custom multi-os key-codes + // Custom multi-os key-codes CUT, COPY, PASTE, SAVE, UNDO, + REDO, CHG_LAYOUT, FIND, -// OTHER OLD STUFF + WIN_TO_LEFT, + WIN_TO_RIGHT, + // OTHER OLD STUFF LOWER, RAISE, MAC_TGL, @@ -57,48 +58,49 @@ enum layers { }; //===== Function letters -# define FN_F LT(_F,KC_F) -# define FN_D LT(_D,KC_D) -# define FN_S LT(_S,KC_S) -# define FN_A LT(_A,KC_A) -# define FN_K LT(_K,KC_K) -# define FN_J LT(_J,KC_J) -# define KC_FN_D FN_D -# define KC_FN_S FN_S -# define KC_FN_F FN_F +#define FN_F LT(_F, KC_F) +#define FN_D LT(_D, KC_D) +#define FN_S LT(_S, KC_S) +#define FN_A LT(_A, KC_A) +#define FN_K LT(_K, KC_K) +#define FN_J LT(_J, KC_J) +#define KC_FN_D FN_D +#define KC_FN_S FN_S +#define KC_FN_F FN_F -# define KC_MACROS OSL(_MACROS) +#define KC_MACROS OSL(_MACROS) - -# define KC_E_COLN LSFT(KC_DOT) -# define KC_E_EQL ES_EQL -# define KC_GUI OSM(MOD_RGUI) -# define KC_R_NUB S(KC_NUBS) -# define KC_E_LT KC_NUBS -# define KC_E_GT S(KC_NUBS) -# define KC_E_TILD ES_TILD -# define KC_E_MINS ES_MINS -# define KC_E_OVRR ES_OVRR -# define KC_E_APOS ES_APOS -# define KC_E_IEXL ES_IEXL +#define KC_E_COLN LSFT(KC_DOT) +#define KC_E_EQL ES_EQL +#define KC_GUI OSM(MOD_RGUI) +#define KC_R_NUB S(KC_NUBS) +#define KC_E_LT KC_NUBS +#define KC_E_GT S(KC_NUBS) +#define KC_E_TILD ES_TILD +#define KC_E_MINS ES_MINS +#define KC_E_OVRR ES_OVRR +#define KC_E_APOS ES_APOS +#define KC_E_IEXL ES_IEXL //========== Short hand for complex key combinations -# define WIN_LEFT_HALF LALT(LGUI(KC_LEFT)) -# define WIN_RIGHT_HALF LALT(LGUI(KC_RIGHT)) -# define WIN_TO_LEFT LALT(LSFT( LGUI(KC_LEFT) )) -# define WIN_TO_RIGHT LALT(LSFT( LGUI(KC_RIGHT) )) -# define ALL_WIN LCTL(KC_DOWN) -# define EXPOSE LGUI(KC_DOWN) +#define WIN_LEFT_HALF LALT(LGUI(KC_LEFT)) +#define WIN_RIGHT_HALF LALT(LGUI(KC_RIGHT)) +#define ALL_WIN LCTL(KC_DOWN) +#define EXPOSE LGUI(KC_DOWN) // ========== Modifiers!! -# define SHIFT OSM(MOD_LSFT) +#define SHIFT OSM(MOD_LSFT) //=============== tap for key hold for mod -# define HYPR_H HYPR_T(KC_H) -# define CTL_K RCTL_T(KC_K) -# define ALT_J ALT_T(KC_J) -# define SFT_MINS LSFT_T(KC_MINS) // tap - hold shift -# define CMD_QUOT GUI_T(KC_QUOTE) // tap ' hold cmd +#define HYPR_H HYPR_T(KC_H) +#define CTL_K RCTL_T(KC_K) +#define ALT_J ALT_T(KC_J) +#define SFT_MINS LSFT_T(KC_MINS) // tap - hold shift +#define CMD_MINS GUI_T(KC_MINS) // tap - hold cmd +#define CMD_QUOT GUI_T(KC_QUOTE) // tap ' hold cmd +#define SFT_QUOT LSFT_T(KC_QUOTE) // tap ' hold shift //=============== Movement modified -# define CTL_LEFT LCTL(KC_LEFT) -# define CTL_RIGHT LCTL(KC_RIGHT) +#define CTL_LEFT LCTL(KC_LEFT) +#define CTL_RIGHT LCTL(KC_RIGHT) -# define SFT_LEFT LSFT(KC_LEFT) -# define SFT_RIGHT LSFT(KC_RIGHT) +#define SFT_LEFT LSFT(KC_LEFT) +#define SFT_RIGHT LSFT(KC_RIGHT) +#define SFT_LEFT_END LGUI(LSFT(KC_LEFT)) +#define SFT_RIGHT_END LGUI(LSFT(KC_RIGHT)) -- cgit v1.2.3 From 6c3e404839bec5f04e8f0d9eef4f0ac98b16e987 Mon Sep 17 00:00:00 2001 From: stanrc85 <47038504+stanrc85@users.noreply.github.com> Date: Sun, 6 Sep 2020 18:04:29 -0400 Subject: [Keymap] Add indicator light bootup fanfare (#10158) * Add indicator light bootup fanfare * move fanfare code to new file * fanfare code in new file and remove unused boards * new startup fanfare code * add lock/unlock indicator animation * input key presses before changing lights * remove old code --- users/stanrc85/rgblight_layers.c | 38 ----------------------------------- users/stanrc85/rules.mk | 18 ++--------------- users/stanrc85/stanrc85.c | 36 ++++++++++++++++++++++++++++++++- users/stanrc85/startup_fanfare.c | 43 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 80 insertions(+), 55 deletions(-) create mode 100644 users/stanrc85/startup_fanfare.c (limited to 'users') diff --git a/users/stanrc85/rgblight_layers.c b/users/stanrc85/rgblight_layers.c index 780555e7b5..1fbd541498 100644 --- a/users/stanrc85/rgblight_layers.c +++ b/users/stanrc85/rgblight_layers.c @@ -3,44 +3,7 @@ static uint8_t middle = 0; static uint8_t bottom = 0; -const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS( - {3, 2, HSV_RED}, - {10, 2, HSV_RED} -); - -const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS( - {3, 1, HSV_GREEN}, - {11, 1, HSV_GREEN} -); - -const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS( - {3, 1, HSV_BLUE}, - {11, 1, HSV_BLUE} -); - -const rgblight_segment_t PROGMEM my_layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS( - {3, 1, HSV_WHITE}, - {11, 1, HSV_WHITE} -); - -// Now define the array of layers. Later layers take precedence -const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST( - my_capslock_layer, - my_layer1_layer, - my_layer2_layer, - my_layer3_layer -); - -void keyboard_post_init_user(void) { - // Enable the LED layers - rgblight_layers = my_rgb_layers; -} - layer_state_t layer_state_set_user(layer_state_t state) { - // Both layers will light up if both kb layers are active - rgblight_set_layer_state(1, layer_state_cmp(state, 1)); - rgblight_set_layer_state(2, layer_state_cmp(state, 2)); - rgblight_set_layer_state(3, layer_state_cmp(state, 3)); middle = bottom = 0; switch (get_highest_layer(state)) { case _FN1_60: @@ -60,7 +23,6 @@ layer_state_t layer_state_set_user(layer_state_t state) { } bool led_update_user(led_t led_state) { - //rgblight_set_layer_state(0, led_state.caps_lock); writePin(INDICATOR_PIN_0, !led_state.caps_lock); writePin(INDICATOR_PIN_1, !middle); writePin(INDICATOR_PIN_2, !bottom); diff --git a/users/stanrc85/rules.mk b/users/stanrc85/rules.mk index 5c572c0af3..54f0f76260 100644 --- a/users/stanrc85/rules.mk +++ b/users/stanrc85/rules.mk @@ -10,24 +10,10 @@ NKRO_ENABLE = no SRC += stanrc85.c -ifeq ($(strip $(KEYBOARD)), 1upkeyboards/1up60hse) - SRC += layer_rgb.c - VIA_ENABLE = yes - LTO_ENABLE = yes -endif -ifeq ($(strip $(KEYBOARD)), dz60) - SRC += layer_rgb.c - VIA_ENABLE = yes - LTO_ENABLE = yes -endif -ifeq ($(strip $(KEYBOARD)), projectkb/alice/rev1) - SRC += rgblight_layers.c - VIA_ENABLE = yes - LTO_ENABLE = no - VELOCIKEY_ENABLE=yes -endif ifeq ($(strip $(KEYBOARD)), projectkb/alice/rev2) SRC += rgblight_layers.c + SRC += startup_fanfare.c + OPT_DEFS += -DHAS_INDICATORS VIA_ENABLE = yes LTO_ENABLE = no VELOCIKEY_ENABLE=yes diff --git a/users/stanrc85/stanrc85.c b/users/stanrc85/stanrc85.c index c1aaad1a1a..2dbd41974b 100644 --- a/users/stanrc85/stanrc85.c +++ b/users/stanrc85/stanrc85.c @@ -44,8 +44,42 @@ void ctl_copy_reset (qk_tap_dance_state_t *state, void *user_data) { } } +#if defined(HAS_INDICATORS) + static uint8_t led_user = 0; +#endif + +void lock_unlock (qk_tap_dance_state_t *state, void *user_data) { + td_state = cur_dance(state); + switch (td_state) { + case SINGLE_TAP: // Ctl + Alt + Del to unlock workstation + tap_code16(KC_CAD); + #if defined(HAS_INDICATORS) + led_user = 0; + writePin(INDICATOR_PIN_0, !led_user); + wait_ms(200); + writePin(INDICATOR_PIN_1, !led_user); + wait_ms(200); + writePin(INDICATOR_PIN_2, !led_user); + #endif + break; + case SINGLE_HOLD: + break; + case DOUBLE_TAP: //Lock workstation + tap_code16(KC_LOCK); + #if defined(HAS_INDICATORS) + led_user = 1; + writePin(INDICATOR_PIN_2, !led_user); + wait_ms(200); + writePin(INDICATOR_PIN_1, !led_user); + wait_ms(200); + writePin(INDICATOR_PIN_0, !led_user); + #endif + break; + } +} + qk_tap_dance_action_t tap_dance_actions[] = { - [TD_WIN] = ACTION_TAP_DANCE_DOUBLE(KC_CAD, KC_LOCK), + [TD_WIN] = ACTION_TAP_DANCE_FN(lock_unlock), [TD_ESC] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_GRV), [TD_RCTL] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ctl_copy_finished, ctl_copy_reset) }; diff --git a/users/stanrc85/startup_fanfare.c b/users/stanrc85/startup_fanfare.c new file mode 100644 index 0000000000..507d9e389c --- /dev/null +++ b/users/stanrc85/startup_fanfare.c @@ -0,0 +1,43 @@ +#include "stanrc85.h" + +static uint8_t top = 0; +static uint8_t middle = 0; +static uint8_t bottom = 0; + +static bool is_enabled = true; +static bool is_rgblight_startup = true; +static uint16_t rgblight_startup_loop_timer; + +void matrix_scan_user(void) { + // Boot up "fanfare" + if (is_rgblight_startup && is_keyboard_master()) { + if (timer_elapsed(rgblight_startup_loop_timer) > 10) { + static uint8_t counter; + counter++; + if (counter == 1) { + top = 1; + writePin(INDICATOR_PIN_0, !top); + wait_ms(200); + top = 0; + writePin(INDICATOR_PIN_0, !top); + } + if (counter == 2) { + middle = 1; + writePin(INDICATOR_PIN_1, !middle); + wait_ms(200); + middle = 0; + writePin(INDICATOR_PIN_1, !middle); + } + if (counter == 3) { + bottom = 1; + writePin(INDICATOR_PIN_2, !bottom); + wait_ms(200); + bottom = 0; + writePin(INDICATOR_PIN_2, !bottom); + } + if (counter == 4) { + is_enabled = is_rgblight_startup = false; + } + } + } +} -- cgit v1.2.3 From 076b9d482f271bad14cb31c67aee6226b069e734 Mon Sep 17 00:00:00 2001 From: Nick Christus <136611+nchristus@users.noreply.github.com> Date: Wed, 9 Sep 2020 00:33:38 -0500 Subject: [Keymap] Added nchristus userspace (#10261) * userspace: added nchristus * userspace: updates per PR review --- users/nchristus/nchristus.c | 18 ++++++++++ users/nchristus/nchristus.h | 87 +++++++++++++++++++++++++++++++++++++++++++++ users/nchristus/rules.mk | 0 3 files changed, 105 insertions(+) create mode 100644 users/nchristus/nchristus.c create mode 100644 users/nchristus/nchristus.h create mode 100644 users/nchristus/rules.mk (limited to 'users') diff --git a/users/nchristus/nchristus.c b/users/nchristus/nchristus.c new file mode 100644 index 0000000000..555cd74cef --- /dev/null +++ b/users/nchristus/nchristus.c @@ -0,0 +1,18 @@ +/* +Copyright 2020 Nick Christus @nchristus + +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 . +*/ + +#include "nchristus.h" diff --git a/users/nchristus/nchristus.h b/users/nchristus/nchristus.h new file mode 100644 index 0000000000..751b5c8f52 --- /dev/null +++ b/users/nchristus/nchristus.h @@ -0,0 +1,87 @@ +/* +Copyright 2020 Nick Christus @nchristus + +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 . +*/ + +#pragma once + +#include QMK_KEYBOARD_H + +// Define layer names +enum userspace_layers { + _QWRTY = 0, + _LOWER, + _RAISE, + _ARROW, + _FNCTN, + _ADJST +}; + +// CTRL / ESC +#define CTL_ESC CTL_T(KC_ESC) + +// Force quit dialog +#define C_O_ESC LALT(LGUI(KC_ESC)) + +// Mac lock +#define MAC_LOK LCTL(LGUI(KC_Q)) + +// 1Password +#define OPW_OPN LALT(LGUI(KC_BSLS)) +#define OPW_CPY S(LGUI(KC_C)) + +// Screenshotting +#define SCR_FLL S(LGUI(KC_3)) +#define SCR_CRP S(LGUI(KC_4)) + +// FSNotes +#define FSNOTES LALT(LGUI(LSFT(LCTL(KC_0)))) + +#if (!defined(LAYOUT) && defined(KEYMAP)) + #define LAYOUT KEYMAP +#endif + +#define KEYMAP_wrapper(...) LAYOUT(__VA_ARGS__) +#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__) +#define LAYOUT_ortho_4x12_wrapper(...) LAYOUT_ortho_4x12(__VA_ARGS__) + +#define ___________________BLANK___________________ _______, _______, _______, _______, _______ + +#define __________________QWERTYL1_________________ KC_Q, KC_W, KC_E, KC_R, KC_T +#define __________________QWERTYR1_________________ KC_Y, KC_U, KC_I, KC_O, KC_P + +#define __________________QWERTYL2_________________ KC_A, KC_S, KC_D, KC_F, KC_G +#define __________________QWERTYR2_________________ KC_H, KC_J, KC_K, KC_L, KC_SCLN + +#define __________________QWERTYL3_________________ KC_Z, KC_X, KC_C, KC_V, KC_B +#define __________________QWERTYR3_________________ KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH + +#define _________________FUNC_LEFT_________________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5 +#define _________________FUNC_RIGHT________________ KC_F6, KC_F7, KC_F8, KC_F9, KC_F10 + +#define ________________NUMBER_LEFT________________ KC_1, KC_2, KC_3, KC_4, KC_5 +#define ________________NUMBER_RIGHT_______________ KC_6, KC_7, KC_8, KC_9, KC_0 + +#define _________________LOWER_L1__________________ ________________NUMBER_LEFT________________ +#define _________________LOWER_L2__________________ KC_MINS, KC_PLUS, KC_LBRC, KC_RBRC, KC_BSLS + +#define _________________LOWER_R1__________________ ________________NUMBER_RIGHT_______________ +#define _________________LOWER_R2__________________ KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______ + +#define _________________RAISE_L1__________________ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC +#define _________________RAISE_L2__________________ ___________________BLANK___________________ + +#define _________________RAISE_R1__________________ KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN +#define _________________RAISE_R2__________________ KC_UNDS, KC_EQL, KC_LCBR, KC_RCBR, KC_PIPE diff --git a/users/nchristus/rules.mk b/users/nchristus/rules.mk new file mode 100644 index 0000000000..e69de29bb2 -- cgit v1.2.3 From 3d4f0028d60cebc829ac9c947d1a61cc840d05c0 Mon Sep 17 00:00:00 2001 From: Callum Oakley Date: Wed, 9 Sep 2020 23:37:34 +0100 Subject: [Keymap] major keymap overhaul (#10185) * experiment with userspace * reorganise * readme * missing oneshot shift from ignored keys * recombine hands in layout macro --- users/callum/callum.c | 130 +++++++++++++++++++++++++++++++++++++++++++++++++ users/callum/oneshot.c | 57 ++++++++++++++++++++++ users/callum/oneshot.h | 31 ++++++++++++ users/callum/readme.md | 99 +++++++++++++++++++++++++++++++++++++ users/callum/rules.mk | 3 ++ users/callum/swapper.c | 27 ++++++++++ users/callum/swapper.h | 20 ++++++++ 7 files changed, 367 insertions(+) create mode 100644 users/callum/callum.c create mode 100644 users/callum/oneshot.c create mode 100644 users/callum/oneshot.h create mode 100644 users/callum/readme.md create mode 100644 users/callum/rules.mk create mode 100644 users/callum/swapper.c create mode 100644 users/callum/swapper.h (limited to 'users') diff --git a/users/callum/callum.c b/users/callum/callum.c new file mode 100644 index 0000000000..4661902af5 --- /dev/null +++ b/users/callum/callum.c @@ -0,0 +1,130 @@ +#include QMK_KEYBOARD_H + +#include "oneshot.h" +#include "swapper.h" + +#define HOME G(KC_LEFT) +#define END G(KC_RGHT) +#define FWD G(KC_RBRC) +#define BACK G(KC_LBRC) +#define TABL G(S(KC_LBRC)) +#define TABR G(S(KC_RBRC)) +#define SPCL A(G(KC_LEFT)) +#define SPCR A(G(KC_RGHT)) +#define LA_SYM MO(SYM) +#define LA_NAV MO(NAV) + +enum layers { + DEF, + SYM, + NAV, + NUM, +}; + +enum keycodes { + // Custom oneshot mod implementation with no timers. + OS_SHFT = SAFE_RANGE, + OS_CTRL, + OS_ALT, + OS_CMD, + + SW_WIN, // Switch to next window (cmd-tab) + SW_LANG, // Switch to next input language (ctl-spc) +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [DEF] = LAYOUT_callum( + KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_QUOT, + KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, + LA_NAV, KC_LSFT, KC_SPC, LA_SYM + ), + + [SYM] = LAYOUT_callum( + KC_ESC, KC_LBRC, KC_LCBR, KC_LPRN, KC_TILD, KC_CIRC, KC_RPRN, KC_RCBR, KC_RBRC, KC_GRV, + KC_MINS, KC_ASTR, KC_EQL, KC_UNDS, KC_DLR, KC_HASH, OS_CMD, OS_ALT, OS_CTRL, OS_SHFT, + KC_PLUS, KC_PIPE, KC_AT, KC_BSLS, KC_PERC, XXXXXXX, KC_AMPR, KC_SCLN, KC_COLN, KC_EXLM, + _______, _______, _______, _______ + ), + + [NAV] = LAYOUT_callum( + KC_TAB, SW_WIN, TABL, TABR, KC_VOLU, RESET, HOME, KC_UP, END, KC_DEL, + OS_SHFT, OS_CTRL, OS_ALT, OS_CMD, KC_VOLD, KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT, KC_BSPC, + SPCL, SPCR, BACK, FWD, KC_MPLY, XXXXXXX, KC_PGDN, KC_PGUP, SW_LANG, KC_ENT, + _______, _______, _______, _______ + ), + + [NUM] = LAYOUT_callum( + KC_7, KC_5, KC_3, KC_1, KC_9, KC_8, KC_0, KC_2, KC_4, KC_6, + OS_SHFT, OS_CTRL, OS_ALT, OS_CMD, KC_F11, KC_F10, OS_CMD, OS_ALT, OS_CTRL, OS_SHFT, + KC_F7, KC_F5, KC_F3, KC_F1, KC_F9, KC_F8, KC_F12, KC_F2, KC_F4, KC_F6, + _______, _______, _______, _______ + ), +}; + +bool is_oneshot_cancel_key(uint16_t keycode) { + switch (keycode) { + case LA_SYM: + case LA_NAV: + return true; + default: + return false; + } +} + +bool is_oneshot_ignored_key(uint16_t keycode) { + switch (keycode) { + case LA_SYM: + case LA_NAV: + case KC_LSFT: + case OS_SHFT: + case OS_CTRL: + case OS_ALT: + case OS_CMD: + return true; + default: + return false; + } +} + +bool sw_win_active = false; +bool sw_lang_active = false; + +oneshot_state os_shft_state = os_up_unqueued; +oneshot_state os_ctrl_state = os_up_unqueued; +oneshot_state os_alt_state = os_up_unqueued; +oneshot_state os_cmd_state = os_up_unqueued; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + update_swapper( + &sw_win_active, KC_LGUI, KC_TAB, SW_WIN, + keycode, record + ); + update_swapper( + &sw_lang_active, KC_LCTL, KC_SPC, SW_LANG, + keycode, record + ); + + update_oneshot( + &os_shft_state, KC_LSFT, OS_SHFT, + keycode, record + ); + update_oneshot( + &os_ctrl_state, KC_LCTL, OS_CTRL, + keycode, record + ); + update_oneshot( + &os_alt_state, KC_LALT, OS_ALT, + keycode, record + ); + update_oneshot( + &os_cmd_state, KC_LCMD, OS_CMD, + keycode, record + ); + + return true; +} + +layer_state_t layer_state_set_user(layer_state_t state) { + return update_tri_layer_state(state, SYM, NAV, NUM); +} diff --git a/users/callum/oneshot.c b/users/callum/oneshot.c new file mode 100644 index 0000000000..33ec3895e2 --- /dev/null +++ b/users/callum/oneshot.c @@ -0,0 +1,57 @@ +#include "oneshot.h" + +void update_oneshot( + oneshot_state *state, + uint16_t mod, + uint16_t trigger, + uint16_t keycode, + keyrecord_t *record +) { + if (keycode == trigger) { + if (record->event.pressed) { + // Trigger keydown + if (*state == os_up_unqueued) { + register_code(mod); + } + *state = os_down_unused; + } else { + // Trigger keyup + switch (*state) { + case os_down_unused: + // If we didn't use the mod while trigger was held, queue it. + *state = os_up_queued; + break; + case os_down_used: + // If we did use the mod while trigger was held, unregister it. + *state = os_up_unqueued; + unregister_code(mod); + break; + default: + break; + } + } + } else { + if (record->event.pressed) { + if (is_oneshot_cancel_key(keycode) && *state != os_up_unqueued) { + // Cancel oneshot on designated cancel keydown. + *state = os_up_unqueued; + unregister_code(mod); + } + } else { + if (!is_oneshot_ignored_key(keycode)) { + // On non-ignored keyup, consider the oneshot used. + switch (*state) { + case os_down_unused: + *state = os_down_used; + break; + case os_up_queued: + *state = os_up_unqueued; + unregister_code(mod); + break; + default: + break; + } + } + } + } +} diff --git a/users/callum/oneshot.h b/users/callum/oneshot.h new file mode 100644 index 0000000000..a6b8e17742 --- /dev/null +++ b/users/callum/oneshot.h @@ -0,0 +1,31 @@ +#pragma once + +#include QMK_KEYBOARD_H + +// Represents the four states a oneshot key can be in +typedef enum { + os_up_unqueued, + os_up_queued, + os_down_unused, + os_down_used, +} oneshot_state; + +// Custom oneshot mod implementation that doesn't rely on timers. If a mod is +// used while it is held it will be unregistered on keyup as normal, otherwise +// it will be queued and only released after the next non-mod keyup. +void update_oneshot( + oneshot_state *state, + uint16_t mod, + uint16_t trigger, + uint16_t keycode, + keyrecord_t *record +); + +// To be implemented by the consumer. Defines keys to cancel oneshot mods. +bool is_oneshot_cancel_key(uint16_t keycode); + +// To be implemented by the consumer. Defines keys to ignore when determining +// whether a oneshot mod has been used. Setting this to modifiers and layer +// change keys allows stacking multiple oneshot modifiers, and carrying them +// between layers. +bool is_oneshot_ignored_key(uint16_t keycode); diff --git a/users/callum/readme.md b/users/callum/readme.md new file mode 100644 index 0000000000..24b71038b6 --- /dev/null +++ b/users/callum/readme.md @@ -0,0 +1,99 @@ +A keymap for 34 keys with 4 layers and no mod-tap. + +![](https://raw.githubusercontent.com/callum-oakley/keymap/master/keymap.svg) + +## Details + +- Hold `sym` to activate the symbols layer. +- Hold `nav` to activate the navigation layer. +- Hold `sym` and `nav` together to activate the numbers layer. +- The home row modifiers are oneshot so that it's possible to modify the + keys on the base layer, where there are no dedicated modifiers. +- `swap win` sends `cmd-tab` for changing focus in macOS but holds `cmd` + between consecutive presses. +- `swap lang` behaves similarly but sends `ctrl-space`, for changing input + language in macOS. + +## Oneshot modifiers + +The home row modifiers can either be held and used as normal, or if no other +keys are pressed while a modifier is down, the modifier will be queued and +applied to the next non-modifier keypress. For example to type `shift-cmd-t`, +type `sym-o-n` (or `nav-a-t`), release, then hit `t`. + +You can and should hit chords as fast as you like because there are no timers +involved. + +Cancel unused modifiers by tapping `nav` or `sym`. + +### Userspace oneshot implementation + +For my usage patterns I was hitting stuck modifiers frequently with [`OSM`][] +(maybe related to [#3963][]?). I'd like to try to help fix this in QMK proper, +but implementing oneshot mods in userspace first was: + +1. Fun. +2. A good exploration of how I think oneshot mods should work without timers. + +So in the meantime, this [userspace oneshot implementation][] is working well +for me. + +## Swapper + +`swap win` sends `cmd-tab`, but holds `cmd` between consecutive keypresses. +`cmd` is released when some other key is hit or released. For example + + nav down, swap win, swap win, nav up -> cmd down, tab, tab, cmd up + nav down, swap win, enter -> cmd down, tab, cmd up, enter + +`swap lang` sends `ctrl-space` to swap input languages in macOS and behaves +similarly. + +[Swapper implementation.][] + +## Why no mod-tap? + +[Mod-tap][] seems to be by far the most popular tool among users of tiny +keyboards to answer the question of where to put the modifiers, and in the +right hands it can clearly work brilliantly, but I've always found myself error +prone and inconsistent with it. + +With dedicated modifiers, there are three ways one might type `ctrl-c`: + + ctrl down, ctrl up, c down, c up + ctrl down, c down, ctrl up, c up + ctrl down, c down, c up, ctrl up + +Basically, you never have to worry about the keyups, as long as the keydowns +occur in the correct order. Similarly, there are three ways one might type +`ac`: + + a down, a up, c down, c up + a down, c down, a up, c up + a down, c down, c up, a up + +Replace `a` with `ctrl` and this is exactly what we had before! So if we want +to put `a` and `ctrl` on the same key we have a problem, because without +considering timing these sequences become ambiguous. So let's consider timing. + +The solution to the ambiguity that QMK employs is to configure the +`TAPPING_TERM` and consider a key held rather than tapped if it is held for +long enough. My problem with this is that it forces you to slow down to use +modifiers. By its very nature the tapping term must be longer than the longest +you would ever hold a key while typing on the slowest laziest Sunday afternoon. +I'm not typing at 100% speed at all times, but when I am, having to think about +timing and consciously slow down for certain actions never fails to trip me up. + +So alas, mod-tap is not for me -- but if it works for you, more power to you. +:) + +* * * + +[My github][] + +[`OSM`]: /docs/one_shot_keys.md +[#3963]: https://github.com/qmk/qmk_firmware/issues/3963 +[userspace oneshot implementation]: oneshot.c +[swapper implementation.]: swapper.c +[Mod-tap]: https://github.com/qmk/qmk_firmware/blob/master/docs/mod_tap.md +[My github]: https://github.com/callum-oakley diff --git a/users/callum/rules.mk b/users/callum/rules.mk new file mode 100644 index 0000000000..2d98e02c55 --- /dev/null +++ b/users/callum/rules.mk @@ -0,0 +1,3 @@ +SRC += callum.c +SRC += oneshot.c +SRC += swapper.c diff --git a/users/callum/swapper.c b/users/callum/swapper.c new file mode 100644 index 0000000000..736b2fef0c --- /dev/null +++ b/users/callum/swapper.c @@ -0,0 +1,27 @@ +#include "swapper.h" + +void update_swapper( + bool *active, + uint16_t cmdish, + uint16_t tabish, + uint16_t trigger, + uint16_t keycode, + keyrecord_t *record +) { + if (keycode == trigger) { + if (record->event.pressed) { + if (!*active) { + *active = true; + register_code(cmdish); + } + register_code(tabish); + } else { + unregister_code(tabish); + // Don't unregister cmdish until some other key is hit or released. + } + } else if (*active) { + unregister_code(cmdish); + *active = false; + } +} + diff --git a/users/callum/swapper.h b/users/callum/swapper.h new file mode 100644 index 0000000000..ad47fd96ce --- /dev/null +++ b/users/callum/swapper.h @@ -0,0 +1,20 @@ +#pragma once + +#include QMK_KEYBOARD_H + +// Implements cmd-tab like behaviour on a single key. On first tap of trigger +// cmdish is held and tabish is tapped -- cmdish then remains held until some +// other key is hit or released. For example: +// +// trigger, trigger, a -> cmd down, tab, tab, cmd up, a +// nav down, trigger, nav up -> nav down, cmd down, tab, cmd up, nav up +// +// This behaviour is useful for more than just cmd-tab, hence: cmdish, tabish. +void update_swapper( + bool *active, + uint16_t cmdish, + uint16_t tabish, + uint16_t trigger, + uint16_t keycode, + keyrecord_t *record +); -- cgit v1.2.3 From f650b03fb77530eb6aa7eab541f6a28c98e0ced6 Mon Sep 17 00:00:00 2001 From: Dan White Date: Wed, 16 Sep 2020 22:03:28 -0600 Subject: [Keymap] Badger keymaps/userspace (#10239) * Badger keymaps * bug fix - linter * code review feedback and ortholinear bugs * cleanup * backing out suspect bug after doing additional research * code review feedback * code review feedback * changing default badger keymap and small bugfix --- users/badger/README.md | 31 ++++++++++ users/badger/badger.c | 49 ++++++++++++++++ users/badger/badger.h | 109 +++++++++++++++++++++++++++++++++++ users/badger/ortho.c | 151 +++++++++++++++++++++++++++++++++++++++++++++++++ users/badger/ortho.h | 58 +++++++++++++++++++ users/badger/rules.mk | 2 + 6 files changed, 400 insertions(+) create mode 100644 users/badger/README.md create mode 100644 users/badger/badger.c create mode 100644 users/badger/badger.h create mode 100644 users/badger/ortho.c create mode 100644 users/badger/ortho.h create mode 100644 users/badger/rules.mk (limited to 'users') diff --git a/users/badger/README.md b/users/badger/README.md new file mode 100644 index 0000000000..fca1028a59 --- /dev/null +++ b/users/badger/README.md @@ -0,0 +1,31 @@ +# A multi-OS keyboard layout with support for both Linux (KDE) and MacOS-specific QWERTY layouts for many 60-ish% keyboards ( + +## Author: [BlueTufa](https://github.com/BlueTufa) + +> Supported Keyboards: 1up RGB and HTE, Clueboard 66, dztech 60 RGB, and partial support for Preonic and Planck ortholinear keyboards. + +## Layouts + +### QWERTY +Default layer: Standard QWERTY layer with CAPS lock mapped to ESC. ESC is a Layer toggle, when held down it maps to KDE-specific MOVE layer. Dedicated Function key for ADJUST layer. I also take advantage of the AG_SWAP when using this keyboard on Linux, which swaps between ALT and GUI on both sides. + +Mac layer: Mostly the same as the default layer, except that the ESC key maps to a MacOS specific set of MOVE layer shortcuts. These leverage a piece of software called Rectangle, which makes up for some of the tiling shortcomings of MacOS. + +### MOVE layer +OS-specific convenience shortcuts. Macros are defined to make it easier to adapt these to other operating systems. The macros also help maintain the spacing that helps with the readability of the layers in source control. + +The main goal of the MOVE layer is to manage window move and resize, and jump to a specific virtual desktop. The other function is to expose VIM-style move keys as arrow keys to other applications. Some keys from ADJUST layer are also redefined here. + +Care was taken to keep the tiling and virtual desktop shortcuts as similar as possible between Linux and MacOS in this MOVE layer. The most notable difference is that I haven't found a good way to do corner tiling in Linux the way that it's supported in MacOS Rectangle. + +REMINDER: The 9-key left-hand pattern requires the installation of the MacOS rectangle app: + +```bash +brew cask install rectangle +``` + +### ADJUST layer +Access to function keys as well as media controls and keyboard settings. Some useful OS action keys are defined here as well. + +### Config layer +Access to Quantum keyboard controls as well as RGB configuration. If audio is supported it would belong in this layer as well. diff --git a/users/badger/badger.c b/users/badger/badger.c new file mode 100644 index 0000000000..4551840610 --- /dev/null +++ b/users/badger/badger.c @@ -0,0 +1,49 @@ +/* +Copyright 2020 Dan White + +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 . +*/ +#include "badger.h" + +bool _capsLockState; + +__attribute__ ((weak)) +void keyboard_post_init_user(void) { + _capsLockState = false; +} + +__attribute__ ((weak)) +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case CS_RIGHT: + if (record->event.pressed) { + SEND_STRING(SS_LALT(SS_TAP(X_B)SS_TAP(X_ENTER))); + return false; + } + break; + case CS_DOWN: + if (record->event.pressed) { + SEND_STRING(SS_LALT(SS_TAP(X_V)SS_TAP(X_ENTER))); + return false; + } + break; + case KC_CAPS: + if (record->event.pressed) { + _capsLockState = !_capsLockState; + return true; + } + break; + default: + return true; + } + return true; +} diff --git a/users/badger/badger.h b/users/badger/badger.h new file mode 100644 index 0000000000..bb2dcd0bd3 --- /dev/null +++ b/users/badger/badger.h @@ -0,0 +1,109 @@ +/* +Copyright 2020 Dan White + +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 . +*/ +#pragma once + +#include QMK_KEYBOARD_H + +enum layers { + _QWERTY_MAC, + _MOVE_MAC, + _QWERTY_LINUX, + _MOVE_LINUX, + _ADJUST, + _CONFIG +}; + +enum CustomKeys { + CS_RIGHT = SAFE_RANGE, + CS_DOWN +}; + +#define OS_POP LCTL(KC_F10) +#define MAC_POP LCTL(KC_UP) +#define MAC_FRC LGUI(LALT(KC_ESC)) +#define OS_COPY LSFT(LCTL(KC_C)) +#define OS_PAST LSFT(LCTL(KC_V)) +#define MAC_PST LGUI(KC_V) +#define MAC_CPY LGUI(KC_C) +#define KC_BACK LCTL(LSFT(KC_LBRC)) +#define KC_NEXT LCTL(LSFT(KC_RBRC)) + +#define MOVE LT(_MOVE_LINUX, KC_ESC) +#define MOVE_MAC LT(_MOVE_MAC, KC_ESC) +#define ADJUST MO(_ADJUST) +#define CFG_MAC LT(_CONFIG, MAC_POP) +#define CFG_LNX LT(_CONFIG, OS_POP) + +#define WD_BACK LALT(KC_LEFT) +#define WD_FRWD LALT(KC_RIGHT) + +#define VD_1 LCTL(KC_F1) +#define VD_2 LCTL(KC_F2) +#define VD_3 LCTL(KC_F3) + +#define WM_UH LGUI(KC_UP) +#define WM_BH LGUI(KC_DOWN) +#define WM_LH LGUI(KC_LEFT) +#define WM_RH LGUI(KC_RIGHT) +#define WM_MAX LGUI(KC_PGUP) + +#define CM_RIGHT LGUI(KC_D) +#define CM_DOWN LGUI(LSFT(KC_D)) + +/* THESE are not defaults in KDE and must be set manually */ +#define WM_VD1 HYPR(KC_1) +#define WM_VD2 HYPR(KC_2) +#define WM_VD3 HYPR(KC_3) + +/* IntelliJ / JetBrains shortcuts with Mac keymap */ +#define IJ_BACK LGUI(LALT(KC_LEFT)) +#define IJ_FWD LGUI(LALT(KC_RIGHT)) +#define IJ_UP LGUI(LALT(KC_UP)) +#define IJ_DOWN LGUI(LALT(KC_DOWN)) +#define IJ_IMPL LGUI(LALT(KC_B)) +#define IJ_DECL LGUI(KC_B) +#define IJ_REN LSFT(KC_F6) +#define IJ_USAG LALT(KC_F7) +#define IJ_RUN KC_F9 +#define IJ_STEP KC_F8 +#define IJ_INTO LSFT(KC_F7) +#define IJ_OUT LSFT(KC_F8) +#define IJ_STOP LGUI(KC_F2) +#define IJ_IMPS LCTL(LALT(LSFT(KC_EQUAL))) +#define IJ_IMPH LCTL(LALT(LSFT(KC_MINUS))) +#define IJ_TOP LGUI(KC_HOME) +#define IJ_BOTT LGUI(KC_END) +#define IJ_FIND LGUI(LSFT(KC_F)) + +/* MacOS virtual desktop shortcuts */ +#define M_VD1 LCTL(KC_1) +#define M_VD2 LCTL(KC_2) +#define M_VD3 LCTL(KC_3) + +/* rectangle shortcuts */ +#define MM_ULCN LCTL(LGUI(KC_LEFT)) +#define MM_URCN LCTL(LGUI(KC_RIGHT)) +#define MM_LLCN LCTL(LSFT(LGUI(KC_LEFT))) +#define MM_LRCN LCTL(LSFT(LGUI(KC_RIGHT))) +#define MM_MAX LALT(LGUI(KC_F)) +#define MM_LH HYPR(KC_LBRC) +#define MM_RH HYPR(KC_RBRC) +#define MM_UH LALT(LGUI(KC_UP)) +#define MM_BH LALT(LGUI(KC_DOWN)) +#define MM_LEFT LCTL(LALT(LGUI(KC_LEFT))) +#define MM_RGHT LCTL(LALT(LGUI(KC_RIGHT))) + +#define DF_1 DF(_QWERTY_MAC) +#define DF_2 DF(_QWERTY_LINUX) diff --git a/users/badger/ortho.c b/users/badger/ortho.c new file mode 100644 index 0000000000..ff84e1706f --- /dev/null +++ b/users/badger/ortho.c @@ -0,0 +1,151 @@ +/* +Copyright 2020 Dan White + +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 . +*/ +#include "ortho.h" +#include "badger.h" + +int _currentLayer; +bool _capsLock; + +#ifdef AUDIO_ENABLE +float capsOnSong[][2] = SONG(CAPS_ON); +float capsOffSong[][2] = SONG(CAPS_OFF); +float defaultLayerSong[][2] = SONG(QWERTY_LAYER_SONG); +float moveLayerSong[][2] = SONG(MOVE_LAYER_SONG); +float macLayerSong[][2] = SONG(MAC_LAYER_SONG); +float raiseLayerSong[][2] = SONG(RAISE_LAYER_SONG); +float lowerLayerSong[][2] = SONG(LOWER_LAYER_SONG); +float agSwapSong[][2] = SONG(LONG_AG_SWAP); +float agNormSong[][2] = SONG(LONG_AG_NORM); +#endif + +__attribute__ ((weak)) +void keyboard_post_init_user(void) { + _capsLock = false; + _currentLayer = _QWERTY_MAC_ORTHO; + layer_on(_currentLayer); +} + +__attribute__ ((weak)) +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + dprintf("Key event recorded. KEYCODE: %u , event: %u\n", keycode, record->event.pressed); + switch (keycode) { + case CS_RIGHT: + if (record->event.pressed) { + SEND_STRING(SS_LALT(SS_TAP(X_B)SS_TAP(X_ENTER))); + return false; + } + break; + case CS_DOWN: + if (record->event.pressed) { + SEND_STRING(SS_LALT(SS_TAP(X_V)SS_TAP(X_ENTER))); + return false; + } + break; + case KC_CAPS: + if (record->event.pressed) { + dprintf("CAPS_LOCK state: %u\n", _capsLock); + _capsLock = !_capsLock; + #ifdef AUDIO_ENABLE + _capsLock ? PLAY_SONG(capsOnSong) : PLAY_SONG(capsOffSong); + #endif + return true; + } + break; + case AG_SWAP: + #ifdef AUDIO_ENABLE + PLAY_SONG(agSwapSong); + #endif + return true; + break; + case AG_NORM: + #ifdef AUDIO_ENABLE + PLAY_SONG(agNormSong); + #endif + return true; + break; + case KC_MAC2: + if (record->event.pressed) { + SEND_STRING("ll\n"); + return false; + } + break; + case KC_MAC1: + if (record->event.pressed) { + SEND_STRING("open https://www.reddit.com/r/mechanicalkeyboards\n"); + return false; + } + break; + case KC_FIRST: + if (record->event.pressed) { + // don't turn off the QWERTY layer + if (_currentLayer != _QWERTY_MAC_ORTHO) { + layer_off(_currentLayer); + } + _currentLayer = _QWERTY_MAC_ORTHO; + layer_on(_currentLayer); + playSongForLayer(_currentLayer); + return false; + } + break; + case KC_LYRC: + if (record->event.pressed) { + dprintf("LYR CYCLE pressed %u, CURRENT_LAYER: %u\n", keycode, _currentLayer); + // don't turn off the QWERTY layer or the ADJUST layer + if (_currentLayer != _QWERTY_MAC_ORTHO) { + layer_off(_currentLayer); + } + // don't lock the ADJUST layer + // since this key is accessible via the ADJUST + // layer, as it will require tricky state management + if (++_currentLayer == _ADJUST_ORTHO) { + _currentLayer = _QWERTY_MAC_ORTHO; + } else { + layer_on(_currentLayer); + } + + playSongForLayer(_currentLayer); + return false; + } + break; + } + return true; +} + +void playSongForLayer(int currentLayer) { + #ifdef AUDIO_ENABLE + switch (currentLayer) { + case _QWERTY_LINUX: + PLAY_SONG(defaultLayerSong); + break; + case _MOVE_LINUX: + PLAY_SONG(moveLayerSong); + break; + case _QWERTY_MAC: + PLAY_SONG(macLayerSong); + break; + case _MOVE_MAC: + PLAY_SONG(moveLayerSong); + break; + case _RAISE: + PLAY_SONG(raiseLayerSong); + break; + case _LOWER: + PLAY_SONG(lowerLayerSong); + break; + default: + break; + } + #endif +} \ No newline at end of file diff --git a/users/badger/ortho.h b/users/badger/ortho.h new file mode 100644 index 0000000000..207f2e2822 --- /dev/null +++ b/users/badger/ortho.h @@ -0,0 +1,58 @@ +/* +Copyright 2020 Dan White + +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 . +*/ +#pragma once + +#include "badger.h" + +enum OrthoLayers { + _QWERTY_MAC_ORTHO, + _MOVE_MAC_ORTHO, + _QWERTY_LINUX_ORTHO, + _MOVE_LINUX_ORTHO, + _RAISE, + _LOWER, + _ADJUST_ORTHO +}; + +enum OrthoKeys { + KC_MAC1 = CS_DOWN + 1, + KC_MAC2, + KC_LYRC, + KC_FIRST +}; + +#define P_ADJ LT(_ADJUST_ORTHO, KC_BSPC) +#define RAISE MO(_RAISE) +#define LOWER MO(_LOWER) +#define MOMAC LT(_MOVE_MAC_ORTHO, KC_ESC) +#define MOLNX LT(_MOVE_LINUX_ORTHO, KC_ESC) + +void playSongForLayer(int currentLayer); + +#ifdef AUDIO_ENABLE +#define QWERTY_LAYER_SONG H__NOTE(_G6), H__NOTE(_D6), Q__NOTE(_A5), Q__NOTE(_E5), +#define MAC_LAYER_SONG H__NOTE(_E5), H__NOTE(_A5), Q__NOTE(_D6), Q__NOTE(_G6), \ + ED_NOTE(_E7), E__NOTE(_CS7), E__NOTE(_E6), E__NOTE(_A6), M__NOTE(_CS7, 20), +#define LONG_AG_SWAP Q__NOTE(_G5), Q__NOTE(_D6), Q__NOTE(_A6), Q__NOTE(_E7), \ + SD_NOTE(_B5), SD_NOTE(_A5), SD_NOTE(_B5), SD_NOTE(_A5), +#define LONG_AG_NORM Q__NOTE(_DS4), Q__NOTE(_DS4), B__NOTE(_C5), +#define MOVE_LAYER_SONG E__NOTE(_GS6), E__NOTE(_A6), S__NOTE(_REST), ED_NOTE(_E7), \ + S__NOTE(_REST), ED_NOTE(_GS7), +#define RAISE_LAYER_SONG W__NOTE(_BF5), Q__NOTE(_A5), W__NOTE(_BF5), Q__NOTE(_A5), W__NOTE(_E6), Q__NOTE(_B5), +#define LOWER_LAYER_SONG Q__NOTE(_DS4), E__NOTE(_DS4), E__NOTE(_DS6), Q__NOTE(_DS5), \ + E__NOTE(_DS5), E__NOTE(_DS6), Q__NOTE(_E5), E__NOTE(_E5), E__NOTE(_DS6), Q__NOTE(_DS5), +#define CAPS_ON W__NOTE(_E5), Q__NOTE(_BF5), W__NOTE(_E5), Q__NOTE(_BF5), W__NOTE(_E5), Q__NOTE(_BF5), +#define CAPS_OFF W__NOTE(_E5), Q__NOTE(_BF5), +#endif diff --git a/users/badger/rules.mk b/users/badger/rules.mk new file mode 100644 index 0000000000..4f1507b8f3 --- /dev/null +++ b/users/badger/rules.mk @@ -0,0 +1,2 @@ +SRC += badger.c +SRC += ortho.c -- cgit v1.2.3 From abec529e62ed200313af0629377f8bc60ec83367 Mon Sep 17 00:00:00 2001 From: spotpuff <32026605+spotpuff@users.noreply.github.com> Date: Thu, 17 Sep 2020 17:55:19 -0400 Subject: [Keymap] coppertop and spotpuff keymaps for DZ60 (#10216) * initial keymap commit * Keymap for coppertop commit * removed define for layers/kc_no/kc_trns * Modified keymap to remove definitions and add layer enum * initial keymap commit * Keymap for coppertop commit * removed define for layers/kc_no/kc_trns * Modified keymap to remove definitions and add layer enum * Changed KC_NO and KC_TRNS to 7X and 7_ * Fixed spacing on keymaps * TMO50: use layer_state_set_kb at keyboard level (#10150) * Change TMO to use layer_state_set_kb as is customary at the keyboard level. This also factors out `process_indicator_led` to a separate method. * [Keymap] update dz60:mrsendyyk (#10160) Update DZ60 Personal readme.md and keymap.c * Update readme.md * Update keymap.c * Update keymap.c * Update readme.md * Update readme.md * Update readme.md * Update keymap.c * Update readme.md * Update * Update readme.md * Update keymap.c * Update readme.md * [Keyboard] YMDK NP21 refactor (#10181) * [Keyboard] 1upkeyboards/1up60rgb: fix broken Enter (#10188) The recent change to unnest macros put the enter on the wrong matrix key. On the 1uprgb, the ANSI and ISO enters share the same cell as does the ANSI and ISO backslash. * no idea what this is * Update keyboards/dz60/keymaps/coppertop/keymap.c * Update keyboards/dz60/keymaps/coppertop/keymap.c * Update keyboards/dz60/keymaps/coppertop/keymap.c * Update keyboards/dz60/keymaps/spotpuff/keymap.c * Update keyboards/dz60/keymaps/spotpuff/keymap.c * Update keyboards/dz60/keymaps/spotpuff/keymap.c * Added Trns labels to keymap comments. * Revert "no idea what this is" This reverts commit dd950f9eb3bad365961d2aa6c97c9dfbdd6219db. * Reverted dd950f9eb3bad365961d2aa6c97c9dfbdd6219db * fix vusb submodule * Update keyboards/dz60/keymaps/coppertop/rules.mk * Update keyboards/dz60/keymaps/spotpuff/rules.mk * Update users/spotpuff/rules.mk * Added GNU copyright license text --- users/spotpuff/rules.mk | 1 + 1 file changed, 1 insertion(+) create mode 100644 users/spotpuff/rules.mk (limited to 'users') diff --git a/users/spotpuff/rules.mk b/users/spotpuff/rules.mk new file mode 100644 index 0000000000..2790548373 --- /dev/null +++ b/users/spotpuff/rules.mk @@ -0,0 +1 @@ +BOOTMAGIC_ENABLE = no -- cgit v1.2.3 From 1aacbc44d18a1d23c58561ee17498618a1e6319d Mon Sep 17 00:00:00 2001 From: Fred Silberberg Date: Sun, 4 Oct 2020 12:24:35 -0700 Subject: [Keymap] Added 333fred 5x6_5 keymap (#10272) * First pass at manuform layout. * Updates from actual usage on my board. Fixed a couple of bugs, added a stormlight quote randomizer. * Use a 32-bit timer that can actually hit 5 minutes. * Some updates after a day of usage: * Turn off WPM. It's too inaccurate and takes up a decent amount of space that can be devoted to quotes. * Turn off the OLEDs after 5 minutes * Move the keys around a bit. * Add many more quotes. * Adjust the quotes to make room for missing and misswritten WoT quote. Adjusted the keymap slightly. Adjust the mods display to include one_shots. * Revert osm on lgui as it makes start menu search impossible to use. * Use LTO_ENABLE flag. * License all of my (333fred's) keymaps as MIT. * Update users/333fred/rgb.c Co-authored-by: Ryan Co-authored-by: Ryan --- users/333fred/333fred.c | 22 ++++++++++++++++++++++ users/333fred/333fred.h | 35 ++++++++++++++++++++++++++++------- users/333fred/config.h | 22 ++++++++++++++++++++++ users/333fred/layout_macros.h | 22 ++++++++++++++++++++++ users/333fred/rgb.c | 22 ++++++++++++++++++++++ users/333fred/rules.mk | 1 + 6 files changed, 117 insertions(+), 7 deletions(-) (limited to 'users') diff --git a/users/333fred/333fred.c b/users/333fred/333fred.c index 79df8c4dea..621b9e6649 100644 --- a/users/333fred/333fred.c +++ b/users/333fred/333fred.c @@ -1,3 +1,25 @@ +/* + Copyright (c) 2020 Fred Silberberg + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + #include "333fred.h" #include "quantum.h" #include "action.h" diff --git a/users/333fred/333fred.h b/users/333fred/333fred.h index 716b61a25c..0532ff2df7 100644 --- a/users/333fred/333fred.h +++ b/users/333fred/333fred.h @@ -1,16 +1,37 @@ +/* + Copyright (c) 2020 Fred Silberberg + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + #pragma once #include "quantum.h" #include "layout_macros.h" #define BASE 0 -#define CODE 1 // code layer -#define CODEFLOW 2 -#define SYMB 3 -#define MDIA 4 // media keys -#define VIM 5 -#define GAME 6 -#define GAME_ARROW 7 +#define CODEFLOW 1 +#define SYMB 2 +#define MDIA 3 // media keys +#define VIM 4 +#define GAME 5 +#define GAME_ARROW 6 // Tap dance config shared between my keyboards enum tap_dance_declarations { diff --git a/users/333fred/config.h b/users/333fred/config.h index 5974b78926..0bbaa38a99 100644 --- a/users/333fred/config.h +++ b/users/333fred/config.h @@ -1,3 +1,25 @@ +/* + Copyright (c) 2020 Fred Silberberg + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + #pragma once #define PERMISSIVE_HOLD diff --git a/users/333fred/layout_macros.h b/users/333fred/layout_macros.h index 3b163f6ce7..d46a41905e 100644 --- a/users/333fred/layout_macros.h +++ b/users/333fred/layout_macros.h @@ -1,3 +1,25 @@ +/* + Copyright (c) 2020 Fred Silberberg + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + #pragma once #define SIX_TRNS _______, _______, _______, _______, _______, _______ diff --git a/users/333fred/rgb.c b/users/333fred/rgb.c index c86cd1c77d..d287143302 100644 --- a/users/333fred/rgb.c +++ b/users/333fred/rgb.c @@ -1,3 +1,25 @@ +/* + Copyright (c) 2020 Fred Silberberg + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + #include "quantum.h" #include "333fred.h" diff --git a/users/333fred/rules.mk b/users/333fred/rules.mk index 191422e365..265a6c18cb 100644 --- a/users/333fred/rules.mk +++ b/users/333fred/rules.mk @@ -7,3 +7,4 @@ endif TAP_DANCE_ENABLE=yes NKRO_ENABLE = yes PERMISSIVE_HOLD = yes +LTO_ENABLE = yes -- cgit v1.2.3 From 661f4aaa8a4c25655007a238226d5d14549d083a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Reibl=20J=C3=A1nos=20D=C3=A1niel?= Date: Mon, 5 Oct 2020 00:35:28 +0200 Subject: [Keymap] Move my custom functions and keymaps to userspace (#10502) * Move my custom functions and keymaps to userspace to be able to add the STM32F411 variant of my keyboard with mostly the same functionality * Move keymaps to community layouts * Remove keymaps from userspace readme.md Co-authored-by: Janos Daniel Reibl --- users/riblee/readme.md | 14 +++++ users/riblee/riblee.c | 166 +++++++++++++++++++++++++++++++++++++++++++++++++ users/riblee/riblee.h | 56 +++++++++++++++++ users/riblee/rules.mk | 1 + 4 files changed, 237 insertions(+) create mode 100644 users/riblee/readme.md create mode 100644 users/riblee/riblee.c create mode 100644 users/riblee/riblee.h create mode 100644 users/riblee/rules.mk (limited to 'users') diff --git a/users/riblee/readme.md b/users/riblee/readme.md new file mode 100644 index 0000000000..54f5cc8bb0 --- /dev/null +++ b/users/riblee/readme.md @@ -0,0 +1,14 @@ +Copyright 2020 Janos Daniel Reibl @riblee + +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 . diff --git a/users/riblee/riblee.c b/users/riblee/riblee.c new file mode 100644 index 0000000000..e1fe607ef2 --- /dev/null +++ b/users/riblee/riblee.c @@ -0,0 +1,166 @@ +/* Copyright 2020 Janos Daniel Reibl @riblee + * + * 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 . + */ + +#include "riblee.h" + +const uint8_t shift = MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT); + +// Tap Dance functions +void dance_key_a (qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + SEND_STRING("a"); + reset_tap_dance(state); + } else if (state->count == 2) { + if (!(keyboard_report->mods & shift)) { + send_unicode_string("á"); + } else { + send_unicode_string("Á"); + } + + reset_tap_dance(state); + } +} + +void dance_key_e (qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + SEND_STRING("e"); + reset_tap_dance(state); + } else if (state->count == 2) { + if (!(keyboard_report->mods & shift)) { + send_unicode_string("é"); + } else { + send_unicode_string("É"); + } + + reset_tap_dance(state); + } +} + +void dance_key_i (qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + SEND_STRING("i"); + reset_tap_dance(state); + } else if (state->count == 2) { + if (!(keyboard_report->mods & shift)) { + send_unicode_string("í"); + } else { + send_unicode_string("Í"); + } + + reset_tap_dance(state); + } +} + +void dance_key_o (qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + SEND_STRING("o"); + reset_tap_dance(state); + } else if (state->count == 2) { + if (!(keyboard_report->mods & shift)) { + send_unicode_string("ó"); + } else { + send_unicode_string("Ó"); + } + + reset_tap_dance(state); + } else if (state->count == 3) { + if (!(keyboard_report->mods & shift)) { + send_unicode_string("ö"); + } else { + send_unicode_string("Ö"); + } + + reset_tap_dance(state); + } else if (state->count == 4) { + if (!(keyboard_report->mods & shift)) { + send_unicode_string("ő"); + } else { + send_unicode_string("Ő"); + } + + reset_tap_dance(state); + } +} + +void dance_key_u (qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + SEND_STRING("u"); + reset_tap_dance(state); + } else if (state->count == 2) { + if (!(keyboard_report->mods & shift)) { + send_unicode_string("ú"); + } else { + send_unicode_string("Ú"); + } + + reset_tap_dance(state); + } else if (state->count == 3) { + if (!(keyboard_report->mods & shift)) { + send_unicode_string("ü"); + } else { + send_unicode_string("Ü"); + } + + reset_tap_dance(state); + } else if (state->count == 4) { + if (!(keyboard_report->mods & shift)) { + send_unicode_string("ű"); + } else { + send_unicode_string("Ű"); + } + + reset_tap_dance(state); + } +} + +layer_state_t layer_state_set_user(layer_state_t state) { + return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST); +} + +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 COLEMAK: + if (record->event.pressed) { + set_single_persistent_default_layer(_COLEMAK); + } + return false; + break; + case DVORAK: + if (record->event.pressed) { + set_single_persistent_default_layer(_DVORAK); + } + return false; + break; + case BACKLIT: + if (record->event.pressed) { + register_code(keycode_config(KC_LGUI)); +#ifdef BACKLIGHT_ENABLE + backlight_step(); +#endif + } else { + unregister_code(keycode_config(KC_LGUI)); + } + return false; + break; + } + return true; +}; diff --git a/users/riblee/riblee.h b/users/riblee/riblee.h new file mode 100644 index 0000000000..bdaa9f3211 --- /dev/null +++ b/users/riblee/riblee.h @@ -0,0 +1,56 @@ +/* Copyright 2020 Janos Daniel Reibl @riblee + * + * 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 . + */ + +#pragma once + +#include QMK_KEYBOARD_H + +enum preonic_layers { + _QWERTY, + _COLEMAK, + _DVORAK, + _LOWER, + _RAISE, + _ADJUST +}; + +enum preonic_keycodes { + QWERTY = SAFE_RANGE, + COLEMAK, + DVORAK, + BACKLIT +}; + +#define LOWER MO(_LOWER) +#define RAISE MO(_RAISE) + +// Tap Dance declarations +enum { + TD_A, + TD_E, + TD_I, + TD_O, + TD_U, +}; + +void dance_key_a (qk_tap_dance_state_t *, void *); +void dance_key_e (qk_tap_dance_state_t *, void *); +void dance_key_i (qk_tap_dance_state_t *, void *); +void dance_key_o (qk_tap_dance_state_t *, void *); +void dance_key_u (qk_tap_dance_state_t *, void *); + +layer_state_t layer_state_set_user(layer_state_t); +bool process_record_user(uint16_t keycode, keyrecord_t *record); \ No newline at end of file diff --git a/users/riblee/rules.mk b/users/riblee/rules.mk new file mode 100644 index 0000000000..31c0645d78 --- /dev/null +++ b/users/riblee/rules.mk @@ -0,0 +1 @@ +SRC += riblee.c \ No newline at end of file -- cgit v1.2.3