313 lines
16 KiB
C
313 lines
16 KiB
C
|
/*
|
||
|
Copyright 2016 Priyadi Iman Nurcahyo <priyadi@priyadi.net>
|
||
|
|
||
|
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 "keycode.h"
|
||
|
#include "print.h"
|
||
|
#include "debug.h"
|
||
|
#include "util.h"
|
||
|
#include "ibm_terminal.h"
|
||
|
#include "action_layer.h"
|
||
|
|
||
|
// Fillers to make layering clearer
|
||
|
|
||
|
#define _______ KC_TRNS
|
||
|
#define XXXXXXX KC_NO
|
||
|
|
||
|
enum layers {
|
||
|
QWE, // qwerty
|
||
|
COL, // colemak
|
||
|
WOR, // workman
|
||
|
DVO, // dvorak
|
||
|
|
||
|
MOU, // mouse keys
|
||
|
EMO, // emoji
|
||
|
SYS, // system
|
||
|
};
|
||
|
|
||
|
enum keycodes {
|
||
|
// default layout switcher
|
||
|
LAY_QWE = SAFE_RANGE,
|
||
|
LAY_COL,
|
||
|
LAY_WOR,
|
||
|
LAY_DVO,
|
||
|
|
||
|
// layer switchers
|
||
|
LYR_SYS,
|
||
|
LYR_EMO,
|
||
|
|
||
|
// os switchers
|
||
|
OS_LIN,
|
||
|
OS_WIN,
|
||
|
OS_MAC,
|
||
|
};
|
||
|
|
||
|
// unicode map
|
||
|
|
||
|
enum unicode_name {
|
||
|
GRIN, // grinning face 😊
|
||
|
TJOY, // tears of joy 😂
|
||
|
SMILE, // grining face with smiling eyes 😁
|
||
|
HEART, // heart ❤
|
||
|
EYERT, // smiling face with heart shaped eyes 😍
|
||
|
CRY, // crying face 😭
|
||
|
SMEYE, // smiling face with smiling eyes 😊
|
||
|
UNAMU, // unamused 😒
|
||
|
KISS, // kiss 😘
|
||
|
HART2, // two hearts 💕
|
||
|
WEARY, // weary 😩
|
||
|
OKHND, // ok hand sign 👌
|
||
|
PENSV, // pensive 😔
|
||
|
SMIRK, // smirk 😏
|
||
|
RECYC, // recycle ♻
|
||
|
WINK, // wink 😉
|
||
|
THMUP, // thumb up 👍
|
||
|
THMDN, // thumb down 👎
|
||
|
PRAY, // pray 🙏
|
||
|
PHEW, // relieved 😌
|
||
|
MUSIC, // musical notes
|
||
|
FLUSH, // flushed 😳
|
||
|
CELEB, // celebration 🙌
|
||
|
CRY2, // crying face 😢
|
||
|
COOL, // smile with sunglasses 😎
|
||
|
NOEVS, // see no evil
|
||
|
NOEVH, // hear no evil
|
||
|
NOEVK, // speak no evil
|
||
|
POO, // pile of poo
|
||
|
EYES, // eyes
|
||
|
VIC, // victory hand
|
||
|
BHART, // broken heart
|
||
|
SLEEP, // sleeping face
|
||
|
SMIL2, // smiling face with open mouth & sweat
|
||
|
HUNRD, // 100
|
||
|
CONFU, // confused
|
||
|
TONGU, // face with tongue & winking eye
|
||
|
DISAP, // disappointed
|
||
|
YUMMY, // face savoring delicious food
|
||
|
CLAP, // hand clapping
|
||
|
FEAR, // face screaming in fear
|
||
|
HORNS, // smiling face with horns
|
||
|
HALO, // smiling face with halo
|
||
|
BYE, // waving hand
|
||
|
SUN, // sun
|
||
|
MOON, // moon
|
||
|
SKULL, // skull
|
||
|
};
|
||
|
|
||
|
const uint32_t PROGMEM unicode_map[] = {
|
||
|
[GRIN] = 0x1F600,
|
||
|
[TJOY] = 0x1F602,
|
||
|
[SMILE] = 0x1F601,
|
||
|
[HEART] = 0x2764,
|
||
|
[EYERT] = 0x1f60d,
|
||
|
[CRY] = 0x1f62d,
|
||
|
[SMEYE] = 0x1F60A,
|
||
|
[UNAMU] = 0x1F612,
|
||
|
[KISS] = 0x1F618,
|
||
|
[HART2] = 0x1F495,
|
||
|
[WEARY] = 0x1F629,
|
||
|
[OKHND] = 0x1F44C,
|
||
|
[PENSV] = 0x1F614,
|
||
|
[SMIRK] = 0x1F60F,
|
||
|
[RECYC] = 0x267B,
|
||
|
[WINK] = 0x1F609,
|
||
|
[THMUP] = 0x1F44D,
|
||
|
[THMDN] = 0x1F44E,
|
||
|
[PRAY] = 0x1F64F,
|
||
|
[PHEW] = 0x1F60C,
|
||
|
[MUSIC] = 0x1F3B6,
|
||
|
[FLUSH] = 0x1F633,
|
||
|
[CELEB] = 0x1F64C,
|
||
|
[CRY2] = 0x1F622,
|
||
|
[COOL] = 0x1F60E,
|
||
|
[NOEVS] = 0x1F648,
|
||
|
[NOEVH] = 0x1F649,
|
||
|
[NOEVK] = 0x1F64A,
|
||
|
[POO] = 0x1F4A9,
|
||
|
[EYES] = 0x1F440,
|
||
|
[VIC] = 0x270C,
|
||
|
[BHART] = 0x1F494,
|
||
|
[SLEEP] = 0x1F634,
|
||
|
[SMIL2] = 0x1F605,
|
||
|
[HUNRD] = 0x1F4AF,
|
||
|
[CONFU] = 0x1F615,
|
||
|
[TONGU] = 0x1F61C,
|
||
|
[DISAP] = 0x1F61E,
|
||
|
[YUMMY] = 0x1F60B,
|
||
|
[CLAP] = 0x1F44F,
|
||
|
[FEAR] = 0x1F631,
|
||
|
[HORNS] = 0x1F608,
|
||
|
[HALO] = 0x1F607,
|
||
|
[BYE] = 0x1F44B,
|
||
|
[SUN] = 0x2600,
|
||
|
[MOON] = 0x1F314,
|
||
|
[SKULL] = 0x1F480,
|
||
|
};
|
||
|
|
||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||
|
/* qwerty */
|
||
|
[QWE] = KEYMAP(
|
||
|
KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_PSCR, KC_SLCK, KC_PAUS,
|
||
|
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
|
||
|
|
||
|
MO(EMO), MO(SYS), KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, XXXXXXX, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
|
||
|
KC_MNXT, KC_VOLU, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, XXXXXXX, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
|
||
|
KC_MPLY, KC_MUTE, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT, KC_UP, KC_P4, KC_P5, KC_P6, KC_PCMM,
|
||
|
KC_MPRV, KC_VOLD, KC_LSFT, KC_GRV, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, XXXXXXX, KC_RSFT, KC_LEFT, TG(MOU), KC_RGHT, KC_P1, KC_P2, KC_P3, KC_PENT,
|
||
|
KC_LGUI, KC_APP, KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_DOWN, XXXXXXX, KC_P0, KC_PDOT, XXXXXXX
|
||
|
),
|
||
|
|
||
|
/* colemak */
|
||
|
[COL] = KEYMAP(
|
||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||
|
|
||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MINS, KC_EQL, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||
|
_______, _______, _______, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, _______, _______, _______, _______, _______, _______, _______, _______,
|
||
|
_______, _______, _______, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, _______, _______, _______, _______, _______, _______, _______,
|
||
|
_______, _______, _______, _______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||
|
),
|
||
|
|
||
|
/* workman */
|
||
|
[WOR] = KEYMAP(
|
||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||
|
|
||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MINS, KC_EQL, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||
|
_______, _______, _______, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_LBRC, KC_RBRC, _______, _______, _______, _______, _______, _______, _______, _______,
|
||
|
_______, _______, _______, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, KC_QUOT, _______, _______, _______, _______, _______, _______, _______,
|
||
|
_______, _______, _______, _______, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, KC_COMM, KC_DOT, KC_SLSH, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||
|
),
|
||
|
|
||
|
/* dvorak */
|
||
|
[DVO] = KEYMAP(
|
||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||
|
|
||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||
|
_______, _______, _______, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, _______, _______, _______, _______, _______, _______, _______, _______,
|
||
|
_______, _______, _______, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, _______, _______, _______, _______, _______, _______, _______,
|
||
|
_______, _______, _______, _______, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||
|
),
|
||
|
|
||
|
/* system */
|
||
|
[SYS] = KEYMAP(
|
||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||
|
|
||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||
|
_______, _______, _______, LAY_QWE, OS_WIN, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||
|
_______, _______, _______, _______, _______, LAY_DVO, _______, _______, _______, _______, LAY_WOR, OS_LIN, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||
|
_______, _______, _______, _______, _______, _______, LAY_COL, _______, _______, _______, OS_MAC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||
|
),
|
||
|
|
||
|
/* mouse keys */
|
||
|
[MOU] = KEYMAP(
|
||
|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||
|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||
|
|
||
|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||
|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||
|
XXXXXXX, KC_BTN4, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_U, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||
|
XXXXXXX, KC_BTN5, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_L, _______, KC_MS_R, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||
|
KC_BTN1, KC_BTN3, KC_BTN2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_D, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
|
||
|
),
|
||
|
|
||
|
/* emoji */
|
||
|
[EMO] = KEYMAP(
|
||
|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||
|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||
|
|
||
|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||
|
XXXXXXX, XXXXXXX, XXXXXXX, X(CRY2),X(WEARY),X(EYERT),X(SMIRK), X(TJOY), X(RECYC),X(UNAMU),X(MUSIC),X(OKHND),X(PENSV),XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||
|
XXXXXXX, XXXXXXX, XXXXXXX, X(PRAY),X(SMILE),X(SMIL2),X(FLUSH), X(GRIN), X(HEART),X(BYE), X(KISS), X(CELEB),X(COOL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||
|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,X(SLEEP),X(CLAP), X(CRY), X(VIC), X(BHART),X(SUN), X(SMEYE),X(WINK), X(MOON), X(CONFU), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||
|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
|
||
|
),
|
||
|
|
||
|
/*
|
||
|
[XXX] = KEYMAP(
|
||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||
|
|
||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||
|
),
|
||
|
*/
|
||
|
};
|
||
|
|
||
|
void persistant_default_layer_set(uint16_t default_layer) {
|
||
|
eeconfig_update_default_layer(default_layer);
|
||
|
default_layer_set(default_layer);
|
||
|
}
|
||
|
|
||
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||
|
switch (keycode) {
|
||
|
/* layout switcher */
|
||
|
case LAY_QWE:
|
||
|
if (record->event.pressed) {
|
||
|
persistant_default_layer_set(1UL<<QWE);
|
||
|
}
|
||
|
return false;
|
||
|
break;
|
||
|
case LAY_COL:
|
||
|
if (record->event.pressed) {
|
||
|
persistant_default_layer_set(1UL<<COL);
|
||
|
}
|
||
|
return false;
|
||
|
break;
|
||
|
case LAY_WOR:
|
||
|
if (record->event.pressed) {
|
||
|
persistant_default_layer_set(1UL<<WOR);
|
||
|
}
|
||
|
return false;
|
||
|
break;
|
||
|
case LAY_DVO:
|
||
|
if (record->event.pressed) {
|
||
|
persistant_default_layer_set(1UL<<DVO);
|
||
|
}
|
||
|
return false;
|
||
|
break;
|
||
|
|
||
|
/* os switcher */
|
||
|
case OS_LIN:
|
||
|
set_unicode_input_mode(UC_LNX);
|
||
|
return false;
|
||
|
break;
|
||
|
case OS_WIN:
|
||
|
set_unicode_input_mode(UC_WINC);
|
||
|
return false;
|
||
|
break;
|
||
|
case OS_MAC:
|
||
|
set_unicode_input_mode(UC_OSX);
|
||
|
return false;
|
||
|
break;
|
||
|
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
void matrix_init_user() {
|
||
|
set_unicode_input_mode(UC_LNX);
|
||
|
}
|