From 77e48f5b7e34722382f9fe92881f1d419d05b5fe Mon Sep 17 00:00:00 2001 From: Olly Hayes Date: Tue, 26 Jul 2022 08:26:22 +0200 Subject: [Keymap] Add ollyhayes keymap (#16632) --- users/ollyhayes/ollyhayes.c | 153 ++++++++++++++++++++++++++++++++++++++++++++ users/ollyhayes/ollyhayes.h | 41 ++++++++++++ users/ollyhayes/rules.mk | 1 + 3 files changed, 195 insertions(+) create mode 100644 users/ollyhayes/ollyhayes.c create mode 100644 users/ollyhayes/ollyhayes.h create mode 100644 users/ollyhayes/rules.mk (limited to 'users/ollyhayes') diff --git a/users/ollyhayes/ollyhayes.c b/users/ollyhayes/ollyhayes.c new file mode 100644 index 0000000000..6dfd61b263 --- /dev/null +++ b/users/ollyhayes/ollyhayes.c @@ -0,0 +1,153 @@ +/* Copyright 2022 Olly Hayes (@ollyhayes) + * + * 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 "ollyhayes.h" + +#ifdef VIRTSER_ENABLE +# include "virtser.h" +#endif + +layer_state_t default_layer_state_set_kb(layer_state_t state) { + if (layer_state_cmp(state, BASE)) { + rgb_matrix_mode(3); + } else if (layer_state_cmp(state, GAMES)) { + rgb_matrix_mode(1); + } + return state; +} + +uint16_t key_presses = 0; +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + // for tab/number layer switch + static bool key_pressed_since_switch = false; + static uint16_t switch_down_time = 0; + + // for alt-tab on punc layer + static bool alt_tab_used = false; + + // for capital umlauts + static bool shift_held = false; + +#ifdef VIRTSER_ENABLE + if (record->event.pressed) { + uint8_t key_index = 40 + record->event.key.col + record->event.key.row * 6; + virtser_send(key_index); + } else { + uint8_t key_index = 90 + record->event.key.col + record->event.key.row * 6; + virtser_send(key_index); + } +#endif + + if (record->event.pressed) { + key_pressed_since_switch = true; + key_presses++; + } + + switch (keycode) { + case UP4: + if (record->event.pressed) { + tap_code(KC_UP); + tap_code(KC_UP); + tap_code(KC_UP); + tap_code(KC_UP); + return false; + } + break; + + case DOWN4: + if (record->event.pressed) { + tap_code(KC_DOWN); + tap_code(KC_DOWN); + tap_code(KC_DOWN); + tap_code(KC_DOWN); + return false; + } + break; + + case NUM_SWITCH: + if (record->event.pressed) { + layer_on(NUM); + key_pressed_since_switch = false; + switch_down_time = timer_read(); + } else { + layer_off(NUM); + + if (!key_pressed_since_switch && timer_elapsed(switch_down_time) < 200) { + tap_code(KC_TAB); + } + } + return false; + + case MO(PUNC): + if (!record->event.pressed) { + if (alt_tab_used) { + unregister_code(KC_LALT); + alt_tab_used = false; + } + } + return true; + + case MO(FUNCTIONS): + if (!record->event.pressed) { + // if NUM_SWITCH has been lifted first, toggle to that layer + // (4 = 2^NUM) + if ((layer_state & 4) != 0) { + layer_on(FUNCTIONS); + return false; + } + } + return true; + + case ALTTAB: + if (record->event.pressed) { + alt_tab_used = true; + register_code(KC_LALT); + tap_code(KC_TAB); + } + return false; + + case KC_LSFT: + case KC_RSFT: + shift_held = record->event.pressed; + break; + + case A_UMLAUT: + if (record->event.pressed) { + if (shift_held) + register_unicode(0x00c4); + else + register_unicode(0x00e4); + } + break; + case O_UMLAUT: + if (record->event.pressed) { + if (shift_held) + register_unicode(0x00d6); + else + register_unicode(0x00f6); + } + break; + case U_UMLAUT: + if (record->event.pressed) { + if (shift_held) + register_unicode(0x00dc); + else + register_unicode(0x00fc); + } + break; + } + return true; +} diff --git a/users/ollyhayes/ollyhayes.h b/users/ollyhayes/ollyhayes.h new file mode 100644 index 0000000000..c65422937c --- /dev/null +++ b/users/ollyhayes/ollyhayes.h @@ -0,0 +1,41 @@ +/* Copyright 2022 Olly Hayes (@ollyhayes) + * + * 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 QMK_KEYBOARD_H + +enum layers { + BASE, + QWERTY, + GAMES, + NUM, + FUNCTIONS, + ARR, + PUNC, + DUBPUNC, + MEDIA, +}; + +enum custom_keycodes { + DOWN4 = SAFE_RANGE, + UP4, + NUM_SWITCH, + ALTTAB, + A_UMLAUT, + O_UMLAUT, + U_UMLAUT, +}; + +extern uint16_t key_presses; diff --git a/users/ollyhayes/rules.mk b/users/ollyhayes/rules.mk new file mode 100644 index 0000000000..27752a5dee --- /dev/null +++ b/users/ollyhayes/rules.mk @@ -0,0 +1 @@ +SRC += ollyhayes.c -- cgit v1.2.1