328 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			328 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#include "ergotravel.h"
 | 
						||
#include "action_layer.h"
 | 
						||
#include "eeconfig.h"
 | 
						||
#include "mousekey.h"
 | 
						||
#include "process_unicode.h"
 | 
						||
extern keymap_config_t keymap_config;
 | 
						||
 | 
						||
#define _QWERTY 0
 | 
						||
#define _NUMBERS 1
 | 
						||
#define _SYMBOLS 2
 | 
						||
#define _CODING 3
 | 
						||
#define _NAVIGATION 4
 | 
						||
#define _ADJUST 16
 | 
						||
 | 
						||
enum custom_keycodes {
 | 
						||
  QWERTY = SAFE_RANGE,
 | 
						||
  ADJUST,
 | 
						||
  CODING_SPACE,
 | 
						||
  NUMBERS_SPACE,
 | 
						||
  SYMBOLS_SPACE,
 | 
						||
  NAVIGATE_SPACE,
 | 
						||
  TABLE_FLIP,
 | 
						||
  RESET_TABLE,
 | 
						||
  SHRUG,
 | 
						||
  LOOK_OF_DISAPPROVAL
 | 
						||
};
 | 
						||
 | 
						||
#define KC_ KC_TRNS
 | 
						||
#define _______ KC_TRNS
 | 
						||
 | 
						||
#define KC_ADJT MO(_ADJUST)
 | 
						||
#define KC_RST RESET
 | 
						||
#define KC_BL_S BL_STEP
 | 
						||
#define KC_DBUG DEBUG
 | 
						||
#define KC_RTOG RGB_TOG
 | 
						||
#define KC_RMOD RGB_MOD
 | 
						||
#define KC_RHUI RGB_HUI
 | 
						||
#define KC_RHUD RGB_HUD
 | 
						||
#define KC_RSAI RGB_SAI
 | 
						||
#define KC_RSAD RGB_SAD
 | 
						||
#define KC_RVAI RGB_VAI
 | 
						||
#define KC_RVAD RGB_VAD
 | 
						||
 | 
						||
#define KC_RSEN MT(MOD_RSFT, KC_ENT) // Tap for enter, hold for right shift
 | 
						||
 | 
						||
#define KC_LCCA MT(MOD_LCTL, KC_CAPS)  // Tap for caps lock, hold for left control
 | 
						||
#define KC_SHDE MT(MOD_LSFT, KC_DEL) // Tap for delete, hold for left shift
 | 
						||
 | 
						||
#define KC_NAVI MO(_NAVIGATION)
 | 
						||
 | 
						||
#define KC_COSP CODING_SPACE
 | 
						||
#define KC_NUSP NUMBERS_SPACE
 | 
						||
#define KC_SYSP SYMBOLS_SPACE
 | 
						||
#define KC_NASP NAVIGATE_SPACE
 | 
						||
 | 
						||
#define KC_FLIP TABLE_FLIP
 | 
						||
#define KC_TSET RESET_TABLE
 | 
						||
#define KC_SRUG SHRUG
 | 
						||
#define KC_DISA LOOK_OF_DISAPPROVAL
 | 
						||
#define KC_RST RESET
 | 
						||
 | 
						||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
						||
 | 
						||
  [_QWERTY] = LAYOUT_kc(
 | 
						||
    //,----+----+----+----+----+----+----.     ,----+----+----+----+----+----+----.
 | 
						||
       TAB , Q  , W  , E  , R  , T  ,HOME,      PGUP, Y  , U  , I  , O  , P  ,BSPC,
 | 
						||
    //|----+----+----+----+----+----+----|     |----+----+----+----+----+----+----|
 | 
						||
       LCCA, A  , S  , D  , F  , G  ,END ,      PGDN, H  , J  , K  , L  ,SCLN,QUOT,
 | 
						||
    //|----+----+----+----+----+----+----|     |----+----+----+----+----+----+----|
 | 
						||
       SHDE, Z  , X  , C  , V  , B  ,LGUI,      RALT, N  , M  ,COMM,DOT ,SLSH,RSEN,
 | 
						||
    //|----+----+----+----+----+----+----.     .----+----+----+----+----+----+----|
 | 
						||
       ESC ,ADJT,LALT,ENT ,NUSP,NASP,                SYSP,COSP,RCTL,NAVI,ADJT,DEL
 | 
						||
    //`----+----+----+--+-+----/----/               \----\----+----+----+----+----'
 | 
						||
  ),
 | 
						||
 | 
						||
  [_NUMBERS] = LAYOUT_kc(
 | 
						||
    //,----+----+----+----+----+----+----.     ,----+----+----+----+----+----+----.
 | 
						||
      GRAVE, 1  , 2  , 3  , 4  , 5  ,MPLY,      VOLU,  6  , 7  , 8  , 9  , 0 ,    ,
 | 
						||
    //|----+----+----+----+----+----+----|     |----+----+----+----+----+----+----|
 | 
						||
           ,    ,    ,    ,    ,    ,MNXT,      VOLD,FLIP,TSET,SRUG,DISA,    ,    ,
 | 
						||
    //|----+----+----+----+----+----+----|     |----+----+----+----+----+----+----|
 | 
						||
           ,    ,    ,    ,    ,    ,    ,          ,    ,    ,    ,    ,    ,    ,
 | 
						||
    //|----+----+----+----+----+----+----.     .----+----+----+----+----+----+----|
 | 
						||
           ,    ,    ,    ,    ,    ,                    ,    ,    ,    ,    ,
 | 
						||
    //`----+----+----+--+-+----/----/               \----\----+----+----+----+----'
 | 
						||
  ),
 | 
						||
 | 
						||
  [_SYMBOLS] = LAYOUT_kc(
 | 
						||
    //,----+----+----+----+----+----+----.     ,----+----+----+----+----+----+----.
 | 
						||
      GRAVE,EXLM, AT ,HASH,DLR ,PERC,MPLY,      VOLU,CIRC,AMPR,ASTR,LPRN,RPRN,BSLS,
 | 
						||
    //|----+----+----+----+----+----+----|     |----+----+----+----+----+----+----|
 | 
						||
           ,    ,    ,    ,    ,    ,MNXT,      VOLD,    ,    ,    ,    ,    ,    ,
 | 
						||
    //|----+----+----+----+----+----+----|     |----+----+----+----+----+----+----|
 | 
						||
           ,    ,    ,    ,    ,    ,    ,          ,    ,    ,    ,    ,    ,    ,
 | 
						||
    //|----+----+----+----+----+----+----.     .----+----+----+----+----+----+----|
 | 
						||
           ,    ,    ,    ,    ,    ,                    ,    ,    ,    ,    ,
 | 
						||
    //`----+----+----+--+-+----/----/               \----\----+----+----+----+----'
 | 
						||
  ),
 | 
						||
 | 
						||
  [_CODING] = LAYOUT_kc(
 | 
						||
    //,----+----+----+----+----+----+----.     ,----+----+----+----+----+----+----.
 | 
						||
           ,    ,    ,LCBR,RCBR,    ,MPLY,      VOLU,    ,AMPR,PIPE,DLR ,    ,    ,
 | 
						||
    //|----+----+----+----+----+----+----|     |----+----+----+----+----+----+----|
 | 
						||
           ,    ,    ,LPRN,RPRN,    ,MNXT,      VOLD,    ,UNDS,MINS,ASTR,    ,    ,
 | 
						||
    //|----+----+----+----+----+----+----|     |----+----+----+----+----+----+----|
 | 
						||
           ,    ,    ,LBRC,RBRC,    ,    ,          ,    ,PLUS,EQL ,    ,    ,    ,
 | 
						||
    //|----+----+----+----+----+----+----.     .----+----+----+----+----+----+----|
 | 
						||
           ,    ,    ,    ,    ,    ,                    ,    ,    ,    ,    ,
 | 
						||
    //`----+----+----+--+-+----/----/               \----\----+----+----+----+----'
 | 
						||
  ),
 | 
						||
 | 
						||
  [_NAVIGATION] = LAYOUT_kc(
 | 
						||
    //,----+----+----+----+----+----+----.     ,----+----+----+----+----+----+----.
 | 
						||
           ,    ,    , UP ,    ,    ,MPLY,      VOLU,WH_U,BTN1,MS_U,BTN1,    ,    ,
 | 
						||
    //|----+----+----+----+----+----+----|     |----+----+----+----+----+----+----|
 | 
						||
           ,    ,LEFT,DOWN,RGHT,    ,MNXT,      VOLD,WH_D,MS_L,MS_D,MS_R,    ,    ,
 | 
						||
    //|----+----+----+----+----+----+----|     |----+----+----+----+----+----+----|
 | 
						||
           ,    ,    ,    ,    ,    ,    ,          ,    ,    ,    ,    ,    ,    ,
 | 
						||
    //|----+----+----+----+----+----+----.     .----+----+----+----+----+----+----|
 | 
						||
           ,    ,    ,    ,    ,    ,                    ,    ,    ,    ,    ,
 | 
						||
    //`----+----+----+--+-+----/----/               \----\----+----+----+----+----'
 | 
						||
  ),
 | 
						||
 | 
						||
  [_ADJUST] = LAYOUT_kc(
 | 
						||
    //,----+----+----+----+----+----+----.     ,----+----+----+----+----+----+----.
 | 
						||
       F1  ,F2  ,F3  ,F4  ,F5  ,F6  ,    ,          ,F7  ,F8  ,F9  ,F10 ,F11 ,F12 ,
 | 
						||
    //|----+----+----+----+----+----+----|     |----+----+----+----+----+----+----|
 | 
						||
           ,RTOG,RVAI,RHUI,RSAI,    ,    ,          ,    ,    ,    ,    ,    ,    ,
 | 
						||
    //|----+----+----+----+----+----+----|     |----+----+----+----+----+----+----|
 | 
						||
           ,RMOD,RVAD,RHUD,RSAD,    ,    ,          ,RST ,    ,    ,    ,    ,    ,
 | 
						||
    //|----+----+----+----+----+----+----.     .----+----+----+----+----+----+----|
 | 
						||
           ,    ,    ,    ,    ,    ,                    ,    ,    ,    ,    ,
 | 
						||
    //`----+----+----+--+-+----/----/               \----\----+----+----+----+----'
 | 
						||
  )
 | 
						||
 | 
						||
};
 | 
						||
 | 
						||
 | 
						||
#ifdef AUDIO_ENABLE
 | 
						||
float tone_qwerty[][2]     = SONG(QWERTY_SOUND);
 | 
						||
#endif
 | 
						||
 | 
						||
void persistent_default_layer_set(uint16_t default_layer) {
 | 
						||
  eeconfig_update_default_layer(default_layer);
 | 
						||
  default_layer_set(default_layer);
 | 
						||
}
 | 
						||
 | 
						||
uint16_t custom_lt_timer;
 | 
						||
keypos_t prv_key_pressed;
 | 
						||
// Runs just one time when the keyboard initializes.
 | 
						||
void matrix_init_user(void) {
 | 
						||
//    set_unicode_input_mode(UC_LNX); // Linux
 | 
						||
    set_unicode_input_mode(UC_OSX); // Mac OSX
 | 
						||
//    set_unicode_input_mode(UC_WIN); // Windows (with registry key, see wiki)
 | 
						||
    //set_unicode_input_mode(UC_WINC); // Windows (with WinCompose, see wiki)
 | 
						||
};
 | 
						||
 | 
						||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 | 
						||
 | 
						||
  if(record->event.pressed) prv_key_pressed = record->event.key;
 | 
						||
    #define IS_KEYPOS_SAME(keyone,keytwo)  ((keyone.col==keytwo.col)&&(keyone.row==keytwo.row))
 | 
						||
    #define ANOTHER_KEY_PRESSED (!IS_KEYPOS_SAME(prv_key_pressed, record->event.key))
 | 
						||
 | 
						||
  inline void tap(uint16_t keycode) {
 | 
						||
    register_code(keycode);
 | 
						||
    unregister_code(keycode);
 | 
						||
  };
 | 
						||
 | 
						||
  inline void swapInput(void) {
 | 
						||
    register_code(KC_LGUI);
 | 
						||
    tap(KC_SPC);
 | 
						||
    unregister_code(KC_LGUI);
 | 
						||
  };
 | 
						||
 | 
						||
  switch (keycode) {
 | 
						||
    case QWERTY:
 | 
						||
      if (record->event.pressed) {
 | 
						||
        #ifdef AUDIO_ENABLE
 | 
						||
          PLAY_SONG(tone_qwerty);
 | 
						||
        #endif
 | 
						||
        persistent_default_layer_set(1UL<<_QWERTY);
 | 
						||
      }
 | 
						||
      return false;
 | 
						||
      break;
 | 
						||
    case CODING_SPACE:
 | 
						||
      if (record->event.pressed) {
 | 
						||
        custom_lt_timer = timer_read();
 | 
						||
        layer_on(_CODING);
 | 
						||
      } else {
 | 
						||
        layer_off(_CODING);
 | 
						||
        if (timer_elapsed(custom_lt_timer)<150 && (!ANOTHER_KEY_PRESSED)) {
 | 
						||
          register_code(KC_SPC);
 | 
						||
          unregister_code(KC_SPC);
 | 
						||
        }
 | 
						||
      }
 | 
						||
      return false;
 | 
						||
      break;
 | 
						||
    case NUMBERS_SPACE:
 | 
						||
      if (record->event.pressed) {
 | 
						||
        custom_lt_timer = timer_read();
 | 
						||
        layer_on(_NUMBERS);
 | 
						||
      } else {
 | 
						||
        layer_off(_NUMBERS);
 | 
						||
        if (timer_elapsed(custom_lt_timer)<150 && (!ANOTHER_KEY_PRESSED)) {
 | 
						||
          register_code(KC_SPC);
 | 
						||
          unregister_code(KC_SPC);
 | 
						||
        }
 | 
						||
      }
 | 
						||
      return false;
 | 
						||
      break;
 | 
						||
    case SYMBOLS_SPACE:
 | 
						||
      if (record->event.pressed) {
 | 
						||
        custom_lt_timer = timer_read();
 | 
						||
        layer_on(_SYMBOLS);
 | 
						||
      } else {
 | 
						||
        layer_off(_SYMBOLS);
 | 
						||
        if (timer_elapsed(custom_lt_timer)<150 && (!ANOTHER_KEY_PRESSED)) {
 | 
						||
          register_code(KC_SPC);
 | 
						||
          unregister_code(KC_SPC);
 | 
						||
        }
 | 
						||
      }
 | 
						||
      return false;
 | 
						||
      break;
 | 
						||
    case NAVIGATE_SPACE:
 | 
						||
      if (record->event.pressed) {
 | 
						||
        custom_lt_timer = timer_read();
 | 
						||
        layer_on(_NAVIGATION);
 | 
						||
      } else {
 | 
						||
        layer_off(_NAVIGATION);
 | 
						||
        if (timer_elapsed(custom_lt_timer)<150 && (!ANOTHER_KEY_PRESSED)) {
 | 
						||
          register_code(KC_SPC);
 | 
						||
          unregister_code(KC_SPC);
 | 
						||
        }
 | 
						||
      }
 | 
						||
      return false;
 | 
						||
      break;
 | 
						||
    case TABLE_FLIP:
 | 
						||
      if (record->event.pressed) {
 | 
						||
        swapInput();
 | 
						||
 | 
						||
        register_code(KC_RSFT);
 | 
						||
        tap(KC_9);
 | 
						||
        unregister_code(KC_RSFT);
 | 
						||
        process_unicode((0x256F|QK_UNICODE), record);   // Arm
 | 
						||
        process_unicode((0x00B0|QK_UNICODE), record);   // Eye
 | 
						||
        process_unicode((0x25A1|QK_UNICODE), record);   // Mouth
 | 
						||
        process_unicode((0x00B0|QK_UNICODE), record);   // Eye
 | 
						||
        register_code(KC_RSFT);
 | 
						||
        tap(KC_0);
 | 
						||
        unregister_code(KC_RSFT);
 | 
						||
        process_unicode((0x256F|QK_UNICODE), record);   // Arm
 | 
						||
        tap(KC_SPC);
 | 
						||
        process_unicode((0x0361|QK_UNICODE), record);   // Flippy
 | 
						||
        tap(KC_SPC);
 | 
						||
        process_unicode((0x253B|QK_UNICODE), record);   // Table
 | 
						||
        process_unicode((0x2501|QK_UNICODE), record);   // Table
 | 
						||
        process_unicode((0x253B|QK_UNICODE), record);   // Table
 | 
						||
 | 
						||
        swapInput();
 | 
						||
      }
 | 
						||
      return false;
 | 
						||
      break;
 | 
						||
    case RESET_TABLE: // ┬──┬ ノ( ゜-゜ノ)
 | 
						||
      if (record->event.pressed) {
 | 
						||
        swapInput();
 | 
						||
 | 
						||
        process_unicode((0x252C|QK_UNICODE), record);   // Table
 | 
						||
        process_unicode((0x2500|QK_UNICODE), record);   // Table
 | 
						||
        process_unicode((0x2500|QK_UNICODE), record);   // Table
 | 
						||
        process_unicode((0x252C|QK_UNICODE), record);   // Table
 | 
						||
        tap(KC_SPC);
 | 
						||
        process_unicode((0x30CE|QK_UNICODE), record);   // Arm
 | 
						||
        register_code(KC_RSFT);
 | 
						||
        tap(KC_9);
 | 
						||
        unregister_code(KC_RSFT);
 | 
						||
        tap(KC_SPC);
 | 
						||
        process_unicode((0x309C|QK_UNICODE), record);   // Eye
 | 
						||
        tap(KC_MINS);
 | 
						||
        process_unicode((0x309C|QK_UNICODE), record);   // Eye
 | 
						||
        process_unicode((0x30CE|QK_UNICODE), record);   // Arm
 | 
						||
        register_code(KC_RSFT);
 | 
						||
        tap(KC_0);
 | 
						||
        unregister_code(KC_RSFT);
 | 
						||
 | 
						||
        swapInput();
 | 
						||
      }
 | 
						||
      return false;
 | 
						||
      break;
 | 
						||
    case SHRUG: // ¯\_(ツ)_/¯
 | 
						||
      if (record->event.pressed) {
 | 
						||
        swapInput();
 | 
						||
 | 
						||
        process_unicode((0x00AF|QK_UNICODE), record);   // Hand
 | 
						||
        tap(KC_BSLS);                                   // Arm
 | 
						||
        register_code(KC_RSFT);
 | 
						||
        tap(KC_UNDS);                                   // Arm
 | 
						||
        tap(KC_LPRN);                                   // Head
 | 
						||
        unregister_code(KC_RSFT);
 | 
						||
        process_unicode((0x30C4|QK_UNICODE), record);   // Face
 | 
						||
        register_code(KC_RSFT);
 | 
						||
        tap(KC_RPRN);                                   // Head
 | 
						||
        tap(KC_UNDS);                                   // Arm
 | 
						||
        unregister_code(KC_RSFT);
 | 
						||
        tap(KC_SLSH);                                   // Arm
 | 
						||
        process_unicode((0x00AF|QK_UNICODE), record);   // Hand
 | 
						||
 | 
						||
        swapInput();
 | 
						||
      }
 | 
						||
      return false;
 | 
						||
      break;
 | 
						||
    case LOOK_OF_DISAPPROVAL:       // ಠ_ಠ
 | 
						||
      if(record->event.pressed){
 | 
						||
        swapInput();
 | 
						||
 | 
						||
        process_unicode((0x0CA0|QK_UNICODE), record);   // Eye
 | 
						||
        register_code(KC_RSFT);
 | 
						||
        tap(KC_MINS);
 | 
						||
        unregister_code(KC_RSFT);
 | 
						||
        process_unicode((0x0CA0|QK_UNICODE), record);   // Eye
 | 
						||
 | 
						||
        swapInput();
 | 
						||
      }
 | 
						||
      return false;
 | 
						||
      break;
 | 
						||
  }
 | 
						||
  return true;
 | 
						||
}
 |