mirror of
https://github.com/Keychron/qmk_firmware.git
synced 2024-12-26 19:18:03 +06:00
157 lines
6.1 KiB
C
157 lines
6.1 KiB
C
/* Copyright 2021 Batuhan Başerdem
|
||
* <baserdem.batuhan@gmail.com> @bbaserdem
|
||
*
|
||
* This program is free software: you can redistribute it and/or modify
|
||
* it under the terms of the GNU General Public License as published by
|
||
* the Free Software Foundation, either version 2 of the License, or
|
||
* (at your option) any later version.
|
||
*
|
||
* This program is distributed in the hope that it will be useful,
|
||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
* GNU General Public License for more details.
|
||
*
|
||
* You should have received a copy of the GNU General Public License
|
||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||
*/
|
||
#include "bb-macro.h"
|
||
|
||
/* MACRO Definitions
|
||
* This file has my macros/unicodes
|
||
* Hooks for other functionality to inject itself into the process_record
|
||
*/
|
||
|
||
// Tap dance definitons
|
||
#ifdef AUDIO_ENABLE
|
||
#ifdef TAP_DANCE_ENABLE
|
||
qk_tap_dance_action_t tap_dance_actions[] = {
|
||
// Music playback speed modulator
|
||
[TD_AUDIO_TEMPO] = ACTION_TAP_DANCE_DOUBLE(MU_SLOW, MU_FAST),
|
||
};
|
||
#endif // AUDIO_ENABLE
|
||
#endif // TAP_DANCE_ENABLE
|
||
|
||
// Unicode definitions; for single character keys
|
||
// We mask their definitions if unicode is not enabled
|
||
#ifdef UNICODEMAP_ENABLE
|
||
const uint32_t PROGMEM unicode_map[] = {
|
||
[UPC_A_CIRC] = 0x00C2, [LOW_A_CIRC] = 0x00E2, // Â â
|
||
[UPC_C_CEDI] = 0x00C7, [LOW_C_CEDI] = 0x00E7, // Ç ç
|
||
[UPC_G_BREV] = 0x011E, [LOW_G_BREV] = 0x001F, // Ğ ğ
|
||
[UPC_I_CIRC] = 0x00CE, [LOW_I_CIRC] = 0x00EE, // Î î
|
||
[UPC_I_DOTL] = 0x0049, [LOW_I_DOTL] = 0x0131, // I ı
|
||
[UPC_I_DOTT] = 0x0130, [LOW_I_DOTT] = 0x0069, // İ i
|
||
[UPC_O_DIAE] = 0x00D6, [LOW_O_DIAE] = 0x00F6, // Ö ö
|
||
[UPC_S_CEDI] = 0x015E, [LOW_S_CEDI] = 0x015F, // Ş ş
|
||
[UPC_U_CIRC] = 0x00DB, [LOW_U_CIRC] = 0x00FB, // Û û
|
||
[UPC_U_DIAE] = 0x00DC, [LOW_U_DIAE] = 0x00FC, // Ü ü
|
||
[UPC_ALPHA] = 0x0391, [LOW_ALPHA] = 0x03B1, // Α α
|
||
[UPC_BETA] = 0x0392, [LOW_BETA] = 0x03B2, // Β β
|
||
[UPC_GAMMA] = 0x0393, [LOW_GAMMA] = 0x03B3, // Γ γ
|
||
[UPC_DELTA] = 0x0394, [LOW_DELTA] = 0x03B4, // Δ δ
|
||
[UPC_EPSILON] = 0x0395, [LOW_EPSILON] = 0x03B5, // Ε ε
|
||
[UPC_ZETA] = 0x0396, [LOW_ZETA] = 0x03B6, // Ζ ζ
|
||
[UPC_ETA] = 0x0397, [LOW_ETA] = 0x03B7, // Η η
|
||
[UPC_THETA] = 0x0398, [LOW_THETA] = 0x03B8, // Θ θ
|
||
[UPC_IOTA] = 0x0399, [LOW_IOTA] = 0x03B9, // Ι ι
|
||
[UPC_KAPPA] = 0x039A, [LOW_KAPPA] = 0x03BA, // Κ κ
|
||
[UPC_LAMBDA] = 0x039B, [LOW_LAMBDA] = 0x03BB, // Λ λ
|
||
[UPC_MU] = 0x039C, [LOW_MU] = 0x03BC, // Μ μ
|
||
[UPC_NU] = 0x039D, [LOW_NU] = 0x03BD, // Ν ν
|
||
[UPC_XI] = 0x039E, [LOW_XI] = 0x03BE, // Ξ ξ
|
||
[UPC_OMICRON] = 0x039F, [LOW_OMICRON] = 0x03BF, // Ο ο
|
||
[UPC_PI] = 0x03A0, [LOW_PI] = 0x03C0, // Π π
|
||
[UPC_RHO] = 0x03A1, [LOW_RHO] = 0x03C1, // Ρ ρ
|
||
[UPC_SIGMA] = 0x03A3, [LOW_SIGMA] = 0x03C3, // Σ σ
|
||
[UPC_TAU] = 0x03A4, [LOW_TAU] = 0x03C4, // Τ τ
|
||
[UPC_UPSILON] = 0x03A5, [LOW_UPSILON] = 0x03C5, // Υ υ
|
||
[UPC_PHI] = 0x03A6, [LOW_PHI] = 0x03C6, // Φ φ
|
||
[UPC_CHI] = 0x03A7, [LOW_CHI] = 0x03C7, // Χ χ
|
||
[UPC_PSI] = 0x03A8, [LOW_PSI] = 0x03C8, // Ψ ψ
|
||
[UPC_OMEGA] = 0x03A9, [LOW_OMEGA] = 0x03C9, // Ω ω
|
||
[ELLIPSIS] = 0x2026, // …
|
||
[PLANCK_CON] = 0x210F, // ℏ
|
||
[ANGSTROM] = 0x212B, // Å
|
||
[BITCOIN] = 0x20BF // ₿
|
||
};
|
||
#endif // UNICODEMAP_ENABLE
|
||
|
||
// Keycodes
|
||
bool process_record_macro(uint16_t keycode, keyrecord_t *record) {
|
||
switch (keycode) {
|
||
// AltGr + Caps should change the oled layout variable
|
||
case KC_CAPSLOCK:
|
||
if (record->event.pressed) {
|
||
if (get_mods() & MOD_BIT(KC_RALT)) {
|
||
userspace_config.layout = (userspace_config.layout + 1) % 3;
|
||
}
|
||
}
|
||
return true;
|
||
break;
|
||
case BB_OLED:
|
||
if (record->event.pressed) {
|
||
if (get_mods() & MOD_MASK_SHIFT) {
|
||
// Scroll in opposite direction
|
||
userspace_config.layout = (userspace_config.layout + 4) % 3;
|
||
} else {
|
||
userspace_config.layout = (userspace_config.layout + 1) % 3;
|
||
}
|
||
}
|
||
return false;
|
||
break;
|
||
// Plain macros
|
||
case BB_PGPK:
|
||
// My public PGP key
|
||
if (record->event.pressed) {
|
||
SEND_STRING("0B7151C823559DD8A7A04CE36426139E2F4C6CCE");
|
||
}
|
||
return false; break;
|
||
case DBL_ANG:
|
||
// Double angular bracket
|
||
if (record->event.pressed) {
|
||
SEND_STRING("<>"SS_TAP(X_LEFT));
|
||
}
|
||
return false; break;
|
||
case DBL_PAR:
|
||
// Double paranthesis
|
||
if (record->event.pressed) {
|
||
SEND_STRING("()"SS_TAP(X_LEFT));
|
||
}
|
||
return false; break;
|
||
case DBL_BRC:
|
||
// Double square brackets
|
||
if (record->event.pressed) {
|
||
SEND_STRING("[]"SS_TAP(X_LEFT));
|
||
}
|
||
return false; break;
|
||
case DBL_CBR:
|
||
// Double curly brackets
|
||
if (record->event.pressed) {
|
||
SEND_STRING("{}"SS_TAP(X_LEFT));
|
||
}
|
||
return false; break;
|
||
// Unicode macros
|
||
# ifdef UNICODEMAP_ENABLE
|
||
case TR_FLAG:
|
||
// Turkish flag
|
||
if (record->event.pressed) {
|
||
send_unicode_string("🇹🇷");
|
||
}
|
||
return false; break;
|
||
case BB_LENY:
|
||
// Lenny face: ( ͡° ͜ʖ ͡°)
|
||
if (record->event.pressed) {
|
||
send_unicode_string("( ͡° ͜ʖ ͡°)");
|
||
}
|
||
return false; break;
|
||
case BB_TABL:
|
||
// Table flip: ┻━┻︵ \(°□°)/ ︵ ┻━┻
|
||
if (record->event.pressed) {
|
||
send_unicode_string("┻━┻︵ \\(°□°)/ ︵ ┻━┻");
|
||
}
|
||
return false; break;
|
||
# endif // UNICODEMAP_ENABLE
|
||
}
|
||
return true;
|
||
}
|