qmk-keychron-q3-colemak-dh/users/dvorak_42_key/dvorak_42_key.c
2022-12-14 12:40:25 -08:00

205 lines
5.9 KiB
C

// Copyright 2022 LucW (@luc-languagetools)
// SPDX-License-Identifier: GPL-2.0-or-later
#include "dvorak_42_key.h"
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
// tap dance processing
tap_dance_action_t *action;
switch (keycode) {
case TD(TD_DEL_WORD_DEL): // list all tap dance keycodes with tap-hold configurations
action = &tap_dance_actions[TD_INDEX(keycode)];
if (!record->event.pressed && action->state.count && !action->state.finished) {
tap_dance_tap_hold_t *tap_hold = (tap_dance_tap_hold_t *)action->user_data;
tap_code16(tap_hold->tap);
}
}
// shell macros
if(record->event.pressed) {
switch (keycode) {
case SHELL_LS:
SEND_STRING("ls\n");
break;
case SHELL_LSLTR:
SEND_STRING("ls -ltr\n");
break;
case SHELL_LSLA:
SEND_STRING("ls -la\n");
break;
case SHELL_CDPRE:
SEND_STRING("cd ..\n");
break;
case SHELL_LESS:
SEND_STRING("less ");
break;
case SHELL_PLESS:
SEND_STRING(" | less");
break;
case SHELL_PGREP:
SEND_STRING(" | grep ");
return true;
break;
case SHELL_TAILF:
SEND_STRING("tail -f ");
break;
case SHELL_SCREENRD:
SEND_STRING("screen -r -d ");
break;
case SHELL_SCREEN_NEW:
SEND_STRING("screen -S ");
break;
case SHELL_SCREEN_LIST:
SEND_STRING("screen -list\n");
break;
case SHELL_GIT_DIFF:
SEND_STRING("git diff\n");
break;
case SHELL_GIT_STATUS:
SEND_STRING("git status\n");
break;
case WINDOWS10_WORKSPACE_LEFT:
tap_code16(C(G(KC_LEFT)));
break;
case WINDOWS10_WORKSPACE_RIGHT:
tap_code16(C(G(KC_RIGHT)));
break;
case WINDOWS10_TASK_VIEW:
tap_code16(G(KC_TAB));
break;
// linux screen shortcuts
case SCREEN_TAB_LEFT:
SEND_STRING(SS_LCTL("a") "p");
break;
case SCREEN_TAB_RIGHT:
SEND_STRING(SS_LCTL("a") "n");
break;
case SCREEN_NEW_TAB:
SEND_STRING(SS_LCTL("a") "c");
break;
case SCREEN_DETACH:
SEND_STRING(SS_LCTL("a") "d");
break;
case SCREEN_RENAME:
SEND_STRING(SS_LCTL("a") "A");
break;
case SCREEN_NUMBER:
SEND_STRING(SS_LCTL("a") ":number ");
break;
case SCREEN_0:
SEND_STRING(SS_LCTL("a") "0");
break;
case SCREEN_1:
SEND_STRING(SS_LCTL("a") "1");
break;
case SCREEN_2:
SEND_STRING(SS_LCTL("a") "2");
break;
case SCREEN_3:
SEND_STRING(SS_LCTL("a") "3");
break;
case SCREEN_4:
SEND_STRING(SS_LCTL("a") "4");
break;
case SCREEN_5:
SEND_STRING(SS_LCTL("a") "5");
break;
case SCREEN_6:
SEND_STRING(SS_LCTL("a") "6");
break;
case SCREEN_7:
SEND_STRING(SS_LCTL("a") "7");
break;
case SCREEN_8:
SEND_STRING(SS_LCTL("a") "8");
break;
case SCREEN_9:
SEND_STRING(SS_LCTL("a") "9");
break;
case SCREEN_COPY_MODE:
SEND_STRING(SS_LCTL("a") "[");
break;
case SCREEN_PASTE:
SEND_STRING(SS_LCTL("a") "]");
break;
case SCREEN_KILL:
SEND_STRING(SS_LCTL("a") "ky");
break;
case SCREEN_READREG_1:
SEND_STRING(SS_LCTL("a") ":readreg 1\n");
break;
case SCREEN_READREG_2:
SEND_STRING(SS_LCTL("a") ":readreg 2\n");
break;
case SCREEN_READREG_3:
SEND_STRING(SS_LCTL("a") ":readreg 3\n");
break;
case SCREEN_PASTEREG_1:
SEND_STRING(SS_LCTL("a") ":paste 1\n");
break;
case SCREEN_PASTEREG_2:
SEND_STRING(SS_LCTL("a") ":paste 2\n");
break;
case SCREEN_PASTEREG_3:
SEND_STRING(SS_LCTL("a") ":paste 3\n");
break;
}
}
return true;
}
bool caps_word_press_user(uint16_t keycode) {
switch (keycode) {
// Keycodes that continue Caps Word, with shift applied.
case KC_A ... KC_Z:
add_weak_mods(MOD_BIT(KC_LSFT)); // Apply shift to next key.
return true;
default:
return false; // Deactivate Caps Word.
}
}
void tap_dance_tap_hold_finished(tap_dance_state_t *state, void *user_data) {
tap_dance_tap_hold_t *tap_hold = (tap_dance_tap_hold_t *)user_data;
if (state->pressed) {
if (state->count == 1
#ifndef PERMISSIVE_HOLD
&& !state->interrupted
#endif
) {
register_code16(tap_hold->hold);
tap_hold->held = tap_hold->hold;
} else {
register_code16(tap_hold->tap);
tap_hold->held = tap_hold->tap;
}
}
}
void tap_dance_tap_hold_reset(tap_dance_state_t *state, void *user_data) {
tap_dance_tap_hold_t *tap_hold = (tap_dance_tap_hold_t *)user_data;
if (tap_hold->held) {
unregister_code16(tap_hold->held);
tap_hold->held = 0;
}
}
// Tap Dance definitions
tap_dance_action_t tap_dance_actions[] = {
// Tap once for Escape, twice for Caps Lock
// [TD_BSPC_CTL_BSPC] = ACTION_TAP_DANCE_DOUBLE(KC_BSPC, RCTL(KC_BSPC)),
// [TD_BSPC_CTL_BSPC_IOS] = ACTION_TAP_DANCE_DOUBLE(KC_BSPC, LALT(KC_BSPC)),
[TD_DEL_WORD_DEL] = ACTION_TAP_DANCE_TAP_HOLD(RCTL(KC_BSPC), KC_BSPC),
[TD_DEL_WORD_DEL_IOS] = ACTION_TAP_DANCE_TAP_HOLD(LALT(KC_BSPC), KC_BSPC)
};