From 8b3f5533cadec41e76728e7b76c278ab2cc3ba7b Mon Sep 17 00:00:00 2001 From: Chris Zervakis Date: Mon, 21 Oct 2024 22:02:20 +0300 Subject: [PATCH] refactor: Rework layers --- .../keymaps/chzerv/features/select_word.c | 146 --------------- .../keymaps/chzerv/features/select_word.h | 66 ------- .../keebio/iris_ce/keymaps/chzerv/keymap.c | 169 +++--------------- 3 files changed, 25 insertions(+), 356 deletions(-) delete mode 100644 keyboards/keebio/iris_ce/keymaps/chzerv/features/select_word.c delete mode 100644 keyboards/keebio/iris_ce/keymaps/chzerv/features/select_word.h diff --git a/keyboards/keebio/iris_ce/keymaps/chzerv/features/select_word.c b/keyboards/keebio/iris_ce/keymaps/chzerv/features/select_word.c deleted file mode 100644 index a1bf939b..00000000 --- a/keyboards/keebio/iris_ce/keymaps/chzerv/features/select_word.c +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright 2021-2023 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/** - * @file select_word.c - * @brief Select word implementation - * - * For full documentation, see - * - */ - -#include "select_word.h" - -// Mac users, uncomment this line: -// #define MAC_HOTKEYS - -// clang-format off -enum { - STATE_NONE, // No selection. - STATE_SELECTED, // Macro released with something selected. - STATE_WORD, // Macro held with word(s) selected. - STATE_FIRST_LINE, // Macro held with one line selected. - STATE_LINE // Macro held with multiple lines selected. -}; -// clang-format on -static uint8_t state = STATE_NONE; - -// Idle timeout timer to disable Select Word after a period of inactivity. -#if SELECT_WORD_TIMEOUT > 0 -static uint16_t idle_timer = 0; - -void select_word_task(void) { - if (state && timer_expired(timer_read(), idle_timer)) { - state = STATE_NONE; - } -} -#endif // SELECT_WORD_TIMEOUT > 0 - -bool process_select_word(uint16_t keycode, keyrecord_t* record, - uint16_t sel_keycode) { - if (keycode == KC_LSFT || keycode == KC_RSFT) { - return true; - } - -#if SELECT_WORD_TIMEOUT > 0 - idle_timer = record->event.time + SELECT_WORD_TIMEOUT; -#endif // SELECT_WORD_TIMEOUT > 0 - - if (keycode == sel_keycode && record->event.pressed) { // On key press. - const uint8_t mods = get_mods(); -#ifndef NO_ACTION_ONESHOT - const bool shifted = (mods | get_oneshot_mods()) & MOD_MASK_SHIFT; - clear_oneshot_mods(); -#else - const bool shifted = mods & MOD_MASK_SHIFT; -#endif // NO_ACTION_ONESHOT - - if (!shifted) { // Select word. -#ifdef MAC_HOTKEYS - set_mods(MOD_BIT(KC_LALT)); // Hold Left Alt (Option). -#else - set_mods(MOD_BIT(KC_LCTL)); // Hold Left Ctrl. -#endif // MAC_HOTKEYS - if (state == STATE_NONE) { - // On first use, tap Ctrl+Right then Ctrl+Left (or with Alt on Mac) to - // ensure the cursor is positioned at the beginning of the word. - send_keyboard_report(); - tap_code(KC_RGHT); - tap_code(KC_LEFT); - } - register_mods(MOD_BIT(KC_LSFT)); - register_code(KC_RGHT); - state = STATE_WORD; - } else { // Select line. - if (state == STATE_NONE) { -#ifdef MAC_HOTKEYS - // Tap GUI (Command) + Left, then Shift + GUI + Right. - set_mods(MOD_BIT(KC_LGUI)); - send_keyboard_report(); - tap_code(KC_LEFT); - register_mods(MOD_BIT(KC_LSFT)); - tap_code(KC_RGHT); -#else - // Tap Home, then Shift + End. - clear_mods(); - send_keyboard_report(); - tap_code(KC_HOME); - register_mods(MOD_BIT(KC_LSFT)); - tap_code(KC_END); -#endif // MAC_HOTKEYS - set_mods(mods); - state = STATE_FIRST_LINE; - } else { - register_code(KC_DOWN); - state = STATE_LINE; - } - } - return false; - } - - // `sel_keycode` was released, or another key was pressed. - switch (state) { - case STATE_WORD: - unregister_code(KC_RGHT); -#ifdef MAC_HOTKEYS - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_LALT)); -#else - unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_LCTL)); -#endif // MAC_HOTKEYS - state = STATE_SELECTED; - break; - - case STATE_FIRST_LINE: - state = STATE_SELECTED; - break; - - case STATE_LINE: - unregister_code(KC_DOWN); - state = STATE_SELECTED; - break; - - case STATE_SELECTED: - if (keycode == KC_ESC) { - tap_code(KC_RGHT); - state = STATE_NONE; - return false; - } - // Fallthrough intended. - default: - state = STATE_NONE; - } - - return true; -} - diff --git a/keyboards/keebio/iris_ce/keymaps/chzerv/features/select_word.h b/keyboards/keebio/iris_ce/keymaps/chzerv/features/select_word.h deleted file mode 100644 index 82f07e2f..00000000 --- a/keyboards/keebio/iris_ce/keymaps/chzerv/features/select_word.h +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright 2021-2023 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/** - * @file select_word.h - * @brief Select word/line macro. - * - * Overview - * -------- - * - * Implements a button that selects the current word, assuming conventional text - * editor hotkeys. Pressing it again extends the selection to the following - * word. The effect is similar to word selection (W) in the Kakoune editor. - * - * Pressing the button with shift selects the current line, and pressing the - * button again extends the selection to the following line. - * - * @note Note for Mac users: Windows/Linux editing hotkeys are assumed by - * default. Uncomment the `#define MAC_HOTKEYS` line in select_word.c for Mac - * hotkeys. The Mac implementation is untested, let me know if it has problems. - * - * For full documentation, see - * - */ - -#pragma once - -#include "quantum.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** Handler function for select word. */ -bool process_select_word(uint16_t keycode, keyrecord_t* record, - uint16_t sel_keycode); - -/** - * @fn select_word_task(void) - * Matrix task function for Select Word. - * - * If using `SELECT_WORD_TIMEOUT`, call this function from your - * `matrix_scan_user()` function in keymap.c. (If no timeout is set, calling - * `select_word_task()` has no effect.) - */ -#if SELECT_WORD_TIMEOUT > 0 -void select_word_task(void); -#else -static inline void select_word_task(void) {} -#endif // SELECT_WORD_TIMEOUT > 0 - -#ifdef __cplusplus -} -#endif - diff --git a/keyboards/keebio/iris_ce/keymaps/chzerv/keymap.c b/keyboards/keebio/iris_ce/keymaps/chzerv/keymap.c index d024abc7..05c35bd6 100644 --- a/keyboards/keebio/iris_ce/keymaps/chzerv/keymap.c +++ b/keyboards/keebio/iris_ce/keymaps/chzerv/keymap.c @@ -1,181 +1,62 @@ #include QMK_KEYBOARD_H -#include "features/select_word.h" -enum custom_keycodes { - SELWORD = SAFE_RANGE, - UPDIR, - LITERAL, -}; +#include "chzerv.c" -// Layers -enum custom_layers { - _BASE, - _SYM, - _NAV, - _FUN, -}; - -// Aliases for mappings -#define MO_SYM MO(_SYM) -#define MO_NAV MO(_NAV) -#define FUN_ENT LT(_FUN, KC_ENT) - -// `Escape` when tapped, `Control` when held -#define CTL_ESC MT(MOD_LCTL, KC_ESC) - -// One shot modifiers, used in the navigation layer (_NAV) -#define OSM_G OSM(MOD_LGUI) -#define OSM_A OSM(MOD_LALT) -#define OSM_S OSM(MOD_LSFT) -#define OSM_C OSM(MOD_LCTL) -#define OSM_HYP OSM(MOD_HYPR) -#define OSM_MEH OSM(MOD_MEH) - -// Navigating inside the browser -#define TAB_NXT C(KC_PGDN) -#define TAB_PRV C(KC_PGUP) -#define TAB_NEW C(KC_T) -#define TAB_CL C(KC_W) -#define TAB_RE C(S(KC_T)) -#define SRCHBAR C(KC_L) - -#define SELALL C(KC_A) // Select all -#define TMUX_ C(KC_SPC) // TMUX prefix key -#define REDO C(S(KC_Z)) -#define WORD_PR C(KC_LEFT) // Previous word -#define WORD_NX C(KC_RIGHT) // Next word - -//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// -// KEYMAP // const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_BASE] = LAYOUT( + + [_BASE] = LAYOUT( //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ - CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ - OSM_S, KC_Z, KC_X, KC_C, KC_V, KC_B, TMUX_, KC_BSPC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, OSM_S, + OSM_LS, KC_Z, KC_X, KC_C, KC_V, KC_B, XXXXXXX, CW_TOGG, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, OSM_RS, //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘ - KC_LGUI, MO_NAV, FUN_ENT, KC_SPC, MO_SYM, OSM_A + KC_LGUI, BS_NAV, CTL_ENT, KC_SPC, MO_SYM, OSM_A // └────────┴────────┴────────┘ └────────┴────────┴────────┘ - ), + ), - // The number row stays so we can do `Mod+Number` for navigating DE/WM workspaces - [_NAV] = LAYOUT( + [_NAV] = LAYOUT( //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ - SRCHBAR, TAB_RE, TAB_CL, TAB_PRV, TAB_NXT, TAB_NEW, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______, + _______, TAB_RE, TAB_CL, TAB_PR, TAB_NX, G(KC_ENT), WORD_PR, SELALL, SELLINE, WORD_NX, _______, _______, //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ - OSM_MEH, OSM_G, OSM_A, OSM_S, OSM_C, OSM_HYP, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT,_______, _______, + _______, OSM_G, OSM_A, OSM_LS, OSM_C, OSM_CS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, UPDIR, //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ - REDO, KC_UNDO, KC_CUT, KC_COPY, KC_PSTE, XXXXXXX, _______, _______, WORD_PR, XXXXXXX, XXXXXXX, WORD_NX, _______, _______, + REDO, KC_UNDO, KC_CUT, KC_COPY, KC_PSTE, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______, //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘ - _______, _______, _______, SELALL, SELWORD, _______ + _______, _______, _______, _______, _______, LLOCK // └────────┴────────┴────────┘ └────────┴────────┴────────┘ - ), + ), - [_SYM] = LAYOUT( + [_SYM] = LAYOUT( //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_MINS, //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ - _______, KC_QUOT, KC_LT, KC_GT, KC_DQUO, KC_GRV, LITERAL, KC_LBRC, KC_RBRC, KC_COLN, KC_AT, _______, + _______, KC_QUOT, KC_LT, KC_GT, KC_DQUO, KC_GRV, ARROW, KC_LCBR, KC_RCBR, KC_AT, XXXXXXX, LITERAL, //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ - _______, KC_HASH, KC_EQL, KC_UNDS, KC_DLR, KC_ASTR, KC_SLSH, KC_LPRN, KC_RPRN, KC_SCLN, KC_QUES, _______, + KC_HASH, KC_EXLM, KC_EQL, KC_UNDS, KC_DLR, KC_ASTR, KC_SLSH, KC_LPRN, KC_RPRN, KC_COLN, KC_SCLN, UPDIR, //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ - _______, KC_PIPE, KC_AMPR, KC_MINS, KC_PLUS, KC_PERC, UPDIR, _______, KC_TILD, KC_LCBR, KC_RCBR, KC_RCBR, KC_SLSH, _______, + _______, KC_PIPE, KC_AMPR, KC_MINS, KC_PLUS, KC_PERC, _______, _______, KC_TILD, KC_LBRC, KC_RBRC, KC_DOT, KC_QUES, USRNAME, //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘ - _______, _______, _______, _______, _______, _______ + _______, _______, _______, _______, _______, LLOCK // └────────┴────────┴────────┘ └────────┴────────┴────────┘ - ), + ), - [_FUN] = LAYOUT( + [_FUN] = LAYOUT( //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ - XXXXXXX, XXXXXXX, MS_UP, MS_WHLD, MS_WHLU, MS_BTN3, UG_TOGG, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, KC_PSCR, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, UG_TOGG, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, KC_PSCR, //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤ - _______, MS_LEFT, MS_DOWN, MS_RGHT, MS_BTN1, MS_BTN2, UG_NEXT, KC_VOLD, KC_MUTE, KC_VOLU, XXXXXXX, EE_CLR, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, UG_NEXT, KC_VOLD, KC_MUTE, KC_VOLU, XXXXXXX, EE_CLR, //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ - _______, KC_UNDO, KC_CUT, KC_COPY, KC_PASTE,XXXXXXX, XXXXXXX, _______, XXXXXXX, KC_BRID, XXXXXXX, KC_BRIU, XXXXXXX, QK_BOOT, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_BRID, XXXXXXX, KC_BRIU, XXXXXXX, QK_BOOT, //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘ - _______, _______, _______, _______, CW_TOGG, _______ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LLOCK // └────────┴────────┴────────┘ └────────┴────────┴────────┘ - ) + ) }; - -bool process_record_user(uint16_t keycode, keyrecord_t* record) { - // Macros - if (record->event.pressed) { - switch (keycode) { - case UPDIR: - SEND_STRING("../"); - return false; - case LITERAL: - SEND_STRING("\"${}\"" SS_TAP(X_LEFT) SS_TAP(X_LEFT)); - return false; - } - } - - // Keys - switch (keycode) { - // https://getreuer.info/posts/keyboards/macros3/index.html#shift-backspace-delete - case KC_BSPC: { - static uint16_t registered_key = KC_NO; - - if (record->event.pressed) { // On key press - const uint8_t mods = get_mods(); - uint8_t shift_mods = (mods | get_oneshot_mods()) & MOD_MASK_SHIFT; - - if (shift_mods) { // At least one shift key is held. - registered_key = KC_DEL; - if (shift_mods != MOD_MASK_SHIFT) { - del_oneshot_mods(MOD_MASK_SHIFT); - unregister_mods(MOD_MASK_SHIFT); - } - } else { - registered_key = KC_BSPC; - } - - register_code(registered_key); - set_mods(mods); - } else { // On key release - unregister_code(registered_key); - } - } - return false; - } - - // Select word - if (!process_select_word(keycode, record, SELWORD)) { - return false; - } - - return true; -} - -void matrix_scan_user(void) { - select_word_task(); -} - -// -// Caps Word configuration -// https://docs.qmk.fm/features/caps_word -// -bool caps_word_press_user(uint16_t keycode) { - switch (keycode) { - // Configure keycodes that continue caps word - case KC_A ... KC_Z: - add_weak_mods(MOD_BIT(KC_LSFT)); // Apply shift to alphas. - return true; - case KC_1 ... KC_0: - case KC_BSPC: - case KC_DEL: - case KC_UNDS: - return true; - default: - return false; // Deactivate Caps Word - } -}