master
commit
3c2343664c
|
@ -20,7 +20,7 @@ For the `DIODE_DIRECTION`, most hand-wiring guides will instruct you to wire the
|
||||||
|
|
||||||
`BACKLIGHT_LEVELS` is how many levels exist for your backlight - max is 15, and they are computed automatically from this number.
|
`BACKLIGHT_LEVELS` is how many levels exist for your backlight - max is 15, and they are computed automatically from this number.
|
||||||
|
|
||||||
## `/keyboards/<keyboard>/Makefile`
|
## `/keyboards/<keyboard>/rules.mk`
|
||||||
|
|
||||||
The values at the top likely won't need to be changed, since most boards use the `atmega32u4` chip. The `BOOTLOADER_SIZE` will need to be adjusted based on your MCU type. It's defaulted to the Teensy, since that's the most common controller. Below is quoted from the `Makefile`.
|
The values at the top likely won't need to be changed, since most boards use the `atmega32u4` chip. The `BOOTLOADER_SIZE` will need to be adjusted based on your MCU type. It's defaulted to the Teensy, since that's the most common controller. Below is quoted from the `Makefile`.
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,61 @@
|
||||||
|
// This is the 60% layout preferred by u/merlin36 the host of the MechMerlin YouTube channel.
|
||||||
|
// The layout is highly influenced by the WKL B.Face and KBP V60 standard layouts.
|
||||||
|
// Layout designed for use on KC60 with no inswitch or underglow lighting.
|
||||||
|
|
||||||
|
#include "kc60.h"
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[0] = KEYMAP( /* Basic QWERTY */
|
||||||
|
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, KC_BSPC, \
|
||||||
|
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, KC_BSLS, \
|
||||||
|
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, \
|
||||||
|
KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_RSFT, \
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_NO, MO(2), KC_RALT, KC_RGUI, KC_RCTL \
|
||||||
|
),
|
||||||
|
[1] = KEYMAP( /* HHKB-ish Base Layout */
|
||||||
|
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, KC_BSLS, \
|
||||||
|
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, KC_DEL, \
|
||||||
|
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, \
|
||||||
|
KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_RSFT, \
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_NO, MO(3), KC_RALT, KC_RGUI, KC_RCTL \
|
||||||
|
),
|
||||||
|
[2] = KEYMAP( /* FN Layer 1 - Basic QWERTY */
|
||||||
|
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
||||||
|
KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, TO(1), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, \
|
||||||
|
KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_NO, KC_PGUP, \
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, TG(4), KC_NO, KC_TRNS, KC_HOME, KC_PGDN, KC_END \
|
||||||
|
),
|
||||||
|
[3] = KEYMAP( /* FN Layer 2 - HHKB-ish Base Layout */
|
||||||
|
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, \
|
||||||
|
KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_BSPC, \
|
||||||
|
KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, TO(0), KC_TRNS, KC_HOME, KC_PGUP, KC_LEFT, KC_RIGHT, KC_NO, KC_TRNS, \
|
||||||
|
KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_PGDN, KC_DOWN, KC_NO, KC_TRNS, \
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
|
||||||
|
),
|
||||||
|
[4] = KEYMAP( /* Arrow Layers - Basic QWERTY ONLY */
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, \
|
||||||
|
KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_UP, \
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT \
|
||||||
|
),
|
||||||
|
[5] = KEYMAP( /* Blank Layer for later usage */
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, \
|
||||||
|
KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, \
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
|
||||||
|
),
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
|
{
|
||||||
|
// MACRODOWN only works in this function
|
||||||
|
return MACRO_NONE;
|
||||||
|
};
|
|
@ -0,0 +1,20 @@
|
||||||
|
MechMerlin's KC60 Layout
|
||||||
|
======================
|
||||||
|
|
||||||
|
This is the 60% layout used by u/merlin36, host of the MechMerlin YouTube channel.
|
||||||
|
It has 5 layers, base QWERTY, base HHKB, FN 1, FN 2(HHKB), and an arrows only layer.
|
||||||
|
|
||||||
|
Merlin's KC60 was acquired from Massdrop: https://www.massdrop.com/buy/kc60-mechanical-keyboard and is the Co-Star stabilizer version
|
||||||
|
|
||||||
|
If you would like to program your KC60 using the manufacturer recommended approach, please follow the guide on keychatter: https://www.keychatter.com/2015/07/05/programming-the-kc60/.
|
||||||
|
|
||||||
|
## Keymap Notes
|
||||||
|
- Highly influenced by the KBP V60 and WKL B.Face standard layouts
|
||||||
|
- Does not support any form of inswitch or underglow lighting as Merlin hates them.
|
||||||
|
- Arrow toggle switch is FN + Space
|
||||||
|
- Reset is FN + R
|
||||||
|
- HHKB keymap is approximate as keyboard is not built like HHKB
|
||||||
|
|
||||||
|
|
||||||
|
### Build
|
||||||
|
To build this keymap, simply run `make KEYMAP=mechmerlin`.
|
|
@ -0,0 +1,19 @@
|
||||||
|
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
||||||
|
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||||
|
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
|
USE_I2C = yes
|
||||||
|
TAP_DANCE_ENABLE = yes
|
||||||
|
|
||||||
|
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||||
|
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||||
|
MIDI_ENABLE = no # MIDI controls
|
||||||
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
|
UNICODE_ENABLE = no # Unicode
|
||||||
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
||||||
|
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||||
|
|
||||||
|
ifndef QUANTUM_DIR
|
||||||
|
include ../../../../Makefile
|
||||||
|
endif
|
|
@ -0,0 +1,47 @@
|
||||||
|
/*
|
||||||
|
This is the c configuration file for the keymap
|
||||||
|
|
||||||
|
Copyright 2012 Jun Wako <wakojun@gmail.com>
|
||||||
|
Copyright 2015 Jack Humbert
|
||||||
|
|
||||||
|
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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CONFIG_USER_H
|
||||||
|
#define CONFIG_USER_H
|
||||||
|
|
||||||
|
#include "../../config.h"
|
||||||
|
|
||||||
|
#define TAPPING_TOGGLE 1
|
||||||
|
#define TAPPING_TERM 200
|
||||||
|
#define ONESHOT_TAP_TOGGLE 2
|
||||||
|
#define ONESHOT_LAYER_TOGGLE 2
|
||||||
|
#define ONESHOT_TIMEOUT 300
|
||||||
|
|
||||||
|
/* Use I2C or Serial, not both */
|
||||||
|
|
||||||
|
// #define USE_SERIAL
|
||||||
|
#define USE_I2C
|
||||||
|
|
||||||
|
#define MOUSEKEY_INTERVAL 50
|
||||||
|
#define MOUSEKEY_DELAY 0
|
||||||
|
#define MOUSEKEY_TIME_TO_MAX 60
|
||||||
|
#define MOUSEKEY_MAX_SPEED 7
|
||||||
|
|
||||||
|
#define MOUSEKEY_WHEEL_DELAY 0
|
||||||
|
#define MOUSEKEY_WHEEL_MAX_SPEED 8
|
||||||
|
#define MOUSEKEY_WHEEL_TIME_TO_MAX 40
|
||||||
|
|
||||||
|
// #define MASTER_LEFT
|
||||||
|
// #define _MASTER_RIGHT
|
||||||
|
#define EE_HANDS
|
||||||
|
|
||||||
|
|
||||||
|
#define PREVENT_STUCK_MODIFIERS
|
||||||
|
//#define IGNORE_MOD_TAP_INTERRUPT
|
||||||
|
#define PERMISSIVE_HOLD
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,353 @@
|
||||||
|
#include "lets_split.h"
|
||||||
|
#include "action_layer.h"
|
||||||
|
#include "eeconfig.h"
|
||||||
|
|
||||||
|
extern keymap_config_t keymap_config;
|
||||||
|
|
||||||
|
#define _COLEMAK 0
|
||||||
|
#define _KAMELOC 1
|
||||||
|
#define _IKAPILA 2
|
||||||
|
#define _IKASHFT 3
|
||||||
|
#define _ARROWKY 4
|
||||||
|
#define _FNCTION 5
|
||||||
|
#define _NINEKEY 6
|
||||||
|
#define _NAVIGAT 7
|
||||||
|
#define _QWERTY 8
|
||||||
|
#define _GRVTABL 15
|
||||||
|
|
||||||
|
enum custom_keycodes {
|
||||||
|
COLEMAK = SAFE_RANGE,
|
||||||
|
KAMELOC,
|
||||||
|
IKAPILA,
|
||||||
|
IKASHFT,
|
||||||
|
ARROWKY,
|
||||||
|
FNCTION,
|
||||||
|
NINEKEY,
|
||||||
|
NAVIGAT,
|
||||||
|
QWERTY,
|
||||||
|
GRVTABL,
|
||||||
|
};
|
||||||
|
|
||||||
|
//TD Declarations
|
||||||
|
enum {
|
||||||
|
VOM = 0,
|
||||||
|
PRN,
|
||||||
|
EGT,
|
||||||
|
HRD,
|
||||||
|
DSH,
|
||||||
|
QUT,
|
||||||
|
ESC,
|
||||||
|
EQE,
|
||||||
|
PGN,
|
||||||
|
UND,
|
||||||
|
BSDEL,
|
||||||
|
bsdel_mods,
|
||||||
|
BOOTME,
|
||||||
|
};
|
||||||
|
|
||||||
|
#define _______ KC_TRNS
|
||||||
|
#define XXXXXXX KC_NO
|
||||||
|
|
||||||
|
// action-TAP for key/mod behavior LT(layer, kc)
|
||||||
|
#define XK_TAB LT(_FNCTION, KC_TAB)
|
||||||
|
#define XK_BSP LT(_KAMELOC, M(3))
|
||||||
|
|
||||||
|
#define XK_HARD LT(_FNCTION, M(1))
|
||||||
|
#define XK_SPC LT(_IKAPILA, KC_SPC)
|
||||||
|
#define XK_ENT LT(_IKAPILA, KC_ENT)
|
||||||
|
#define XK_PGDN LT(_NAVIGAT, TD(PGN))
|
||||||
|
#define XK_PREN LT(_IKASHFT, M(0))
|
||||||
|
#define PIPBOY LT(_FNCTION, KC_BSLS)
|
||||||
|
|
||||||
|
#define XK_DEL LT(_KAMELOC, KC_DEL)
|
||||||
|
#define XK_GRV LT(_GRVTABL, KC_GRV)
|
||||||
|
|
||||||
|
// mod-TAP for mod/key behavior MT(modkey, kc)
|
||||||
|
#define ESC_IT MT(MOD_MEH, TD(ESC))
|
||||||
|
|
||||||
|
#define ALT_IT MT(MOD_LALT, KC_SCLN)
|
||||||
|
#define CTL_IT MT(MOD_LCTL, KC_SLSH)
|
||||||
|
#define XK_EGPT MT((MOD_LCTL | MOD_LALT | MOD_LGUI), M(2))
|
||||||
|
|
||||||
|
#define SFT_IT MT(MOD_RSFT, TG(_NAVIGAT))
|
||||||
|
#define SFT_ENT MT(MOD_RSFT, KC_ENT)
|
||||||
|
|
||||||
|
//sticky modifiers
|
||||||
|
#define KYCTL OSM(MOD_LCTL)
|
||||||
|
#define KYGUI OSM(MOD_LGUI)
|
||||||
|
#define KYSFT OSM(MOD_LSFT)
|
||||||
|
#define KYALT OSM(MOD_LALT)
|
||||||
|
#define CAKY OSM(MOD_LCTL | MOD_LALT)
|
||||||
|
|
||||||
|
//shortcuts
|
||||||
|
#define CADEL LALT(LCTL(KC_DEL))
|
||||||
|
#define CAINS LALT(LCTL(KC_INS))
|
||||||
|
#define TGNKRO MAGIC_TOGGLE_NKRO
|
||||||
|
|
||||||
|
#define NAVCH LCTL(KC_HOME)
|
||||||
|
#define NAVCPD LCTL(KC_PGDN)
|
||||||
|
#define NAVCPU LCTL(KC_PGUP)
|
||||||
|
#define NAVCE LCTL(KC_END)
|
||||||
|
#define NAVCU LCTL(KC_UP)
|
||||||
|
#define NAVCD LCTL(KC_DOWN)
|
||||||
|
#define NAVCL LCTL(KC_LEFT)
|
||||||
|
#define NAVCR LCTL(KC_RGHT)
|
||||||
|
#define NAVGU LGUI(KC_UP)
|
||||||
|
#define NAVGD LGUI(KC_DOWN)
|
||||||
|
#define NAVGL LGUI(KC_LEFT)
|
||||||
|
#define NAVGR LGUI(KC_RGHT)
|
||||||
|
|
||||||
|
#define KC_NDSH LCTL(KC_PMNS)
|
||||||
|
#define KC_MDSH LALT(LCTL(KC_PMNS))
|
||||||
|
|
||||||
|
//!not sure if this old TMK code will work
|
||||||
|
//#define BOOTME ACTION_FUNCTION(BOOTLOADER)
|
||||||
|
#define LCLEAR ACTION_LAYER_SET_CLEAR(0)
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
|
/*
|
||||||
|
TAP
|
||||||
|
┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐
|
||||||
|
│TAB │ Q │ W │ F │ P │ B │ │ J │ L │ U │ Y │ ; │DEL │
|
||||||
|
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
|
||||||
|
│BKSP│ A │ R │ S │ T │ G │ │ M │ N │ E │ I │ O │ ' │
|
||||||
|
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
|
||||||
|
│OSFT│ X │ C │ D │ V │ Z │ │ K │ H │ , │ . │ / │LNAV│
|
||||||
|
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
|
||||||
|
│OCTL│OALT│L9KY│ [] │OGUI│SPC │ │ENT │PGDN│ () │ {} │ \ │ ` │
|
||||||
|
└────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┘
|
||||||
|
HOLD
|
||||||
|
┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐
|
||||||
|
│L FN│ │ │ │ │ │ │ │ │ │ │ALT │L!@#│
|
||||||
|
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
|
||||||
|
│L OH│ │ │ │ │ │ │ │ │ │ │ │L OH│
|
||||||
|
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
|
||||||
|
│SFT │ │ │ │ │ │ │ │ │ │ │CTL │SFT │
|
||||||
|
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
|
||||||
|
│CTL │ALT │L9KY│L!@#│GUI │L123│ │L123│LNAV│L!@#│MEH │L FN│LGRV│
|
||||||
|
└────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┘
|
||||||
|
DOUBLETAP
|
||||||
|
┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐
|
||||||
|
│ │!F4 │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
|
||||||
|
│ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
|
||||||
|
│OSML│ │ │ │ │UNDO│ │ │ │ │ │ │ │
|
||||||
|
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
|
||||||
|
│OSML│OSML│ESC │ │OSML│ │ │ │PGUP│ │ │ │ │
|
||||||
|
└────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┘
|
||||||
|
Switch type
|
||||||
|
┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐
|
||||||
|
│Br │Z │Z │Z │Z │Z │ │Z │Z │Z │Z │Br │G │
|
||||||
|
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
|
||||||
|
│G │Z │Z │Z │Z │Z │ │Z │Z │Z │Z │Z │Z │
|
||||||
|
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
|
||||||
|
│Y │Z │Z │Z │Z │Z │ │Z │Z │Z │Z │B │Y │
|
||||||
|
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
|
||||||
|
│Y │Y │C │Z │BLK │BLK │ │BLK │BLK │Z │Z │B │G │
|
||||||
|
└────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┘
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Colemak PB&J (Mod-DH)
|
||||||
|
[_COLEMAK] = KEYMAP( \
|
||||||
|
XK_TAB, TD(QUT), KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, ALT_IT, XK_GRV, \
|
||||||
|
XK_BSP, KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O, XK_DEL, \
|
||||||
|
KYSFT, KC_X, KC_C, KC_D, KC_V, TD(UND), KC_K, KC_H, KC_COMM, KC_DOT, CTL_IT, SFT_IT, \
|
||||||
|
KYCTL, KYALT, ESC_IT, XK_HARD, KYGUI, XK_SPC, XK_ENT, XK_PGDN, XK_PREN, XK_EGPT, PIPBOY, XK_GRV \
|
||||||
|
),
|
||||||
|
|
||||||
|
// useful for one-handed typing
|
||||||
|
[_KAMELOC] = KEYMAP( \
|
||||||
|
_______, KC_SCLN, KC_Y, KC_U, KC_L, KC_J, KC_B, KC_P, KC_F, KC_W, TD(QUT), _______, \
|
||||||
|
_______, KC_O, KC_I, KC_E, KC_N, KC_M, KC_G, KC_T, KC_S, KC_R, KC_A, _______, \
|
||||||
|
_______, KC_SLSH, KC_DOT, KC_COMM, KC_H, KC_K, TD(UND), KC_V, KC_D, KC_C, KC_X, _______, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
|
||||||
|
),
|
||||||
|
|
||||||
|
/*
|
||||||
|
┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐
|
||||||
|
│ ~ │ 1 │ 2 │ 3 │ 4 │ 5 │ │ 6 │ 7 │ 8 │ 9 │ 0 │ │
|
||||||
|
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
|
||||||
|
│ │DASH│MV- │ V+ │NEXT│PLAY│ │ ← │ ↓ │ ↑ │ → │INS │ │
|
||||||
|
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
|
||||||
|
│ │ - │ = │ [ │ ] │ \ │ │HOME│PGDN│PGUP│END │ \ │ │
|
||||||
|
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
|
||||||
|
│ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
└────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┘
|
||||||
|
*/
|
||||||
|
[_IKAPILA] = KEYMAP( \
|
||||||
|
KC_TILD, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, \
|
||||||
|
_______, TD(DSH), TD(VOM), KC_VOLU, KC_MNXT, KC_MPLY, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_INS, _______, \
|
||||||
|
_______, KC_MINS, KC_EQL, TD(HRD), KC_RBRC, KC_BSLS, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_BSLS, _______, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
|
||||||
|
),
|
||||||
|
|
||||||
|
/*
|
||||||
|
┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐
|
||||||
|
│ │ ! │ @ │ # │ $ │ % │ │ ^ │ & │ * │ ( │ ) │ │
|
||||||
|
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
|
||||||
|
│ │DASH│MV- │ V+ │NEXT│PLAY│ │HOME│PGDN│PGUP│END │PSCR│ │
|
||||||
|
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
|
||||||
|
│ │ _ │ + │ { │ } │ | │ │ ← │ ↓ │ ↑ │ → │ │ │
|
||||||
|
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
|
||||||
|
│ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
└────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┘
|
||||||
|
*/
|
||||||
|
|
||||||
|
[_IKASHFT] = KEYMAP( \
|
||||||
|
_______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, \
|
||||||
|
KC_DEL, TD(DSH), TD(VOM), KC_VOLU, KC_MNXT, KC_MPLY, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_PSCR, _______, \
|
||||||
|
_______, KC_UNDS, KC_PLUS, TD(EGT), KC_RCBR, KC_PIPE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_PAUS, _______, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
|
||||||
|
),
|
||||||
|
|
||||||
|
/*
|
||||||
|
┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐
|
||||||
|
│ │ → │ ↑ │ ← │ ↓ │ → │ │ → │ ↓ │ ← │ ↑ │ ↑ │ │ just in case someone hacks my IP with a 10MeG pipe, you know?
|
||||||
|
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
|
||||||
|
│ │ ← │ ↓ │ → │ ↑ │ ← │ │ ↑ │ ← │ ↓ │ → │ ← │ │ hacker_evasion layer
|
||||||
|
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ >>init network SEQUENCE
|
||||||
|
│ │ ↑ │ ← │ ↓ │ → │ ↑ │ │ ↓ │ ← │ ↑ │ → │ ← │ │ sleep 11; echo "DONE\n"
|
||||||
|
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ throttle INPUT 11001001 OUTPUT 010011001 ? FULL )); \
|
||||||
|
│ │ │ │ → │ ← │ ↓ │ │ → │ ↑ │ ← │ ↓ │ ↑ │ │ <<chkconfig cargoCode ==== "'1'"
|
||||||
|
└────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┘ up down left right kc_b kc_a GUI
|
||||||
|
*/
|
||||||
|
|
||||||
|
[_ARROWKY] = KEYMAP( \
|
||||||
|
_______, KC_RGHT, KC_UP, KC_LEFT, KC_DOWN, KC_RGHT, KC_UP, KC_LEFT, KC_DOWN, KC_RGHT, KC_UP, _______, \
|
||||||
|
_______, KC_LEFT, KC_DOWN, KC_RGHT, KC_UP, KC_LEFT, KC_DOWN, KC_RGHT, KC_UP, KC_LEFT, KC_DOWN, _______, \
|
||||||
|
_______, KC_UP, KC_LEFT, KC_DOWN, KC_RGHT, KC_UP, KC_LEFT, KC_DOWN, KC_RGHT, KC_UP, KC_LEFT, _______, \
|
||||||
|
_______, _______, KC_RGHT, KC_UP, KC_LEFT, KC_DOWN, KC_RGHT, KC_UP, KC_LEFT, KC_DOWN, KC_RGHT, _______ \
|
||||||
|
),
|
||||||
|
|
||||||
|
/*
|
||||||
|
┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐
|
||||||
|
│ │ F1 │ F2 │ F3 │ F4 │ F5 │ │ F6 │ F7 │ F8 │ F9 │ F10│ │
|
||||||
|
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
|
||||||
|
│ │ F11│ F12│ F13│ F14│ F15│ │ F16│ F17│ F18│ F19│ F20│ │
|
||||||
|
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
|
||||||
|
│ │ F21│ F22│ F23│ F24│PAUS│ │ │ │BOOT│RSET│NKRO│CAPS│
|
||||||
|
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
|
||||||
|
│ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
└────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┘
|
||||||
|
*/
|
||||||
|
|
||||||
|
[_FNCTION] = KEYMAP( \
|
||||||
|
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______, \
|
||||||
|
_______, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, _______, \
|
||||||
|
_______, KC_F21, KC_F22, KC_F23, KC_F24, _______, _______, _______,M(BOOTME), RESET, TGNKRO, KC_CAPS, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
|
||||||
|
),
|
||||||
|
|
||||||
|
/*
|
||||||
|
┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐
|
||||||
|
│ │ → │ F7 │ F8 │ F9 │ ↑ │ │NLCK│ P7 │ P8 │ P9 │ P- │BDEL│
|
||||||
|
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
|
||||||
|
│ │ ← │ F4 │ F5 │ F6 │ ↓ │ │^INS│ P4 │ P5 │ P6 │ P+ │ () │
|
||||||
|
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
|
||||||
|
│ │CALT│ F1 │ F2 │ F3 │ │ │CALT│ P1 │ P2 │ P3 │ P* │ = │
|
||||||
|
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
|
||||||
|
│ │ │ F0?│ │ │ │ │TGL │ P0 │ 0 │ P. │ P/ │ │
|
||||||
|
└────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┘
|
||||||
|
*/
|
||||||
|
|
||||||
|
[_NINEKEY] = KEYMAP( \
|
||||||
|
_______, KC_RGHT, KC_F7, KC_F8, KC_F9, KC_UP, KC_NLCK, KC_P7, KC_P8, KC_P9, KC_PMNS, M(BSDEL), \
|
||||||
|
_______, KC_LEFT, KC_F4, KC_F5, KC_F6, KC_DOWN, CAINS, KC_P4, KC_P5, KC_P6, KC_PPLS, XK_PREN, \
|
||||||
|
_______, CAKY, KC_F1, KC_F2, KC_F3, _______, CAKY, KC_P1, KC_P2, KC_P3, KC_PAST, TD(EQE), \
|
||||||
|
_______, _______, _______, KC_F11, _______, _______, TG(_NINEKEY), KC_P0, KC_0, KC_PDOT, KC_PSLS, _______ \
|
||||||
|
),
|
||||||
|
|
||||||
|
/*
|
||||||
|
┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐
|
||||||
|
│ESC │^PGD│^UP │^PGU│^PGU│^HOM│ │ │MW_L│ MU │MW_R│ AC2│ │
|
||||||
|
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
|
||||||
|
│ │^LFT│^DWN│^RGT│^PGD│^END│ │ │ ML │ MD │ MR │ AC1│ │
|
||||||
|
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
|
||||||
|
│ │ M2 │ M4 │ M3 │ M1 │ M5 │ │ │MW_D│MW_U│SLCK│ AC0│ │
|
||||||
|
├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤
|
||||||
|
│ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
└────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┘
|
||||||
|
*/
|
||||||
|
|
||||||
|
[_NAVIGAT] = KEYMAP( \
|
||||||
|
KC_ESC, NAVCPD, NAVCU, NAVCPU, NAVCPU, NAVCH, XXXXXXX, KC_WH_L, KC_MS_U, KC_WH_R, KC_ACL2, _______, \
|
||||||
|
_______, NAVCL, NAVCD, NAVCR, NAVCPD, NAVCE, XXXXXXX, KC_MS_L, KC_MS_D, KC_MS_R, KC_ACL1, _______, \
|
||||||
|
_______, KC_BTN2, KC_BTN4, KC_BTN3, KC_BTN1, KC_BTN5, XXXXXXX, KC_WH_D, KC_WH_U, KC_SLCK, KC_ACL0, _______, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
|
||||||
|
),
|
||||||
|
|
||||||
|
//ew. jk
|
||||||
|
[_QWERTY] = KEYMAP( \
|
||||||
|
_______, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
|
||||||
|
_______, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
|
||||||
|
_______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
|
||||||
|
),
|
||||||
|
|
||||||
|
/*
|
||||||
|
//add greek symbols
|
||||||
|
//set_unicode_input_mode(UC_WINC); // Windows (with WinCompose, see wiki)
|
||||||
|
|
||||||
|
//UC(0x250C),UC(0x252C),UC(0x2510),UC(0x2500),UC(0x2502)
|
||||||
|
//UC(0x251C),UC(0x253C),UC(0x2524),
|
||||||
|
//UC(0x2514),UC(0x2534),UC(0x2518),
|
||||||
|
*/
|
||||||
|
[_GRVTABL] = KEYMAP( \
|
||||||
|
TG(5), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TG(3), \
|
||||||
|
TG(1), XXXXXXX, TD(VOM), KC_VOLU, KC_MNXT, KC_MPLY, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TG(1), \
|
||||||
|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TG(0), XXXXXXX, TG(4), XXXXXXX, TG(8), LCLEAR, \
|
||||||
|
XXXXXXX, XXXXXXX, TG(6), TG(3), XXXXXXX, TG(2), TG(2), TG(7), TG(3), OSM(MOD_MEH), TG(5), _______ \
|
||||||
|
)};
|
||||||
|
|
||||||
|
qk_tap_dance_action_t tap_dance_actions[] = {
|
||||||
|
[VOM] = ACTION_TAP_DANCE_DOUBLE(KC_VOLD, KC_MUTE),
|
||||||
|
[PRN] = ACTION_TAP_DANCE_DOUBLE(KC_LPRN, KC_RPRN),
|
||||||
|
[EGT] = ACTION_TAP_DANCE_DOUBLE(KC_LCBR, KC_RCBR),
|
||||||
|
[HRD] = ACTION_TAP_DANCE_DOUBLE(KC_LBRC, KC_RBRC),
|
||||||
|
[DSH] = ACTION_TAP_DANCE_DOUBLE(KC_NDSH, KC_MDSH),
|
||||||
|
[QUT] = ACTION_TAP_DANCE_DOUBLE(KC_Q, LALT(KC_F4)),
|
||||||
|
[ESC] = ACTION_TAP_DANCE_DOUBLE(TT(_NINEKEY), KC_ESC),
|
||||||
|
[EQE] = ACTION_TAP_DANCE_DOUBLE(KC_EQL, KC_ENT),
|
||||||
|
[PGN] = ACTION_TAP_DANCE_DOUBLE(KC_PGDN, KC_PGUP),
|
||||||
|
[UND] = ACTION_TAP_DANCE_DOUBLE(KC_Z, LCTL(KC_Z)),
|
||||||
|
};
|
||||||
|
|
||||||
|
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||||
|
if (record->event.pressed) {
|
||||||
|
switch(id) {
|
||||||
|
case 0:
|
||||||
|
return MACRO(D(LSHIFT),T(9), T(0),U(LSHIFT), T(LEFT), END);
|
||||||
|
case 1:
|
||||||
|
return MACRO(T(LBRC), T(RBRC), T(LEFT), END);
|
||||||
|
case 2:
|
||||||
|
return MACRO(D(LSHIFT),T(LBRC), T(RBRC),U(LSHIFT), T(ENT), T(UP), END);
|
||||||
|
case 3:
|
||||||
|
return MACRO(T(BSPC), END);
|
||||||
|
/* static bool bsdel_mods = false;
|
||||||
|
case BSDEL: {
|
||||||
|
uint8_t kc = KC_BSPC;
|
||||||
|
if (record->event.pressed) {
|
||||||
|
if (keyboard_report->mods) {
|
||||||
|
kc = KC_DEL;
|
||||||
|
}
|
||||||
|
register_code (kc);
|
||||||
|
bsdel_mods = keyboard_report->mods;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (bsdel_mods) {
|
||||||
|
kc = KC_DEL;
|
||||||
|
}
|
||||||
|
|
||||||
|
unregister_code (kc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/ case 4:
|
||||||
|
if (!record->event.pressed) {
|
||||||
|
// bootloader();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return MACRO_NONE;
|
||||||
|
};
|
|
@ -0,0 +1,3 @@
|
||||||
|
ifndef QUANTUM_DIR
|
||||||
|
include ../../../../Makefile
|
||||||
|
endif
|
|
@ -0,0 +1,42 @@
|
||||||
|
#ifndef CONFIG_USER_H
|
||||||
|
#define CONFIG_USER_H
|
||||||
|
|
||||||
|
#include "../../config.h"
|
||||||
|
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
#define STARTUP_SONG SONG(PLANCK_SOUND)
|
||||||
|
// #define STARTUP_SONG SONG(NO_SOUND)
|
||||||
|
|
||||||
|
#define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
|
||||||
|
SONG(COLEMAK_SOUND), \
|
||||||
|
SONG(DVORAK_SOUND) \
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define MUSIC_MASK (keycode != KC_NO)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* MIDI options
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Prevent use of disabled MIDI features in the keymap */
|
||||||
|
//#define MIDI_ENABLE_STRICT 1
|
||||||
|
|
||||||
|
/* enable basic MIDI features:
|
||||||
|
- MIDI notes can be sent when in Music mode is on
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define MIDI_BASIC
|
||||||
|
|
||||||
|
/* enable advanced MIDI features:
|
||||||
|
- MIDI notes can be added to the keymap
|
||||||
|
- Octave shift and transpose
|
||||||
|
- Virtual sustain, portamento, and modulation wheel
|
||||||
|
- etc.
|
||||||
|
*/
|
||||||
|
//#define MIDI_ADVANCED
|
||||||
|
|
||||||
|
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
|
||||||
|
//#define MIDI_TONE_KEYCODE_OCTAVES 2
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,261 @@
|
||||||
|
/* Copyright 2015-2017 Jack Humbert
|
||||||
|
*
|
||||||
|
* 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 "planck.h"
|
||||||
|
#include "action_layer.h"
|
||||||
|
|
||||||
|
extern keymap_config_t keymap_config;
|
||||||
|
|
||||||
|
enum planck_layers {
|
||||||
|
_QWERTY,
|
||||||
|
_COLEMAK,
|
||||||
|
_DVORAK,
|
||||||
|
_LOWER,
|
||||||
|
_RAISE,
|
||||||
|
_PLOVER,
|
||||||
|
_ADJUST
|
||||||
|
};
|
||||||
|
|
||||||
|
enum planck_keycodes {
|
||||||
|
QWERTY = SAFE_RANGE,
|
||||||
|
COLEMAK,
|
||||||
|
DVORAK,
|
||||||
|
PLOVER,
|
||||||
|
LOWER,
|
||||||
|
RAISE,
|
||||||
|
BACKLIT,
|
||||||
|
EXT_PLV
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
|
/* Qwerty
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp |
|
||||||
|
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
* | Tab | A | S | D | F | G | H | J | K | L | ; | " |
|
||||||
|
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
|
* | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | Ctrl | GUI | Alt | App |Lower | Space |Raise | - | = | \ | Alt |
|
||||||
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_QWERTY] = {
|
||||||
|
{KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
|
||||||
|
{KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
|
||||||
|
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RSFT_T(KC_ENT) },
|
||||||
|
{KC_LCTL, KC_LGUI, KC_LALT, KC_APP, LOWER, KC_SPC, KC_SPC, RAISE, KC_MINS, KC_EQL, KC_BSLS, KC_RALT}
|
||||||
|
},
|
||||||
|
|
||||||
|
/* Colemak
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
|
||||||
|
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
* | Esc | A | R | S | T | D | H | N | E | I | O | " |
|
||||||
|
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
|
* | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
|
||||||
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_COLEMAK] = {
|
||||||
|
{KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
|
||||||
|
{KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
|
||||||
|
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
|
||||||
|
{BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
|
||||||
|
},
|
||||||
|
|
||||||
|
/* Dvorak
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp |
|
||||||
|
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
* | Esc | A | O | E | U | I | D | H | T | N | S | / |
|
||||||
|
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
|
* | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
|
||||||
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_DVORAK] = {
|
||||||
|
{KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC},
|
||||||
|
{KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH},
|
||||||
|
{KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT },
|
||||||
|
{BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
|
||||||
|
},
|
||||||
|
|
||||||
|
/* Lower
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
|
||||||
|
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
* | | | | { | } | Del | Home | PgDn | PgUp | End | | |
|
||||||
|
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
|
* | | F1 | F2 | F3 | F4 | F5 | F6 |ISO ~ |ISO | | | | |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | | | | | | | | Mute | Vol- | Vol+ | Play |
|
||||||
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_LOWER] = {
|
||||||
|
{KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
|
||||||
|
{_______, _______, _______, KC_LCBR, KC_RCBR, KC_DEL, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______},
|
||||||
|
{_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, S(KC_NUHS), S(KC_NUBS), KC_MPRV, KC_MNXT, _______},
|
||||||
|
{_______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPLY}
|
||||||
|
},
|
||||||
|
|
||||||
|
/* Raise
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
|
||||||
|
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
* | | | | [ | ] | Del | Left | Down | Up | Right| | |
|
||||||
|
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
|
* | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | | |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | | | | | | | | Mute | Vol- | Vol+ | Play |
|
||||||
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_RAISE] = {
|
||||||
|
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
|
||||||
|
{_______, _______, _______, KC_LBRC, KC_RBRC, KC_DEL, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______},
|
||||||
|
{_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_MPRV, KC_MNXT, _______},
|
||||||
|
{_______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPLY}
|
||||||
|
},
|
||||||
|
|
||||||
|
/* Plover layer (http://opensteno.org)
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | # | # | # | # | # | # | # | # | # | # | # | # |
|
||||||
|
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
* | | S | T | P | H | * | * | F | P | L | T | D |
|
||||||
|
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
|
* | | S | K | W | R | * | * | R | B | G | S | Z |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | Exit | | | A | O | | E | U | | | |
|
||||||
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
|
||||||
|
[_PLOVER] = {
|
||||||
|
{KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 },
|
||||||
|
{XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC},
|
||||||
|
{XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
|
||||||
|
{EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX}
|
||||||
|
},
|
||||||
|
|
||||||
|
/* Adjust (Lower + Raise)
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | | Reset| | | | | | | | | | Del |
|
||||||
|
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
* | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| |
|
||||||
|
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
|
* | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | | | | | | | | | | | |
|
||||||
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_ADJUST] = {
|
||||||
|
{_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL },
|
||||||
|
{_______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______},
|
||||||
|
{_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______},
|
||||||
|
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
float plover_song[][2] = SONG(PLOVER_SOUND);
|
||||||
|
float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
switch (keycode) {
|
||||||
|
case QWERTY:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
set_single_persistent_default_layer(_QWERTY);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case COLEMAK:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
set_single_persistent_default_layer(_COLEMAK);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case DVORAK:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
set_single_persistent_default_layer(_DVORAK);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case LOWER:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
layer_on(_LOWER);
|
||||||
|
update_tri_layer(_LOWER, _RAISE, _ADJUST);
|
||||||
|
} else {
|
||||||
|
layer_off(_LOWER);
|
||||||
|
update_tri_layer(_LOWER, _RAISE, _ADJUST);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case RAISE:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
layer_on(_RAISE);
|
||||||
|
update_tri_layer(_LOWER, _RAISE, _ADJUST);
|
||||||
|
} else {
|
||||||
|
layer_off(_RAISE);
|
||||||
|
update_tri_layer(_LOWER, _RAISE, _ADJUST);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case BACKLIT:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
register_code(KC_RSFT);
|
||||||
|
#ifdef BACKLIGHT_ENABLE
|
||||||
|
backlight_step();
|
||||||
|
#endif
|
||||||
|
} else {
|
||||||
|
unregister_code(KC_RSFT);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case PLOVER:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
stop_all_notes();
|
||||||
|
PLAY_SONG(plover_song);
|
||||||
|
#endif
|
||||||
|
layer_off(_RAISE);
|
||||||
|
layer_off(_LOWER);
|
||||||
|
layer_off(_ADJUST);
|
||||||
|
layer_on(_PLOVER);
|
||||||
|
if (!eeconfig_is_enabled()) {
|
||||||
|
eeconfig_init();
|
||||||
|
}
|
||||||
|
keymap_config.raw = eeconfig_read_keymap();
|
||||||
|
keymap_config.nkro = 1;
|
||||||
|
eeconfig_update_keymap(keymap_config.raw);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case EXT_PLV:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
PLAY_SONG(plover_gb_song);
|
||||||
|
#endif
|
||||||
|
layer_off(_PLOVER);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
|
@ -0,0 +1,2 @@
|
||||||
|
# /u/Coloneljesus's Planck Layout
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
#include "xd60.h"
|
||||||
|
#include "action_layer.h"
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
|
// 0: Base Layer
|
||||||
|
KEYMAP(
|
||||||
|
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, KC_BSPC , KC_NO, \
|
||||||
|
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, KC_BSLS, \
|
||||||
|
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_NO, KC_ENT, \
|
||||||
|
KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_NO, KC_RSFT ,KC_UP, KC_DEL, \
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RGUI, F(0), KC_LEFT, KC_DOWN, KC_RIGHT),
|
||||||
|
|
||||||
|
// 1: Function Layer
|
||||||
|
KEYMAP(
|
||||||
|
RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO, \
|
||||||
|
KC_NO, KC_WH_U, KC_UP, KC_WH_D, KC_BSPC,KC_HOME,KC_CALC,KC_NO, KC_INS, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_DEL, \
|
||||||
|
KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT,KC_DEL, KC_END, KC_PGDN,KC_NO, KC_NO, KC_NO, KC_HOME, KC_PGUP, KC_NO, KC_ENT, \
|
||||||
|
KC_LSFT, KC_NO, KC_NO, KC_APP, BL_STEP,KC_NO, KC_NO, KC_VOLD,KC_VOLU,KC_MUTE, KC_END, KC_RSFT, KC_NO ,KC_PGUP, KC_INS, \
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RGUI, F(0), KC_HOME, KC_PGDOWN,KC_END),
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
// Custom Actions
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
[0] = ACTION_LAYER_MOMENTARY(1), // to Fn overlay
|
||||||
|
};
|
||||||
|
|
||||||
|
// Macros
|
||||||
|
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||||
|
|
||||||
|
// MACRODOWN only works in this function
|
||||||
|
switch(id) {
|
||||||
|
case 0:
|
||||||
|
if (record->event.pressed) { register_code(KC_RSFT); }
|
||||||
|
else { unregister_code(KC_RSFT); }
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return MACRO_NONE;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Loop
|
||||||
|
void matrix_scan_user(void) {
|
||||||
|
// Empty
|
||||||
|
};
|
|
@ -0,0 +1,5 @@
|
||||||
|
![Uses this layout](https://i.redd.it/v64eqwsrk8jx.jpg)
|
||||||
|
|
||||||
|
All of the keys which CAN have a function should be assigned one.
|
||||||
|
|
||||||
|
The keys with KC_NO cannot be assigned a value
|
|
@ -0,0 +1,46 @@
|
||||||
|
#include "xd60.h"
|
||||||
|
#include "action_layer.h"
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
|
// 0: Base Layer
|
||||||
|
KEYMAP(
|
||||||
|
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, KC_BSPC , KC_NO, \
|
||||||
|
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, KC_BSLS, \
|
||||||
|
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_NO, KC_ENT, \
|
||||||
|
KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_NO, KC_RSFT ,KC_UP, KC_DEL, \
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RGUI, F(0), KC_LEFT, KC_DOWN, KC_RIGHT),
|
||||||
|
|
||||||
|
// 1: Function Layer
|
||||||
|
KEYMAP(
|
||||||
|
RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO, \
|
||||||
|
KC_NO, KC_WH_U, KC_UP, KC_WH_D, KC_BSPC,KC_HOME,KC_CALC,KC_NO, KC_INS, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_DEL, \
|
||||||
|
KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT,KC_DEL, KC_END, KC_PGDN,KC_NO, KC_NO, KC_NO, KC_HOME, KC_PGUP, KC_NO, KC_ENT, \
|
||||||
|
KC_LSFT, KC_NO, KC_NO, KC_APP, BL_STEP,KC_NO, KC_NO, KC_VOLD,KC_VOLU,KC_MUTE, KC_END, KC_RSFT, KC_NO ,KC_PGUP, KC_INS, \
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RGUI, F(0), KC_HOME, KC_PGDOWN,KC_END),
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
// Custom Actions
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
[0] = ACTION_LAYER_MOMENTARY(1), // to Fn overlay
|
||||||
|
};
|
||||||
|
|
||||||
|
// Macros
|
||||||
|
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||||
|
|
||||||
|
// MACRODOWN only works in this function
|
||||||
|
switch(id) {
|
||||||
|
case 0:
|
||||||
|
if (record->event.pressed) { register_code(KC_RSFT); }
|
||||||
|
else { unregister_code(KC_RSFT); }
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return MACRO_NONE;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Loop
|
||||||
|
void matrix_scan_user(void) {
|
||||||
|
// Empty
|
||||||
|
};
|
|
@ -0,0 +1,5 @@
|
||||||
|
![Uses this layout](https://i.redd.it/v64eqwsrk8jx.jpg)
|
||||||
|
|
||||||
|
All of the keys which CAN have a function should be assigned one.
|
||||||
|
|
||||||
|
The keys with KC_NO cannot be assigned a value
|
|
@ -41,6 +41,24 @@ void qk_tap_dance_pair_reset (qk_tap_dance_state_t *state, void *user_data) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void qk_tap_dance_dual_role_finished (qk_tap_dance_state_t *state, void *user_data) {
|
||||||
|
qk_tap_dance_dual_role_t *pair = (qk_tap_dance_dual_role_t *)user_data;
|
||||||
|
|
||||||
|
if (state->count == 1) {
|
||||||
|
register_code16 (pair->kc);
|
||||||
|
} else if (state->count == 2) {
|
||||||
|
layer_invert (pair->layer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void qk_tap_dance_dual_role_reset (qk_tap_dance_state_t *state, void *user_data) {
|
||||||
|
qk_tap_dance_dual_role_t *pair = (qk_tap_dance_dual_role_t *)user_data;
|
||||||
|
|
||||||
|
if (state->count == 1) {
|
||||||
|
unregister_code16 (pair->kc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static inline void _process_tap_dance_action_fn (qk_tap_dance_state_t *state,
|
static inline void _process_tap_dance_action_fn (qk_tap_dance_state_t *state,
|
||||||
void *user_data,
|
void *user_data,
|
||||||
qk_tap_dance_user_fn_t fn)
|
qk_tap_dance_user_fn_t fn)
|
||||||
|
|
|
@ -54,11 +54,22 @@ typedef struct
|
||||||
uint16_t kc2;
|
uint16_t kc2;
|
||||||
} qk_tap_dance_pair_t;
|
} qk_tap_dance_pair_t;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint16_t kc;
|
||||||
|
uint8_t layer;
|
||||||
|
} qk_tap_dance_dual_role_t;
|
||||||
|
|
||||||
#define ACTION_TAP_DANCE_DOUBLE(kc1, kc2) { \
|
#define ACTION_TAP_DANCE_DOUBLE(kc1, kc2) { \
|
||||||
.fn = { NULL, qk_tap_dance_pair_finished, qk_tap_dance_pair_reset }, \
|
.fn = { NULL, qk_tap_dance_pair_finished, qk_tap_dance_pair_reset }, \
|
||||||
.user_data = (void *)&((qk_tap_dance_pair_t) { kc1, kc2 }), \
|
.user_data = (void *)&((qk_tap_dance_pair_t) { kc1, kc2 }), \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define ACTION_TAP_DANCE_DUAL_ROLE(kc, layer) { \
|
||||||
|
.fn = { NULL, qk_tap_dance_dual_role_finished, qk_tap_dance_dual_role_reset }, \
|
||||||
|
.user_data = (void *)&((qk_tap_dance_dual_role_t) { kc, layer }), \
|
||||||
|
}
|
||||||
|
|
||||||
#define ACTION_TAP_DANCE_FN(user_fn) { \
|
#define ACTION_TAP_DANCE_FN(user_fn) { \
|
||||||
.fn = { NULL, user_fn, NULL }, \
|
.fn = { NULL, user_fn, NULL }, \
|
||||||
.user_data = NULL, \
|
.user_data = NULL, \
|
||||||
|
@ -86,6 +97,9 @@ void reset_tap_dance (qk_tap_dance_state_t *state);
|
||||||
void qk_tap_dance_pair_finished (qk_tap_dance_state_t *state, void *user_data);
|
void qk_tap_dance_pair_finished (qk_tap_dance_state_t *state, void *user_data);
|
||||||
void qk_tap_dance_pair_reset (qk_tap_dance_state_t *state, void *user_data);
|
void qk_tap_dance_pair_reset (qk_tap_dance_state_t *state, void *user_data);
|
||||||
|
|
||||||
|
void qk_tap_dance_dual_role_finished (qk_tap_dance_state_t *state, void *user_data);
|
||||||
|
void qk_tap_dance_dual_role_reset (qk_tap_dance_state_t *state, void *user_data);
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#define TD(n) KC_NO
|
#define TD(n) KC_NO
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
# Quantum Mechanical Keyboard Firmware
|
# Quantum Mechanical Keyboard Firmware
|
||||||
|
|
||||||
|
[![Current Version](https://img.shields.io/github/tag/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/tags)
|
||||||
[![Build Status](https://travis-ci.org/qmk/qmk_firmware.svg?branch=master)](https://travis-ci.org/qmk/qmk_firmware)
|
[![Build Status](https://travis-ci.org/qmk/qmk_firmware.svg?branch=master)](https://travis-ci.org/qmk/qmk_firmware)
|
||||||
[![Gitter](https://img.shields.io/gitter/room/qmk/qmk_firmware.js.svg)](https://gitter.im/qmk/qmk_firmware)
|
[![Gitter](https://img.shields.io/gitter/room/qmk/qmk_firmware.js.svg)](https://gitter.im/qmk/qmk_firmware)
|
||||||
[![Docs Status](https://img.shields.io/badge/docs-ready-orange.svg)](https://docs.qmk.fm)
|
[![Docs Status](https://img.shields.io/badge/docs-ready-orange.svg)](https://docs.qmk.fm)
|
||||||
|
|
Loading…
Reference in New Issue