Merge branch 'master' into promethium
11
.travis.yml
|
@ -5,12 +5,10 @@ language: c
|
||||||
branches:
|
branches:
|
||||||
except:
|
except:
|
||||||
- /^.*-automated-build$/
|
- /^.*-automated-build$/
|
||||||
|
- /^[0-9]+\.[0-9]+\.[0-9]+/
|
||||||
env:
|
env:
|
||||||
global:
|
global:
|
||||||
- secure: vBTSL34BDPxDilKUuTXqU4CJ26Pv5hogD2nghatkxSQkI1/jbdnLj/DQdPUrMJFDIY6TK3AltsBx72MaMsLQ1JO/Ou24IeHINHXzUC1FlS9yQa48cpxnhX5kzXNyGs3oa0qaFbvnr7RgYRWtmD52n4bIZuSuW+xpBv05x2OCizdT2ZonH33nATaHGFasxROm4qYZ241VfzcUv766V6RVHgL4x9V08warugs+RENVkfzxxwhk3NmkrISabze0gSVJLHBPHxroZC6EUcf/ocobcuDrCwFqtEt90i7pNIAFUE7gZsN2uE75LmpzAWin21G7lLPcPL2k4FJVd8an1HiP2WmscJU6U89fOfMb2viObnKcCzebozBCmKGtHEuXZo9FcReOx49AnQSpmESJGs+q2dL/FApkTjQiyT4J6O5dJpoww0/r57Wx0cmmqjETKBb5rSgXM51Etk3wO09mvcPHsEwrT7qH8r9XWdyCDoEn7FCLX3/LYnf/D4SmZ633YPl5gv3v9XEwxR5+04akjgnvWDSNIaDbWBdxHNb7l4pMc+WR1bwCyMyA7KXj0RrftEGOrm9ZRLe6BkbT4cycA+j77nbPOMcyZChliV9pPQos+4TOJoTzcK2L8yWVoY409aDNVuAjdP6Yum0R2maBGl/etLmIMpJC35C5/lZ+dUNjJAM=
|
- secure: vBTSL34BDPxDilKUuTXqU4CJ26Pv5hogD2nghatkxSQkI1/jbdnLj/DQdPUrMJFDIY6TK3AltsBx72MaMsLQ1JO/Ou24IeHINHXzUC1FlS9yQa48cpxnhX5kzXNyGs3oa0qaFbvnr7RgYRWtmD52n4bIZuSuW+xpBv05x2OCizdT2ZonH33nATaHGFasxROm4qYZ241VfzcUv766V6RVHgL4x9V08warugs+RENVkfzxxwhk3NmkrISabze0gSVJLHBPHxroZC6EUcf/ocobcuDrCwFqtEt90i7pNIAFUE7gZsN2uE75LmpzAWin21G7lLPcPL2k4FJVd8an1HiP2WmscJU6U89fOfMb2viObnKcCzebozBCmKGtHEuXZo9FcReOx49AnQSpmESJGs+q2dL/FApkTjQiyT4J6O5dJpoww0/r57Wx0cmmqjETKBb5rSgXM51Etk3wO09mvcPHsEwrT7qH8r9XWdyCDoEn7FCLX3/LYnf/D4SmZ633YPl5gv3v9XEwxR5+04akjgnvWDSNIaDbWBdxHNb7l4pMc+WR1bwCyMyA7KXj0RrftEGOrm9ZRLe6BkbT4cycA+j77nbPOMcyZChliV9pPQos+4TOJoTzcK2L8yWVoY409aDNVuAjdP6Yum0R2maBGl/etLmIMpJC35C5/lZ+dUNjJAM=
|
||||||
matrix:
|
|
||||||
- TARGET=all-keyboards AUTOGEN=true
|
|
||||||
- TARGET=test AUTOGEN=false
|
|
||||||
before_install:
|
before_install:
|
||||||
- wget http://www.atmel.com/images/avr8-gnu-toolchain-3.5.4.1709-linux.any.x86_64.tar.gz
|
- wget http://www.atmel.com/images/avr8-gnu-toolchain-3.5.4.1709-linux.any.x86_64.tar.gz
|
||||||
install:
|
install:
|
||||||
|
@ -19,7 +17,8 @@ install:
|
||||||
before_script:
|
before_script:
|
||||||
- avr-gcc --version
|
- avr-gcc --version
|
||||||
script:
|
script:
|
||||||
- make $TARGET AUTOGEN=$AUTOGEN
|
- make test AUTOGEN=false
|
||||||
|
- bash util/travis_build.sh
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
packages:
|
packages:
|
||||||
|
@ -30,6 +29,4 @@ addons:
|
||||||
- libnewlib-arm-none-eabi
|
- libnewlib-arm-none-eabi
|
||||||
- diffutils
|
- diffutils
|
||||||
after_success:
|
after_success:
|
||||||
if [ "$AUTOGEN" == "true" ]; then
|
bash util/travis_compiled_push.sh
|
||||||
bash util/travis_compiled_push.sh;
|
|
||||||
fi
|
|
||||||
|
|
|
@ -26,3 +26,4 @@ ENV keymap=default
|
||||||
|
|
||||||
VOLUME /qmk
|
VOLUME /qmk
|
||||||
WORKDIR /qmk
|
WORKDIR /qmk
|
||||||
|
CMD make clean ; make keyboard=${keyboard} subproject=${subproject} keymap=${keymap}
|
||||||
|
|
36
Makefile
|
@ -16,10 +16,10 @@ ifdef SILENT
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# We need to make sure that silent is always turned off at the top level
|
# We need to make sure that silent is always turned off at the top level
|
||||||
# Otherwise the [OK], [ERROR] and [WARN] messags won't be displayed correctly
|
# Otherwise the [OK], [ERROR] and [WARN] messages won't be displayed correctly
|
||||||
override SILENT := false
|
override SILENT := false
|
||||||
|
|
||||||
ON_ERROR := error_occured=1
|
ON_ERROR := error_occurred=1
|
||||||
|
|
||||||
STARTING_MAKEFILE := $(firstword $(MAKEFILE_LIST))
|
STARTING_MAKEFILE := $(firstword $(MAKEFILE_LIST))
|
||||||
ROOT_MAKEFILE := $(lastword $(MAKEFILE_LIST))
|
ROOT_MAKEFILE := $(lastword $(MAKEFILE_LIST))
|
||||||
|
@ -34,13 +34,13 @@ ABS_ROOT_DIR := $(dir $(ABS_ROOT_MAKEFILE))
|
||||||
STARTING_DIR := $(subst $(ABS_ROOT_DIR),,$(ABS_STARTING_DIR))
|
STARTING_DIR := $(subst $(ABS_ROOT_DIR),,$(ABS_STARTING_DIR))
|
||||||
BUILD_DIR := $(ROOT_DIR)/.build
|
BUILD_DIR := $(ROOT_DIR)/.build
|
||||||
TEST_DIR := $(BUILD_DIR)/test
|
TEST_DIR := $(BUILD_DIR)/test
|
||||||
ERROR_FILE := $(BUILD_DIR)/error_occured
|
ERROR_FILE := $(BUILD_DIR)/error_occurred
|
||||||
|
|
||||||
MAKEFILE_INCLUDED=yes
|
MAKEFILE_INCLUDED=yes
|
||||||
|
|
||||||
# Helper function to process the newt element of a space separated path
|
# Helper function to process the newt element of a space separated path
|
||||||
# It works a bit like the traditional functional head tail
|
# It works a bit like the traditional functional head tail
|
||||||
# so the CURRENT_PATH_ELEMENT will beome the new head
|
# so the CURRENT_PATH_ELEMENT will become the new head
|
||||||
# and the PATH_ELEMENTS are the rest that are still unprocessed
|
# and the PATH_ELEMENTS are the rest that are still unprocessed
|
||||||
define NEXT_PATH_ELEMENT
|
define NEXT_PATH_ELEMENT
|
||||||
$$(eval CURRENT_PATH_ELEMENT := $$(firstword $$(PATH_ELEMENTS)))
|
$$(eval CURRENT_PATH_ELEMENT := $$(firstword $$(PATH_ELEMENTS)))
|
||||||
|
@ -84,7 +84,7 @@ endif
|
||||||
# Only consider folders with makefiles, to prevent errors in case there are extra folders
|
# Only consider folders with makefiles, to prevent errors in case there are extra folders
|
||||||
KEYBOARDS := $(notdir $(patsubst %/Makefile,%,$(wildcard $(ROOT_DIR)/keyboards/*/Makefile)))
|
KEYBOARDS := $(notdir $(patsubst %/Makefile,%,$(wildcard $(ROOT_DIR)/keyboards/*/Makefile)))
|
||||||
|
|
||||||
#Compability with the old make variables, anything you specify directly on the command line
|
#Compatibility with the old make variables, anything you specify directly on the command line
|
||||||
# always overrides the detected folders
|
# always overrides the detected folders
|
||||||
ifdef keyboard
|
ifdef keyboard
|
||||||
KEYBOARD := $(keyboard)
|
KEYBOARD := $(keyboard)
|
||||||
|
@ -106,7 +106,7 @@ endif
|
||||||
#$(info Keyboards: $(KEYBOARDS))
|
#$(info Keyboards: $(KEYBOARDS))
|
||||||
|
|
||||||
|
|
||||||
# Set the default goal depening on where we are running make from
|
# Set the default goal depending on where we are running make from
|
||||||
# this handles the case where you run make without any arguments
|
# this handles the case where you run make without any arguments
|
||||||
.DEFAULT_GOAL := all
|
.DEFAULT_GOAL := all
|
||||||
ifneq ($(KEYMAP),)
|
ifneq ($(KEYMAP),)
|
||||||
|
@ -170,7 +170,7 @@ define TRY_TO_MATCH_RULE_FROM_LIST_HELPER3
|
||||||
endef
|
endef
|
||||||
|
|
||||||
# A recursive helper function for finding the longest match
|
# A recursive helper function for finding the longest match
|
||||||
# $1 The list to be checed
|
# $1 The list to be checked
|
||||||
# It works by always removing the currently matched item from the list
|
# It works by always removing the currently matched item from the list
|
||||||
# and call itself recursively, until a match is found
|
# and call itself recursively, until a match is found
|
||||||
define TRY_TO_MATCH_RULE_FROM_LIST_HELPER2
|
define TRY_TO_MATCH_RULE_FROM_LIST_HELPER2
|
||||||
|
@ -180,7 +180,7 @@ define TRY_TO_MATCH_RULE_FROM_LIST_HELPER2
|
||||||
$$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER3,$1))
|
$$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER3,$1))
|
||||||
# If a match is found in the current list, otherwise just return what we had before
|
# If a match is found in the current list, otherwise just return what we had before
|
||||||
ifeq ($$(RULE_FOUND),true)
|
ifeq ($$(RULE_FOUND),true)
|
||||||
# Save the best match so far and call itself recursivel
|
# Save the best match so far and call itself recursively
|
||||||
BEST_MATCH := $$(MATCHED_ITEM)
|
BEST_MATCH := $$(MATCHED_ITEM)
|
||||||
BEST_MATCH_RULE := $$(RULE)
|
BEST_MATCH_RULE := $$(RULE)
|
||||||
RULE_FOUND := false
|
RULE_FOUND := false
|
||||||
|
@ -337,7 +337,7 @@ define PARSE_SUBPROJECT
|
||||||
$$(eval $$(call PARSE_ALL_KEYMAPS))
|
$$(eval $$(call PARSE_ALL_KEYMAPS))
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
# As earlier mentione,d when allsb is specified, we call our self recursively
|
# As earlier mentioned when allsb is specified, we call our self recursively
|
||||||
# for all of the subprojects
|
# for all of the subprojects
|
||||||
$$(eval $$(call PARSE_ALL_IN_LIST,PARSE_SUBPROJECT,$(SUBPROJECTS)))
|
$$(eval $$(call PARSE_ALL_IN_LIST,PARSE_SUBPROJECT,$(SUBPROJECTS)))
|
||||||
endif
|
endif
|
||||||
|
@ -403,11 +403,11 @@ define BUILD
|
||||||
printf "$$(MAKE_MSG)\n\n"; \
|
printf "$$(MAKE_MSG)\n\n"; \
|
||||||
$$(MAKE_CMD) $$(MAKE_VARS) SILENT=false; \
|
$$(MAKE_CMD) $$(MAKE_VARS) SILENT=false; \
|
||||||
if [ $$$$? -gt 0 ]; \
|
if [ $$$$? -gt 0 ]; \
|
||||||
then error_occured=1; \
|
then error_occurred=1; \
|
||||||
fi;
|
fi;
|
||||||
endef
|
endef
|
||||||
|
|
||||||
# Just parse all the keymaps for a specifc keyboard
|
# Just parse all the keymaps for a specific keyboard
|
||||||
define PARSE_ALL_KEYMAPS
|
define PARSE_ALL_KEYMAPS
|
||||||
$$(eval $$(call PARSE_ALL_IN_LIST,PARSE_KEYMAP,$$(KEYMAPS)))
|
$$(eval $$(call PARSE_ALL_IN_LIST,PARSE_KEYMAP,$$(KEYMAPS)))
|
||||||
endef
|
endef
|
||||||
|
@ -428,7 +428,7 @@ define BUILD_TEST
|
||||||
printf "$$(TEST_MSG)\n"; \
|
printf "$$(TEST_MSG)\n"; \
|
||||||
$$(TEST_EXECUTABLE); \
|
$$(TEST_EXECUTABLE); \
|
||||||
if [ $$$$? -gt 0 ]; \
|
if [ $$$$? -gt 0 ]; \
|
||||||
then error_occured=1; \
|
then error_occurred=1; \
|
||||||
fi; \
|
fi; \
|
||||||
printf "\n";
|
printf "\n";
|
||||||
endif
|
endif
|
||||||
|
@ -448,7 +448,7 @@ endef
|
||||||
|
|
||||||
|
|
||||||
# Set the silent mode depending on if we are trying to compile multiple keyboards or not
|
# Set the silent mode depending on if we are trying to compile multiple keyboards or not
|
||||||
# By default it's on in that case, but it can be overriden by specifying silent=false
|
# By default it's on in that case, but it can be overridden by specifying silent=false
|
||||||
# from the command line
|
# from the command line
|
||||||
define SET_SILENT_MODE
|
define SET_SILENT_MODE
|
||||||
ifdef SUB_IS_SILENT
|
ifdef SUB_IS_SILENT
|
||||||
|
@ -465,16 +465,16 @@ include $(ROOT_DIR)/message.mk
|
||||||
# The empty line is important here, as it will force a new shell to be created for each command
|
# The empty line is important here, as it will force a new shell to be created for each command
|
||||||
# Otherwise the command line will become too long with a lot of keyboards and keymaps
|
# Otherwise the command line will become too long with a lot of keyboards and keymaps
|
||||||
define RUN_COMMAND
|
define RUN_COMMAND
|
||||||
+error_occured=0;\
|
+error_occurred=0;\
|
||||||
$(COMMAND_$(SILENT_MODE)_$(COMMAND))\
|
$(COMMAND_$(SILENT_MODE)_$(COMMAND))\
|
||||||
if [ $$error_occured -gt 0 ]; then echo $$error_occured > $(ERROR_FILE); fi;
|
if [ $$error_occurred -gt 0 ]; then echo $$error_occurred > $(ERROR_FILE); fi;
|
||||||
|
|
||||||
|
|
||||||
endef
|
endef
|
||||||
define RUN_TEST
|
define RUN_TEST
|
||||||
+error_occured=0;\
|
+error_occurred=0;\
|
||||||
$($(TEST)_COMMAND)\
|
$($(TEST)_COMMAND)\
|
||||||
if [ $$error_occured -gt 0 ]; then echo $$error_occured > $(ERROR_FILE); fi;
|
if [ $$error_occurred -gt 0 ]; then echo $$error_occurred > $(ERROR_FILE); fi;
|
||||||
|
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
@ -514,7 +514,7 @@ endif
|
||||||
.PHONY: all
|
.PHONY: all
|
||||||
all: all-keyboards test-all
|
all: all-keyboards test-all
|
||||||
|
|
||||||
# Define some shortcuts, mostly for compability with the old syntax
|
# Define some shortcuts, mostly for compatibility with the old syntax
|
||||||
.PHONY: all-keyboards
|
.PHONY: all-keyboards
|
||||||
all-keyboards: allkb-allsp-allkm
|
all-keyboards: allkb-allsp-allkm
|
||||||
|
|
||||||
|
|
|
@ -144,6 +144,11 @@ ifeq ($(strip $(MIDI_ENABLE)), yes)
|
||||||
SRC += $(QUANTUM_DIR)/process_keycode/process_midi.c
|
SRC += $(QUANTUM_DIR)/process_keycode/process_midi.c
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(COMBO_ENABLE)), yes)
|
||||||
|
OPT_DEFS += -DCOMBO_ENABLE
|
||||||
|
SRC += $(QUANTUM_DIR)/process_keycode/process_combo.c
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(strip $(VIRTSER_ENABLE)), yes)
|
ifeq ($(strip $(VIRTSER_ENABLE)), yes)
|
||||||
OPT_DEFS += -DVIRTSER_ENABLE
|
OPT_DEFS += -DVIRTSER_ENABLE
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||||
|
|
||||||
|
ifndef QUANTUM_DIR
|
||||||
|
include ../../../../Makefile
|
||||||
|
endif
|
|
@ -0,0 +1,12 @@
|
||||||
|
#ifndef CONFIG_USER_H
|
||||||
|
#define CONFIG_USER_H
|
||||||
|
|
||||||
|
#include "../../config.h"
|
||||||
|
|
||||||
|
/* using UK layout for space-cadet-shift */
|
||||||
|
#define LSPO_KEY KC_9
|
||||||
|
#define RSPC_KEY KC_0
|
||||||
|
|
||||||
|
#define LEADER_TIMEOUT 800 // leader key sequence timeout in millis
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,661 @@
|
||||||
|
#include "ergodox.h"
|
||||||
|
#include "debug.h"
|
||||||
|
#include "action_layer.h"
|
||||||
|
#include "version.h"
|
||||||
|
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
/* use UK keymap */
|
||||||
|
|
||||||
|
#define UK_HASH KC_NONUS_HASH
|
||||||
|
#define UK_BSLS KC_NONUS_BSLASH
|
||||||
|
#define UK_PIPE LSFT(UK_BSLS)
|
||||||
|
|
||||||
|
#define BASE 0 // default layer
|
||||||
|
#define SYMB 1 // symbols
|
||||||
|
#define NUMB 2 // numbers and hex
|
||||||
|
#define CRSR 3 // cursor keys
|
||||||
|
#define MOUS 4 // mouse keys
|
||||||
|
#define KEYW 5 // keyword macros
|
||||||
|
#define EMAC 6 // emacs
|
||||||
|
|
||||||
|
// my macros
|
||||||
|
#define UM_ECET M(0) // { }
|
||||||
|
#define UM_0x M(1)
|
||||||
|
#define UM_PUB M(2)
|
||||||
|
#define UM_PRO M(3)
|
||||||
|
#define UM_PRV M(4)
|
||||||
|
#define UM_CLS M(5)
|
||||||
|
#define UM_STR M(6)
|
||||||
|
#define UM_RET M(7)
|
||||||
|
#define UM_INC M(8)
|
||||||
|
#define UM_OBJ M(9)
|
||||||
|
#define UM_GITLOG M(10)
|
||||||
|
#define UM_GOODM M(11)
|
||||||
|
#define UM_NAMESP M(12)
|
||||||
|
#define UM_EMTR M(14) // emacs toggle read-only
|
||||||
|
#define UM_EMWR M(15) // emacs write buffer (save)
|
||||||
|
#define UM_EMUN M(16) // emacs undo
|
||||||
|
#define UM_EMRE M(17) // emacs redo
|
||||||
|
#define UM_EMPB M(18) // emacs previous buffer
|
||||||
|
#define UM_EMNB M(19) // emacs next buffer
|
||||||
|
#define UM_GOODN M(20)
|
||||||
|
#define UM_ECETS M(22) // { };
|
||||||
|
#define UM_TMPL M(23)
|
||||||
|
#define UM_TYPN M(24)
|
||||||
|
#define UM_CONT M(25)
|
||||||
|
#define UM_BREAK M(26)
|
||||||
|
#define UM_CONST M(27)
|
||||||
|
#define UM_SMILY M(28)
|
||||||
|
#define UM_SADF M(29)
|
||||||
|
#define UM_SCARF M(30)
|
||||||
|
#define UM_DECAF M(31)
|
||||||
|
#define UM_OPER M(32)
|
||||||
|
#define UM_NULP M(33)
|
||||||
|
#define UM_EXTR M(34)
|
||||||
|
#define UM_VIRT M(35)
|
||||||
|
#define UM_EMFB M(36) // emacs font bigger
|
||||||
|
#define UM_EMFS M(37) // emacs font smaller
|
||||||
|
#define UM_VOLAT M(38)
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
/* Keymap 0: Base layer
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | ESC | 1 | 2 | 3 | 4 | 5 | SfLt | | SfRt | 6 | 7 | 8 | 9 | 0 | BkSp |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | Tab | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | Del |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | Caps/L2| A | S | D | F | G |------| |------| H | J | K | L | ; |Enter/L2|
|
||||||
|
* |--------+------+------+------+------+------| L6 | | L6 |------+------+------+------+------+--------|
|
||||||
|
* | LSft/( | Z | X | C | V/L3 | B/L4 | | | | N/L4 | M/L3 | , | . | / | RSft/) |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* |Ctrl/[| Alt/]| # | Left |Right | | Up | Down | - | Alt/[|Ctrl/]|
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | L2 | lead | | lead | Ins |
|
||||||
|
* ,------|------|------| |------+------+------.
|
||||||
|
* | Space| BkSp | Home | | PgUp | Enter|Space |
|
||||||
|
* | / | / |------| |------| / | / |
|
||||||
|
* | Ctrl | Alt |End/L5| |PDn/L5| Alt | Ctrl |
|
||||||
|
* `--------------------' `--------------------'
|
||||||
|
*/
|
||||||
|
[BASE] = KEYMAP( // layer 0 : default
|
||||||
|
// left hand
|
||||||
|
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, LSFT(KC_LEFT),
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, MO(SYMB),
|
||||||
|
LT(NUMB, KC_CAPS), KC_A, KC_S, KC_D, KC_F, KC_G,
|
||||||
|
KC_LSPO, KC_Z, KC_X, KC_C, LT(CRSR, KC_V), LT(MOUS, KC_B), MO(EMAC),
|
||||||
|
CTL_T(KC_LBRC), ALT_T(KC_RBRC), UK_HASH, KC_LEFT, KC_RGHT,
|
||||||
|
TG(NUMB), KC_LEAD,
|
||||||
|
KC_HOME,
|
||||||
|
CTL_T(KC_SPC), ALT_T(KC_BSPC), LT(KEYW, KC_END),
|
||||||
|
// right hand
|
||||||
|
LSFT(KC_RGHT), KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
|
||||||
|
MO(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DELT,
|
||||||
|
KC_H, KC_J, KC_K, KC_L, KC_SCLN, LT(NUMB, KC_ENT),
|
||||||
|
MO(EMAC), LT(MOUS, KC_N), LT(CRSR, KC_M), KC_COMM, KC_DOT, KC_SLSH, KC_RSPC,
|
||||||
|
KC_UP, KC_DOWN, KC_MINS, ALT_T(KC_LBRC), CTL_T(KC_RBRC),
|
||||||
|
KC_LEAD, KC_INS,
|
||||||
|
KC_PGUP,
|
||||||
|
LT(KEYW, KC_PGDN), ALT_T(KC_ENT), CTL_T(KC_SPC)
|
||||||
|
),
|
||||||
|
/* Keymap 1: Symbol Layer with F keys
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | ## | F1 | F2 | F3 | F4 | F5 | ## | | ## | F6 | F7 | F8 | F9 | F10 | F11 |
|
||||||
|
* |--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
|
||||||
|
* | ## | ! | " | £ | $ | % | ## | | ## | - | + | = | @ | ~ | F12 |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | ## | ^ | & | * | _ | # |------| |------| { | } | ; | ' | # | ## |
|
||||||
|
* |--------+------+------+------+------+------| ## | | ## |------+------+------+------+------+--------|
|
||||||
|
* | ## | \ | | | ` | - | / | | | | [ | ] | < | > | ? | ## |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* | ## | ## | ## | ## | ## | | ## | ## | ## | ## | ## |
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | ## | ## | | ## | ## |
|
||||||
|
* ,------|------|------| |------+------+------.
|
||||||
|
* | | | ## | | ## | | |
|
||||||
|
* | ## | ## |------| |------| ## | ## |
|
||||||
|
* | | | ## | | ## | | |
|
||||||
|
* `--------------------' `--------------------'
|
||||||
|
*/
|
||||||
|
[SYMB] = KEYMAP(
|
||||||
|
// left hand
|
||||||
|
KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
|
||||||
|
KC_TRNS, KC_EXLM, LSFT(KC_2), LSFT(KC_3), LSFT(KC_4), LSFT(KC_5), KC_TRNS,
|
||||||
|
KC_TRNS, LSFT(KC_6), LSFT(KC_7), LSFT(KC_8), LSFT(KC_MINS), UK_HASH,
|
||||||
|
KC_TRNS, UK_BSLS, UK_PIPE, KC_GRV, KC_MINS, KC_SLSH, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
// right hand
|
||||||
|
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
|
||||||
|
KC_TRNS, KC_MINS, KC_PLUS, KC_EQL, LSFT(KC_QUOT), LSFT(UK_HASH), KC_F12,
|
||||||
|
KC_LCBR, KC_RCBR, KC_SCLN, KC_QUOT, UK_HASH, KC_TRNS,
|
||||||
|
KC_TRNS, KC_LBRC, KC_RBRC, LSFT(KC_COMM), LSFT(KC_DOT), LSFT(KC_SLSH), KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS
|
||||||
|
),
|
||||||
|
/* Keymap 2: Numerics and hex
|
||||||
|
*
|
||||||
|
* ,---------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | ## | A | B | C | D | E | F | | A | B | C | D | E | F | ## |
|
||||||
|
* |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
|
||||||
|
* | ## | * | 7 | 8 | 9 | * | 0x | | 0x | * | 7 | 8 | 9 | * | ## |
|
||||||
|
* |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | ## | / | 4 | 5 | 6 | / |------| |------| / | 4 | 5 | 6 | / | ## |
|
||||||
|
* |---------+------+------+------+------+------| ## | | ## |------+------+------+------+------+--------|
|
||||||
|
* | ## | - | 1 | 2 | 3 | - | | | | - | 1 | 2 | 3 | - | ## |
|
||||||
|
* `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* | = | + | 0 | , | . | | 0 | , | . | + | = |
|
||||||
|
* `-----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | ## | ## | | ## | ## |
|
||||||
|
* ,------|------|------| |------+------+------.
|
||||||
|
* | | | ## | | ## | | |
|
||||||
|
* | ## | ## |------| |------| ## | ## |
|
||||||
|
* | | | ## | | ## | | |
|
||||||
|
* `--------------------' `--------------------'
|
||||||
|
*/
|
||||||
|
[NUMB] = KEYMAP(
|
||||||
|
// left hand
|
||||||
|
KC_TRNS, KC_A, KC_B, KC_C, KC_D, KC_E, KC_F,
|
||||||
|
KC_TRNS, KC_ASTR, KC_7, KC_8, KC_9, KC_ASTR, UM_0x,
|
||||||
|
KC_TRNS, KC_SLSH, KC_4, KC_5, KC_6, KC_SLSH,
|
||||||
|
KC_TRNS, KC_MINS, KC_1, KC_2, KC_3, KC_MINS, KC_TRNS,
|
||||||
|
KC_EQL, KC_PLUS, KC_0, KC_COMM, KC_DOT,
|
||||||
|
KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
// right hand
|
||||||
|
KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_TRNS,
|
||||||
|
UM_0x, KC_ASTR, KC_7, KC_8, KC_9, KC_ASTR, KC_TRNS,
|
||||||
|
KC_SLSH, KC_4, KC_5, KC_6, KC_SLSH, KC_TRNS,
|
||||||
|
KC_TRNS, KC_MINS, KC_1, KC_2, KC_3, KC_MINS, KC_TRNS,
|
||||||
|
KC_0, KC_COMM, KC_DOT, KC_PLUS, KC_EQL,
|
||||||
|
KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS
|
||||||
|
),
|
||||||
|
/* Keymap 3: Cursor movement
|
||||||
|
*
|
||||||
|
* ,---------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | | | | | | | | | | | | | | | |
|
||||||
|
* |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
|
||||||
|
* | | Home | | Up | | PgUp | | | | PgUp | | Up | | Home | |
|
||||||
|
* |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | End | Left | Down | Right| PgDn |------| |------| PgDn | Left | Down | Right| End | |
|
||||||
|
* |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | ## | Up | | Down | ## | | | | | | ## | Down | | Up | ## |
|
||||||
|
* `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* | Left | Down | Right| | | | | | Left | Down | Right|
|
||||||
|
* `-----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | | | | | |
|
||||||
|
* ,------|------|------| |------+------+------.
|
||||||
|
* | | | | | | | |
|
||||||
|
* | ## | ## |------| |------| ## | ## |
|
||||||
|
* | | | | | | | |
|
||||||
|
* `--------------------' `--------------------'
|
||||||
|
*/
|
||||||
|
[CRSR] = KEYMAP(
|
||||||
|
// left hand
|
||||||
|
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||||
|
KC_NO, KC_HOME, KC_NO, KC_UP, KC_NO, KC_PGUP, KC_NO,
|
||||||
|
KC_NO, KC_END, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN,
|
||||||
|
KC_TRNS, KC_UP, KC_NO, KC_DOWN, KC_TRNS, KC_NO, KC_NO,
|
||||||
|
KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO,
|
||||||
|
KC_NO, KC_NO,
|
||||||
|
KC_NO,
|
||||||
|
KC_TRNS, KC_TRNS, KC_NO,
|
||||||
|
// right hand
|
||||||
|
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||||
|
KC_NO, KC_PGUP, KC_NO, KC_UP, KC_NO, KC_HOME, KC_NO,
|
||||||
|
KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_NO,
|
||||||
|
KC_NO, KC_NO, KC_TRNS, KC_DOWN, KC_NO, KC_UP, KC_TRNS,
|
||||||
|
KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT,
|
||||||
|
KC_NO, KC_NO,
|
||||||
|
KC_NO,
|
||||||
|
KC_NO, KC_TRNS, KC_TRNS
|
||||||
|
),
|
||||||
|
/* Keymap 4: Media and mouse keys
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | | | | | | | | | | | | | | | |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | | | Lclk | MsUp | Rclk | | | | | | Lclk | MsUp | Rclk | | |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | |MsLeft|MsDown|MsRght| |------| |------| |MsLeft|MsDown|MsRght| | |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | Lclk | MsUp | Rclk |MsDown| | ## | | | | ## | |MsDown| Lclk | MsUp | Rclk |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* |MsLeft|MsDown|MsRight | | | | |MsLeft|MsDown|MsRght|
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | | | | | |
|
||||||
|
* ,------|------|------| |------+------+------.
|
||||||
|
* | | | | | | | |
|
||||||
|
* | | |------| |------| | |
|
||||||
|
* | | | | | | | |
|
||||||
|
* `--------------------' `--------------------'
|
||||||
|
*/
|
||||||
|
[MOUS] = KEYMAP(
|
||||||
|
// left hand
|
||||||
|
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||||
|
KC_NO, KC_NO, KC_BTN1, KC_MS_U, KC_BTN2, KC_NO, KC_NO,
|
||||||
|
KC_NO, KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_NO,
|
||||||
|
KC_BTN1, KC_MS_U, KC_BTN2, KC_MS_D, KC_NO, KC_TRNS, KC_NO,
|
||||||
|
KC_MS_L, KC_MS_D, KC_MS_R, KC_NO, KC_NO,
|
||||||
|
KC_NO, KC_NO,
|
||||||
|
KC_NO,
|
||||||
|
KC_NO, KC_NO, KC_NO,
|
||||||
|
// right hand
|
||||||
|
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||||
|
KC_NO, KC_NO, KC_BTN1, KC_MS_U, KC_BTN2, KC_NO, KC_NO,
|
||||||
|
KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_NO, KC_NO,
|
||||||
|
KC_NO, KC_TRNS, KC_NO, KC_MS_D, KC_BTN1, KC_MS_U, KC_BTN2,
|
||||||
|
KC_NO, KC_NO, KC_MS_L, KC_MS_D, KC_MS_R,
|
||||||
|
KC_NO, KC_NO,
|
||||||
|
KC_NO,
|
||||||
|
KC_NO, KC_NO, KC_NO
|
||||||
|
),
|
||||||
|
/* Keymap 5: Keywords
|
||||||
|
*
|
||||||
|
* ,---------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | | | | scarf| sadf | smily| | | | decaf| | | | | |
|
||||||
|
* |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
|
||||||
|
* | | const| volat| oper | ret | tmpl | | | | typen| cont | prv | pro | pub | |
|
||||||
|
* |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | | str | obj | | gitl |------| |------| | | | nulp | | |
|
||||||
|
* |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | | extr | cls | virt | break| | | |namesp| goodm| goodn| | | |
|
||||||
|
* `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* | | | inc | | | | | | | | |
|
||||||
|
* `-----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | | | | ecet | ecets|
|
||||||
|
* ,------|------|------| |------+------+------.
|
||||||
|
* | | | | | | | |
|
||||||
|
* | | |------| |------| | |
|
||||||
|
* | | | ## | | ## | | |
|
||||||
|
* `--------------------' `--------------------'
|
||||||
|
*/
|
||||||
|
[KEYW] = KEYMAP(
|
||||||
|
// left hand
|
||||||
|
KC_NO, KC_NO, KC_NO, UM_SCARF, UM_SADF, UM_SMILY, KC_NO,
|
||||||
|
KC_NO, UM_CONST, UM_VOLAT, UM_OPER, UM_RET, UM_TMPL, KC_NO,
|
||||||
|
KC_NO, KC_NO, UM_STR, UM_OBJ, KC_NO, UM_GITLOG,
|
||||||
|
KC_NO, KC_NO, UM_EXTR, UM_CLS, UM_VIRT, UM_BREAK, KC_NO,
|
||||||
|
KC_NO, KC_NO, UM_INC, KC_NO, KC_NO,
|
||||||
|
KC_NO, KC_NO,
|
||||||
|
KC_NO,
|
||||||
|
KC_NO, KC_NO, KC_TRNS,
|
||||||
|
// right hand
|
||||||
|
KC_NO, UM_DECAF, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||||
|
KC_NO, UM_TYPN, UM_CONT, UM_PRV, UM_PRO, UM_PUB, KC_NO,
|
||||||
|
KC_NO, KC_NO, KC_NO, UM_NULP, KC_NO, KC_NO,
|
||||||
|
KC_NO, UM_NAMESP, UM_GOODM, UM_GOODN, KC_NO, KC_NO, KC_NO,
|
||||||
|
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||||
|
UM_ECET, UM_ECETS,
|
||||||
|
KC_NO,
|
||||||
|
KC_TRNS, KC_NO, KC_NO
|
||||||
|
),
|
||||||
|
/* Keymap 6: emacs
|
||||||
|
*
|
||||||
|
* ,---------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | | | | | | | empb | | emnb | emfs | emfb | | | | |
|
||||||
|
* |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
|
||||||
|
* | | emtr | | | | | | | | emun | emre | w-up | | | |
|
||||||
|
* |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | | emwr | | | |------| |------| |w-left|w-down|w-rght| | |
|
||||||
|
* |---------+------+------+------+------+------| ## | | ## |------+------+------+------+------+--------|
|
||||||
|
* | | | | | | | | | | | |w-down| | | |
|
||||||
|
* `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* | | | | | | | | | | | |
|
||||||
|
* `-----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | | | | | |
|
||||||
|
* ,------|------|------| |------+------+------.
|
||||||
|
* | | | | | | | |
|
||||||
|
* | | |------| |------| | |
|
||||||
|
* | | | | | | | |
|
||||||
|
* `--------------------' `--------------------'
|
||||||
|
*/
|
||||||
|
[EMAC] = KEYMAP(
|
||||||
|
// left hand
|
||||||
|
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, UM_EMPB,
|
||||||
|
KC_NO, UM_EMTR, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||||
|
KC_NO, KC_NO, UM_EMWR, KC_NO, KC_NO, KC_NO,
|
||||||
|
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
|
||||||
|
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||||
|
KC_NO, KC_NO,
|
||||||
|
KC_NO,
|
||||||
|
KC_NO, KC_NO, KC_NO,
|
||||||
|
// right hand
|
||||||
|
UM_EMNB, UM_EMFS, UM_EMFB, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||||
|
KC_NO, UM_EMUN, UM_EMRE, LSFT(KC_UP), KC_NO, KC_NO, KC_NO,
|
||||||
|
KC_NO, LSFT(KC_LEFT), LSFT(KC_DOWN), LSFT(KC_RGHT), KC_NO, KC_NO,
|
||||||
|
KC_TRNS, KC_NO, KC_NO, LSFT(KC_DOWN), KC_NO, KC_NO, KC_NO,
|
||||||
|
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||||
|
KC_NO, KC_NO,
|
||||||
|
KC_NO,
|
||||||
|
KC_NO, KC_NO, KC_NO
|
||||||
|
),
|
||||||
|
};
|
||||||
|
|
||||||
|
enum next_key_down_up {
|
||||||
|
NK_DOWN_UP,
|
||||||
|
NK_DOWN,
|
||||||
|
NK_UP // a bit of a hack, this works as long as NK_UP < KC_A
|
||||||
|
};
|
||||||
|
|
||||||
|
void send_keystrokes(uint8_t key, ...)
|
||||||
|
{
|
||||||
|
va_list vl;
|
||||||
|
va_start(vl, key);
|
||||||
|
enum next_key_down_up nkdu = NK_DOWN_UP;
|
||||||
|
while (key != KC_NO) {
|
||||||
|
if (key < KC_A) {
|
||||||
|
nkdu = key;
|
||||||
|
} else {
|
||||||
|
switch (nkdu) {
|
||||||
|
case NK_DOWN_UP:
|
||||||
|
register_code(key);
|
||||||
|
case NK_UP:
|
||||||
|
unregister_code(key);
|
||||||
|
break;
|
||||||
|
case NK_DOWN:
|
||||||
|
register_code(key);
|
||||||
|
}
|
||||||
|
nkdu = NK_DOWN_UP;
|
||||||
|
}
|
||||||
|
key = va_arg(vl, int);
|
||||||
|
}
|
||||||
|
va_end(vl);
|
||||||
|
}
|
||||||
|
|
||||||
|
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) {
|
||||||
|
return MACRO(T(ENT), D(LSFT), T(LBRC), U(LSFT), T(ENT),
|
||||||
|
D(LSFT), T(RBRC), U(LSFT), T(UP),
|
||||||
|
T(TAB), END);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
return MACRO(T(0), T(X), END);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING("public");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING("protected");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING("private");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 5: // class
|
||||||
|
if (record->event.pressed) {
|
||||||
|
return MACRO(T(C), T(L), T(A), T(S), T(S), T(ENT),
|
||||||
|
D(LSFT), T(LBRC), U(LSFT), T(ENT),
|
||||||
|
T(P), T(U), T(B), T(L), T(I), T(C),
|
||||||
|
D(LSFT), T(SCLN), U(LSFT), T(ENT), T(ENT),
|
||||||
|
T(P), T(R), T(I), T(V), T(A), T(T), T(E),
|
||||||
|
D(LSFT), T(SCLN), U(LSFT), T(ENT),
|
||||||
|
D(LSFT), T(RBRC), U(LSFT), T(SCLN), T(ENT),
|
||||||
|
T(UP), T(UP), T(UP), T(UP), T(UP), T(UP), T(UP),
|
||||||
|
T(END), T(SPC), END);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 6: // struct
|
||||||
|
if (record->event.pressed) {
|
||||||
|
return MACRO(T(S), T(T), T(R), T(U), T(C), T(T), T(ENT),
|
||||||
|
D(LSFT), T(LBRC), U(LSFT), T(ENT),
|
||||||
|
D(LSFT), T(RBRC), U(LSFT), T(SCLN), T(ENT),
|
||||||
|
T(UP), T(UP), T(UP), T(UP),
|
||||||
|
T(END), T(SPC), END);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING("return");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 8: // #include
|
||||||
|
if (record->event.pressed) {
|
||||||
|
return MACRO(T(NONUS_HASH), T(I), T(N), T(C), T(L), T(U), T(D), T(E), END);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 9:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING("objdump -CT -x -d");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 10:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING("git log --oneline --graph --decorate=short");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 11:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING("good morning");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 12:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING("namespace");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 14: // emacs toggle read-only
|
||||||
|
if (record->event.pressed) {
|
||||||
|
return MACRO(D(LCTL), T(X), T(Q), U(LCTL), END);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 15: // emacs write buffer
|
||||||
|
if (record->event.pressed) {
|
||||||
|
return MACRO(D(LCTL), T(X), T(S), U(LCTL), END);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 16: // emacs undo
|
||||||
|
if (record->event.pressed) {
|
||||||
|
return MACRO(D(LCTL), D(LSFT), T(MINS), U(LSFT), U(LCTL), END);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 17: // emacs redo
|
||||||
|
if (record->event.pressed) {
|
||||||
|
return MACRO(D(LALT), D(LSFT), T(MINS), U(LSFT), U(LALT), END);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 18: // emacs previous buffer
|
||||||
|
if (record->event.pressed) {
|
||||||
|
return MACRO(D(LCTL), T(X), U(LCTL), T(LEFT), END);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 19: // emacs next buffer
|
||||||
|
if (record->event.pressed) {
|
||||||
|
return MACRO(D(LCTL), T(X), U(LCTL), T(RGHT), END);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 20:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING("good night");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 22: // { };
|
||||||
|
if (record->event.pressed) {
|
||||||
|
return MACRO(T(ENT), D(LSFT), T(LBRC), U(LSFT), T(ENT),
|
||||||
|
D(LSFT), T(RBRC), U(LSFT), T(SCLN), T(UP),
|
||||||
|
T(TAB), END);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 23:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING("template");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 24:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING("typename");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 25:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING("continue");
|
||||||
|
return MACRO(T(SCLN), END);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 26:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING("break");
|
||||||
|
return MACRO(T(SCLN), END);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 27:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING("const");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 28:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING(":-)");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 29:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING(":-(");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 30: // dazed
|
||||||
|
if (record->event.pressed) {
|
||||||
|
send_keystrokes(NK_DOWN, KC_LSFT, KC_8, KC_MINS, KC_8, NK_UP, KC_LSFT, KC_NO);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 31: // decaf
|
||||||
|
if (record->event.pressed) {
|
||||||
|
send_keystrokes(NK_DOWN, KC_LSFT, KC_C, KC_9, KC_MINS, KC_0, NK_UP, KC_LSFT, KC_NO);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 32:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING("operator");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 33:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING("nullptr");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 34:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING("extern");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 35:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING("virtual");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 36: // emacs font smaller
|
||||||
|
if (record->event.pressed) {
|
||||||
|
return MACRO(D(LCTL), T(X), T(EQL), U(LCTL), END);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 37: // emacs font bigger
|
||||||
|
if (record->event.pressed) {
|
||||||
|
return MACRO(D(LCTL), T(X), T(MINS), U(LCTL), END);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 38:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING("volatile");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return MACRO_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
LEADER_EXTERNS();
|
||||||
|
|
||||||
|
// Runs constantly in the background, in a loop.
|
||||||
|
void matrix_scan_user(void) {
|
||||||
|
|
||||||
|
LEADER_DICTIONARY() {
|
||||||
|
leading = false;
|
||||||
|
leader_end();
|
||||||
|
|
||||||
|
SEQ_TWO_KEYS(KC_G, KC_A) {
|
||||||
|
SEND_STRING("git add .");
|
||||||
|
}
|
||||||
|
SEQ_TWO_KEYS(KC_G, KC_D) {
|
||||||
|
SEND_STRING("git diff");
|
||||||
|
}
|
||||||
|
SEQ_THREE_KEYS(KC_G, KC_D, KC_S) {
|
||||||
|
SEND_STRING("git diff --staged");
|
||||||
|
}
|
||||||
|
SEQ_TWO_KEYS(KC_G, KC_L) {
|
||||||
|
SEND_STRING("git log");
|
||||||
|
}
|
||||||
|
SEQ_THREE_KEYS(KC_G, KC_L, KC_O) {
|
||||||
|
SEND_STRING("git log --oneline");
|
||||||
|
}
|
||||||
|
SEQ_TWO_KEYS(KC_G, KC_F) {
|
||||||
|
SEND_STRING("git fetch");
|
||||||
|
}
|
||||||
|
SEQ_TWO_KEYS(KC_G, KC_O) {
|
||||||
|
SEND_STRING("git checkout");
|
||||||
|
}
|
||||||
|
SEQ_TWO_KEYS(KC_G, KC_P) {
|
||||||
|
SEND_STRING("git pull");
|
||||||
|
}
|
||||||
|
SEQ_TWO_KEYS(KC_G, KC_S) {
|
||||||
|
SEND_STRING("git status");
|
||||||
|
}
|
||||||
|
SEQ_TWO_KEYS(KC_G, KC_C) {
|
||||||
|
SEND_STRING("git commit -m ''");
|
||||||
|
send_keystrokes(KC_LEFT, KC_NO);
|
||||||
|
}
|
||||||
|
SEQ_THREE_KEYS(KC_G, KC_C, KC_A) {
|
||||||
|
SEND_STRING("git commit --amend");
|
||||||
|
}
|
||||||
|
|
||||||
|
SEQ_TWO_KEYS(KC_C, KC_C) {
|
||||||
|
SEND_STRING("const_cast<>");
|
||||||
|
send_keystrokes(KC_LEFT, KC_NO);
|
||||||
|
}
|
||||||
|
SEQ_TWO_KEYS(KC_C, KC_D) {
|
||||||
|
SEND_STRING("dynamic_cast<>");
|
||||||
|
send_keystrokes(KC_LEFT, KC_NO);
|
||||||
|
}
|
||||||
|
SEQ_TWO_KEYS(KC_C, KC_R) {
|
||||||
|
SEND_STRING("reinterpret_cast<>");
|
||||||
|
send_keystrokes(KC_LEFT, KC_NO);
|
||||||
|
}
|
||||||
|
SEQ_TWO_KEYS(KC_C, KC_S) {
|
||||||
|
SEND_STRING("static_cast<>");
|
||||||
|
send_keystrokes(KC_LEFT, KC_NO);
|
||||||
|
}
|
||||||
|
|
||||||
|
SEQ_ONE_KEY(KC_SLSH) {
|
||||||
|
send_keystrokes(KC_SLSH, NK_DOWN, KC_LSFT, KC_8, KC_8, NK_UP, KC_LSFT, KC_ENT,
|
||||||
|
NK_DOWN, KC_LSFT, KC_8, NK_UP, KC_LSFT, KC_ENT,
|
||||||
|
NK_DOWN, KC_LSFT, KC_8, NK_UP, KC_LSFT, KC_SLSH, KC_UP, KC_END, KC_SPC,
|
||||||
|
KC_NO);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,188 @@
|
||||||
|
# ErgoDox EZ Configuration for typing like a boss.
|
||||||
|
|
||||||
|
This layout has 7 layers:
|
||||||
|
0. Base layers
|
||||||
|
1. Symbols and F-keys
|
||||||
|
2. Number pad (with hexadecimal)
|
||||||
|
3. Cursor keys
|
||||||
|
4. Mouse movement and clicks
|
||||||
|
5. Keyword macros
|
||||||
|
6. Emacs
|
||||||
|
|
||||||
|
There are also some leader keys defined for frequently used commands (git etc).
|
||||||
|
|
||||||
|
## The layers
|
||||||
|
|
||||||
|
Double hashes (`##`) indicate transparent keys (`KC_TRNS`) and blanks indicate no key (`KC_NO`).
|
||||||
|
|
||||||
|
### 0. Base layer
|
||||||
|
|
||||||
|
```
|
||||||
|
,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
| ESC | 1 | 2 | 3 | 4 | 5 | SfLt | | SfRt | 6 | 7 | 8 | 9 | 0 | BkSp |
|
||||||
|
|--------|------|------|------|------|-------------| |------|------|------|------|------|------|--------|
|
||||||
|
| Tab | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | Del |
|
||||||
|
|--------|------|------|------|------|------| | | |------|------|------|------|------|--------|
|
||||||
|
| Caps/L2| A | S | D | F | G |------| |------| H | J | K | L | ; |Enter/L2|
|
||||||
|
|--------|------|------|------|------|------| L6 | | L6 |------|------|------|------|------|--------|
|
||||||
|
| LSft/( | Z | X | C | V/L3 | B/L4 | | | | N/L4 | M/L3 | , | . | / | RSft/) |
|
||||||
|
`--------|------|------|------|------|-------------' `-------------|------|------|------|------|--------'
|
||||||
|
|Ctrl/[| Alt/]| # | Left |Right | | Up | Down | - | Alt/[|Ctrl/]|
|
||||||
|
`----------------------------------' `----------------------------------'
|
||||||
|
,-------------. ,-------------.
|
||||||
|
| L2 | lead | | lead | Ins |
|
||||||
|
,------|------|------| |------|------|------.
|
||||||
|
| Space| BkSp | Home | | PgUp | Enter|Space |
|
||||||
|
| / | / |------| |------| / | / |
|
||||||
|
| Ctrl | Alt |End/L5| |PDn/L5| Alt | Ctrl |
|
||||||
|
`--------------------' `--------------------'
|
||||||
|
```
|
||||||
|
|
||||||
|
Space Cadet shift is enabled. Ctrl and Alt doubles up as normal keys when tapped.
|
||||||
|
SfLt and SfRt sends Shift + left and Shift + Right respectively - for use with emacs with `windmove-default-keybindings`.
|
||||||
|
Caps and Enter may be held down to activate layer 2 (hexadecimal number pad).
|
||||||
|
Please see `matrix_scan_user` function in `keymap.c` for list of commands available via `lead` key.
|
||||||
|
|
||||||
|
### 1. Symbols and F-keys
|
||||||
|
|
||||||
|
```
|
||||||
|
,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
| ## | F1 | F2 | F3 | F4 | F5 | ## | | ## | F6 | F7 | F8 | F9 | F10 | F11 |
|
||||||
|
|--------|------|------|------|------|------|------| |------|------|------|------|------|------|--------|
|
||||||
|
| ## | ! | " | £ | $ | % | ## | | ## | - | + | = | @ | ~ | F12 |
|
||||||
|
|--------|------|------|------|------|------| | | |------|------|------|------|------|--------|
|
||||||
|
| ## | ^ | & | * | _ | # |------| |------| { | } | ; | ' | # | ## |
|
||||||
|
|--------|------|------|------|------|------| ## | | ## |------|------|------|------|------|--------|
|
||||||
|
| ## | \ | | | ` | - | / | | | | [ | ] | < | > | ? | ## |
|
||||||
|
`--------|------|------|------|------|-------------' `-------------|------|------|------|------|--------'
|
||||||
|
| ## | ## | ## | ## | ## | | ## | ## | ## | ## | ## |
|
||||||
|
`----------------------------------' `----------------------------------'
|
||||||
|
,-------------. ,-------------.
|
||||||
|
| ## | ## | | ## | ## |
|
||||||
|
,------|------|------| |------|------|------.
|
||||||
|
| | | ## | | ## | | |
|
||||||
|
| ## | ## |------| |------| ## | ## |
|
||||||
|
| | | ## | | ## | | |
|
||||||
|
`--------------------' `--------------------'
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Number pad (with hexadecimal)
|
||||||
|
|
||||||
|
```
|
||||||
|
,---------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
| ## | A | B | C | D | E | F | | A | B | C | D | E | F | ## |
|
||||||
|
|---------|------|------|------|------|------|------| |------|------|------|------|------|------|--------|
|
||||||
|
| ## | * | 7 | 8 | 9 | * | 0x | | 0x | * | 7 | 8 | 9 | * | ## |
|
||||||
|
|---------|------|------|------|------|------| | | |------|------|------|------|------|--------|
|
||||||
|
| ## | / | 4 | 5 | 6 | / |------| |------| / | 4 | 5 | 6 | / | ## |
|
||||||
|
|---------|------|------|------|------|------| ## | | ## |------|------|------|------|------|--------|
|
||||||
|
| ## | - | 1 | 2 | 3 | - | | | | - | 1 | 2 | 3 | - | ## |
|
||||||
|
`---------|------|------|------|------|-------------' `-------------|------|------|------|------|--------'
|
||||||
|
| = | + | 0 | , | . | | 0 | , | . | + | = |
|
||||||
|
`-----------------------------------' `----------------------------------'
|
||||||
|
,-------------. ,-------------.
|
||||||
|
| ## | ## | | ## | ## |
|
||||||
|
,------|------|------| |------|------|------.
|
||||||
|
| | | ## | | ## | | |
|
||||||
|
| ## | ## |------| |------| ## | ## |
|
||||||
|
| | | ## | | ## | | |
|
||||||
|
`--------------------' `--------------------'
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Cursor keys
|
||||||
|
|
||||||
|
```
|
||||||
|
,---------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
| | | | | | | | | | | | | | | |
|
||||||
|
|---------|------|------|------|------|------|------| |------|------|------|------|------|------|--------|
|
||||||
|
| | Home | | Up | | PgUp | | | | PgUp | | Up | | Home | |
|
||||||
|
|---------|------|------|------|------|------| | | |------|------|------|------|------|--------|
|
||||||
|
| | End | Left | Down | Right| PgDn |------| |------| PgDn | Left | Down | Right| End | |
|
||||||
|
|---------|------|------|------|------|------| | | |------|------|------|------|------|--------|
|
||||||
|
| ## | Up | | Down | ## | | | | | | ## | Down | | Up | ## |
|
||||||
|
`---------|------|------|------|------|-------------' `-------------|------|------|------|------|--------'
|
||||||
|
| Left | Down | Right| | | | | | Left | Down | Right|
|
||||||
|
`-----------------------------------' `----------------------------------'
|
||||||
|
,-------------. ,-------------.
|
||||||
|
| | | | | |
|
||||||
|
,------|------|------| |------|------|------.
|
||||||
|
| | | | | | | |
|
||||||
|
| ## | ## |------| |------| ## | ## |
|
||||||
|
| | | | | | | |
|
||||||
|
`--------------------' `--------------------'
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. Mouse movement and clicks
|
||||||
|
|
||||||
|
```
|
||||||
|
,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
| | | | | | | | | | | | | | | |
|
||||||
|
|--------|------|------|------|------|-------------| |------|------|------|------|------|------|--------|
|
||||||
|
| | | Lclk | MsUp | Rclk | | | | | | Lclk | MsUp | Rclk | | |
|
||||||
|
|--------|------|------|------|------|------| | | |------|------|------|------|------|--------|
|
||||||
|
| | |MsLeft|MsDown|MsRght| |------| |------| |MsLeft|MsDown|MsRght| | |
|
||||||
|
|--------|------|------|------|------|------| | | |------|------|------|------|------|--------|
|
||||||
|
| Lclk | MsUp | Rclk |MsDown| | ## | | | | ## | |MsDown| Lclk | MsUp | Rclk |
|
||||||
|
`--------|------|------|------|------|-------------' `-------------|------|------|------|------|--------'
|
||||||
|
|MsLeft|MsDown|MsRight | | | | |MsLeft|MsDown|MsRght|
|
||||||
|
`----------------------------------' `----------------------------------'
|
||||||
|
,-------------. ,-------------.
|
||||||
|
| | | | | |
|
||||||
|
,------|------|------| |------|------|------.
|
||||||
|
| | | | | | | |
|
||||||
|
| | |------| |------| | |
|
||||||
|
| | | | | | | |
|
||||||
|
`--------------------' `--------------------'
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. Keyword macros
|
||||||
|
|
||||||
|
```
|
||||||
|
,---------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
| | | | scarf| sadf | smily| | | | decaf| | | | | |
|
||||||
|
|---------|------|------|------|------|------|------| |------|------|------|------|------|------|--------|
|
||||||
|
| | const| volat| oper | ret | tmpl | | | | typen| cont | prv | pro | pub | |
|
||||||
|
|---------|------|------|------|------|------| | | |------|------|------|------|------|--------|
|
||||||
|
| | | str | obj | | gitl |------| |------| | | | nulp | | |
|
||||||
|
|---------|------|------|------|------|------| | | |------|------|------|------|------|--------|
|
||||||
|
| | | extr | cls | virt | break| | | |namesp| goodm| goodn| | | |
|
||||||
|
`---------|------|------|------|------|-------------' `-------------|------|------|------|------|--------'
|
||||||
|
| | | inc | | | | | | | | |
|
||||||
|
`-----------------------------------' `----------------------------------'
|
||||||
|
,-------------. ,-------------.
|
||||||
|
| | | | ecet | ecets|
|
||||||
|
,------|------|------| |------|------|------.
|
||||||
|
| | | | | | | |
|
||||||
|
| | |------| |------| | |
|
||||||
|
| | | ## | | ## | | |
|
||||||
|
`--------------------' `--------------------'
|
||||||
|
```
|
||||||
|
Please see `keymap.c` for the keywords/commands.
|
||||||
|
Some are const, volatile, operator, return, template, typename, continue, private,
|
||||||
|
protected, public, struct, class, extern, virtual, break, namespace.
|
||||||
|
Also a git log command I use a lot (`git log --oneline --graph --decorate=short` (I know git can be configured but that is boring)).
|
||||||
|
|
||||||
|
### 6. Emacs
|
||||||
|
|
||||||
|
```
|
||||||
|
,---------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
| | | | | | | empb | | emnb | emfs | emfb | | | | |
|
||||||
|
|---------|------|------|------|------|------|------| |------|------|------|------|------|------|--------|
|
||||||
|
| | emtr | | | | | | | | emun | emre | w-up | | | |
|
||||||
|
|---------|------|------|------|------|------| | | |------|------|------|------|------|--------|
|
||||||
|
| | | emwr | | | |------| |------| |w-left|w-down|w-rght| | |
|
||||||
|
|---------|------|------|------|------|------| ## | | ## |------|------|------|------|------|--------|
|
||||||
|
| | | | | | | | | | | |w-down| | | |
|
||||||
|
`---------|------|------|------|------|-------------' `-------------|------|------|------|------|--------'
|
||||||
|
| | | | | | | | | | | |
|
||||||
|
`-----------------------------------' `----------------------------------'
|
||||||
|
,-------------. ,-------------.
|
||||||
|
| | | | | |
|
||||||
|
,------|------|------| |------|------|------.
|
||||||
|
| | | | | | | |
|
||||||
|
| | |------| |------| | |
|
||||||
|
| | | | | | | |
|
||||||
|
`--------------------' `--------------------'
|
||||||
|
```
|
||||||
|
Some emacs shortcuts like toggle read/write mode (emtr), write file (emwr), previous-buffer (empb),
|
||||||
|
next-buffer (emnb), smaller font(emfs), larger font (emfb), undo (emun), redo (emre) and switching between windows in a frame.
|
|
@ -0,0 +1 @@
|
||||||
|
UNICODE_ENABLE = yes
|
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 78 KiB |
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 78 KiB |
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 61 KiB |
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 58 KiB |
|
@ -8,15 +8,86 @@
|
||||||
#define MDIA 2 // media keys
|
#define MDIA 2 // media keys
|
||||||
#define NAVG 3 // navigation
|
#define NAVG 3 // navigation
|
||||||
|
|
||||||
enum custom_keycodes {
|
enum macros {
|
||||||
PLACEHOLDER = SAFE_RANGE, // can always be here
|
RUN
|
||||||
EPRM,
|
|
||||||
VRSN,
|
|
||||||
RGB_SLD
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// TODO: Get rid of of keys I don't want. Make others that I do. Set up lots of makros (Using hyper (and meh)) keys (where to put them?)
|
enum function_ids {
|
||||||
|
EMOJI,
|
||||||
|
EMOJI2,
|
||||||
|
EPRM,
|
||||||
|
VRSN,
|
||||||
|
RGB_SLD,
|
||||||
|
GO_GROUP
|
||||||
|
};
|
||||||
|
|
||||||
|
/* opt can only be 0-15 */
|
||||||
|
enum emojis {
|
||||||
|
SHRUG,
|
||||||
|
YAY,
|
||||||
|
HUG,
|
||||||
|
SMILE,
|
||||||
|
SMILE2,
|
||||||
|
HMM1,
|
||||||
|
HMM2,
|
||||||
|
BEAR1,
|
||||||
|
BEAR2,
|
||||||
|
FUU,
|
||||||
|
EGGY1,
|
||||||
|
EGGY2,
|
||||||
|
FACE1,
|
||||||
|
FACE2,
|
||||||
|
UHU,
|
||||||
|
SMRK1
|
||||||
|
};
|
||||||
|
|
||||||
|
enum emojis2 {
|
||||||
|
SMRK2,
|
||||||
|
LOVE
|
||||||
|
};
|
||||||
|
|
||||||
|
enum progmem_ids {
|
||||||
|
EMOJI_SHRUG,
|
||||||
|
EMOJI_YAY,
|
||||||
|
EMOJI_HUG,
|
||||||
|
EMOJI_SMILE,
|
||||||
|
EMOJI_SMILE2,
|
||||||
|
EMOJI_HMM1,
|
||||||
|
EMOJI_HMM2,
|
||||||
|
EMOJI_BEAR1,
|
||||||
|
EMOJI_BEAR2,
|
||||||
|
EMOJI_FUU,
|
||||||
|
EMOJI_EGGY1,
|
||||||
|
EMOJI_EGGY2,
|
||||||
|
EMOJI_FACE1,
|
||||||
|
EMOJI_FACE2,
|
||||||
|
EMOJI_UHU,
|
||||||
|
EMOJI_SMRK1,
|
||||||
|
EMOJI_SMRK2,
|
||||||
|
EMOJI_LOVE,
|
||||||
|
F_EPRM,
|
||||||
|
F_VRSN,
|
||||||
|
F_RGB_SLD,
|
||||||
|
I3_GO_GROUP_10,
|
||||||
|
I3_GO_GROUP_1,
|
||||||
|
I3_GO_GROUP_2,
|
||||||
|
I3_GO_GROUP_3,
|
||||||
|
I3_GO_GROUP_4,
|
||||||
|
I3_GO_GROUP_5,
|
||||||
|
I3_GO_GROUP_6,
|
||||||
|
I3_GO_GROUP_7,
|
||||||
|
I3_GO_GROUP_8,
|
||||||
|
I3_GO_GROUP_9,
|
||||||
|
};
|
||||||
|
|
||||||
|
// TODO: Finish the macros for i3 (Macros should potentially be own function instead to make things easier? some of them at least, f. ex. the ones that use 1-0 keys so we can have a single switch)
|
||||||
|
|
||||||
|
// TODO: Do stuff with hyper and meh keys
|
||||||
|
// TODO: Add macros for lots of stuff. (Lastpass cli, pushbullet cli, other push service cli, linode cli, more?)
|
||||||
|
// TODO: Make macros for gnu screen and i3wm
|
||||||
// TODO: Need to change hotkeys for lastpass, and potentially make my own keys for them on one of my layers
|
// TODO: Need to change hotkeys for lastpass, and potentially make my own keys for them on one of my layers
|
||||||
|
// TODO: Look into using tap dance
|
||||||
|
// TODO: Use leader key for stuff. See https://github.com/qmk/qmk_firmware/wiki
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
/* Keymap 0: Basic layer
|
/* Keymap 0: Basic layer
|
||||||
*
|
*
|
||||||
|
@ -29,7 +100,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
* |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
|
* |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
|
||||||
* | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift |
|
* | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift |
|
||||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
* |Grv/L1| '" |AltShf| Lalt | Ralt | | Lalt | Ralt | [ | ] | ~/L1 |
|
* |Grv/L1| UNI |AltShf| Lalt | Ralt | | Lalt | Ralt | LEAD | UNI | ~/L1 |
|
||||||
* `----------------------------------' `----------------------------------'
|
* `----------------------------------' `----------------------------------'
|
||||||
* ,-------------. ,-------------.
|
* ,-------------. ,-------------.
|
||||||
* | App | Home | | PgUp | Ins |
|
* | App | Home | | PgUp | Ins |
|
||||||
|
@ -45,9 +116,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
// left hand
|
// left hand
|
||||||
LT(NAVG,KC_ESC), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6,
|
LT(NAVG,KC_ESC), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6,
|
||||||
LT(SYMB,KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB),
|
LT(SYMB,KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB),
|
||||||
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G,
|
KC_LCTL, LT(MDIA, KC_A), KC_S, KC_D, KC_F, KC_G,
|
||||||
KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
|
KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
|
||||||
LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_RALT,KC_LALT,
|
LT(SYMB,KC_GRV),LCTL(LSFT(KC_U)), LALT(KC_LSFT), KC_RALT,KC_LALT,
|
||||||
ALT_T(KC_APP), KC_HOME,
|
ALT_T(KC_APP), KC_HOME,
|
||||||
KC_END,
|
KC_END,
|
||||||
KC_SPC,KC_TAB,KC_LBRC,
|
KC_SPC,KC_TAB,KC_LBRC,
|
||||||
|
@ -56,12 +127,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, LT(SYMB, KC_BSLS),
|
TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, LT(SYMB, KC_BSLS),
|
||||||
KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),CTL_T(KC_QUOT),
|
KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),CTL_T(KC_QUOT),
|
||||||
MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
|
MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
|
||||||
KC_LALT, KC_RALT,KC_LBRC,KC_RBRC, LT(SYMB,KC_TILD),
|
KC_LALT, KC_RALT,KC_LEAD,LCTL(LSFT(KC_U)), LT(SYMB,KC_TILD),
|
||||||
KC_PGUP, KC_INS,
|
KC_PGUP, KC_INS,
|
||||||
KC_PGDN,
|
KC_PGDN,
|
||||||
KC_RBRC,KC_BSPC, KC_ENT
|
KC_RBRC,KC_BSPC, KC_ENT
|
||||||
),
|
),
|
||||||
/* Keymap 1: Symbol Layer
|
/* Keymap 1: Symbol Layer LCTL(LSFT(KC_U))
|
||||||
*
|
*
|
||||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
* | | F1 | F2 | F3 | F4 | F5 | F6 | | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
|
* | | F1 | F2 | F3 | F4 | F5 | F6 | | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
|
||||||
|
@ -75,11 +146,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
* | | | | | | | | . | 0 | = | |
|
* | | | | | | | | . | 0 | = | |
|
||||||
* `----------------------------------' `----------------------------------'
|
* `----------------------------------' `----------------------------------'
|
||||||
* ,-------------. ,-------------.
|
* ,-------------. ,-------------.
|
||||||
* | | | | | |
|
* |Toggle|Animat| | Hue+ | Hue- |
|
||||||
* ,------|------|------| |------+------+------.
|
* ,------|------|------| |------+------+------.
|
||||||
* | | | | | | | |
|
* |Bright|Bright|Solid | | | | |
|
||||||
* | | |------| |------| DEL | |
|
* |ness- |ness+ |------| |------| DEL | |
|
||||||
* | | | | | | | |
|
* | | | | | EPRM | | |
|
||||||
* `--------------------' `--------------------'
|
* `--------------------' `--------------------'
|
||||||
*/
|
*/
|
||||||
// SYMBOLS
|
// SYMBOLS
|
||||||
|
@ -90,27 +161,27 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
|
KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
|
||||||
KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
|
KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,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,
|
RGB_TOG,RGB_MOD,
|
||||||
KC_TRNS,
|
F(F_RGB_SLD),
|
||||||
KC_TRNS,KC_TRNS,KC_TRNS,
|
RGB_VAD,RGB_VAI,KC_TRNS,
|
||||||
// right hand
|
// right hand
|
||||||
KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
|
KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
|
||||||
KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_TRNS,
|
KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_TRNS,
|
||||||
KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
|
KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
|
||||||
KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
|
KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
|
||||||
KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS,
|
KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS,
|
RGB_HUD, RGB_HUI,
|
||||||
KC_TRNS,
|
KC_TRNS,
|
||||||
KC_TRNS, KC_DEL, KC_TRNS
|
F(F_EPRM), KC_DEL, KC_TRNS
|
||||||
),
|
),
|
||||||
/* Keymap 2: Media and mouse keys
|
/* Keymap 2: Media, mouse and navigation
|
||||||
*
|
*
|
||||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
* | | | | | | | | | | | | | | | |
|
* | | gg(1)| | | | | | | | | | | | | |
|
||||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
* | | | | MsUp | | | | | | | | | | | |
|
* | | | | MsUp | RUN | | | | | | | Up | | | |
|
||||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
* | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play |
|
* | | |MsLeft|MsDown|MsRght| |------| |------| | Left | Down | Right| | Play |
|
||||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
* | | | | | | | | | | | | Prev | Next | | |
|
* | | | | | | | | | | | | Prev | Next | | |
|
||||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
@ -124,10 +195,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
* | | | | | | | |
|
* | | | | | | | |
|
||||||
* `--------------------' `--------------------'
|
* `--------------------' `--------------------'
|
||||||
*/
|
*/
|
||||||
// MEDIA AND MOUSE
|
// MEDIA , MOUSE and NAVIGATION
|
||||||
[MDIA] = KEYMAP(
|
[MDIA] = KEYMAP(
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, F(I3_GO_GROUP_1), F(I3_GO_GROUP_2), F(I3_GO_GROUP_3), F(I3_GO_GROUP_4), F(I3_GO_GROUP_5), F(I3_GO_GROUP_6),
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, M(RUN), KC_TRNS, KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
|
KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, 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_BTN1, KC_BTN2,
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
|
||||||
|
@ -135,9 +206,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
KC_TRNS,
|
KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
// right hand
|
// right hand
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
F(I3_GO_GROUP_6), F(I3_GO_GROUP_7), F(I3_GO_GROUP_8), F(I3_GO_GROUP_9), F(I3_GO_GROUP_10), 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_UP, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
|
KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_MPLY,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
|
||||||
KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
|
KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_TRNS,
|
||||||
|
@ -145,106 +216,270 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
KC_TRNS, KC_TRNS, KC_WBAK
|
KC_TRNS, KC_TRNS, KC_WBAK
|
||||||
),
|
),
|
||||||
|
|
||||||
/* Keymap 3: Navigation TODO: Printscreen, pg up down, home, end, others? Insert for example
|
/* Keymap 3: Unicode
|
||||||
*
|
*
|
||||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
* | | VER | | | | | | | | | | | | | |
|
* | | ┌ | ┐ | └ | ┘ | │ | ─ | | ╔ | ╗ | ╚ | ╝ | ║ | ═ | |
|
||||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
* | | | | up | | | | | | | | | | | |
|
* | | shrug| yay | hug | smile|smile2| | | | ■ | λ | → | ➙ | ▻ | █ |
|
||||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
* | | | left | down | right| |------| |------| | | | | | |
|
* | | hmm1 | hmm2 | bear1| bear2| fuu |------| |------| ☺ | ☻ | ☹ | ♡ | ♥ | ░ |
|
||||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
* | | | | | | | | | | | | | | | |
|
* | | eggy1| eggy2| face1| face2| uhu | | | | ❤ | ☐ | ☑ | ☒ | ✓ | ▄ |
|
||||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
* | | | | | | | | | | | |
|
* | | smrk1| smrk2| love | VER | | ✔ | ✗ | ✘ | ● | ▀ |
|
||||||
* `----------------------------------' `----------------------------------'
|
* `----------------------------------' `----------------------------------'
|
||||||
* ,-------------. ,-------------.
|
* ,-------------. ,-------------.
|
||||||
* | | | | | |
|
* | | | | ▒ | ▓ |
|
||||||
* ,------|------|------| |------+------+------.
|
* ,------|------|------| |------+------+------.
|
||||||
* | | | | | | | |
|
* | | | | | | | |
|
||||||
* | | |------| |------| | |
|
* | | |------| |------| | |
|
||||||
* | | | | | | | |
|
* | | | | | | | |
|
||||||
* `--------------------' `--------------------'
|
* `--------------------' `--------------------'
|
||||||
*/
|
*/
|
||||||
// NAVIGATION
|
// Unicode
|
||||||
[NAVG] = KEYMAP(
|
[NAVG] = KEYMAP(
|
||||||
KC_TRNS, VRSN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, UC(0x250c), UC(0x2510), UC(0x2514), UC(0x2518), UC(0x2502), UC(0x2500),
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, F(EMOJI_SHRUG), F(EMOJI_YAY), F(EMOJI_HUG), F(EMOJI_SMILE), F(EMOJI_SMILE2), KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS,
|
KC_TRNS, F(EMOJI_HMM1), F(EMOJI_HMM2), F(EMOJI_BEAR1), F(EMOJI_BEAR2), F(EMOJI_FUU),
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, F(EMOJI_EGGY1), F(EMOJI_EGGY2), F(EMOJI_FACE1), F(EMOJI_FACE2), F(EMOJI_UHU), KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, F(EMOJI_SMRK1), F(EMOJI_SMRK2), F(EMOJI_LOVE), F(F_VRSN),
|
||||||
KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_TRNS,
|
||||||
KC_TRNS,
|
KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
// right hand
|
// right hand
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
UC(0x2554), UC(0x2557), UC(0x255a), UC(0x255d), UC(0x2551), UC(0x2550), KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, UC(0x25a0), UC(0x03bb), UC(0x2192), UC(0x2799), UC(0x25bb), UC(0x2588),
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
UC(0x263a), UC(0x263b), UC(0x2639), UC(0x2661), UC(0x2665), UC(0x2591),
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, UC(0x2764), UC(0x2610), UC(0x2611), UC(0x2612), UC(0x2713), UC(0x2584),
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
UC(0x2714), UC(0x2717), UC(0x2718), UC(0x25cf), UC(0x2580),
|
||||||
KC_TRNS, KC_TRNS,
|
UC(0x2592), UC(0x2593),
|
||||||
KC_TRNS,
|
KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS
|
KC_TRNS, KC_TRNS, KC_TRNS
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
const uint16_t PROGMEM fn_actions[] = {
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
[1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
|
[EMOJI_SHRUG] = ACTION_FUNCTION_OPT(EMOJI, SHRUG),
|
||||||
|
[EMOJI_YAY] = ACTION_FUNCTION_OPT(EMOJI, YAY),
|
||||||
|
[EMOJI_HUG] = ACTION_FUNCTION_OPT(EMOJI,HUG),
|
||||||
|
[EMOJI_SMILE] = ACTION_FUNCTION_OPT(EMOJI,SMILE),
|
||||||
|
[EMOJI_SMILE2] = ACTION_FUNCTION_OPT(EMOJI,SMILE2),
|
||||||
|
[EMOJI_HMM1] = ACTION_FUNCTION_OPT(EMOJI,HMM1),
|
||||||
|
[EMOJI_HMM2] = ACTION_FUNCTION_OPT(EMOJI,HMM2),
|
||||||
|
[EMOJI_BEAR1] = ACTION_FUNCTION_OPT(EMOJI,BEAR1),
|
||||||
|
[EMOJI_BEAR2] = ACTION_FUNCTION_OPT(EMOJI,BEAR2),
|
||||||
|
[EMOJI_FUU] = ACTION_FUNCTION_OPT(EMOJI,FUU),
|
||||||
|
[EMOJI_EGGY1] = ACTION_FUNCTION_OPT(EMOJI,EGGY1),
|
||||||
|
[EMOJI_EGGY2] = ACTION_FUNCTION_OPT(EMOJI,EGGY2),
|
||||||
|
[EMOJI_FACE1] = ACTION_FUNCTION_OPT(EMOJI,FACE1),
|
||||||
|
[EMOJI_FACE2] = ACTION_FUNCTION_OPT(EMOJI,FACE2),
|
||||||
|
[EMOJI_UHU] = ACTION_FUNCTION_OPT(EMOJI,UHU),
|
||||||
|
[EMOJI_SMRK1] = ACTION_FUNCTION_OPT(EMOJI,SMRK1),
|
||||||
|
[EMOJI_SMRK2] = ACTION_FUNCTION_OPT(EMOJI2,SMRK2),
|
||||||
|
[EMOJI_LOVE] = ACTION_FUNCTION_OPT(EMOJI2,LOVE),
|
||||||
|
[F_EPRM] = ACTION_FUNCTION(EPRM),
|
||||||
|
[F_VRSN] = ACTION_FUNCTION(VRSN),
|
||||||
|
[F_RGB_SLD] = ACTION_FUNCTION(RGB_SLD),
|
||||||
|
[I3_GO_GROUP_10]= ACTION_FUNCTION_OPT(GO_GROUP,0),
|
||||||
|
[I3_GO_GROUP_1] = ACTION_FUNCTION_OPT(GO_GROUP,1),
|
||||||
|
[I3_GO_GROUP_2] = ACTION_FUNCTION_OPT(GO_GROUP,2),
|
||||||
|
[I3_GO_GROUP_3] = ACTION_FUNCTION_OPT(GO_GROUP,3),
|
||||||
|
[I3_GO_GROUP_4] = ACTION_FUNCTION_OPT(GO_GROUP,4),
|
||||||
|
[I3_GO_GROUP_5] = ACTION_FUNCTION_OPT(GO_GROUP,5),
|
||||||
|
[I3_GO_GROUP_6] = ACTION_FUNCTION_OPT(GO_GROUP,6),
|
||||||
|
[I3_GO_GROUP_7] = ACTION_FUNCTION_OPT(GO_GROUP,7),
|
||||||
|
[I3_GO_GROUP_8] = ACTION_FUNCTION_OPT(GO_GROUP,8),
|
||||||
|
[I3_GO_GROUP_9] = ACTION_FUNCTION_OPT(GO_GROUP,9),
|
||||||
};
|
};
|
||||||
|
|
||||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
#define TAP_ONCE(code) \
|
||||||
{
|
register_code (code); \
|
||||||
// MACRODOWN only works in this function
|
unregister_code (code)
|
||||||
switch(id) {
|
|
||||||
case 0:
|
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
|
switch(id) {
|
||||||
}
|
case EPRM:
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
if (record->event.pressed) { // For resetting EEPROM
|
|
||||||
eeconfig_init();
|
eeconfig_init();
|
||||||
|
break;
|
||||||
|
case VRSN:
|
||||||
|
SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
|
||||||
|
break;
|
||||||
|
case RGB_SLD:
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
rgblight_mode(1);
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
case GO_GROUP:
|
||||||
|
register_code(KC_LCTL); TAP_ONCE(KC_I); unregister_code(KC_LCTL);
|
||||||
|
TAP_ONCE(KC_G);
|
||||||
|
if (opt == 0) {
|
||||||
|
TAP_ONCE(39);
|
||||||
|
} else {
|
||||||
|
TAP_ONCE(29+opt);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case EMOJI:
|
||||||
|
switch(opt) {
|
||||||
|
case SHRUG:
|
||||||
|
unicode_input_start(); register_hex(0xaf); unicode_input_finish();
|
||||||
|
TAP_ONCE (KC_BSLS);
|
||||||
|
register_code (KC_RSFT); TAP_ONCE (KC_MINS); TAP_ONCE (KC_9); unregister_code (KC_RSFT);
|
||||||
|
unicode_input_start (); register_hex(0x30c4); unicode_input_finish();
|
||||||
|
register_code (KC_RSFT); TAP_ONCE (KC_0); TAP_ONCE (KC_MINS); unregister_code (KC_RSFT);
|
||||||
|
TAP_ONCE (KC_SLSH);
|
||||||
|
unicode_input_start (); register_hex(0xaf); unicode_input_finish();
|
||||||
|
break;
|
||||||
|
case YAY:
|
||||||
|
SEND_STRING ("\\o/");
|
||||||
|
break;
|
||||||
|
case HUG:
|
||||||
|
unicode_input_start(); register_hex(0x0f3c); unicode_input_finish();
|
||||||
|
TAP_ONCE (KC_SPC);
|
||||||
|
unicode_input_start(); register_hex(0x3064); unicode_input_finish();
|
||||||
|
TAP_ONCE (KC_SPC);
|
||||||
|
unicode_input_start(); register_hex(0x25d5); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x005f); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x25d5); unicode_input_finish();
|
||||||
|
TAP_ONCE (KC_SPC);
|
||||||
|
unicode_input_start(); register_hex(0x0f3d); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x3064); unicode_input_finish();
|
||||||
|
break;
|
||||||
|
case SMILE:
|
||||||
|
unicode_input_start(); register_hex(0x0298); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x203f); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x0298); unicode_input_finish();
|
||||||
|
break;
|
||||||
|
case SMILE2:
|
||||||
|
unicode_input_start(); register_hex(0x0028); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x0298); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x203f); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x0298); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x0029); unicode_input_finish();
|
||||||
|
break;
|
||||||
|
case HMM1:
|
||||||
|
unicode_input_start(); register_hex(0x0ca0); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x005f); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x0ca0); unicode_input_finish();
|
||||||
|
break;
|
||||||
|
case HMM2:
|
||||||
|
unicode_input_start(); register_hex(0x0028); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x0ca0); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x005f); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x0ca0); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x0029); unicode_input_finish();
|
||||||
|
break;
|
||||||
|
case BEAR1:
|
||||||
|
unicode_input_start(); register_hex(0x0295); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x2022); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x1d25); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x2022); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x0294); unicode_input_finish();
|
||||||
|
break;
|
||||||
|
case BEAR2:
|
||||||
|
unicode_input_start(); register_hex(0x0028); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x1d54); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x1d25); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x1d54); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x0029); unicode_input_finish();
|
||||||
|
break;
|
||||||
|
case FUU:
|
||||||
|
unicode_input_start(); register_hex(0x256d); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x2229); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x256e); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x0028); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x002d); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x005f); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x002d); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x0029); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x256d); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x2229); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x256e); unicode_input_finish();
|
||||||
|
break;
|
||||||
|
case EGGY1:
|
||||||
|
unicode_input_start(); register_hex(0x0028); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x256f); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x00b0); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x25a1); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x00b0); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0xff09); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x256f); unicode_input_finish();
|
||||||
|
break;
|
||||||
|
case EGGY2:
|
||||||
|
unicode_input_start(); register_hex(0x30ce); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x0028); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x0020); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x309c); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x002d); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x309c); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x30ce); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x0029); unicode_input_finish();
|
||||||
|
break;
|
||||||
|
case FACE1:
|
||||||
|
unicode_input_start(); register_hex(0x0028); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x002d); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x005f); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x002d); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x0029); unicode_input_finish();
|
||||||
|
break;
|
||||||
|
case FACE2:
|
||||||
|
unicode_input_start(); register_hex(0x0028); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x2022); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x005f); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x2022); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x0029); unicode_input_finish();
|
||||||
|
break;
|
||||||
|
case UHU:
|
||||||
|
unicode_input_start(); register_hex(0x2299); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0xfe4f); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x2299); unicode_input_finish();
|
||||||
|
break;
|
||||||
|
case SMRK1:
|
||||||
|
unicode_input_start(); register_hex(0x005e); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x032e); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x005e); unicode_input_finish();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case EMOJI2:
|
||||||
|
switch(opt) {
|
||||||
|
case SMRK2:
|
||||||
|
unicode_input_start(); register_hex(0x0028); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x005e); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x032e); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x005e); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x0029); unicode_input_finish();
|
||||||
|
break;
|
||||||
|
case LOVE:
|
||||||
|
unicode_input_start(); register_hex(0x2665); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x203f); unicode_input_finish();
|
||||||
|
unicode_input_start(); register_hex(0x2665); unicode_input_finish();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||||
|
if (record->event.pressed) {
|
||||||
|
switch(id) {
|
||||||
|
case RUN:
|
||||||
|
return MACRO( D(LCTL), T(I), U(LCTL), T(R), END );
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return MACRO_NONE;
|
return MACRO_NONE;
|
||||||
};
|
};
|
||||||
|
|
||||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
|
||||||
switch (keycode) {
|
|
||||||
// dynamically generate these.
|
|
||||||
case EPRM:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
eeconfig_init();
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
break;
|
|
||||||
case VRSN:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
break;
|
|
||||||
case RGB_SLD:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
#ifdef RGBLIGHT_ENABLE
|
|
||||||
rgblight_mode(1);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Runs just one time when the keyboard initializes.
|
// Runs just one time when the keyboard initializes.
|
||||||
void matrix_init_user(void) {
|
void matrix_init_user(void) {
|
||||||
|
set_unicode_input_mode(UC_LNX);
|
||||||
};
|
};
|
||||||
|
|
||||||
// Runs constantly in the background, in a loop.
|
// Runs constantly in the background, in a loop.
|
||||||
void matrix_scan_user(void) {
|
void matrix_scan_user(void) {
|
||||||
|
|
||||||
uint8_t layer = biton32(layer_state);
|
uint8_t layer = biton32(layer_state);
|
||||||
|
|
||||||
ergodox_board_led_off();
|
ergodox_board_led_off();
|
||||||
|
@ -254,12 +489,21 @@ void matrix_scan_user(void) {
|
||||||
switch (layer) {
|
switch (layer) {
|
||||||
case 1:
|
case 1:
|
||||||
ergodox_right_led_1_on();
|
ergodox_right_led_1_on();
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
rgblight_setrgb(0xff,0x00,0x00);
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
ergodox_right_led_2_on();
|
ergodox_right_led_2_on();
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
rgblight_setrgb(0x00,0xff,0x00);
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
ergodox_right_led_3_on();
|
ergodox_right_led_3_on();
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
rgblight_setrgb(0x00,0x00,0xff);
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
ergodox_right_led_1_on(); // TODO: Make a fourth layer
|
ergodox_right_led_1_on(); // TODO: Make a fourth layer
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
# ErgoDox EZ 1337 configuration
|
# ErgoDox EZ 1337 configuration
|
||||||
|
|
||||||
Custom layout based on the default layout. Intended for interational users of us intl-altgr layout. Note that
|
Custom layout based on the default layout. Intended for interational
|
||||||
some common keys might be missing, as this layout is intented to be used on *nix systems by users familiar
|
users of us intl-altgr layout. Note that some common keys might be
|
||||||
with their system. The layout is geared towards avoiding using the rat (mouse for those of you who are
|
missing, as this layout is intented to be used on *nix systems by
|
||||||
unfamiliar with tiling window managers) as much as possibly.
|
users familiar with their system. The layout is geared towards
|
||||||
|
avoiding using the rat (mouse for those of you who are unfamiliar with
|
||||||
|
tiling window managers) as much as possibly.
|
||||||
|
|
||||||
# Layouts
|
# Layouts
|
||||||
|
|
||||||
|
@ -13,24 +15,58 @@ All layer images created using [keyboard-layout-editor](http://www.keyboard-layo
|
||||||
|
|
||||||
[![Base layer](images/deadcyclo-base-layout.png)](http://www.keyboard-layout-editor.com/#/gists/0321b18620180a3e46c498206eb65366)
|
[![Base layer](images/deadcyclo-base-layout.png)](http://www.keyboard-layout-editor.com/#/gists/0321b18620180a3e46c498206eb65366)
|
||||||
|
|
||||||
## Layer 1 - Symbols
|
The base layer here is marked with the us international alt-gr layout,
|
||||||
|
including characters bound to what on an iso keyboard would be alt-gr
|
||||||
|
and on an ansi keyboard right alt.
|
||||||
|
|
||||||
[![Layer 1 - Symbols](images/deadcyclo-layer-1-symbols.png)](http://www.keyboard-layout-editor.com/#/gists/96714e198054c9115bafb5267cc6bc73)
|
Regular (and irregular) modifier keys are marked with a yellowish
|
||||||
|
gray. Layer moderators are marked with blue, red and green, which are
|
||||||
|
the same colors each layer displays on the LEDs when active.
|
||||||
|
|
||||||
## Layer 2 - Media and Mouse
|
All of the layer switch keys, except for the two center keys marked L1
|
||||||
|
TOG, are dual purpose. Hence for example the top left key produces ESC
|
||||||
|
if tapped, and temporarilly toggles L3 when hold down. The two center
|
||||||
|
L1 TOG keys toggle L1 on and off for more permanent layer toggling.
|
||||||
|
|
||||||
[![Layer 2 - Media and Mouse](images/deadcyclo-layer-2-media-and-mouse.png)](http://www.keyboard-layout-editor.com/#/gists/824759486e378bcec30784309a7e5731)
|
The UNI keys enter the linux ibus unicode composer mode
|
||||||
|
(ie. Ctrl+Shift+u). Use this to enter unicode characters. Hit the key,
|
||||||
|
type in the unicode hex value, and hit enter.
|
||||||
|
|
||||||
## Layer 3 - Navigation
|
## Layer 1 - Symbols and RGB
|
||||||
|
|
||||||
[![Layer 3 - Navigation](images/deadcyclo-layer-3-navigation.png)](http://www.keyboard-layout-editor.com/#/gists/67d9613dcd873c68693d11863d0fd289)
|
[![Layer 1 - Symbols and RGB](images/deadcyclo-layer-1-symbols.png)](http://www.keyboard-layout-editor.com/#/gists/96714e198054c9115bafb5267cc6bc73)
|
||||||
|
|
||||||
|
The Symbols and RGB layer contains function keys, commonly used
|
||||||
|
symbols, a numpad and if you have the new Ergodox Ez shine keys for
|
||||||
|
controlling various RGB-led functions. In addition, it provides an up
|
||||||
|
and a down key for easy scrolling. RGB controller keys are yellow.
|
||||||
|
|
||||||
|
## Layer 2 - Media, Mouse and Navigation
|
||||||
|
|
||||||
|
[![Layer 2 - Media, Mouse and Navigation](images/deadcyclo-layer-2-media-and-mouse.png)](http://www.keyboard-layout-editor.com/#/gists/824759486e378bcec30784309a7e5731)
|
||||||
|
|
||||||
|
The Media, Mouse and unicode layer contains special keys for moving
|
||||||
|
the mouse and clicking on it with the keyboard. In addition it
|
||||||
|
provides standard media control keys, and default arrow keys.
|
||||||
|
|
||||||
|
## Layer 3 - Unicode
|
||||||
|
|
||||||
|
[![Layer 3 - Unicode](images/deadcyclo-layer-3-navigation.png)](http://www.keyboard-layout-editor.com/#/gists/67d9613dcd873c68693d11863d0fd289)
|
||||||
|
|
||||||
|
The unicode layer provides keys for directly typing unicode (utf-8)
|
||||||
|
|
||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
- 02.01.2017 Added delete key on second layer
|
- 02.01.2017 Added delete key on second layer
|
||||||
- 10.01.2017 Added layer images to readme
|
- 10.01.2017 Added layer images to readme
|
||||||
|
- 24.01.2017 Added support for Ergodox Shine. Added secondary L2 switch key on left hand
|
||||||
|
- 24.01.2017 Added unicode keys. Added shrug hug and yay. Moved Navigation to layer 2
|
||||||
|
- 25.01.2017 Added lots of new emojis and some unicode keys
|
||||||
|
- 27.01.2017 Added new unicode keys and shortcut for ibus unicode composer key (CTRL+SHIFT+U)
|
||||||
|
|
||||||
# TODO
|
# TODO
|
||||||
|
|
||||||
- Add unicode support (direct input and indirect? see algernon layout for examples)
|
- Add macros for lots of stuff. (Lastpass cli, pushbullet cli, other push service cli, linode cli, more?)
|
||||||
- Add descriptions below each layer image of any special functions/keys
|
- Make macros for gnu screen and i3wm
|
||||||
|
- Look into the app launch macros in algernon keymap
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include "ergodox.h"
|
#include "ergodox.h"
|
||||||
#include "led.h"
|
#include "led.h"
|
||||||
|
#include "mousekey.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "action_layer.h"
|
#include "action_layer.h"
|
||||||
#include "action_util.h"
|
#include "action_util.h"
|
||||||
|
|
|
@ -68,7 +68,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
case RGB_FF0000:
|
case RGB_FF0000:
|
||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
#ifdef RGBLIGHT_ENABLE
|
#ifdef RGBLIGHT_ENABLE
|
||||||
EZ_RGB(0xff0000);
|
EZ_RGB(0xff0000UL);
|
||||||
register_code(KC_1); unregister_code(KC_1);
|
register_code(KC_1); unregister_code(KC_1);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -77,7 +77,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
case RGB_00FF00:
|
case RGB_00FF00:
|
||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
#ifdef RGBLIGHT_ENABLE
|
#ifdef RGBLIGHT_ENABLE
|
||||||
EZ_RGB(0x00ff00);
|
EZ_RGB(0x00ff00UL);
|
||||||
register_code(KC_2); unregister_code(KC_2);
|
register_code(KC_2); unregister_code(KC_2);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -86,7 +86,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
case RGB_0000FF:
|
case RGB_0000FF:
|
||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
#ifdef RGBLIGHT_ENABLE
|
#ifdef RGBLIGHT_ENABLE
|
||||||
EZ_RGB(0x0000ff);
|
EZ_RGB(0x0000ffUL);
|
||||||
register_code(KC_3); unregister_code(KC_3);
|
register_code(KC_3); unregister_code(KC_3);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -95,7 +95,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
case RGB_FFFFFF:
|
case RGB_FFFFFF:
|
||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
#ifdef RGBLIGHT_ENABLE
|
#ifdef RGBLIGHT_ENABLE
|
||||||
EZ_RGB(0xffffff);
|
EZ_RGB(0xffffffUL);
|
||||||
register_code(KC_4); unregister_code(KC_4);
|
register_code(KC_4); unregister_code(KC_4);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
#include "ergodox.h"
|
#include "ergodox.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
#include "led.h"
|
||||||
#include "action_layer.h"
|
#include "action_layer.h"
|
||||||
#include "keymap_neo2.h"
|
#include "keymap_extras/keymap_neo2.h"
|
||||||
|
|
||||||
// Layer names
|
// Layer names
|
||||||
#define BASE 0 // default layer
|
#define BASE 0 // default layer
|
||||||
|
@ -11,45 +12,45 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
/* Keymap 0: Basic layer
|
/* Keymap 0: Basic layer
|
||||||
*
|
*
|
||||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
* | ^ | 1 | 2 | 3 | 4 | 5 | Play | | Next | 6 | 7 | 8 | 9 | 0 |BackSpce|
|
* | Del | 1 | 2 | 3 | 4 | 5 | Play | | Next | 6 | 7 | 8 | 9 | 0 | ß |
|
||||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
* | Del | X | V | L | C | W | L1 | | L1 | K | H | G | F | Q | ß |
|
* | Tab | X | V | L | C | W | Esc | | Esc | K | H | G | F | Q | Y |
|
||||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
* | Caps | U | I | A | E | O |------| |------| S | N | R | T | D | Y |
|
* | NeoL1 | U | I | A | E | O |------| |------| S | N | R | T | D | NeoR1 |
|
||||||
* |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
|
* |--------+------+------+------+------+------| L1 | | L1 |------+------+------+------+------+--------|
|
||||||
* | LShift |Ü/Ctrl| Ö/C-S| Ä/Alt| P | Z | | | | B | M | , | . | J | RShift |
|
* | LShift |Ü/Ctrl| Ö/Win| Ä/Alt| P | Z | | | | B | M | , | . | J | RShift |
|
||||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
* | L1 | Home | PgDn | PgUp | End | | Right| Down | Up | Left | Esc |
|
* |NeoL2 | Home | PgDn | PgUp | End | | Right| Down | Up | Left | NeoR2|
|
||||||
* `----------------------------------' `----------------------------------'
|
* `----------------------------------' `----------------------------------'
|
||||||
* ,-------------. ,-------------.
|
* ,-------------. ,---------------.
|
||||||
* | App | LGui | | Alt |Ctrl/Esc|
|
* | App | LGui | | Alt |Ctrl/Esc|
|
||||||
* ,------+------+------| |------+--------+------.
|
* ,------+------+------| |------+--------+------.
|
||||||
* | | |NeoL2 | |NeoL2 | | |
|
* | | | Enter| |Delete| | |
|
||||||
* | Tab |Backsp|------| |------| Space |Enter |
|
* | Space|Backsp|------| |------| Enter |Space |
|
||||||
* | |ace |NeoL1 | |NeoL1 | | |
|
* | |ace | Tab | | Esc | | |
|
||||||
* `--------------------' `----------------------'
|
* `--------------------' `----------------------'
|
||||||
*/
|
*/
|
||||||
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
|
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
|
||||||
// Otherwise, it needs KC_*
|
// Otherwise, it needs KC_*
|
||||||
[BASE] = KEYMAP( // layer 0 : default
|
[BASE] = KEYMAP( // layer 0 : default
|
||||||
// left hand
|
// left hand
|
||||||
KC_CIRC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MPLY,
|
KC_DELT, NEO_1, NEO_2, NEO_3, NEO_4, NEO_5, KC_MPLY,
|
||||||
KC_DELT, NEO_X, NEO_V, NEO_L, NEO_C, NEO_W, TG(1),
|
KC_TAB, NEO_X, NEO_V, NEO_L, NEO_C, NEO_W, KC_ESC,
|
||||||
KC_CAPS, NEO_U, NEO_I, NEO_A, NEO_E, NEO_O,
|
NEO_L1_L, NEO_U, NEO_I, NEO_A, NEO_E, NEO_O,
|
||||||
KC_LSFT, CTL_T(NEO_UE), C_S_T(NEO_OE), ALT_T(NEO_AE), NEO_P, NEO_Z, ALL_T(KC_NO),
|
KC_LSFT, CTL_T(NEO_UE), GUI_T(NEO_OE), ALT_T(NEO_AE), NEO_P, NEO_Z, TG(1),
|
||||||
DE_LESS, KC_HOME, KC_PGDN, KC_PGUP, KC_END,
|
NEO_L2_L, KC_HOME, KC_PGDN, KC_PGUP, KC_END,
|
||||||
ALT_T(KC_APP),KC_LGUI,
|
C_S_T(KC_ESC),KC_LGUI,
|
||||||
NEO_L2_L,
|
KC_ENT,
|
||||||
KC_TAB,KC_BSPC,NEO_L1_L,
|
KC_SPC,KC_BSPC,KC_TAB,
|
||||||
// right hand
|
// right hand
|
||||||
KC_MNXT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
|
KC_MNXT, NEO_6, NEO_7, NEO_8, NEO_9, NEO_0, NEO_SS,
|
||||||
TG(1), NEO_K, NEO_H, NEO_G, NEO_F, NEO_Q, NEO_SS,
|
KC_ESC, NEO_K, NEO_H, NEO_G, NEO_F, NEO_Q, NEO_Y,
|
||||||
NEO_S, NEO_N, NEO_R, NEO_T, NEO_D, NEO_Y,
|
NEO_S, NEO_N, NEO_R, NEO_T, NEO_D, NEO_L1_R,
|
||||||
MEH_T(KC_NO),NEO_B, NEO_M, KC_COMM, KC_DOT, NEO_J, KC_RSFT,
|
TG(1), NEO_B, NEO_M, NEO_COMM, NEO_DOT, NEO_J, KC_RSFT,
|
||||||
KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_ESC,
|
KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, NEO_L2_R,
|
||||||
KC_LALT,CTL_T(KC_ESC),
|
KC_LALT,KC_RGUI,
|
||||||
NEO_L2_R,
|
KC_DELT,
|
||||||
NEO_L1_R,KC_SPC, KC_ENT
|
KC_ESC,KC_ENT, KC_SPC
|
||||||
),
|
),
|
||||||
/* Keymap 1: Media and mouse keys
|
/* Keymap 1: Media and mouse keys
|
||||||
*
|
*
|
||||||
|
@ -127,13 +128,16 @@ void matrix_scan_user(void) {
|
||||||
ergodox_right_led_1_off();
|
ergodox_right_led_1_off();
|
||||||
ergodox_right_led_2_off();
|
ergodox_right_led_2_off();
|
||||||
ergodox_right_led_3_off();
|
ergodox_right_led_3_off();
|
||||||
|
ergodox_board_led_off();
|
||||||
|
|
||||||
|
if (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) {
|
||||||
|
ergodox_right_led_3_on();
|
||||||
|
}
|
||||||
|
|
||||||
switch (layer) {
|
switch (layer) {
|
||||||
case MDIA:
|
case MDIA:
|
||||||
ergodox_right_led_2_on();
|
ergodox_right_led_2_on();
|
||||||
break;
|
break;
|
||||||
default:
|
|
||||||
ergodox_board_led_off();
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#include "onekey.h"
|
#include "onekey.h"
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
{ KC_A }
|
{{ KC_A }}
|
||||||
};
|
};
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
ifndef MAKEFILE_INCLUDED
|
||||||
|
include ../../../Makefile
|
||||||
|
endif
|
|
@ -0,0 +1,162 @@
|
||||||
|
/*
|
||||||
|
Copyright 2012 Jun Wako <wakojun@gmail.com>
|
||||||
|
|
||||||
|
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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CONFIG_H
|
||||||
|
#define CONFIG_H
|
||||||
|
|
||||||
|
#include "config_common.h"
|
||||||
|
|
||||||
|
/* USB Device descriptor parameter */
|
||||||
|
#define VENDOR_ID 0xFEED
|
||||||
|
#define PRODUCT_ID 0x6060
|
||||||
|
#define DEVICE_VER 0x0001
|
||||||
|
#define MANUFACTURER upils
|
||||||
|
#define PRODUCT reddot
|
||||||
|
#define DESCRIPTION A custom keyboard
|
||||||
|
|
||||||
|
/* key matrix size */
|
||||||
|
#define MATRIX_ROWS 5
|
||||||
|
#define MATRIX_COLS 19
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Keyboard Matrix Assignments
|
||||||
|
*
|
||||||
|
* Change this to how you wired your keyboard
|
||||||
|
* COLS: AVR pins used for columns, left to right
|
||||||
|
* ROWS: AVR pins used for rows, top to bottom
|
||||||
|
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
|
||||||
|
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#define MATRIX_ROW_PINS { B0, B1, B2, B3, E6 }
|
||||||
|
#define MATRIX_COL_PINS { B7, D0, D1, D2, D3, C6, C7, D5, D4, D7, B4, B5, B6, F7, F6, F5, F4, F1, F0 }
|
||||||
|
#define UNUSED_PINS
|
||||||
|
|
||||||
|
|
||||||
|
/* COL2ROW or ROW2COL */
|
||||||
|
#define DIODE_DIRECTION COL2ROW
|
||||||
|
|
||||||
|
// #define BACKLIGHT_PIN B7
|
||||||
|
// #define BACKLIGHT_BREATHING
|
||||||
|
// #define BACKLIGHT_LEVELS 3
|
||||||
|
|
||||||
|
|
||||||
|
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||||
|
#define DEBOUNCING_DELAY 5
|
||||||
|
|
||||||
|
/* define if matrix has ghost (lacks anti-ghosting diodes) */
|
||||||
|
//#define MATRIX_HAS_GHOST
|
||||||
|
|
||||||
|
|
||||||
|
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
||||||
|
//#define LOCKING_SUPPORT_ENABLE
|
||||||
|
/* Locking resynchronize hack */
|
||||||
|
#define LOCKING_RESYNC_ENABLE
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Force NKRO
|
||||||
|
*
|
||||||
|
* Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
|
||||||
|
* state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
|
||||||
|
* makefile for this to work.)
|
||||||
|
*
|
||||||
|
* If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
|
||||||
|
* until the next keyboard reset.
|
||||||
|
*
|
||||||
|
* NKRO may prevent your keystrokes from being detected in the BIOS, but it is
|
||||||
|
* fully operational during normal computer usage.
|
||||||
|
*
|
||||||
|
* For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
|
||||||
|
* or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
|
||||||
|
* bootmagic, NKRO mode will always be enabled until it is toggled again during a
|
||||||
|
* power-up.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
//#define FORCE_NKRO
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Magic Key Options
|
||||||
|
*
|
||||||
|
* Magic keys are hotkey commands that allow control over firmware functions of
|
||||||
|
* the keyboard. They are best used in combination with the HID Listen program,
|
||||||
|
* found here: https://www.pjrc.com/teensy/hid_listen.html
|
||||||
|
*
|
||||||
|
* The options below allow the magic key functionality to be changed. This is
|
||||||
|
* useful if your keyboard/keypad is missing keys and you want magic key support.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* key combination for magic key command */
|
||||||
|
#define IS_COMMAND() ( \
|
||||||
|
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
||||||
|
)
|
||||||
|
|
||||||
|
/* control how magic key switches layers */
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
|
||||||
|
|
||||||
|
/* override magic key keymap */
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
|
||||||
|
//#define MAGIC_KEY_HELP1 H
|
||||||
|
//#define MAGIC_KEY_HELP2 SLASH
|
||||||
|
//#define MAGIC_KEY_DEBUG D
|
||||||
|
//#define MAGIC_KEY_DEBUG_MATRIX X
|
||||||
|
//#define MAGIC_KEY_DEBUG_KBD K
|
||||||
|
//#define MAGIC_KEY_DEBUG_MOUSE M
|
||||||
|
//#define MAGIC_KEY_VERSION V
|
||||||
|
//#define MAGIC_KEY_STATUS S
|
||||||
|
//#define MAGIC_KEY_CONSOLE C
|
||||||
|
//#define MAGIC_KEY_LAYER0_ALT1 ESC
|
||||||
|
//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
|
||||||
|
//#define MAGIC_KEY_LAYER0 0
|
||||||
|
//#define MAGIC_KEY_LAYER1 1
|
||||||
|
//#define MAGIC_KEY_LAYER2 2
|
||||||
|
//#define MAGIC_KEY_LAYER3 3
|
||||||
|
//#define MAGIC_KEY_LAYER4 4
|
||||||
|
//#define MAGIC_KEY_LAYER5 5
|
||||||
|
//#define MAGIC_KEY_LAYER6 6
|
||||||
|
//#define MAGIC_KEY_LAYER7 7
|
||||||
|
//#define MAGIC_KEY_LAYER8 8
|
||||||
|
//#define MAGIC_KEY_LAYER9 9
|
||||||
|
//#define MAGIC_KEY_BOOTLOADER PAUSE
|
||||||
|
//#define MAGIC_KEY_LOCK CAPS
|
||||||
|
//#define MAGIC_KEY_EEPROM E
|
||||||
|
//#define MAGIC_KEY_NKRO N
|
||||||
|
//#define MAGIC_KEY_SLEEP_LED Z
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Feature disable options
|
||||||
|
* These options are also useful to firmware size reduction.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* disable debug print */
|
||||||
|
//#define NO_DEBUG
|
||||||
|
|
||||||
|
/* disable print */
|
||||||
|
//#define NO_PRINT
|
||||||
|
|
||||||
|
/* disable action features */
|
||||||
|
//#define NO_ACTION_LAYER
|
||||||
|
//#define NO_ACTION_TAPPING
|
||||||
|
//#define NO_ACTION_ONESHOT
|
||||||
|
//#define NO_ACTION_MACRO
|
||||||
|
//#define NO_ACTION_FUNCTION
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,29 @@
|
||||||
|
#include "reddot.h"
|
||||||
|
#include "../../../../../quantum/keymap_extras/keymap_french.h"
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
|
[0] = KEYMAP(
|
||||||
|
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TAB, KC_CAPS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_FN0, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS,\
|
||||||
|
KC_LALT, FR_AMP, FR_EACU, FR_QUOT, FR_APOS, FR_LPRN, KC_BSPACE, KC_DELETE, FR_MINS, FR_EGRV, FR_UNDS, FR_CCED, FR_AGRV, FR_RPRN, FR_EQL, KC_INSERT, KC_HOME, KC_PGUP,\
|
||||||
|
KC_LGUI, FR_A, FR_Z, KC_E, KC_R, KC_T, KC_LSFT, KC_ENT, KC_Y, KC_U, KC_I, KC_O, KC_P, FR_CIRC, FR_DLR, KC_DELETE, KC_END, KC_PGDOWN, KC_KP_PLUS,\
|
||||||
|
KC_LCTL, FR_Q, KC_S, KC_D, KC_F, KC_G, KC_ENT, KC_H, KC_J, KC_K, KC_L, FR_M, FR_UGRV, FR_ASTR, KC_KP_1, KC_UP, KC_KP_3,\
|
||||||
|
FR_LESS, FR_W, KC_X, KC_C, KC_V, KC_B, KC_SPACE, KC_SPACE, KC_N, FR_COMM, FR_SCLN, FR_COLN, FR_EXLM, NO_ALGR, KC_LEFT, KC_DOWN, KC_RIGHT, KC_KP_ENTER),
|
||||||
|
|
||||||
|
[1] = KEYMAP(
|
||||||
|
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TAB, KC_CAPS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_FN0, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS,\
|
||||||
|
KC_LALT, FR_AMP, FR_EACU, FR_QUOT, FR_APOS, FR_LPRN, KC_BSPACE, KC_DELETE, FR_MINS, FR_EGRV, FR_UNDS, FR_CCED, FR_AGRV, FR_RPRN, FR_EQL, KC_7, KC_8, KC_9,\
|
||||||
|
KC_LGUI, FR_A, FR_Z, KC_E, KC_R, KC_T, KC_LSFT, KC_ENT, KC_Y, KC_U, KC_I, KC_O, KC_P, FR_CIRC, FR_DLR, KC_4, KC_5, KC_6, KC_KP_PLUS,\
|
||||||
|
KC_LCTL, FR_Q, KC_S, KC_D, KC_F, KC_G, KC_ENT, KC_H, KC_J, KC_K, KC_L, FR_M, FR_UGRV, FR_ASTR, KC_1, KC_2, KC_3,\
|
||||||
|
FR_LESS, FR_W, KC_X, KC_C, KC_V, KC_B, KC_SPACE, KC_SPACE, KC_N, FR_COMM, FR_SCLN, FR_COLN, FR_EXLM, NO_ALGR, KC_LEFT, KC_DOWN, KC_RIGHT, KC_KP_ENTER),
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
ACTION_LAYER_TOGGLE(1),
|
||||||
|
};
|
||||||
|
|
||||||
|
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||||
|
return MACRO_NONE;
|
||||||
|
};
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
# The default keymap for handwired/reddot
|
|
@ -0,0 +1,24 @@
|
||||||
|
## RedDot Specific Info ##
|
||||||
|
|
||||||
|
|
||||||
|
## Quantum MK Firmware
|
||||||
|
|
||||||
|
For the full Quantum feature list, see [the parent README.md](/README.md).
|
||||||
|
|
||||||
|
## Building
|
||||||
|
|
||||||
|
Download or clone the whole firmware and navigate to the keyboard/reddot folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file.
|
||||||
|
|
||||||
|
Depending on which keymap you would like to use, you will have to compile slightly differently.
|
||||||
|
|
||||||
|
### Default
|
||||||
|
To build with the default keymap, simply run `make`.
|
||||||
|
|
||||||
|
### Other Keymaps
|
||||||
|
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` and see keymap document (you can find in top README.md) and existent keymap files.
|
||||||
|
|
||||||
|
To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
|
||||||
|
```
|
||||||
|
$ make KEYMAP=[default|jack|<name>]
|
||||||
|
```
|
||||||
|
Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
|
|
@ -0,0 +1,7 @@
|
||||||
|
#include "reddot.h"
|
||||||
|
|
||||||
|
void matrix_init_kb(void) {
|
||||||
|
|
||||||
|
matrix_init_user();
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
#ifndef REDDOT_H
|
||||||
|
#define REDDOT_H
|
||||||
|
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
#define KEYMAP( \
|
||||||
|
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k10, k11, k12, k13, \
|
||||||
|
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k30, k31, k32, \
|
||||||
|
k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k50, k51, k52, k53, \
|
||||||
|
k60, k61, k62, k63, k64, k65, k66, k68, k69, k6A, k6B, k6C, k6D, k6E, k70, k71, k72, \
|
||||||
|
k80, k81, k82, k83, k84, k85, k86, k88, k89, k8A, k8B, k8C, k8D, k8E, k90, k91, k92, k93\
|
||||||
|
) { \
|
||||||
|
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k10, k11, k12, k13 }, \
|
||||||
|
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k30, k31, k32, KC_NO }, \
|
||||||
|
{ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k50, k51, k52, k53 }, \
|
||||||
|
{ k60, k61, k62, k63, k64, k65, k66, KC_NO, k68, k69, k6A, k6B, k6C, k6D, k6E, k70, k71, k72, KC_NO }, \
|
||||||
|
{ k80, k81, k82, k83, k84, k85, k86, KC_NO, k88, k89, k8A, k8B, k8C, k8D, k8E, k90, k91, k92, k93 } \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,88 @@
|
||||||
|
|
||||||
|
#MCU = at90usb1287
|
||||||
|
MCU = atmega32u4
|
||||||
|
|
||||||
|
# Processor frequency.
|
||||||
|
# This will define a symbol, F_CPU, in all source code files equal to the
|
||||||
|
# processor frequency in Hz. You can then use this symbol in your source code to
|
||||||
|
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
||||||
|
# automatically to create a 32-bit value in your source code.
|
||||||
|
#
|
||||||
|
# This will be an integer division of F_USB below, as it is sourced by
|
||||||
|
# F_USB after it has run through any CPU prescalers. Note that this value
|
||||||
|
# does not *change* the processor frequency - it should merely be updated to
|
||||||
|
# reflect the processor speed set externally so that the code can use accurate
|
||||||
|
# software delays.
|
||||||
|
F_CPU = 16000000
|
||||||
|
|
||||||
|
# for avr upload
|
||||||
|
USB ?= /dev/cu.usbmodem1421
|
||||||
|
#
|
||||||
|
# LUFA specific
|
||||||
|
#
|
||||||
|
# Target architecture (see library "Board Types" documentation).
|
||||||
|
ARCH = AVR8
|
||||||
|
|
||||||
|
# Input clock frequency.
|
||||||
|
# This will define a symbol, F_USB, in all source code files equal to the
|
||||||
|
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
||||||
|
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
||||||
|
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
||||||
|
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
||||||
|
# at the end, this will be done automatically to create a 32-bit value in your
|
||||||
|
# source code.
|
||||||
|
#
|
||||||
|
# If no clock division is performed on the input clock inside the AVR (via the
|
||||||
|
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
||||||
|
F_USB = $(F_CPU)
|
||||||
|
|
||||||
|
|
||||||
|
ifdef TEENSY2
|
||||||
|
OPT_DEFS += -DATREUS_TEENSY2
|
||||||
|
ATREUS_UPLOAD_COMMAND = teensy_loader_cli -w -mmcu=$(MCU) $(TARGET).hex
|
||||||
|
else
|
||||||
|
OPT_DEFS += -DATREUS_ASTAR
|
||||||
|
OPT_DEFS += -DCATERINA_BOOTLOADER
|
||||||
|
ATREUS_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \
|
||||||
|
avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB)
|
||||||
|
endif
|
||||||
|
# Interrupt driven control endpoint task(+60)
|
||||||
|
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||||
|
|
||||||
|
|
||||||
|
# MCU name
|
||||||
|
|
||||||
|
# Boot Section Size in *bytes*
|
||||||
|
# Teensy halfKay 512
|
||||||
|
# Teensy++ halfKay 1024
|
||||||
|
# Atmel DFU loader 4096
|
||||||
|
# LUFA bootloader 4096
|
||||||
|
# USBaspLoader 2048
|
||||||
|
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||||
|
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# change yes to no to disable
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
|
||||||
|
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
||||||
|
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||||
|
CONSOLE_ENABLE ?= no # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE ?= no # Commands for debug and configuration
|
||||||
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
|
SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
|
||||||
|
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
|
NKRO_ENABLE ?= no # USB Nkey Rollover
|
||||||
|
BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default
|
||||||
|
MIDI_ENABLE ?= no # MIDI controls
|
||||||
|
UNICODE_ENABLE ?= no # Unicode
|
||||||
|
BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
|
AUDIO_ENABLE ?= no # Audio output on port C6
|
||||||
|
|
||||||
|
ifndef QUANTUM_DIR
|
||||||
|
include ../../../Makefile
|
||||||
|
endif
|
||||||
|
|
||||||
|
upload: build
|
||||||
|
$(ATREUS_UPLOAD_COMMAND)
|
||||||
|
|
|
@ -1 +1,16 @@
|
||||||
#include "kc60.h"
|
#include "kc60.h"
|
||||||
|
|
||||||
|
void led_set_kb(uint8_t usb_led)
|
||||||
|
{
|
||||||
|
if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
|
||||||
|
// output low
|
||||||
|
DDRB |= (1<<2);
|
||||||
|
PORTB &= ~(1<<2);
|
||||||
|
} else {
|
||||||
|
// Hi-Z
|
||||||
|
DDRB &= ~(1<<2);
|
||||||
|
PORTB &= ~(1<<2);
|
||||||
|
}
|
||||||
|
|
||||||
|
led_set_user(usb_led);
|
||||||
|
}
|
|
@ -1,6 +1,3 @@
|
||||||
# project specific files
|
|
||||||
SRC = led.c
|
|
||||||
|
|
||||||
# MCU name
|
# MCU name
|
||||||
#MCU = at90usb1287
|
#MCU = at90usb1287
|
||||||
MCU = atmega32u4
|
MCU = atmega32u4
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
SUBPROJECT_DEFAULT = rev2
|
||||||
|
|
||||||
ifndef MAKEFILE_INCLUDED
|
ifndef MAKEFILE_INCLUDED
|
||||||
include ../../Makefile
|
include ../../Makefile
|
||||||
endif
|
endif
|
|
@ -26,4 +26,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#ifdef SUBPROJECT_rev2
|
#ifdef SUBPROJECT_rev2
|
||||||
#include "rev2/config.h"
|
#include "rev2/config.h"
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef SUBPROJECT_rev2fliphalf
|
||||||
|
#include "../../rev2fliphalf/config.h"
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
:080000000000000000000001F7
|
:0B0000000000000000000000000001F4
|
||||||
:00000001FF
|
:00000001FF
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
:080000000000000000000000F8
|
:0B0000000000000000000000000000F5
|
||||||
:00000001FF
|
:00000001FF
|
||||||
|
|
|
@ -16,8 +16,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
#define USE_I2C
|
#define USE_I2C
|
||||||
|
|
||||||
#define I2C_MASTER_LEFT
|
#define MASTER_LEFT
|
||||||
// #define I2C_MASTER_RIGHT
|
// #define _MASTER_RIGHT
|
||||||
|
// #define EE_HANDS
|
||||||
|
|
||||||
#ifdef SUBPROJECT_rev1
|
#ifdef SUBPROJECT_rev1
|
||||||
#include "../../rev1/config.h"
|
#include "../../rev1/config.h"
|
||||||
|
@ -25,3 +26,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#ifdef SUBPROJECT_rev2
|
#ifdef SUBPROJECT_rev2
|
||||||
#include "../../rev2/config.h"
|
#include "../../rev2/config.h"
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef SUBPROJECT_rev2fliphalf
|
||||||
|
#include "../../rev2fliphalf/config.h"
|
||||||
|
#endif
|
||||||
|
|
|
@ -18,7 +18,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
#define USE_SERIAL
|
#define USE_SERIAL
|
||||||
|
|
||||||
#define EE_HANDS
|
#define MASTER_LEFT
|
||||||
|
// #define _MASTER_RIGHT
|
||||||
|
// #define EE_HANDS
|
||||||
|
|
||||||
|
|
||||||
#ifdef SUBPROJECT_rev1
|
#ifdef SUBPROJECT_rev1
|
||||||
|
@ -27,3 +29,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#ifdef SUBPROJECT_rev2
|
#ifdef SUBPROJECT_rev2
|
||||||
#include "../../rev2/config.h"
|
#include "../../rev2/config.h"
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef SUBPROJECT_rev2fliphalf
|
||||||
|
#include "../../rev2fliphalf/config.h"
|
||||||
|
#endif
|
||||||
|
|
|
@ -7,6 +7,9 @@
|
||||||
#ifdef SUBPROJECT_rev2
|
#ifdef SUBPROJECT_rev2
|
||||||
#include "rev2.h"
|
#include "rev2.h"
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef SUBPROJECT_rev2fliphalf
|
||||||
|
#include "rev2fliphalf.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "quantum.h"
|
#include "quantum.h"
|
||||||
|
|
||||||
|
|
|
@ -6,9 +6,45 @@ This readme and most of the code are from https://github.com/ahtn/tmk_keyboard/
|
||||||
Split keyboard firmware for Arduino Pro Micro or other ATmega32u4
|
Split keyboard firmware for Arduino Pro Micro or other ATmega32u4
|
||||||
based boards.
|
based boards.
|
||||||
|
|
||||||
|
|
||||||
|
## First Time Setup
|
||||||
|
|
||||||
|
Download or clone the whole firmware and navigate to the keyboards/lets_split directory. Once your dev env is setup, you'll be able to generate the default .hex using:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ make rev2
|
||||||
|
```
|
||||||
|
|
||||||
|
You will see a lot of output and if everything worked correctly you will see the built hex files:
|
||||||
|
|
||||||
|
```
|
||||||
|
lets_split_rev2_serial.hex
|
||||||
|
lets_split_rev2_i2c.hex
|
||||||
|
```
|
||||||
|
|
||||||
|
If you would like to use one of the alternative keymaps, or create your own, copy one of the existing [keymaps](keymaps/) and run make like so:
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
$ make rev2-YOUR_KEYMAP_NAME
|
||||||
|
```
|
||||||
|
|
||||||
|
If everything worked correctly you will see a file:
|
||||||
|
|
||||||
|
```
|
||||||
|
lets_split_rev2_YOUR_KEYMAP_NAME.hex
|
||||||
|
```
|
||||||
|
|
||||||
|
For more information on customizing keymaps, take a look at the primary documentation for [Customizing Your Keymap](/readme.md##customizing-your-keymap) in the main readme.md.
|
||||||
|
|
||||||
|
### Let's split 1.0
|
||||||
|
If you have a first generation Let's Split you will need to use the revision 1 code. To do so, use `rev1` in all your commands instead.
|
||||||
|
|
||||||
Features
|
Features
|
||||||
--------
|
--------
|
||||||
|
|
||||||
|
For the full Quantum Mechanical Keyboard feature list, see [the parent readme.md](/readme.md).
|
||||||
|
|
||||||
Some features supported by the firmware:
|
Some features supported by the firmware:
|
||||||
|
|
||||||
* Either half can connect to the computer via USB, or both halves can be used
|
* Either half can connect to the computer via USB, or both halves can be used
|
||||||
|
@ -62,7 +98,7 @@ unnecessary in simple use cases.
|
||||||
Notes on Software Configuration
|
Notes on Software Configuration
|
||||||
-------------------------------
|
-------------------------------
|
||||||
|
|
||||||
Configuring the firmware is similar to any other TMK project. One thing
|
Configuring the firmware is similar to any other QMK project. One thing
|
||||||
to note is that `MATIX_ROWS` in `config.h` is the total number of rows between
|
to note is that `MATIX_ROWS` in `config.h` is the total number of rows between
|
||||||
the two halves, i.e. if your split keyboard has 4 rows in each half, then
|
the two halves, i.e. if your split keyboard has 4 rows in each half, then
|
||||||
`MATRIX_ROWS=8`.
|
`MATRIX_ROWS=8`.
|
||||||
|
@ -70,33 +106,59 @@ the two halves, i.e. if your split keyboard has 4 rows in each half, then
|
||||||
Also the current implementation assumes a maximum of 8 columns, but it would
|
Also the current implementation assumes a maximum of 8 columns, but it would
|
||||||
not be very difficult to adapt it to support more if required.
|
not be very difficult to adapt it to support more if required.
|
||||||
|
|
||||||
|
|
||||||
Flashing
|
Flashing
|
||||||
--------
|
-------
|
||||||
|
From the keymap directory run `make SUBPROJECT-KEYMAP-avrdude` for automatic serial port resolution and flashing.
|
||||||
|
Example: `make rev2-serial-avrdude`
|
||||||
|
|
||||||
|
|
||||||
|
Choosing which board to plug the USB cable into (choosing Master)
|
||||||
|
--------
|
||||||
|
Because the two boards are identical, the firmware has logic to differentiate the left and right board.
|
||||||
|
|
||||||
|
It uses two strategies to figure things out: look at the EEPROM (memory on the chip) or looks if the current board has the usb cable.
|
||||||
|
|
||||||
|
The EEPROM approach requires additional setup (flashing the eeeprom) but allows you to swap the usb cable to either side.
|
||||||
|
|
||||||
|
The USB cable approach is easier to setup and if you just want the usb cable on the left board, you do not need to do anything extra.
|
||||||
|
|
||||||
|
### Setting the left hand as master
|
||||||
|
If you always plug the usb cable into the left board, nothing extra is needed as this is the default. Comment out `EE_HANDS` and comment out `I2C_MASTER_RIGHT` or `MASTER_RIGHT` if for some reason it was set.
|
||||||
|
|
||||||
|
### Setting the right hand as master
|
||||||
|
If you always plug the usb cable into the right board, add an extra flag to your `config.h`
|
||||||
|
```
|
||||||
|
#define MASTER_RIGHT
|
||||||
|
```
|
||||||
|
|
||||||
|
### Setting EE_hands to use either hands as master
|
||||||
If you define `EE_HANDS` in your `config.h`, you will need to set the
|
If you define `EE_HANDS` in your `config.h`, you will need to set the
|
||||||
EEPROM for the left and right halves. The EEPROM is used to store whether the
|
EEPROM for the left and right halves.
|
||||||
|
|
||||||
|
The EEPROM is used to store whether the
|
||||||
half is left handed or right handed. This makes it so that the same firmware
|
half is left handed or right handed. This makes it so that the same firmware
|
||||||
file will run on both hands instead of having to flash left and right handed
|
file will run on both hands instead of having to flash left and right handed
|
||||||
versions of the firmware to each half. To flash the EEPROM file for the left
|
versions of the firmware to each half. To flash the EEPROM file for the left
|
||||||
half run:
|
half run:
|
||||||
```
|
```
|
||||||
make eeprom-left
|
avrdude -p atmega32u4 -P $(COM_PORT) -c avr109 -U eeprom:w:eeprom-lefthand.eep
|
||||||
|
// or the equivalent in dfu-programmer
|
||||||
|
|
||||||
```
|
```
|
||||||
and similarly for right half
|
and similarly for right half
|
||||||
```
|
```
|
||||||
make eeprom-right
|
avrdude -p atmega32u4 -P $(COM_PORT) -c avr109 -U eeprom:w:eeprom-righhand.eep
|
||||||
|
// or the equivalent in dfu-programmer
|
||||||
```
|
```
|
||||||
|
|
||||||
After you have flashed the EEPROM for the first time, you then need to program
|
NOTE: replace `$(COM_PORT)` with the port of your device (e.g. `/dev/ttyACM0`)
|
||||||
the flash memory:
|
|
||||||
```
|
After you have flashed the EEPROM, you then need to set `EE_HANDS` in your config.h, rebuild the hex files and reflash.
|
||||||
make program
|
|
||||||
```
|
|
||||||
Note that you need to program both halves, but you have the option of using
|
Note that you need to program both halves, but you have the option of using
|
||||||
different keymaps for each half. You could program the left half with a QWERTY
|
different keymaps for each half. You could program the left half with a QWERTY
|
||||||
layout and the right half with a Colemak layout. Then if you connect the left
|
layout and the right half with a Colemak layout using bootmagic's default layout option.
|
||||||
half to a computer by USB the keyboard will use QWERTY and Colemak when the
|
Then if you connect the left half to a computer by USB the keyboard will use QWERTY and Colemak when the
|
||||||
right half is connected.
|
right half is connected.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -9,10 +9,10 @@
|
||||||
//void promicro_bootloader_jmp(bool program);
|
//void promicro_bootloader_jmp(bool program);
|
||||||
|
|
||||||
#define KEYMAP( \
|
#define KEYMAP( \
|
||||||
k00, k01, k02, k03, k04, k05, k40, k41, k42, k43, k44, k45, \
|
k00, k01, k02, k03, k04, k05, k45, k44, k43, k42, k41, k40, \
|
||||||
k10, k11, k12, k13, k14, k15, k50, k51, k52, k53, k54, k55, \
|
k10, k11, k12, k13, k14, k15, k55, k54, k53, k52, k51, k50, \
|
||||||
k20, k21, k22, k23, k24, k25, k60, k61, k62, k63, k64, k65, \
|
k20, k21, k22, k23, k24, k25, k65, k64, k63, k62, k61, k60, \
|
||||||
k30, k31, k32, k33, k34, k35, k70, k71, k72, k73, k74, k75 \
|
k30, k31, k32, k33, k34, k35, k75, k74, k73, k72, k71, k70 \
|
||||||
) \
|
) \
|
||||||
{ \
|
{ \
|
||||||
{ k00, k01, k02, k03, k04, k05 }, \
|
{ k00, k01, k02, k03, k04, k05 }, \
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
ifndef MAKEFILE_INCLUDED
|
||||||
|
include ../../Makefile
|
||||||
|
endif
|
|
@ -0,0 +1,91 @@
|
||||||
|
/*
|
||||||
|
Copyright 2012 Jun Wako <wakojun@gmail.com>
|
||||||
|
|
||||||
|
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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CONFIG_H
|
||||||
|
#define CONFIG_H
|
||||||
|
|
||||||
|
#include "config_common.h"
|
||||||
|
|
||||||
|
/* USB Device descriptor parameter */
|
||||||
|
#define VENDOR_ID 0xFEED
|
||||||
|
#define PRODUCT_ID 0x3060
|
||||||
|
#define DEVICE_VER 0x0001
|
||||||
|
#define MANUFACTURER Wootpatoot
|
||||||
|
#define PRODUCT Lets Split v2
|
||||||
|
#define DESCRIPTION A split keyboard for the cheap makers
|
||||||
|
|
||||||
|
/* key matrix size */
|
||||||
|
// Rows are doubled-up
|
||||||
|
#define MATRIX_ROWS 8
|
||||||
|
#define MATRIX_COLS 6
|
||||||
|
|
||||||
|
// wiring of each half
|
||||||
|
#define MATRIX_ROW_PINS { D7, E6, B4, B5 }
|
||||||
|
//#define MATRIX_COL_PINS { F6, F7, B1, B3, B2, B6 }
|
||||||
|
#define MATRIX_COL_PINS { B6, B2, B3, B1, F7, F6 } //uncomment this line and comment line above if you need to reverse left-to-right key order
|
||||||
|
|
||||||
|
//#define CATERINA_BOOTLOADER
|
||||||
|
|
||||||
|
/* COL2ROW or ROW2COL */
|
||||||
|
#define DIODE_DIRECTION COL2ROW
|
||||||
|
|
||||||
|
/* define if matrix has ghost */
|
||||||
|
//#define MATRIX_HAS_GHOST
|
||||||
|
|
||||||
|
/* number of backlight levels */
|
||||||
|
// #define BACKLIGHT_LEVELS 3
|
||||||
|
|
||||||
|
/* Set 0 if debouncing isn't needed */
|
||||||
|
#define DEBOUNCING_DELAY 5
|
||||||
|
|
||||||
|
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
||||||
|
#define LOCKING_SUPPORT_ENABLE
|
||||||
|
/* Locking resynchronize hack */
|
||||||
|
#define LOCKING_RESYNC_ENABLE
|
||||||
|
|
||||||
|
/* key combination for command */
|
||||||
|
#define IS_COMMAND() ( \
|
||||||
|
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
||||||
|
)
|
||||||
|
|
||||||
|
/* ws2812 RGB LED */
|
||||||
|
#define RGB_DI_PIN D3
|
||||||
|
#define RGBLIGHT_TIMER
|
||||||
|
#define RGBLED_NUM 12 // Number of LEDs
|
||||||
|
#define ws2812_PORTREG PORTD
|
||||||
|
#define ws2812_DDRREG DDRD
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Feature disable options
|
||||||
|
* These options are also useful to firmware size reduction.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* disable debug print */
|
||||||
|
// #define NO_DEBUG
|
||||||
|
|
||||||
|
/* disable print */
|
||||||
|
// #define NO_PRINT
|
||||||
|
|
||||||
|
/* disable action features */
|
||||||
|
//#define NO_ACTION_LAYER
|
||||||
|
//#define NO_ACTION_TAPPING
|
||||||
|
//#define NO_ACTION_ONESHOT
|
||||||
|
//#define NO_ACTION_MACRO
|
||||||
|
//#define NO_ACTION_FUNCTION
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,32 @@
|
||||||
|
#include "lets_split.h"
|
||||||
|
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
float tone_startup[][2] = SONG(STARTUP_SOUND);
|
||||||
|
float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void matrix_init_kb(void) {
|
||||||
|
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
_delay_ms(20); // gets rid of tick
|
||||||
|
PLAY_NOTE_ARRAY(tone_startup, false, 0);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// // green led on
|
||||||
|
// DDRD |= (1<<5);
|
||||||
|
// PORTD &= ~(1<<5);
|
||||||
|
|
||||||
|
// // orange led on
|
||||||
|
// DDRB |= (1<<0);
|
||||||
|
// PORTB &= ~(1<<0);
|
||||||
|
|
||||||
|
matrix_init_user();
|
||||||
|
};
|
||||||
|
|
||||||
|
void shutdown_user(void) {
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
|
||||||
|
_delay_ms(150);
|
||||||
|
stop_all_notes();
|
||||||
|
#endif
|
||||||
|
}
|
|
@ -0,0 +1,28 @@
|
||||||
|
#ifndef REV2FLIPHALF_H
|
||||||
|
#define REV2FLIPHALF_H
|
||||||
|
|
||||||
|
#include "../lets_split.h"
|
||||||
|
|
||||||
|
//void promicro_bootloader_jmp(bool program);
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
//void promicro_bootloader_jmp(bool program);
|
||||||
|
|
||||||
|
#define KEYMAP( \
|
||||||
|
k00, k01, k02, k03, k04, k05, k40, k41, k42, k43, k44, k45, \
|
||||||
|
k10, k11, k12, k13, k14, k15, k50, k51, k52, k53, k54, k55, \
|
||||||
|
k20, k21, k22, k23, k24, k25, k60, k61, k62, k63, k64, k65, \
|
||||||
|
k30, k31, k32, k33, k34, k35, k70, k71, k72, k73, k74, k75 \
|
||||||
|
) \
|
||||||
|
{ \
|
||||||
|
{ k00, k01, k02, k03, k04, k05 }, \
|
||||||
|
{ k10, k11, k12, k13, k14, k15 }, \
|
||||||
|
{ k20, k21, k22, k23, k24, k25 }, \
|
||||||
|
{ k30, k31, k32, k33, k34, k35 }, \
|
||||||
|
{ k40, k41, k42, k43, k44, k45 }, \
|
||||||
|
{ k50, k51, k52, k53, k54, k55 }, \
|
||||||
|
{ k60, k61, k62, k63, k64, k65 }, \
|
||||||
|
{ k70, k71, k72, k73, k74, k75 } \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,5 @@
|
||||||
|
BACKLIGHT_ENABLE = no
|
||||||
|
|
||||||
|
ifndef QUANTUM_DIR
|
||||||
|
include ../../../Makefile
|
||||||
|
endif
|
|
@ -73,3 +73,15 @@ USE_I2C ?= yes
|
||||||
SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
|
SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
|
||||||
|
|
||||||
CUSTOM_MATRIX = yes
|
CUSTOM_MATRIX = yes
|
||||||
|
|
||||||
|
avrdude: build
|
||||||
|
ls /dev/tty* > /tmp/1; \
|
||||||
|
echo "Reset your Pro Micro now"; \
|
||||||
|
while [[ -z $$USB ]]; do \
|
||||||
|
sleep 1; \
|
||||||
|
ls /dev/tty* > /tmp/2; \
|
||||||
|
USB=`diff /tmp/1 /tmp/2 | grep -o '/dev/tty.*'`; \
|
||||||
|
done; \
|
||||||
|
avrdude -p $(MCU) -c avr109 -P $$USB -U flash:w:$(BUILD_DIR)/$(TARGET).hex
|
||||||
|
|
||||||
|
.PHONY: avrdude
|
||||||
|
|
|
@ -21,7 +21,8 @@ static void setup_handedness(void) {
|
||||||
#ifdef EE_HANDS
|
#ifdef EE_HANDS
|
||||||
isLeftHand = eeprom_read_byte(EECONFIG_HANDEDNESS);
|
isLeftHand = eeprom_read_byte(EECONFIG_HANDEDNESS);
|
||||||
#else
|
#else
|
||||||
#ifdef I2C_MASTER_RIGHT
|
// I2C_MASTER_RIGHT is deprecated use MASTER_RIGHT instead since this works for both serial and i2c
|
||||||
|
#if defined(I2C_MASTER_RIGHT) || defined(MASTER_RIGHT)
|
||||||
isLeftHand = !has_usb();
|
isLeftHand = !has_usb();
|
||||||
#else
|
#else
|
||||||
isLeftHand = has_usb();
|
isLeftHand = has_usb();
|
||||||
|
|
|
@ -12,8 +12,6 @@ extern keymap_config_t keymap_config;
|
||||||
#define _SYMB 2
|
#define _SYMB 2
|
||||||
#define _MOUSE 3
|
#define _MOUSE 3
|
||||||
#define _FUNC 4
|
#define _FUNC 4
|
||||||
#define CMDLEFT LGUI(KC_LEFT)
|
|
||||||
#define CMDRGHT LGUI(KC_RGHT)
|
|
||||||
#define ENDASH LALT(KC_MINS)
|
#define ENDASH LALT(KC_MINS)
|
||||||
#define POUND LALT(KC_3)
|
#define POUND LALT(KC_3)
|
||||||
|
|
||||||
|
@ -50,7 +48,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
/* MOVE
|
/* MOVE
|
||||||
* ,-----------------------------------------------------------------------------------.
|
* ,-----------------------------------------------------------------------------------.
|
||||||
* | Esc | | Cmd-L| Up | Cmd-R| | | Cmd-L| Up | Cmd-R| | Esc |
|
* | Esc | | Home | Up | End | | | Home | Up | End | | Esc |
|
||||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
* | Del | Caps | Left | Down | Right| | | Left | Down | Right| Caps | Del |
|
* | Del | Caps | Left | Down | Right| | | Left | Down | Right| Caps | Del |
|
||||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
@ -60,7 +58,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
* `-----------------------------------------------------------------------------------'
|
* `-----------------------------------------------------------------------------------'
|
||||||
*/
|
*/
|
||||||
[_MOVE] = {
|
[_MOVE] = {
|
||||||
{KC_ESC, XXXXXXX, CMDLEFT, KC_UP, CMDRGHT, XXXXXXX, XXXXXXX, CMDLEFT, KC_UP, CMDRGHT, XXXXXXX, KC_ESC },
|
{KC_ESC, XXXXXXX, KC_HOME, KC_UP, KC_END, XXXXXXX, XXXXXXX, KC_HOME, KC_UP, KC_END, XXXXXXX, KC_ESC },
|
||||||
{KC_DEL, KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_CAPS, KC_DEL },
|
{KC_DEL, KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_CAPS, KC_DEL },
|
||||||
{_______, XXXXXXX, XXXXXXX, KC_PGUP, KC_PGDN, XXXXXXX, XXXXXXX, KC_PGDN, KC_PGUP, XXXXXXX, XXXXXXX, _______},
|
{_______, XXXXXXX, XXXXXXX, KC_PGUP, KC_PGDN, XXXXXXX, XXXXXXX, KC_PGDN, KC_PGUP, XXXXXXX, XXXXXXX, _______},
|
||||||
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
|
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
|
||||||
|
|
|
@ -23,7 +23,7 @@ We have five layers. A `BASE` layer, in colemak; a `MOVE` layer, with an arrow c
|
||||||
|
|
||||||
/* MOVE
|
/* MOVE
|
||||||
* ,-----------------------------------------------------------------------------------.
|
* ,-----------------------------------------------------------------------------------.
|
||||||
* | Esc | | Cmd-L| Up | Cmd-R| | | Cmd-L| Up | Cmd-R| | Esc |
|
* | Esc | | Home | Up | End | | | Home | Up | End | | Esc |
|
||||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
* | Del | Caps | Left | Down | Right| | | Left | Down | Right| Caps | Del |
|
* | Del | Caps | Left | Down | Right| | | Left | Down | Right| Caps | Del |
|
||||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
|
|
@ -0,0 +1,63 @@
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
# On command line:
|
||||||
|
#
|
||||||
|
# make all = Make software.
|
||||||
|
#
|
||||||
|
# make clean = Clean out built project files.
|
||||||
|
#
|
||||||
|
# make coff = Convert ELF to AVR COFF.
|
||||||
|
#
|
||||||
|
# make extcoff = Convert ELF to AVR Extended COFF.
|
||||||
|
#
|
||||||
|
# make program = Download the hex file to the device.
|
||||||
|
# Please customize your programmer settings(PROGRAM_CMD)
|
||||||
|
#
|
||||||
|
# make teensy = Download the hex file to the device, using teensy_loader_cli.
|
||||||
|
# (must have teensy_loader_cli installed).
|
||||||
|
#
|
||||||
|
# make dfu = Download the hex file to the device, using dfu-programmer (must
|
||||||
|
# have dfu-programmer installed).
|
||||||
|
#
|
||||||
|
# make flip = Download the hex file to the device, using Atmel FLIP (must
|
||||||
|
# have Atmel FLIP installed).
|
||||||
|
#
|
||||||
|
# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
|
||||||
|
# (must have dfu-programmer installed).
|
||||||
|
#
|
||||||
|
# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
|
||||||
|
# (must have Atmel FLIP installed).
|
||||||
|
#
|
||||||
|
# make debug = Start either simulavr or avarice as specified for debugging,
|
||||||
|
# with avr-gdb or avr-insight as the front end for debugging.
|
||||||
|
#
|
||||||
|
# make filename.s = Just compile filename.c into the assembler code only.
|
||||||
|
#
|
||||||
|
# make filename.i = Create a preprocessed source file for use in submitting
|
||||||
|
# bug reports to the GCC project.
|
||||||
|
#
|
||||||
|
# To rebuild project do "make clean" then "make all".
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# change to "no" to disable the options, or define them in the makefile.mk in
|
||||||
|
# the appropriate keymap folder that will get included automatically
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||||
|
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
||||||
|
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||||
|
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||||
|
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
|
BACKLIGHT_ENABLE = yes # 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.
|
||||||
|
|
||||||
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
|
|
||||||
|
ifndef QUANTUM_DIR
|
||||||
|
include ../../../../Makefile
|
||||||
|
endif
|
After Width: | Height: | Size: 52 KiB |
|
@ -0,0 +1,151 @@
|
||||||
|
#include "planck.h"
|
||||||
|
#include "action_layer.h"
|
||||||
|
#include "eeconfig.h"
|
||||||
|
#ifdef BACKLIGHT_ENABLE
|
||||||
|
#include "backlight.h"
|
||||||
|
#endif
|
||||||
|
#define PREVENT_STUCK_MODIFIERS
|
||||||
|
extern keymap_config_t keymap_config;
|
||||||
|
|
||||||
|
// Symbolic names for macro IDs.
|
||||||
|
#define _QWERTY 0 // QUERTY layer
|
||||||
|
#define _LOWER 1 // Lower layer
|
||||||
|
#define _RAISE 2 // Raise layer
|
||||||
|
#define _CUSTOM 3 // Custom layer (LOWER + RAISE)
|
||||||
|
#define _BL 4 // Backlight
|
||||||
|
#define _CUS0 5 // Mobile#
|
||||||
|
#define _CUS1 6 // signature
|
||||||
|
#define _CUS2 7 // macro 2
|
||||||
|
#define _CUS3 8 // macro 3
|
||||||
|
#define _CUS4 9 // macro 4
|
||||||
|
#define _CUS5 10 // email
|
||||||
|
#define _COPY 11 // copy
|
||||||
|
#define _PASTE 12 // paste
|
||||||
|
#define _CUT 13 // cut
|
||||||
|
|
||||||
|
// Macro shortcuts.
|
||||||
|
#define QWERTY M(_LOWER)
|
||||||
|
#define LOWER M(_LOWER)
|
||||||
|
#define RAISE M(_RAISE)
|
||||||
|
#define CUSTOM M(_CUSTOM)
|
||||||
|
#define BL M(_BL)
|
||||||
|
#define CUS0 M(_CUS0)
|
||||||
|
#define CUS1 M(_CUS1)
|
||||||
|
#define CUS2 M(_CUS2)
|
||||||
|
#define CUS3 M(_CUS3)
|
||||||
|
#define CUS4 M(_CUS4)
|
||||||
|
#define CUS5 M(_CUS5)
|
||||||
|
#define COPY M(_COPY)
|
||||||
|
#define PASTE M(_PASTE)
|
||||||
|
#define CUT M(_CUT)
|
||||||
|
|
||||||
|
// Func macro definitions.
|
||||||
|
#define LWR_PGDN FUNC(0) // Tap for PgDn, hold for LOWER
|
||||||
|
#define RSE_PGUP FUNC(1) // Tap for PgUp, hold for RAISE
|
||||||
|
#define CTL_CAPS FUNC(2) // Tap for Caps, hold for Ctrl (DOESN'T SEEM TO WORK)
|
||||||
|
#define SFT_ENT FUNC(3) // Tap for Enter, hold for Shift
|
||||||
|
#define ZM_NRM FUNC(4) // Zoom normal
|
||||||
|
#define ZM_IN FUNC(5) // Zoom out
|
||||||
|
#define ZM_OUT FUNC(6) // Zoom in
|
||||||
|
|
||||||
|
// Enable these functions using FUNC(n) macro.
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
[0] = ACTION_LAYER_TAP_KEY(_LOWER, KC_PGDN),
|
||||||
|
[1] = ACTION_LAYER_TAP_KEY(_RAISE, KC_PGUP),
|
||||||
|
[2] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_CAPS),
|
||||||
|
[3] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_ENT),
|
||||||
|
[4] = ACTION_MODS_KEY(MOD_LCTL, KC_0),
|
||||||
|
[5] = ACTION_MODS_KEY(MOD_LCTL, KC_MINS),
|
||||||
|
[6] = ACTION_MODS_KEY(MOD_LCTL, KC_PLUS),
|
||||||
|
[7] = ACTION_MODS_KEY(MOD_LCTL, KC_UNDS),
|
||||||
|
};
|
||||||
|
|
||||||
|
// This config can be found at Keyboard layout editor site: http://goo.gl/zjXL2l
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[_QWERTY] = { /* QWERTY */
|
||||||
|
{KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
|
||||||
|
{KC_DEL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT},
|
||||||
|
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT},
|
||||||
|
{KC_LCTL, KC_ESC, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
|
||||||
|
},
|
||||||
|
[_LOWER] = { /* LOWER */
|
||||||
|
{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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LPRN, KC_RPRN, KC_LCBR, KC_RCBR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS},
|
||||||
|
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, KC_QUOT, KC_DQT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS},
|
||||||
|
{KC_TRNS, ZM_NRM, ZM_IN, ZM_OUT, KC_TRNS, KC_PGDN, KC_PGDN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}
|
||||||
|
},
|
||||||
|
[_RAISE] = { /* RAISE */
|
||||||
|
{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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LCBR, KC_LCBR, KC_BSLS, KC_TRNS},
|
||||||
|
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSLS, KC_PIPE, KC_GRV, KC_TILD, KC_LBRC, KC_LBRC, KC_TRNS, KC_TRNS},
|
||||||
|
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_PGUP, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
|
||||||
|
},
|
||||||
|
[_CUSTOM] = { /* CUSTOM */
|
||||||
|
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, CUS4, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS},
|
||||||
|
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, CUS0, CUS3, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS},
|
||||||
|
{KC_TRNS, KC_TRNS, CUT, COPY, PASTE, CUS1, CUS5, CUS2, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS},
|
||||||
|
{BL, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Set a layer persistantly.
|
||||||
|
void persistant_default_layer_set(uint16_t default_layer) {
|
||||||
|
eeconfig_update_default_layer(default_layer);
|
||||||
|
default_layer_set(default_layer);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Macro actions for each corresponding ID.
|
||||||
|
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
|
{
|
||||||
|
switch(id) {
|
||||||
|
case _RAISE: // Raised layer.
|
||||||
|
if (record->event.pressed) {
|
||||||
|
layer_on(_RAISE);
|
||||||
|
update_tri_layer(_LOWER, _RAISE, _CUSTOM);
|
||||||
|
} else {
|
||||||
|
layer_off(_RAISE);
|
||||||
|
update_tri_layer(_LOWER, _RAISE, _CUSTOM);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case _LOWER: // Lowered layer.
|
||||||
|
if (record->event.pressed) {
|
||||||
|
layer_on(_LOWER);
|
||||||
|
update_tri_layer(_LOWER, _RAISE, _CUSTOM);
|
||||||
|
} else {
|
||||||
|
layer_off(_LOWER);
|
||||||
|
update_tri_layer(_LOWER, _RAISE, _CUSTOM);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case _BL: // Backlight
|
||||||
|
if (record->event.pressed) {
|
||||||
|
register_code(KC_RSFT);
|
||||||
|
#ifdef BACKLIGHT_ENABLE
|
||||||
|
backlight_step();
|
||||||
|
#endif
|
||||||
|
} else {
|
||||||
|
unregister_code(KC_RSFT);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case _CUS0: // enter your mobile# here
|
||||||
|
return MACRODOWN(T(9), T(9), T(9), T(MINS),T(9), T(9), T(9), T(MINS),T(9), T(9), T(9), T(9),END);
|
||||||
|
case _CUS1: // signature line for email
|
||||||
|
return MACRODOWN(T(ENT), T(ENT), T(MINS), T(J), T(W), END);
|
||||||
|
case _CUS2: // Custom macro 2
|
||||||
|
return MACRODOWN( DOWN(KC_LSFT), TYPE(KC_L), UP(KC_LSFT), END );
|
||||||
|
case _CUS3: // custom macro 3
|
||||||
|
return MACRODOWN( DOWN(KC_LSFT), TYPE(KC_F), UP(KC_LSFT), END );
|
||||||
|
case _CUS4: // custom macro 4
|
||||||
|
return MACRODOWN( DOWN(KC_LSFT), TYPE(KC_I), UP(KC_LSFT), END );
|
||||||
|
case _CUS5: // Enter your email here
|
||||||
|
return MACRODOWN( TYPE(KC_F),
|
||||||
|
DOWN(KC_LSFT), TYPE(KC_2), UP(KC_LSFT),
|
||||||
|
TYPE(KC_G), TYPE(KC_M), TYPE(KC_A), TYPE(KC_I), TYPE(KC_L), TYPE(KC_DOT), TYPE(KC_C), TYPE(KC_O), TYPE(KC_M), END );
|
||||||
|
case _CUT: //cut macro
|
||||||
|
return MACRODOWN( DOWN(KC_LCTL), TYPE(KC_X), UP(KC_LCTL), END );
|
||||||
|
case _COPY: // copy macro
|
||||||
|
return MACRODOWN( DOWN(KC_LCTL), TYPE(KC_C), UP(KC_LCTL), END );
|
||||||
|
case _PASTE: // paste macro
|
||||||
|
return MACRODOWN( DOWN(KC_LCTL), TYPE(KC_V), UP(KC_LCTL), END );
|
||||||
|
};
|
||||||
|
return MACRO_NONE;
|
||||||
|
}
|
|
@ -0,0 +1,271 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"backcolor": "#858585",
|
||||||
|
"name": "Planck 40%",
|
||||||
|
"author": "James Folkert",
|
||||||
|
"background": {
|
||||||
|
"name": "Aluminium brushed",
|
||||||
|
"style": "background-image: url('/bg/metal/aluminum_texture1642.jpg');"
|
||||||
|
},
|
||||||
|
"switchMount": "cherry",
|
||||||
|
"switchBrand": "cherry",
|
||||||
|
"switchType": "MX1A-A1xx",
|
||||||
|
"pcb": true,
|
||||||
|
"plate": true
|
||||||
|
},
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"fa": [
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
0,
|
||||||
|
2
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"F1\n1\n\n!\n\n\n\n\n\n<i class='kb kb-Tab-2'></i>",
|
||||||
|
"F2\n2\n\n@\n\n\n\n\n\nQ",
|
||||||
|
"F3\n3\n\n#\n\n\n\n\n\nW",
|
||||||
|
"F4\n4\n\n$\n\n\n\n\n\nE",
|
||||||
|
"F5\n5\n\n%\n\n\n\n\n\nR",
|
||||||
|
"F6\n6\n\n^\n\n\n\n\n\nT",
|
||||||
|
"F7\n6\n\n&\n\n\n\n\n\nY",
|
||||||
|
"F8\n8\n\n*\nMacro4\n\n\n\n\nU",
|
||||||
|
"F9\n9\n\n(\n\n\n\n\n\nI",
|
||||||
|
{
|
||||||
|
"fa": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
2
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"F10\n0\n\n)\n\n\n\n\n\nO",
|
||||||
|
{
|
||||||
|
"fa": [
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
0,
|
||||||
|
2
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"F11\n-\n\n_\n\n\n\n\n\nP",
|
||||||
|
"F12\n=\n\n+\n\n\n\n\n\n<i class='kb kb-Unicode-BackSpace-DeleteLeft-Big'></i>"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"a": 7,
|
||||||
|
"f": 3
|
||||||
|
},
|
||||||
|
"<i class='mss mss-Unicode-DeleteRight-Big-2'></i>",
|
||||||
|
{
|
||||||
|
"f": 3
|
||||||
|
},
|
||||||
|
"A",
|
||||||
|
{
|
||||||
|
"f": 3
|
||||||
|
},
|
||||||
|
"S",
|
||||||
|
{
|
||||||
|
"f": 3
|
||||||
|
},
|
||||||
|
"D",
|
||||||
|
{
|
||||||
|
"t": "#ff0000",
|
||||||
|
"a": 4,
|
||||||
|
"f": 3
|
||||||
|
},
|
||||||
|
"\n(\n\n\n\n\n\n\n\nF",
|
||||||
|
{
|
||||||
|
"t": "#000000",
|
||||||
|
"f": 3
|
||||||
|
},
|
||||||
|
"\n)\n\n\n\n\n\n\n\nG",
|
||||||
|
{
|
||||||
|
"f": 3
|
||||||
|
},
|
||||||
|
"\n{\n\n\nMacro0\n\n\n\n\nH",
|
||||||
|
{
|
||||||
|
"t": "#ff0000",
|
||||||
|
"f": 3
|
||||||
|
},
|
||||||
|
"\n}\n\n\nMacro3\n\n\n\n\nJ",
|
||||||
|
{
|
||||||
|
"t": "#000000",
|
||||||
|
"f": 3
|
||||||
|
},
|
||||||
|
"{\n\n\n\n\n\n\n\n\nK",
|
||||||
|
{
|
||||||
|
"f": 3
|
||||||
|
},
|
||||||
|
"{\n\n\n\n\n\n\n\n\nL",
|
||||||
|
{
|
||||||
|
"fa": [
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
2
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"\\\n\n|\n\n\n\n\n:\n\n;",
|
||||||
|
{
|
||||||
|
"a": 7,
|
||||||
|
"fa": [
|
||||||
|
9
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"<i class='mss mss-Unicode-Enter-3'></i>"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"f": 3
|
||||||
|
},
|
||||||
|
"Shift",
|
||||||
|
{
|
||||||
|
"f": 3
|
||||||
|
},
|
||||||
|
"Z",
|
||||||
|
{
|
||||||
|
"f": 3
|
||||||
|
},
|
||||||
|
"X\n\n\n\nCut",
|
||||||
|
{
|
||||||
|
"f": 3
|
||||||
|
},
|
||||||
|
"C\n\n\n\nCopy",
|
||||||
|
{
|
||||||
|
"a": 4,
|
||||||
|
"fa": [
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
2
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"\\\n[\n|\n{\nPaste\n\n\n\n\nV",
|
||||||
|
"|\n]\n\n}\nMacro1\n\n\n\n\nB",
|
||||||
|
"`\n'\n~\n\"\nMacro5\n\n\n\n\nN",
|
||||||
|
"~\n\"\n\n\nMacro2\n\n\n\n\nM",
|
||||||
|
{
|
||||||
|
"fa": [
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
1
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"[\n\n{\n\n\n\n\n<\n\n,",
|
||||||
|
"[\n\n{\n\n\n\n\n\n\n.",
|
||||||
|
{
|
||||||
|
"a": 6
|
||||||
|
},
|
||||||
|
"\n\n?\n\n\n\n\n\n/",
|
||||||
|
{
|
||||||
|
"a": 4,
|
||||||
|
"fa": [
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
9,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"\n\n\n<i class='kb kb-Arrows-Bottom-4'></i>Shift\n\n\n\n\n<i class='mss mss-Unicode-Enter-3'></i>\n\n<i class='kb kb-Arrows-Bottom-4'></i>Shift"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"a": 7,
|
||||||
|
"f": 3
|
||||||
|
},
|
||||||
|
"Ctrl\n\n\n\nBLight",
|
||||||
|
{
|
||||||
|
"a": 4,
|
||||||
|
"fa": [
|
||||||
|
2,
|
||||||
|
1,
|
||||||
|
2,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
9,
|
||||||
|
9
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"\nZNorm\n\n\nRESET\n\n\n\n\n<i class='mss mss-Unicode-Escape-3'></i>",
|
||||||
|
{
|
||||||
|
"fa": [
|
||||||
|
2,
|
||||||
|
1,
|
||||||
|
2,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
9,
|
||||||
|
6
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"\nZIn\n\n\n\n\n\n\n\n<i class='kb kb-logo-windows-8'></i>",
|
||||||
|
{
|
||||||
|
"fa": [
|
||||||
|
2,
|
||||||
|
1,
|
||||||
|
2,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
9,
|
||||||
|
9
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"\nZOut\n\n\n\n\n\n\n\n<i class='kb kb-Unicode-Alternate-1'></i>",
|
||||||
|
{
|
||||||
|
"a": 7,
|
||||||
|
"fa": [
|
||||||
|
9
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"⇓",
|
||||||
|
{
|
||||||
|
"a": 4,
|
||||||
|
"fa": [
|
||||||
|
9,
|
||||||
|
5,
|
||||||
|
5
|
||||||
|
],
|
||||||
|
"w": 2
|
||||||
|
},
|
||||||
|
"\n<i class='kb kb-Unicode-Page-Down-3'></i>\n<i class='kb kb-Unicode-Page-Up-3'></i>",
|
||||||
|
{
|
||||||
|
"a": 7
|
||||||
|
},
|
||||||
|
"⇑",
|
||||||
|
{
|
||||||
|
"a": 4,
|
||||||
|
"fa": [
|
||||||
|
2
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"<i class='kb kb-Multimedia-FastForward-End'></i>\n\n\n\n\n\n\n\n\n←",
|
||||||
|
"<i class='kb kb-Multimedia-Volume-Down-1'></i>\n\n\n\n\n\n\n\n\n↓",
|
||||||
|
"<i class='kb kb-Multimedia-Volume-Up-1'></i>\n\n\n\n\n\n\n\n\n↑",
|
||||||
|
"<i class='kb kb-Multimedia-Play-Pause'></i>\n\n\n\n\n\n\n\n\n→"
|
||||||
|
]
|
||||||
|
]
|
|
@ -0,0 +1,18 @@
|
||||||
|
# Espynn's keymap for Planck Ortholinear 40% Mechanical Keyboard
|
||||||
|
Created by James Folkert: https://twitter.com/trekloFsemaJ
|
||||||
|
Added several custom functions to the keymap from the "ab" map. Special thanks to "mollat" for demonstration of macros in their keymap.c
|
||||||
|
|
||||||
|
|
||||||
|
![Layout](keyboard-layout.png "Practical Keymap")
|
||||||
|
|
||||||
|
|
||||||
|
* Online keyboard layout editor: http://www.keyboard-layout-editor.com/
|
||||||
|
* [JSON of raw layout] (layout.json "JSON of raw layout")
|
||||||
|
|
||||||
|
# Notes
|
||||||
|
* Simultaneous RAISE+LOWER enters CUSTOM layer. Several custom keymaps are here
|
||||||
|
* I disregarded the advice of Jack and used macros for passwords. I accept my fate. These have been abstracted to macros 2, 3, and 4
|
||||||
|
* add your mobile and email to the keymap before make
|
||||||
|
* RAISE and LOWER also acts as PgUp and PgDn when tapped.
|
||||||
|
* [CapsLock] also acts as [Ctrl] key when you press and hold. It is convenient for GNU Emacs users. (not sure if this works)
|
||||||
|
* Bracket/ paran/ brace keys are placed in the center of the keyboard for programmer's convenience.
|
|
@ -0,0 +1,25 @@
|
||||||
|
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# change to "no" to disable the options, or define them in the Makefile in
|
||||||
|
# the appropriate keymap folder that will get included automatically
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||||
|
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
||||||
|
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||||
|
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||||
|
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
|
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
|
||||||
|
MIDI_ENABLE = no # MIDI controls
|
||||||
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
|
UNICODE_ENABLE = yes # 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.
|
||||||
|
|
||||||
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
|
|
||||||
|
ifndef QUANTUM_DIR
|
||||||
|
include ../../../../Makefile
|
||||||
|
endif
|
|
@ -0,0 +1,355 @@
|
||||||
|
/*
|
||||||
|
* A keyboard layout for the gridded planck.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2017 Luke Silva
|
||||||
|
*
|
||||||
|
* 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, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
*
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | | | | | | | | | | | | |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | | | | | | | | | | | | |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | | | | | | | | | | | | |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | | | | | | | | | | | | |
|
||||||
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
*
|
||||||
|
* This layout uses colemak by default, and is designed for programming, with easy access to symbols
|
||||||
|
* through either double purpose modifiers or colemak style rolling for commonly used symbol clusters
|
||||||
|
* Eg: compare colemak 'this' to '(){\n}' on the symbol layer.
|
||||||
|
*
|
||||||
|
* The layout also supports a range of multilingual characters, covering those
|
||||||
|
* needed for French, German, Swedish and likely some other European Languages.
|
||||||
|
* In the future full support for Colemak's multilingual deadkeys may be introduced.
|
||||||
|
*
|
||||||
|
* The multilingual characters are inputted through QMK's unicode engine, using
|
||||||
|
* the Linux input method by default, however this can be changed at runtime.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "planck.h"
|
||||||
|
|
||||||
|
#define _______ KC_TRNS
|
||||||
|
#define XXXXXXX KC_NO
|
||||||
|
|
||||||
|
|
||||||
|
// Layers
|
||||||
|
#define _COLEMAK 0
|
||||||
|
#define _QWERTY 1
|
||||||
|
#define _SYM 2
|
||||||
|
#define _NUM 3
|
||||||
|
#define _GR 4
|
||||||
|
#define _GR_S 5
|
||||||
|
#define _ADJ 6
|
||||||
|
#define _NAV 7
|
||||||
|
#define _PLOVER 8
|
||||||
|
|
||||||
|
// Macro ID numbers
|
||||||
|
#define M_ALT_HASH 1
|
||||||
|
#define M_GR_DASH 2
|
||||||
|
#define M_SYM_LPRN 3
|
||||||
|
#define M_NAV_UNDS 4
|
||||||
|
#define M_NUM_RPRN 5
|
||||||
|
#define M_CTRL_DLR 6
|
||||||
|
#define M_LCBR_ENT 7
|
||||||
|
#define M_PLOVER 8
|
||||||
|
#define M_EXT_PLV 9
|
||||||
|
#define M_WINDOWS 10
|
||||||
|
#define M_LINUX 11
|
||||||
|
#define M_OSX 12
|
||||||
|
#define M_FUNCTION 13
|
||||||
|
#define M_THEN 14
|
||||||
|
#define M_CATCH 15
|
||||||
|
|
||||||
|
// Macro keys
|
||||||
|
#define ALT_HASH MACROTAP(M_ALT_HASH) // tap for #, hold for Alt
|
||||||
|
#define GR_DASH MACROTAP(M_GR_DASH) // tap for -, hold for GR layer a-class-name
|
||||||
|
#define SYM_LPRN MACROTAP(M_SYM_LPRN) // tap for (, hold for symbols layer if()
|
||||||
|
#define NAV_UNDS MACROTAP(M_NAV_UNDS) // tap for _, hold for navigation layer snake_case_variable
|
||||||
|
#define NUM_RPRN MACROTAP(M_NUM_RPRN) // tap for ), hold for numbers layer else if()
|
||||||
|
#define CTRL_DLR MACROTAP(M_CTRL_DLR) // tap for $, hold for ctrl $php_is_really_weird
|
||||||
|
#define LCBR_ENT M(M_LCBR_ENT) // {\n easier code formatting
|
||||||
|
#define PLOVER M(M_PLOVER) // PHROPB (plover) or ERFVIK(qwerty) starts plover
|
||||||
|
#define EXT_PLV M(M_EXT_PLV) // PHRO*F (plover) or ERFVYU(qwerty) stops plover
|
||||||
|
#define WINDOWS M(M_WINDOWS) // Sets Unicode handler to windows
|
||||||
|
#define LINUX M(M_LINUX) // Sets Unicode handler to linux
|
||||||
|
#define OSX M(M_OSX) // Sets Unicode handler to OSX
|
||||||
|
#define FUNCTION M(M_FUNCTION)
|
||||||
|
#define THEN M(M_THEN)
|
||||||
|
#define CATCH M(M_CATCH)
|
||||||
|
|
||||||
|
|
||||||
|
// Renames of QMK keys... (would have otherwise been a macro)
|
||||||
|
#define QWERTY DF(_QWERTY)
|
||||||
|
#define COLEMAK DF(_COLEMAK)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
|
/* Colemak
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | Tab | Q | W | F | P | G | J | L | U | Y | ;: | Bksp |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | Bksp | A | R | S | T | D | H | N | E | I | O | '" |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------`---.
|
||||||
|
* |Shift=| Z | X | C | V | B | K | M | ,< | .> | /? |Shift/Ent |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+----------|
|
||||||
|
* |CtCaps|GUIF4 | Alt# | Gr- | Sym( | Nav_ |Space | Num) |Ctrl$ | F11 | F12 |Nav toggle|
|
||||||
|
* `---------------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
|
||||||
|
[_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_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
|
||||||
|
{SFT_T(KC_EQL), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT) },
|
||||||
|
{CTL_T(KC_CAPS), KC_LGUI, ALT_HASH, GR_DASH, SYM_LPRN, NAV_UNDS, KC_SPC, NUM_RPRN, CTRL_DLR, KC_F11, KC_F12, TG(_NAV)}
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* QWERTY
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | Bksp | A | S | D | F | G | H | J | K | L | ;: | '" |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------`---.
|
||||||
|
* |Shift=| Z | X | C | V | B | N | M | ,< | .> | /? |Shift/Ent |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+----------|
|
||||||
|
* |CtCaps|GUIF4 | Alt# | Gr- | Sym( | Nav_ |Space | Num) |Ctrl$ | F11 | F12 |Nav toggle|
|
||||||
|
* `---------------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
|
||||||
|
[_QWERTY] = {
|
||||||
|
{KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
|
||||||
|
{KC_ESC, 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_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT) },
|
||||||
|
{CTL_T(KC_CAPS), KC_LGUI, KC_LALT, GR_DASH, SYM_LPRN,KC_SPC, KC_SPC, NUM_RPRN, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT}
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
/* Symbols
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | Tab | ` | @ | / | * | ^ | % | : | + | - | Del | Bksp |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | | [ | ; | } | ( | " | ' | ) | {\n | ! | ] | \ |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* |Shift | . | { | < | > | ~ | X2 | = | & | | | ? |Enter |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | | | | | Sym | _ |Space | NUM | X2 | | | |
|
||||||
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
|
||||||
|
[_SYM] = {
|
||||||
|
{KC_TAB, KC_GRV, KC_AT, KC_SLSH, KC_ASTR, KC_CIRC, KC_PERC, KC_COLN, KC_PLUS, KC_MINS, KC_DEL, KC_BSPC},
|
||||||
|
{FUNCTION,KC_LBRC, KC_SCLN, KC_RCBR, KC_LPRN, KC_DQT, KC_QUOT, KC_RPRN, LCBR_ENT,KC_EXLM, KC_RBRC, KC_BSLS},
|
||||||
|
{KC_LSFT, KC_DOT, KC_LCBR, KC_LABK, KC_RABK, KC_TILD, _______, KC_EQL, KC_AMPR, KC_PIPE, KC_QUES, KC_ENT },
|
||||||
|
{THEN, CATCH, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, _______}
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
/* Numbers
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | Tab | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | Bksp | x | D | E | F | + | - | 4 | 5 | 6 | 0 |Enter |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* |Shift | ( | A | B | C | * | / | 1 | 2 | 3 | ) |Enter |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | | | | GR | SYM | _ |Space | NUM | 0 | . | f | |
|
||||||
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
|
||||||
|
[_NUM] = {
|
||||||
|
{KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
|
||||||
|
{KC_BSPC, KC_X, S(KC_D), S(KC_E), S(KC_F), KC_PLUS, KC_MINS, KC_4, KC_5, KC_6, KC_0, KC_ENT },
|
||||||
|
{KC_LSFT, KC_LPRN, S(KC_A), S(KC_B), S(KC_C), KC_ASTR, KC_SLSH, KC_1, KC_2, KC_3, KC_RPRN, KC_ENT },
|
||||||
|
{_______, _______, _______, _______, _______, _______, _______, _______, KC_0, KC_DOT, KC_F, _______}
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
/* Gr layer / international keys
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | | ä | å | | ¢£ | €¥ | | ë | ê | ü | ù | |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | | â | à | ß | | | | è | é | ï | ö | |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | | æ | ô | ç | œ | | | û | « | » | î | |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | | | | | | | | | | | | |
|
||||||
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
|
||||||
|
[_GR] = {
|
||||||
|
{_______, UC(0xE4),UC(0xE5), _______,UC(0xA2), UC(0x20AC),_______,UC(0xEB),UC(0xEA),UC(0xFC),UC(0xF9), _______},
|
||||||
|
{_______, UC(0xE2),UC(0xE0),UC(0xDF), _______, _______, _______,UC(0xE8),UC(0xE9),UC(0xEF),UC(0xF6), _______},
|
||||||
|
{MO(_GR_S),UC(0xE6),UC(0xF4),UC(0xE7),UC(0x153),_______, _______,UC(0xFB),UC(0xAB),UC(0xBB),UC(0xEE), MO(_GR_S)},
|
||||||
|
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
|
||||||
|
},
|
||||||
|
|
||||||
|
// Shifted layer of the above
|
||||||
|
[_GR_S] = {
|
||||||
|
{_______, UC(0xC4),UC(0xC5), _______, UC(0xA3), UC(0xA5),_______, UC(0xCB),UC(0xCA),UC(0xDC),UC(0xD9),_______},
|
||||||
|
{_______, UC(0xC2),UC(0xC0), UC(0xDF),_______, _______, _______, UC(0xC8),UC(0xC9),UC(0xCF),UC(0xD6),_______},
|
||||||
|
{MO(_GR_S),UC(0xC6),UC(0xD4), UC(0xC7),UC(0x152),_______, _______, UC(0xDB),UC(0xAB),UC(0xBB),UC(0xCE),MO(_GR_S)},
|
||||||
|
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
/* Adjust Layer (Gr + Num)
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
|
||||||
|
* |------+-------------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | | |Prntscr| ESC |VOLUP | PLAY | PREV |QWERTY|COLEMAK|PLOVER| | |
|
||||||
|
* |------+-------------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | | |BACKLIT| INS |VOLDWN| MUTE | NEXT | WIND |LINUX | OSX | | |
|
||||||
|
* |------+-------------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | | | | | | | | | | | | |
|
||||||
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
|
||||||
|
[_ADJ] = {
|
||||||
|
{KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12 },
|
||||||
|
{XXXXXXX, XXXXXXX, KC_PSCR, KC_ESC, KC_VOLU, KC_MPLY, KC_MPRV, QWERTY, COLEMAK, PLOVER, XXXXXXX, XXXXXXX},
|
||||||
|
{XXXXXXX, XXXXXXX, BL_STEP, KC_INS, KC_VOLD, KC_MUTE, KC_MNXT, WINDOWS, LINUX, OSX, XXXXXXX, XXXXXXX},
|
||||||
|
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
/* Navigation
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | | | BTN3 | BTN2 | BTN1 | | ACL0 | HOME | PGDN | PGUP | END | Bksp |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | |MSLEFT| MSDN | MSUP |MSRGHT| | ACL1 | LEFT | DOWN | UP | RGHT |Enter |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | |WHLEFT| WHDN | WHUP |WHRGHT| | ACL2 |C-LEFT|C-PGDN|C-PGUP|C-RGHT|Enter |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | | | | | | _ |Space | ACL0 | ACL1 | ACL2 | |TGLNAV|
|
||||||
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
|
||||||
|
[_NAV] = {
|
||||||
|
{XXXXXXX, XXXXXXX, KC_BTN3, KC_BTN2, KC_BTN1, XXXXXXX, KC_ACL0, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_BSPC},
|
||||||
|
{XXXXXXX, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, XXXXXXX, KC_ACL1, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT,KC_ENT },
|
||||||
|
{XXXXXXX, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R, XXXXXXX, KC_ACL2, LCTL(KC_LEFT), LCTL(KC_PGDN), LCTL(KC_PGUP), LCTL(KC_RIGHT), KC_ENT },
|
||||||
|
{_______, _______, _______, _______, _______, _______, _______, KC_ACL0, KC_ACL1, KC_ACL2, _______, _______}
|
||||||
|
},
|
||||||
|
|
||||||
|
/* Plover Layer
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | | S | T | P | H | * | * | F | P | L | T | D |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* |TogOut| S | K | W | R | * | * | R | B | G | S | Z |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | # | # | # | # | # | # | # | # | # | # | # | # |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | Exit | | | # | A | O | E | U | | | | |
|
||||||
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
|
||||||
|
[_PLOVER] = {
|
||||||
|
{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},
|
||||||
|
{KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 },
|
||||||
|
{EXT_PLV, XXXXXXX, XXXXXXX, KC_1, KC_C, KC_V, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
void matrix_init_user(){
|
||||||
|
set_unicode_input_mode(UC_LNX);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
|
{
|
||||||
|
switch(id) {
|
||||||
|
case M_ALT_HASH:
|
||||||
|
return MACRO_TAP_SHFT_KEY_HOLD_MOD(record, 3, LALT);
|
||||||
|
case M_GR_DASH:
|
||||||
|
{
|
||||||
|
const macro_t* macro = MACRO_TAP_HOLD_LAYER(record, MACRO(T(MINS)), _GR);
|
||||||
|
update_tri_layer(_NUM, _GR, _ADJ);
|
||||||
|
return macro;
|
||||||
|
}
|
||||||
|
case M_SYM_LPRN:
|
||||||
|
return MACRO_TAP_SHFT_KEY_HOLD_LAYER(record, 9, _SYM);
|
||||||
|
case M_NAV_UNDS:
|
||||||
|
return MACRO_TAP_SHFT_KEY_HOLD_LAYER(record, MINS, _NAV);
|
||||||
|
case M_NUM_RPRN:
|
||||||
|
{
|
||||||
|
const macro_t* macro = MACRO_TAP_SHFT_KEY_HOLD_LAYER(record, 0, _NUM);
|
||||||
|
update_tri_layer(_NUM, _GR, _ADJ);
|
||||||
|
return macro;
|
||||||
|
}
|
||||||
|
case M_CTRL_DLR:
|
||||||
|
return MACRO_TAP_SHFT_KEY_HOLD_MOD(record, 4, LCTL);
|
||||||
|
case M_LCBR_ENT:
|
||||||
|
return MACRODOWN(I(10), D(LSFT), T(LBRC), U(LSFT), T(ENT), END);
|
||||||
|
case M_PLOVER:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
layer_and(0);
|
||||||
|
layer_on(_PLOVER);
|
||||||
|
default_layer_set(_PLOVER);
|
||||||
|
|
||||||
|
// Starts plover
|
||||||
|
return MACRO(I(10), D(E), D(R), D(F), D(V), D(I), D(K), U(E), U(R), U(F), U(V), U(I), U(K), END);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case M_EXT_PLV:
|
||||||
|
if (!record->event.pressed) {
|
||||||
|
layer_off(_PLOVER);
|
||||||
|
default_layer_set(_COLEMAK);
|
||||||
|
|
||||||
|
//Pauses plover
|
||||||
|
return MACRO(I(10), D(E), D(R), D(F), D(V), D(Y), D(U), U(E), U(R), U(F), U(V), U(Y), U(U), END);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case M_WINDOWS:
|
||||||
|
set_unicode_input_mode(UC_WIN);
|
||||||
|
break;
|
||||||
|
case M_LINUX:
|
||||||
|
set_unicode_input_mode(UC_LNX);
|
||||||
|
break;
|
||||||
|
case M_OSX:
|
||||||
|
set_unicode_input_mode(UC_OSX);
|
||||||
|
break;
|
||||||
|
case M_FUNCTION:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING("function");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case M_THEN:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING("then");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case M_CATCH:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING("catch");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return MACRO_NONE;
|
||||||
|
};
|
|
@ -0,0 +1,2 @@
|
||||||
|
# A more basic Planck Layout for copying
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
ifndef QUANTUM_DIR
|
||||||
|
include ../../../../Makefile
|
||||||
|
endif
|
|
@ -0,0 +1,229 @@
|
||||||
|
#include "planck.h"
|
||||||
|
#include "action_layer.h"
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
#include "audio.h"
|
||||||
|
#endif
|
||||||
|
#include "eeconfig.h"
|
||||||
|
|
||||||
|
extern keymap_config_t keymap_config;
|
||||||
|
|
||||||
|
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||||
|
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||||
|
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||||
|
// entirely and just use numbers.
|
||||||
|
#define _DVORAK 0
|
||||||
|
#define _QWERTY 1
|
||||||
|
#define _LOWER 2
|
||||||
|
#define _RAISE 3
|
||||||
|
#define _ADJUST 16
|
||||||
|
|
||||||
|
enum planck_keycodes {
|
||||||
|
DVORAK = SAFE_RANGE,
|
||||||
|
QWERTY,
|
||||||
|
LOWER,
|
||||||
|
RAISE,
|
||||||
|
BACKLIT
|
||||||
|
};
|
||||||
|
|
||||||
|
// Fillers to make layering more clear
|
||||||
|
#define _______ KC_TRNS
|
||||||
|
#define XXXXXXX KC_NO
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
|
/* 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 |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | ` | 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_MINS},
|
||||||
|
{SFT_T(KC_ESC), KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_T(KC_ENT)},
|
||||||
|
{ALL_T(KC_GRV), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
|
||||||
|
},
|
||||||
|
|
||||||
|
/* Qwerty
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
|
||||||
|
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
* | Esc | A | S | D | F | G | H | J | K | L | ; | " |
|
||||||
|
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
|
* | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | ` | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
|
||||||
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_QWERTY] = {
|
||||||
|
{_______, 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, _______},
|
||||||
|
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
|
||||||
|
},
|
||||||
|
|
||||||
|
/* Lower
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del |
|
||||||
|
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
* | | F1 | F2 | F3 | F4 | F5 | F6 | 4 | 5 | 6 | Home |PageUp|
|
||||||
|
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
|
* | | F7 | F8 | F9 | F10 | F11 | F12 | 1 | 2 | 3 | End |PageDn|
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | | | | | | | | Next | Vol- | Vol+ | Play |
|
||||||
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_LOWER] = {
|
||||||
|
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL},
|
||||||
|
{_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_4, KC_5, KC_6, KC_HOME, KC_PGUP},
|
||||||
|
{_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_1, KC_2, KC_3, KC_END, KC_PGDN},
|
||||||
|
{_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
|
||||||
|
},
|
||||||
|
|
||||||
|
/* Raise
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
|
||||||
|
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
* | | | | | | | _ | ? | + | { | } | | |
|
||||||
|
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
|
* | | | | | | | - | / | = | [ | ] | \ |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | | | | | | | | Next | Vol- | Vol+ | Play |
|
||||||
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_RAISE] = {
|
||||||
|
{KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL},
|
||||||
|
{_______, _______, _______, _______, _______, _______, KC_UNDS, KC_QUES, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
|
||||||
|
{_______, _______, _______, _______, _______, _______, KC_MINS, KC_SLSH, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
|
||||||
|
{_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
|
||||||
|
},
|
||||||
|
|
||||||
|
/* Adjust (Lower + Raise)
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | | Reset| | | | | | | | | | Del |
|
||||||
|
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
* | | | |Aud on|Audoff|AGnorm|AGswap|Dvorak|Qwerty| | | |
|
||||||
|
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
|
* | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | | | | | | | | | | | |
|
||||||
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_ADJUST] = {
|
||||||
|
{_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL},
|
||||||
|
{_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, DVORAK, QWERTY, _______, _______, _______},
|
||||||
|
{_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______},
|
||||||
|
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
|
||||||
|
float tone_startup[][2] = SONG(STARTUP_SOUND);
|
||||||
|
float tone_qwerty[][2] = SONG(QWERTY_SOUND);
|
||||||
|
float tone_dvorak[][2] = SONG(DVORAK_SOUND);
|
||||||
|
float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
|
||||||
|
|
||||||
|
float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
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) {
|
||||||
|
case DVORAK:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
|
||||||
|
#endif
|
||||||
|
persistant_default_layer_set(1UL<<_DVORAK);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case QWERTY:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
|
||||||
|
#endif
|
||||||
|
persistant_default_layer_set(1UL<<_QWERTY);
|
||||||
|
}
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_init_user(void) {
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
startup_user();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef AUDIO_ENABLE
|
||||||
|
|
||||||
|
void startup_user()
|
||||||
|
{
|
||||||
|
_delay_ms(20); // gets rid of tick
|
||||||
|
PLAY_NOTE_ARRAY(tone_startup, false, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void shutdown_user()
|
||||||
|
{
|
||||||
|
PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
|
||||||
|
_delay_ms(150);
|
||||||
|
stop_all_notes();
|
||||||
|
}
|
||||||
|
|
||||||
|
void music_on_user(void)
|
||||||
|
{
|
||||||
|
music_scale_user();
|
||||||
|
}
|
||||||
|
|
||||||
|
void music_scale_user(void)
|
||||||
|
{
|
||||||
|
PLAY_NOTE_ARRAY(music_scale, false, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,103 @@
|
||||||
|
# smt's Planck keymap
|
||||||
|
|
||||||
|
This keymap is primarily based on the default Planck keymap.
|
||||||
|
|
||||||
|
Notable differences from the default are:
|
||||||
|
|
||||||
|
1. **Dvorak by default**
|
||||||
|
|
||||||
|
I happen to type in Dvorak, and prefer that layer to be the default on my keyboard. This is easy enough to switch around with Qwerty, Colemak, or whatever.
|
||||||
|
|
||||||
|
2. **Right Shift**
|
||||||
|
|
||||||
|
I use both the left and right shift keys when I type. When I want to modify a key with shift, I hold shift with the hand opposite the one typing the key. In the default keymap, Enter is where shift would be on a standard keyboard layout. Oh, muscle memory.
|
||||||
|
|
||||||
|
Thankfully, QMK supports [mod-tap](https://github.com/jackhumbert/qmk_firmware/wiki#fun-with-modifier-keys) keys, and this allows me to set the Enter key to send a modifier (MOD_LSFT) when held, and KC_ENT when tapped. Awesome!
|
||||||
|
|
||||||
|
3. Escape
|
||||||
|
|
||||||
|
I am experimenting with using Left Shift as a mod-tap key for Escape, similar to how I use the Enter key. It's set up like this on my Minivan, so in the interest of consistency...
|
||||||
|
|
||||||
|
4. Backtick
|
||||||
|
|
||||||
|
I don't currently have LEDs on any of my keyboards, and even if I did, I don't think I would want their controls on a base layer.
|
||||||
|
|
||||||
|
So, why use backtick in the lower left corner? I use it as my tmux prefix key, so I need to type it more frequently than most people. Putting it on the base layer works well for me.
|
||||||
|
|
||||||
|
## Dvorak (default)
|
||||||
|
|
||||||
|
```
|
||||||
|
,-----------------------------------------------------------------------------------.
|
||||||
|
| 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 |
|
||||||
|
|------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
| ` | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
|
||||||
|
`-----------------------------------------------------------------------------------'
|
||||||
|
```
|
||||||
|
|
||||||
|
## Qwerty (same as default)
|
||||||
|
|
||||||
|
```
|
||||||
|
,-----------------------------------------------------------------------------------.
|
||||||
|
| Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
|
||||||
|
|------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
| Esc | A | S | D | F | G | H | J | K | L | ; | " |
|
||||||
|
|------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
|
| Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
|
||||||
|
|------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
| ` | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
|
||||||
|
`-----------------------------------------------------------------------------------'
|
||||||
|
```
|
||||||
|
|
||||||
|
## Lower
|
||||||
|
|
||||||
|
This is where I put the number row, a numpad cluster, function keys, and some light navigation via Home/End/PageUp/PageDn. Like the "Raise" layer, the top row is redundant to help with Planck compatibility.
|
||||||
|
|
||||||
|
```
|
||||||
|
,-----------------------------------------------------------------------------------.
|
||||||
|
| ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del |
|
||||||
|
|------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
| | F1 | F2 | F3 | F4 | F5 | F6 | 4 | 5 | 6 | Home |PageUp|
|
||||||
|
|------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
|
| | F7 | F8 | F9 | F10 | F11 | F12 | 1 | 2 | 3 | End |PageDn|
|
||||||
|
|------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
| | | | | | | | Next | Vol- | Vol+ | Play |
|
||||||
|
`-----------------------------------------------------------------------------------'
|
||||||
|
```
|
||||||
|
|
||||||
|
## Raise
|
||||||
|
|
||||||
|
As a developer, it makes the most sense for me to group all the commonly-used symbols that don't fit on the main layer. In particular, having the dual-column of parens-braces-brackets really helps a lot.
|
||||||
|
|
||||||
|
I haven't completely filled this layer, which leaves room for future mappings and macros.
|
||||||
|
|
||||||
|
```
|
||||||
|
,-----------------------------------------------------------------------------------.
|
||||||
|
| ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
|
||||||
|
|------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
| | | | | | | _ | ? | + | { | } | | |
|
||||||
|
|------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
|
| | | | | | | - | / | = | [ | ] | \ |
|
||||||
|
|------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
| | | | | | | | Next | Vol- | Vol+ | Play |
|
||||||
|
`-----------------------------------------------------------------------------------'
|
||||||
|
```
|
||||||
|
|
||||||
|
## Adjust (Lower + Raise)
|
||||||
|
|
||||||
|
Utility layer. This is where I'd switch to Qwerty, or ~~fool around with~~ adjust the audio/music settings.
|
||||||
|
|
||||||
|
```
|
||||||
|
,-----------------------------------------------------------------------------------.
|
||||||
|
| | Reset| | | | | | | | | | Del |
|
||||||
|
|------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
| | | |Aud on|AudOff|AGnorm|AGswap|Dvorak|Qwerty| | | |
|
||||||
|
|------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
|
| |Voice-|Voice+|Mus on|MusOff|MidiOn|MidOff| | | | | |
|
||||||
|
|------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
| | | | | | | | | | | |
|
||||||
|
`-----------------------------------------------------------------------------------'
|
||||||
|
```
|
|
@ -0,0 +1,25 @@
|
||||||
|
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# change to "no" to disable the options, or define them in the Makefile in
|
||||||
|
# the appropriate keymap folder that will get included automatically
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||||
|
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
||||||
|
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||||
|
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||||
|
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
|
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
|
||||||
|
MIDI_ENABLE = no # MIDI controls
|
||||||
|
AUDIO_ENABLE = yes # 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.
|
||||||
|
|
||||||
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
|
|
||||||
|
ifndef QUANTUM_DIR
|
||||||
|
include ../../../../Makefile
|
||||||
|
endif
|
|
@ -0,0 +1,11 @@
|
||||||
|
#ifndef CONFIG_USER_H
|
||||||
|
#define CONFIG_USER_H
|
||||||
|
|
||||||
|
#include "../../config.h"
|
||||||
|
|
||||||
|
#define PREVENT_STUCK_MODIFIERS
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,108 @@
|
||||||
|
// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
|
||||||
|
// this is the style you want to emulate.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "planck.h"
|
||||||
|
#ifdef BACKLIGHT_ENABLE
|
||||||
|
#include "backlight.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||||
|
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||||
|
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||||
|
// entirely and just use numbers.
|
||||||
|
#define _QWERTY 0
|
||||||
|
#define _NUM 5
|
||||||
|
#define _FUNC 6
|
||||||
|
#define _NAV 7
|
||||||
|
|
||||||
|
// Fillers to make layering more clear
|
||||||
|
#define _______ KC_TRNS
|
||||||
|
#define XXXXXXX KC_NO
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
|
/* _QWERTY
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp |
|
||||||
|
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
* |Ctrl/Tab| A | S | D | F | G | H | J | K | L | ; | " |
|
||||||
|
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
|
* | Shift| Z | X | C | V | B | N | M | , | . | / |Shift |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | Ctrl | Alt | GUI | GUI | Num | Space | FN | GUI | Alt | Ctrl | Enter|
|
||||||
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_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},
|
||||||
|
{CTL_T(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, KC_RSFT},
|
||||||
|
{KC_LCTL, KC_LALT, KC_LGUI, KC_LGUI, MO(_NUM), KC_SPC, KC_SPC, MO(_FUNC), KC_RGUI, KC_RALT, KC_RCTL, KC_ENT}
|
||||||
|
},
|
||||||
|
|
||||||
|
/* _NUM
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | ___ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | ____ |
|
||||||
|
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
* | Ctrl | ` | [ | { | ( | / | \ | ) | } | ] | - | = |
|
||||||
|
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
|
* | ____ | ! | @ | # | $ | % | ^ | & | * | _ | + | ____ |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | ____ | ___ | ___ | ___ | XXXX | ______ | ____ | ____ | ____ | __ | ____ |
|
||||||
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_NUM] = {
|
||||||
|
{_______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______},
|
||||||
|
{KC_LCTL, KC_GRV, KC_LBRC, KC_LCBR, KC_LPRN, KC_SLSH, KC_BSLS, KC_RPRN, KC_RCBR, KC_RBRC, KC_MINS, KC_EQL},
|
||||||
|
{_______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_UNDS, KC_PLUS, _______},
|
||||||
|
{_______, _______, _______, _______, _______, _______, _______, MO(_NAV), _______, _______, _______, _______}
|
||||||
|
},
|
||||||
|
|
||||||
|
/* _FUNC
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | ____ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | ____ |
|
||||||
|
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
* | ____ |Shift | Ctrl | Alt | GUI | ____ | Left | Down | Up |Right | Del | ____ |
|
||||||
|
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
|
* | ____ |Light | ____ | Vol- | Prev | Play | Mute | Next | Vol+ | ____ | ____ | ____ |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | ____ | ____ | ____ | ____ | ____ | _____ | XXXX | ____ | ____ | ____ | ____ |
|
||||||
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_FUNC] = {
|
||||||
|
{_______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______},
|
||||||
|
{_______, KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_DEL, _______},
|
||||||
|
{_______, M(0), _______, KC_VOLD, KC_MPRV, KC_MPLY, KC_MUTE, KC_MNXT, KC_VOLU, _______, _______, _______},
|
||||||
|
{_______, _______, _______, _______, MO(_NAV), _______, _______, _______, _______, _______, _______, _______}
|
||||||
|
},
|
||||||
|
|
||||||
|
[_NAV] = {
|
||||||
|
{KC_MS_ACCEL2, KC_FN1, KC_FN2, KC_FN3, KC_FN4, XXXXXXX, XXXXXXX, KC_WH_D, KC_WH_U, XXXXXXX, XXXXXXX, XXXXXXX},
|
||||||
|
{KC_MS_ACCEL1, KC_MS_BTN4, KC_MS_BTN3, KC_MS_BTN2, KC_MS_BTN1, XXXXXXX, KC_MS_LEFT, KC_MS_DOWN, KC_MS_UP, KC_MS_RIGHT, XXXXXXX, XXXXXXX},
|
||||||
|
{KC_MS_ACCEL0, KC_FN9, KC_FN10, KC_FN11, KC_FN12, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
|
||||||
|
{XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
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
|
||||||
|
switch(id) {
|
||||||
|
case 0:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
register_code(KC_RSFT);
|
||||||
|
#ifdef BACKLIGHT_ENABLE
|
||||||
|
backlight_step();
|
||||||
|
#endif
|
||||||
|
} else {
|
||||||
|
unregister_code(KC_RSFT);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return MACRO_NONE;
|
||||||
|
};
|
After Width: | Height: | Size: 57 KiB |
|
@ -1,9 +1,9 @@
|
||||||
#include "preonic.h"
|
#include "preonic.h"
|
||||||
#include "action_layer.h"
|
#include "action_layer.h"
|
||||||
#include "eeconfig.h"
|
|
||||||
#ifdef AUDIO_ENABLE
|
#ifdef AUDIO_ENABLE
|
||||||
#include "audio.h"
|
#include "audio.h"
|
||||||
#endif
|
#endif
|
||||||
|
#include "eeconfig.h"
|
||||||
|
|
||||||
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||||
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||||
|
@ -33,39 +33,39 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
* ,-----------------------------------------------------------------------------------.
|
* ,-----------------------------------------------------------------------------------.
|
||||||
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
|
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
|
||||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
* | Tab | " | , | . | P | Y | F | G | C | R | L | / |
|
* | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp |
|
||||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
* | Esc | A | O | E | U | I | D | H | T | N | S | - |
|
* | Esc | A | O | E | U | I | D | H | T | N | S | - |
|
||||||
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
* | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
|
* | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
|
||||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
* | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
|
* | ` | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
|
||||||
* `-----------------------------------------------------------------------------------'
|
* `-----------------------------------------------------------------------------------'
|
||||||
*/
|
*/
|
||||||
[_DVORAK] = {
|
[_DVORAK] = {
|
||||||
{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_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
|
||||||
{KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH},
|
{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_MINS},
|
{KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS},
|
||||||
{KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_T(KC_ENT)},
|
{SFT_T(KC_ESC), KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_T(KC_ENT)},
|
||||||
{BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
|
{ALL_T(KC_GRV), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
|
||||||
},
|
},
|
||||||
|
|
||||||
/* Qwerty
|
/* Qwerty
|
||||||
* ,-----------------------------------------------------------------------------------.
|
* ,-----------------------------------------------------------------------------------.
|
||||||
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
|
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
|
||||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
* | Tab | Q | W | E | R | T | Y | U | I | O | P | Del |
|
* | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
|
||||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
* | Esc | A | S | D | F | G | H | J | K | L | ; | " |
|
* | Esc | A | S | D | F | G | H | J | K | L | ; | " |
|
||||||
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
* | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
|
* | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
|
||||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
* | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
|
* | ` | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
|
||||||
* `-----------------------------------------------------------------------------------'
|
* `-----------------------------------------------------------------------------------'
|
||||||
*/
|
*/
|
||||||
[_QWERTY] = {
|
[_QWERTY] = {
|
||||||
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
|
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
|
||||||
{_______, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL},
|
{_______, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, _______},
|
||||||
{_______, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
|
{_______, 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, _______},
|
{_______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______},
|
||||||
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
|
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
|
||||||
|
@ -98,9 +98,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
|
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
|
||||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
* | | | | | | | | _ | + | { | } | | |
|
* | | | | | | | _ | ? | + | { | } | | |
|
||||||
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
* | | | | | | | | - | = | [ | ] | \ |
|
* | | | | | | | - | / | = | [ | ] | \ |
|
||||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
* | | | | | | | | Next | Vol- | Vol+ | Play |
|
* | | | | | | | | Next | Vol- | Vol+ | Play |
|
||||||
* `-----------------------------------------------------------------------------------'
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
@ -108,8 +108,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
[_RAISE] = {
|
[_RAISE] = {
|
||||||
{KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL},
|
{KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL},
|
||||||
{KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL},
|
{KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL},
|
||||||
{_______, _______, _______, _______, _______, _______, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
|
{_______, _______, _______, _______, _______, _______, KC_UNDS, KC_QUES, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
|
||||||
{_______, _______, _______, _______, _______, _______, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
|
{_______, _______, _______, _______, _______, _______, KC_MINS, KC_SLSH, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
|
||||||
{_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
|
{_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,17 @@ Notable differences from the default are:
|
||||||
|
|
||||||
I use both the left and right shift keys when I type. When I want to modify a key with shift, I hold shift with the hand opposite the one typing the key. In the default keymap, Enter is where shift would be on a standard keyboard layout. Oh, muscle memory.
|
I use both the left and right shift keys when I type. When I want to modify a key with shift, I hold shift with the hand opposite the one typing the key. In the default keymap, Enter is where shift would be on a standard keyboard layout. Oh, muscle memory.
|
||||||
|
|
||||||
Thankfully, QMK supports [mod-tap](https://github.com/qmk/qmk_firmware/wiki#fun-with-modifier-keys) keys, and this allows me to set the Enter key to send a modifier (MOD_LSFT) when held, and KC_ENT when tapped. Awesome!
|
Thankfully, QMK supports [mod-tap](https://github.com/jackhumbert/qmk_firmware/wiki#fun-with-modifier-keys) keys, and this allows me to set the Enter key to send a modifier (MOD_LSFT) when held, and KC_ENT when tapped. Awesome!
|
||||||
|
|
||||||
|
3. Escape
|
||||||
|
|
||||||
|
I am experimenting with using Left Shift as a mod-tap key for Escape, similar to how I use the Enter key. It's set up like this on my Minivan, so in the interest of consistency...
|
||||||
|
|
||||||
|
4. Backtick
|
||||||
|
|
||||||
|
I don't currently have LEDs on any of my keyboards, and even if I did, I don't think I would want their controls on a base layer.
|
||||||
|
|
||||||
|
So, why use backtick in the lower left corner? I use it as my tmux prefix key, so I need to type it more frequently than most people. Putting it on the base layer works well for me.
|
||||||
|
|
||||||
## Dvorak (default)
|
## Dvorak (default)
|
||||||
|
|
||||||
|
@ -20,13 +30,13 @@ Notable differences from the default are:
|
||||||
,-----------------------------------------------------------------------------------.
|
,-----------------------------------------------------------------------------------.
|
||||||
| ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
|
| ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
|
||||||
|------+------+------+------+------+------+------+------+------+------+------+------|
|
|------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
| Tab | " | , | . | P | Y | F | G | C | R | L | / |
|
| Tab | " | , | . | P | Y | F | G | C | R | L | Bksp |
|
||||||
|------+------+------+------+------+-------------+------+------+------+------+------|
|
|------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
| Esc | A | O | E | U | I | D | H | T | N | S | - |
|
| Esc | A | O | E | U | I | D | H | T | N | S | - |
|
||||||
|------+------+------+------+------+------|------+------+------+------+------+------|
|
|------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
| Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
|
| Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
|
||||||
|------+------+------+------+------+------+------+------+------+------+------+------|
|
|------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
| Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
|
| ` | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
|
||||||
`-----------------------------------------------------------------------------------'
|
`-----------------------------------------------------------------------------------'
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -36,13 +46,13 @@ Notable differences from the default are:
|
||||||
,-----------------------------------------------------------------------------------.
|
,-----------------------------------------------------------------------------------.
|
||||||
| ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
|
| ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
|
||||||
|------+------+------+------+------+------+------+------+------+------+------+------|
|
|------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
| Tab | Q | W | E | R | T | Y | U | I | O | P | Del |
|
| Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
|
||||||
|------+------+------+------+------+-------------+------+------+------+------+------|
|
|------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
| Esc | A | S | D | F | G | H | J | K | L | ; | " |
|
| Esc | A | S | D | F | G | H | J | K | L | ; | " |
|
||||||
|------+------+------+------+------+------|------+------+------+------+------+------|
|
|------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
| Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
|
| Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
|
||||||
|------+------+------+------+------+------+------+------+------+------+------+------|
|
|------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
| Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
|
| ` | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
|
||||||
`-----------------------------------------------------------------------------------'
|
`-----------------------------------------------------------------------------------'
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -76,10 +86,28 @@ I haven't completely filled this layer, which leaves room for future mappings an
|
||||||
|------+------+------+------+------+-------------+------+------+------+------+------|
|
|------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
| ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
|
| ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
|
||||||
|------+------+------+------+------+-------------+------+------+------+------+------|
|
|------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
| | | | | | | | _ | + | { | } | | |
|
| | | | | | | _ | ? | + | { | } | | |
|
||||||
|------+------+------+------+------+------|------+------+------+------+------+------|
|
|------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
| | | | | | | | - | = | [ | ] | \ |
|
| | | | | | | - | / | = | [ | ] | \ |
|
||||||
|------+------+------+------+------+------+------+------+------+------+------+------|
|
|------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
| | | | | | | | Next | Vol- | Vol+ | Play |
|
| | | | | | | | Next | Vol- | Vol+ | Play |
|
||||||
`-----------------------------------------------------------------------------------'
|
`-----------------------------------------------------------------------------------'
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Adjust (Lower + Raise)
|
||||||
|
|
||||||
|
Utility layer. This is where I'd switch to Qwerty, or ~~fool around with~~ adjust the audio/music settings.
|
||||||
|
|
||||||
|
```
|
||||||
|
,-----------------------------------------------------------------------------------.
|
||||||
|
| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
|
||||||
|
|------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
| | Reset| | | | | | | | | | Del |
|
||||||
|
|------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
| | | |Aud on|AudOff|AGnorm|AGswap|Dvorak|Qwerty| | | |
|
||||||
|
|------+------+------+------+------+------|------+------+------+------+------+------|
|
||||||
|
| |Voice-|Voice+|Mus on|MusOff|MidiOn|MidOff| | | | | |
|
||||||
|
|------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
| | | | | | | | | | | |
|
||||||
|
`-----------------------------------------------------------------------------------'
|
||||||
|
```
|
||||||
|
|
|
@ -4,6 +4,8 @@
|
||||||
/* diode directions */
|
/* diode directions */
|
||||||
#define COL2ROW 0
|
#define COL2ROW 0
|
||||||
#define ROW2COL 1
|
#define ROW2COL 1
|
||||||
|
#define CUSTOM_MATRIX 2 /* Disables built-in matrix scanning code */
|
||||||
|
|
||||||
/* I/O pins */
|
/* I/O pins */
|
||||||
#ifndef F0
|
#ifndef F0
|
||||||
#define B0 0x30
|
#define B0 0x30
|
||||||
|
|
|
@ -80,6 +80,9 @@ action_t action_for_key(uint8_t layer, keypos_t key)
|
||||||
action.code = keymap_function_id_to_action( (int)keycode & 0xFFF );
|
action.code = keymap_function_id_to_action( (int)keycode & 0xFFF );
|
||||||
break;
|
break;
|
||||||
case QK_MACRO ... QK_MACRO_MAX:
|
case QK_MACRO ... QK_MACRO_MAX:
|
||||||
|
if (keycode & 0x800) // tap macros have upper bit set
|
||||||
|
action.code = ACTION_MACRO_TAP(keycode & 0xFF);
|
||||||
|
else
|
||||||
action.code = ACTION_MACRO(keycode & 0xFF);
|
action.code = ACTION_MACRO(keycode & 0xFF);
|
||||||
break;
|
break;
|
||||||
case QK_LAYER_TAP ... QK_LAYER_TAP_MAX:
|
case QK_LAYER_TAP ... QK_LAYER_TAP_MAX:
|
||||||
|
|
|
@ -70,7 +70,7 @@ void I2C_WriteBit(unsigned char c)
|
||||||
|
|
||||||
// Inits bitbanging port, must be called before using the functions below
|
// Inits bitbanging port, must be called before using the functions below
|
||||||
//
|
//
|
||||||
void I2C_Init()
|
void I2C_Init(void)
|
||||||
{
|
{
|
||||||
I2C_PORT &= ~ ((1 << I2C_DAT) | (1 << I2C_CLK));
|
I2C_PORT &= ~ ((1 << I2C_DAT) | (1 << I2C_CLK));
|
||||||
|
|
||||||
|
@ -82,7 +82,7 @@ void I2C_Init()
|
||||||
|
|
||||||
// Send a START Condition
|
// Send a START Condition
|
||||||
//
|
//
|
||||||
void I2C_Start()
|
void I2C_Start(void)
|
||||||
{
|
{
|
||||||
// set both to high at the same time
|
// set both to high at the same time
|
||||||
I2C_DDR &= ~ ((1 << I2C_DAT) | (1 << I2C_CLK));
|
I2C_DDR &= ~ ((1 << I2C_DAT) | (1 << I2C_CLK));
|
||||||
|
@ -97,7 +97,7 @@ void I2C_Start()
|
||||||
|
|
||||||
// Send a STOP Condition
|
// Send a STOP Condition
|
||||||
//
|
//
|
||||||
void I2C_Stop()
|
void I2C_Stop(void)
|
||||||
{
|
{
|
||||||
I2C_CLOCK_HI();
|
I2C_CLOCK_HI();
|
||||||
_delay_us(I2C_DELAY);
|
_delay_us(I2C_DELAY);
|
||||||
|
|
|
@ -60,13 +60,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
extern const matrix_row_t matrix_mask[];
|
extern const matrix_row_t matrix_mask[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if (DIODE_DIRECTION == ROW2COL) || (DIODE_DIRECTION == COL2ROW)
|
||||||
static const uint8_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
|
static const uint8_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
|
||||||
static const uint8_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
|
static const uint8_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* matrix state(1:on, 0:off) */
|
/* matrix state(1:on, 0:off) */
|
||||||
static matrix_row_t matrix[MATRIX_ROWS];
|
static matrix_row_t matrix[MATRIX_ROWS];
|
||||||
|
|
||||||
static matrix_row_t matrix_raw[MATRIX_ROWS];
|
|
||||||
static matrix_row_t matrix_debouncing[MATRIX_ROWS];
|
static matrix_row_t matrix_debouncing[MATRIX_ROWS];
|
||||||
|
|
||||||
|
|
||||||
|
@ -76,7 +77,7 @@ static matrix_row_t matrix_debouncing[MATRIX_ROWS];
|
||||||
static void unselect_rows(void);
|
static void unselect_rows(void);
|
||||||
static void select_row(uint8_t row);
|
static void select_row(uint8_t row);
|
||||||
static void unselect_row(uint8_t row);
|
static void unselect_row(uint8_t row);
|
||||||
#else // ROW2COL
|
#elif (DIODE_DIRECTION == ROW2COL)
|
||||||
static void init_rows(void);
|
static void init_rows(void);
|
||||||
static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col);
|
static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col);
|
||||||
static void unselect_cols(void);
|
static void unselect_cols(void);
|
||||||
|
@ -133,7 +134,7 @@ uint8_t matrix_cols(void) {
|
||||||
// /* PORTxn */
|
// /* PORTxn */
|
||||||
// _SFR_IO8((col_pins[c] >> 4) + 2) |= _BV(col_pins[c] & 0xF);
|
// _SFR_IO8((col_pins[c] >> 4) + 2) |= _BV(col_pins[c] & 0xF);
|
||||||
// }
|
// }
|
||||||
// #else
|
// #elif (DIODE_DIRECTION == ROW2COL)
|
||||||
// for (int8_t c = MATRIX_COLS - 1; c >= 0; --c) {
|
// for (int8_t c = MATRIX_COLS - 1; c >= 0; --c) {
|
||||||
// /* DDRxn */
|
// /* DDRxn */
|
||||||
// _SFR_IO8((col_pins[c] >> 4) + 1) |= _BV(col_pins[c] & 0xF);
|
// _SFR_IO8((col_pins[c] >> 4) + 1) |= _BV(col_pins[c] & 0xF);
|
||||||
|
@ -158,7 +159,7 @@ void matrix_init(void) {
|
||||||
#if (DIODE_DIRECTION == COL2ROW)
|
#if (DIODE_DIRECTION == COL2ROW)
|
||||||
unselect_rows();
|
unselect_rows();
|
||||||
init_cols();
|
init_cols();
|
||||||
#else // ROW2COL
|
#elif (DIODE_DIRECTION == ROW2COL)
|
||||||
unselect_cols();
|
unselect_cols();
|
||||||
init_rows();
|
init_rows();
|
||||||
#endif
|
#endif
|
||||||
|
@ -166,7 +167,6 @@ void matrix_init(void) {
|
||||||
// initialize matrix state: all keys off
|
// initialize matrix state: all keys off
|
||||||
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
||||||
matrix[i] = 0;
|
matrix[i] = 0;
|
||||||
matrix_raw[i] = 0;
|
|
||||||
matrix_debouncing[i] = 0;
|
matrix_debouncing[i] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -194,7 +194,7 @@ uint8_t matrix_scan(void)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#else // ROW2COL
|
#elif (DIODE_DIRECTION == ROW2COL)
|
||||||
|
|
||||||
// Set col, read rows
|
// Set col, read rows
|
||||||
for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
|
for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
|
||||||
|
@ -336,7 +336,7 @@ static void unselect_rows(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#else // ROW2COL
|
#elif (DIODE_DIRECTION == ROW2COL)
|
||||||
|
|
||||||
static void init_rows(void)
|
static void init_rows(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -0,0 +1,134 @@
|
||||||
|
#include "process_combo.h"
|
||||||
|
#include "print.h"
|
||||||
|
|
||||||
|
|
||||||
|
#define COMBO_TIMER_ELAPSED -1
|
||||||
|
|
||||||
|
|
||||||
|
__attribute__ ((weak))
|
||||||
|
combo_t key_combos[] = {
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
__attribute__ ((weak))
|
||||||
|
void process_combo_event(uint8_t combo_index, bool pressed) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint8_t current_combo_index = 0;
|
||||||
|
|
||||||
|
static inline void send_combo(uint16_t action, bool pressed)
|
||||||
|
{
|
||||||
|
if (action) {
|
||||||
|
if (pressed) {
|
||||||
|
register_code16(action);
|
||||||
|
} else {
|
||||||
|
unregister_code16(action);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
process_combo_event(current_combo_index, pressed);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#define ALL_COMBO_KEYS_ARE_DOWN (((1<<count)-1) == combo->state)
|
||||||
|
#define NO_COMBO_KEYS_ARE_DOWN (0 == combo->state)
|
||||||
|
#define KEY_STATE_DOWN(key) do{ combo->state |= (1<<key); } while(0)
|
||||||
|
#define KEY_STATE_UP(key) do{ combo->state &= ~(1<<key); } while(0)
|
||||||
|
static bool process_single_combo(combo_t *combo, uint16_t keycode, keyrecord_t *record)
|
||||||
|
{
|
||||||
|
uint8_t count = 0;
|
||||||
|
uint8_t index = -1;
|
||||||
|
/* Find index of keycode and number of combo keys */
|
||||||
|
for (const uint16_t *keys = combo->keys; ;++count) {
|
||||||
|
uint16_t key = pgm_read_word(&keys[count]);
|
||||||
|
if (keycode == key) index = count;
|
||||||
|
if (COMBO_END == key) break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Return if not a combo key */
|
||||||
|
if (-1 == (int8_t)index) return false;
|
||||||
|
|
||||||
|
/* The combos timer is used to signal whether the combo is active */
|
||||||
|
bool is_combo_active = COMBO_TIMER_ELAPSED == combo->timer ? false : true;
|
||||||
|
|
||||||
|
if (record->event.pressed) {
|
||||||
|
KEY_STATE_DOWN(index);
|
||||||
|
|
||||||
|
if (is_combo_active) {
|
||||||
|
if (ALL_COMBO_KEYS_ARE_DOWN) { /* Combo was pressed */
|
||||||
|
send_combo(combo->keycode, true);
|
||||||
|
combo->timer = COMBO_TIMER_ELAPSED;
|
||||||
|
} else { /* Combo key was pressed */
|
||||||
|
combo->timer = timer_read();
|
||||||
|
#ifdef COMBO_ALLOW_ACTION_KEYS
|
||||||
|
combo->prev_record = *record;
|
||||||
|
#else
|
||||||
|
combo->prev_key = keycode;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (ALL_COMBO_KEYS_ARE_DOWN) { /* Combo was released */
|
||||||
|
send_combo(combo->keycode, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_combo_active) { /* Combo key was tapped */
|
||||||
|
#ifdef COMBO_ALLOW_ACTION_KEYS
|
||||||
|
record->event.pressed = true;
|
||||||
|
process_action(record, store_or_get_action(record->event.pressed, record->event.key));
|
||||||
|
record->event.pressed = false;
|
||||||
|
process_action(record, store_or_get_action(record->event.pressed, record->event.key));
|
||||||
|
#else
|
||||||
|
register_code16(keycode);
|
||||||
|
send_keyboard_report();
|
||||||
|
unregister_code16(keycode);
|
||||||
|
#endif
|
||||||
|
combo->timer = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
KEY_STATE_UP(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (NO_COMBO_KEYS_ARE_DOWN) {
|
||||||
|
combo->timer = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return is_combo_active;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool process_combo(uint16_t keycode, keyrecord_t *record)
|
||||||
|
{
|
||||||
|
bool is_combo_key = false;
|
||||||
|
|
||||||
|
for (current_combo_index = 0; current_combo_index < COMBO_COUNT; ++current_combo_index) {
|
||||||
|
combo_t *combo = &key_combos[current_combo_index];
|
||||||
|
is_combo_key |= process_single_combo(combo, keycode, record);
|
||||||
|
}
|
||||||
|
|
||||||
|
return !is_combo_key;
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_scan_combo(void)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < COMBO_COUNT; ++i) {
|
||||||
|
combo_t *combo = &key_combos[i];
|
||||||
|
if (combo->timer &&
|
||||||
|
combo->timer != COMBO_TIMER_ELAPSED &&
|
||||||
|
timer_elapsed(combo->timer) > COMBO_TERM) {
|
||||||
|
|
||||||
|
/* This disables the combo, meaning key events for this
|
||||||
|
* combo will be handled by the next processors in the chain
|
||||||
|
*/
|
||||||
|
combo->timer = COMBO_TIMER_ELAPSED;
|
||||||
|
|
||||||
|
#ifdef COMBO_ALLOW_ACTION_KEYS
|
||||||
|
process_action(&combo->prev_record,
|
||||||
|
store_or_get_action(combo->prev_record.event.pressed,
|
||||||
|
combo->prev_record.event.key));
|
||||||
|
#else
|
||||||
|
unregister_code16(combo->prev_key);
|
||||||
|
register_code16(combo->prev_key);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,43 @@
|
||||||
|
#ifndef PROCESS_COMBO_H
|
||||||
|
#define PROCESS_COMBO_H
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "progmem.h"
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
const uint16_t *keys;
|
||||||
|
uint16_t keycode;
|
||||||
|
#ifdef EXTRA_EXTRA_LONG_COMBOS
|
||||||
|
uint32_t state;
|
||||||
|
#elif EXTRA_LONG_COMBOS
|
||||||
|
uint16_t state;
|
||||||
|
#else
|
||||||
|
uint8_t state;
|
||||||
|
#endif
|
||||||
|
uint16_t timer;
|
||||||
|
#ifdef COMBO_ALLOW_ACTION_KEYS
|
||||||
|
keyrecord_t prev_record;
|
||||||
|
#else
|
||||||
|
uint16_t prev_key;
|
||||||
|
#endif
|
||||||
|
} combo_t;
|
||||||
|
|
||||||
|
|
||||||
|
#define COMBO(ck, ca) {.keys = &(ck)[0], .keycode = (ca)}
|
||||||
|
#define COMBO_ACTION(ck) {.keys = &(ck)[0]}
|
||||||
|
|
||||||
|
#define COMBO_END 0
|
||||||
|
#ifndef COMBO_COUNT
|
||||||
|
#define COMBO_COUNT 0
|
||||||
|
#endif
|
||||||
|
#ifndef COMBO_TERM
|
||||||
|
#define COMBO_TERM TAPPING_TERM
|
||||||
|
#endif
|
||||||
|
|
||||||
|
bool process_combo(uint16_t keycode, keyrecord_t *record);
|
||||||
|
void matrix_scan_combo(void);
|
||||||
|
void process_combo_event(uint8_t combo_index, bool pressed);
|
||||||
|
|
||||||
|
#endif
|
|
@ -43,12 +43,16 @@ static inline void process_tap_dance_action_on_dance_finished (qk_tap_dance_acti
|
||||||
if (action->state.finished)
|
if (action->state.finished)
|
||||||
return;
|
return;
|
||||||
action->state.finished = true;
|
action->state.finished = true;
|
||||||
|
add_mods(action->state.oneshot_mods);
|
||||||
|
send_keyboard_report();
|
||||||
_process_tap_dance_action_fn (&action->state, action->user_data, action->fn.on_dance_finished);
|
_process_tap_dance_action_fn (&action->state, action->user_data, action->fn.on_dance_finished);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void process_tap_dance_action_on_reset (qk_tap_dance_action_t *action)
|
static inline void process_tap_dance_action_on_reset (qk_tap_dance_action_t *action)
|
||||||
{
|
{
|
||||||
_process_tap_dance_action_fn (&action->state, action->user_data, action->fn.on_reset);
|
_process_tap_dance_action_fn (&action->state, action->user_data, action->fn.on_reset);
|
||||||
|
del_mods(action->state.oneshot_mods);
|
||||||
|
send_keyboard_report();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool process_tap_dance(uint16_t keycode, keyrecord_t *record) {
|
bool process_tap_dance(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
@ -70,6 +74,7 @@ bool process_tap_dance(uint16_t keycode, keyrecord_t *record) {
|
||||||
action->state.keycode = keycode;
|
action->state.keycode = keycode;
|
||||||
action->state.count++;
|
action->state.count++;
|
||||||
action->state.timer = timer_read();
|
action->state.timer = timer_read();
|
||||||
|
action->state.oneshot_mods = get_oneshot_mods();
|
||||||
process_tap_dance_action_on_each_tap (action);
|
process_tap_dance_action_on_each_tap (action);
|
||||||
|
|
||||||
if (last_td && last_td != keycode) {
|
if (last_td && last_td != keycode) {
|
||||||
|
@ -109,7 +114,7 @@ void matrix_scan_tap_dance () {
|
||||||
if (highest_td == -1)
|
if (highest_td == -1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (int i = 0; i <= highest_td; i++) {
|
for (int i = 0; i <= highest_td; i++) {
|
||||||
qk_tap_dance_action_t *action = &tap_dance_actions[i];
|
qk_tap_dance_action_t *action = &tap_dance_actions[i];
|
||||||
|
|
||||||
if (action->state.count && timer_elapsed (action->state.timer) > TAPPING_TERM) {
|
if (action->state.count && timer_elapsed (action->state.timer) > TAPPING_TERM) {
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
uint8_t count;
|
uint8_t count;
|
||||||
|
uint8_t oneshot_mods;
|
||||||
uint16_t keycode;
|
uint16_t keycode;
|
||||||
uint16_t timer;
|
uint16_t timer;
|
||||||
bool interrupted;
|
bool interrupted;
|
||||||
|
|
|
@ -141,7 +141,16 @@ bool process_unicode_map(uint16_t keycode, keyrecord_t *record) {
|
||||||
const uint32_t* map = unicode_map;
|
const uint32_t* map = unicode_map;
|
||||||
uint16_t index = keycode & 0x7FF;
|
uint16_t index = keycode & 0x7FF;
|
||||||
uint32_t code = pgm_read_dword_far(&map[index]);
|
uint32_t code = pgm_read_dword_far(&map[index]);
|
||||||
if ((code > 0xFFFF && input_mode == UC_OSX) || (code > 0xFFFFF && input_mode == UC_LNX)) {
|
if (code > 0xFFFF && code <= 0x10ffff && input_mode == UC_OSX) {
|
||||||
|
// Convert to UTF-16 surrogate pair
|
||||||
|
code -= 0x10000;
|
||||||
|
uint32_t lo = code & 0x3ff;
|
||||||
|
uint32_t hi = (code & 0xffc00) >> 10;
|
||||||
|
unicode_input_start();
|
||||||
|
register_hex32(hi + 0xd800);
|
||||||
|
register_hex32(lo + 0xdc00);
|
||||||
|
unicode_input_finish();
|
||||||
|
} else if ((code > 0x10ffff && input_mode == UC_OSX) || (code > 0xFFFFF && input_mode == UC_LNX)) {
|
||||||
// when character is out of range supported by the OS
|
// when character is out of range supported by the OS
|
||||||
unicode_map_input_error();
|
unicode_map_input_error();
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
#include "quantum.h"
|
#include "quantum.h"
|
||||||
|
#ifdef PROTOCOL_LUFA
|
||||||
|
#include "outputselect.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef TAPPING_TERM
|
#ifndef TAPPING_TERM
|
||||||
#define TAPPING_TERM 200
|
#define TAPPING_TERM 200
|
||||||
|
@ -33,14 +36,42 @@ static void do_code16 (uint16_t code, void (*f) (uint8_t)) {
|
||||||
f(KC_RGUI);
|
f(KC_RGUI);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void qk_register_weak_mods(uint8_t kc) {
|
||||||
|
add_weak_mods(MOD_BIT(kc));
|
||||||
|
send_keyboard_report();
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void qk_unregister_weak_mods(uint8_t kc) {
|
||||||
|
del_weak_mods(MOD_BIT(kc));
|
||||||
|
send_keyboard_report();
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void qk_register_mods(uint8_t kc) {
|
||||||
|
add_weak_mods(MOD_BIT(kc));
|
||||||
|
send_keyboard_report();
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void qk_unregister_mods(uint8_t kc) {
|
||||||
|
del_weak_mods(MOD_BIT(kc));
|
||||||
|
send_keyboard_report();
|
||||||
|
}
|
||||||
|
|
||||||
void register_code16 (uint16_t code) {
|
void register_code16 (uint16_t code) {
|
||||||
do_code16 (code, register_code);
|
if (IS_MOD(code) || code == KC_NO) {
|
||||||
|
do_code16 (code, qk_register_mods);
|
||||||
|
} else {
|
||||||
|
do_code16 (code, qk_register_weak_mods);
|
||||||
|
}
|
||||||
register_code (code);
|
register_code (code);
|
||||||
}
|
}
|
||||||
|
|
||||||
void unregister_code16 (uint16_t code) {
|
void unregister_code16 (uint16_t code) {
|
||||||
unregister_code (code);
|
unregister_code (code);
|
||||||
do_code16 (code, unregister_code);
|
if (IS_MOD(code) || code == KC_NO) {
|
||||||
|
do_code16 (code, qk_unregister_mods);
|
||||||
|
} else {
|
||||||
|
do_code16 (code, qk_unregister_weak_mods);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
__attribute__ ((weak))
|
__attribute__ ((weak))
|
||||||
|
@ -130,6 +161,9 @@ bool process_record_quantum(keyrecord_t *record) {
|
||||||
#ifndef DISABLE_CHORDING
|
#ifndef DISABLE_CHORDING
|
||||||
process_chording(keycode, record) &&
|
process_chording(keycode, record) &&
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef COMBO_ENABLE
|
||||||
|
process_combo(keycode, record) &&
|
||||||
|
#endif
|
||||||
#ifdef UNICODE_ENABLE
|
#ifdef UNICODE_ENABLE
|
||||||
process_unicode(keycode, record) &&
|
process_unicode(keycode, record) &&
|
||||||
#endif
|
#endif
|
||||||
|
@ -212,6 +246,36 @@ bool process_record_quantum(keyrecord_t *record) {
|
||||||
return false;
|
return false;
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef PROTOCOL_LUFA
|
||||||
|
case OUT_AUTO:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
set_output(OUTPUT_AUTO);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case OUT_USB:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
set_output(OUTPUT_USB);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
#ifdef BLUETOOTH_ENABLE
|
||||||
|
case OUT_BT:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
set_output(OUTPUT_BLUETOOTH);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef ADAFRUIT_BLE_ENABLE
|
||||||
|
case OUT_BLE:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
set_output(OUTPUT_ADAFRUIT_BLE);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
case MAGIC_SWAP_CONTROL_CAPSLOCK ... MAGIC_TOGGLE_NKRO:
|
case MAGIC_SWAP_CONTROL_CAPSLOCK ... MAGIC_TOGGLE_NKRO:
|
||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
// MAGIC actions (BOOTMAGIC without the boot)
|
// MAGIC actions (BOOTMAGIC without the boot)
|
||||||
|
@ -508,6 +572,11 @@ void matrix_scan_quantum() {
|
||||||
#ifdef TAP_DANCE_ENABLE
|
#ifdef TAP_DANCE_ENABLE
|
||||||
matrix_scan_tap_dance();
|
matrix_scan_tap_dance();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef COMBO_ENABLE
|
||||||
|
matrix_scan_combo();
|
||||||
|
#endif
|
||||||
|
|
||||||
matrix_scan_kb();
|
matrix_scan_kb();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
#ifdef RGBLIGHT_ENABLE
|
#ifdef RGBLIGHT_ENABLE
|
||||||
#include "rgblight.h"
|
#include "rgblight.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "action_layer.h"
|
#include "action_layer.h"
|
||||||
#include "eeconfig.h"
|
#include "eeconfig.h"
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
@ -63,6 +62,10 @@ extern uint32_t default_layer_state;
|
||||||
#include "process_printer.h"
|
#include "process_printer.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef COMBO_ENABLE
|
||||||
|
#include "process_combo.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#define SEND_STRING(str) send_string(PSTR(str))
|
#define SEND_STRING(str) send_string(PSTR(str))
|
||||||
void send_string(const char *str);
|
void send_string(const char *str);
|
||||||
|
|
||||||
|
|
|
@ -141,6 +141,16 @@ enum quantum_keycodes {
|
||||||
PRINT_ON,
|
PRINT_ON,
|
||||||
PRINT_OFF,
|
PRINT_OFF,
|
||||||
|
|
||||||
|
// output selection
|
||||||
|
OUT_AUTO,
|
||||||
|
OUT_USB,
|
||||||
|
#ifdef BLUETOOTH_ENABLE
|
||||||
|
OUT_BT,
|
||||||
|
#endif
|
||||||
|
#ifdef ADAFRUIT_BLE_ENABLE
|
||||||
|
OUT_BLE,
|
||||||
|
#endif
|
||||||
|
|
||||||
// always leave at the end
|
// always leave at the end
|
||||||
SAFE_RANGE
|
SAFE_RANGE
|
||||||
};
|
};
|
||||||
|
@ -246,8 +256,10 @@ enum quantum_keycodes {
|
||||||
|
|
||||||
#define M(kc) (kc | QK_MACRO)
|
#define M(kc) (kc | QK_MACRO)
|
||||||
|
|
||||||
|
#define MACROTAP(kc) (kc | QK_MACRO | FUNC_TAP<<8)
|
||||||
#define MACRODOWN(...) (record->event.pressed ? MACRO(__VA_ARGS__) : MACRO_NONE)
|
#define MACRODOWN(...) (record->event.pressed ? MACRO(__VA_ARGS__) : MACRO_NONE)
|
||||||
|
|
||||||
|
|
||||||
// L-ayer, T-ap - 256 keycode max, 16 layer max
|
// L-ayer, T-ap - 256 keycode max, 16 layer max
|
||||||
#define LT(layer, kc) (kc | QK_LAYER_TAP | ((layer & 0xF) << 8))
|
#define LT(layer, kc) (kc | QK_LAYER_TAP | ((layer & 0xF) << 8))
|
||||||
|
|
||||||
|
@ -290,6 +302,7 @@ enum quantum_keycodes {
|
||||||
#define CTL_T(kc) MT(MOD_LCTL, kc)
|
#define CTL_T(kc) MT(MOD_LCTL, kc)
|
||||||
#define SFT_T(kc) MT(MOD_LSFT, kc)
|
#define SFT_T(kc) MT(MOD_LSFT, kc)
|
||||||
#define ALT_T(kc) MT(MOD_LALT, kc)
|
#define ALT_T(kc) MT(MOD_LALT, kc)
|
||||||
|
#define ALGR_T(kc) MT(MOD_RALT, kc) // dual-function AltGR
|
||||||
#define GUI_T(kc) MT(MOD_LGUI, kc)
|
#define GUI_T(kc) MT(MOD_LGUI, kc)
|
||||||
#define C_S_T(kc) MT((MOD_LCTL | MOD_LSFT), kc) // Control + Shift e.g. for gnome-terminal
|
#define C_S_T(kc) MT((MOD_LCTL | MOD_LSFT), kc) // Control + Shift e.g. for gnome-terminal
|
||||||
#define MEH_T(kc) MT((MOD_LCTL | MOD_LSFT | MOD_LALT), kc) // Meh is a less hyper version of the Hyper key -- doesn't include Win or Cmd, so just alt+shift+ctrl
|
#define MEH_T(kc) MT((MOD_LCTL | MOD_LSFT | MOD_LALT), kc) // Meh is a less hyper version of the Hyper key -- doesn't include Win or Cmd, so just alt+shift+ctrl
|
||||||
|
|
|
@ -66,6 +66,8 @@ __attribute__ ((weak))
|
||||||
const uint8_t RGBLED_SNAKE_INTERVALS[] PROGMEM = {100, 50, 20};
|
const uint8_t RGBLED_SNAKE_INTERVALS[] PROGMEM = {100, 50, 20};
|
||||||
__attribute__ ((weak))
|
__attribute__ ((weak))
|
||||||
const uint8_t RGBLED_KNIGHT_INTERVALS[] PROGMEM = {100, 50, 20};
|
const uint8_t RGBLED_KNIGHT_INTERVALS[] PROGMEM = {100, 50, 20};
|
||||||
|
__attribute__ ((weak))
|
||||||
|
const uint16_t RGBLED_GRADIENT_RANGES[] PROGMEM = {360, 240, 180, 120, 90};
|
||||||
|
|
||||||
rgblight_config_t rgblight_config;
|
rgblight_config_t rgblight_config;
|
||||||
rgblight_config_t inmem_config;
|
rgblight_config_t inmem_config;
|
||||||
|
@ -219,6 +221,14 @@ void rgblight_step(void) {
|
||||||
}
|
}
|
||||||
rgblight_mode(mode);
|
rgblight_mode(mode);
|
||||||
}
|
}
|
||||||
|
void rgblight_step_reverse(void) {
|
||||||
|
uint8_t mode = 0;
|
||||||
|
mode = rgblight_config.mode - 1;
|
||||||
|
if (mode < 1) {
|
||||||
|
mode = RGBLIGHT_MODES;
|
||||||
|
}
|
||||||
|
rgblight_mode(mode);
|
||||||
|
}
|
||||||
|
|
||||||
void rgblight_mode(uint8_t mode) {
|
void rgblight_mode(uint8_t mode) {
|
||||||
if (!rgblight_config.enable) {
|
if (!rgblight_config.enable) {
|
||||||
|
@ -237,7 +247,7 @@ void rgblight_mode(uint8_t mode) {
|
||||||
#ifdef RGBLIGHT_ANIMATIONS
|
#ifdef RGBLIGHT_ANIMATIONS
|
||||||
rgblight_timer_disable();
|
rgblight_timer_disable();
|
||||||
#endif
|
#endif
|
||||||
} else if (rgblight_config.mode >= 2 && rgblight_config.mode <= 23) {
|
} else if (rgblight_config.mode >= 2 && rgblight_config.mode <= 24) {
|
||||||
// MODE 2-5, breathing
|
// MODE 2-5, breathing
|
||||||
// MODE 6-8, rainbow mood
|
// MODE 6-8, rainbow mood
|
||||||
// MODE 9-14, rainbow swirl
|
// MODE 9-14, rainbow swirl
|
||||||
|
@ -247,6 +257,12 @@ void rgblight_mode(uint8_t mode) {
|
||||||
#ifdef RGBLIGHT_ANIMATIONS
|
#ifdef RGBLIGHT_ANIMATIONS
|
||||||
rgblight_timer_enable();
|
rgblight_timer_enable();
|
||||||
#endif
|
#endif
|
||||||
|
} else if (rgblight_config.mode >= 25 && rgblight_config.mode <= 34) {
|
||||||
|
// MODE 25-34, static gradient
|
||||||
|
|
||||||
|
#ifdef RGBLIGHT_ANIMATIONS
|
||||||
|
rgblight_timer_disable();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
rgblight_sethsv(rgblight_config.hue, rgblight_config.sat, rgblight_config.val);
|
rgblight_sethsv(rgblight_config.hue, rgblight_config.sat, rgblight_config.val);
|
||||||
}
|
}
|
||||||
|
@ -350,6 +366,17 @@ void rgblight_sethsv(uint16_t hue, uint8_t sat, uint8_t val) {
|
||||||
} else if (rgblight_config.mode >= 6 && rgblight_config.mode <= 14) {
|
} else if (rgblight_config.mode >= 6 && rgblight_config.mode <= 14) {
|
||||||
// rainbow mood and rainbow swirl, ignore the change of hue
|
// rainbow mood and rainbow swirl, ignore the change of hue
|
||||||
hue = rgblight_config.hue;
|
hue = rgblight_config.hue;
|
||||||
|
} else if (rgblight_config.mode >= 25 && rgblight_config.mode <= 34) {
|
||||||
|
// static gradient
|
||||||
|
uint16_t _hue;
|
||||||
|
int8_t direction = ((rgblight_config.mode - 25) % 2) ? -1 : 1;
|
||||||
|
uint16_t range = pgm_read_word(&RGBLED_GRADIENT_RANGES[(rgblight_config.mode - 25) / 2]);
|
||||||
|
for (uint8_t i = 0; i < RGBLED_NUM; i++) {
|
||||||
|
_hue = (range / RGBLED_NUM * i * direction + hue + 360) % 360;
|
||||||
|
dprintf("rgblight rainbow set hsv: %u,%u,%d,%u\n", i, _hue, direction, range);
|
||||||
|
sethsv(_hue, sat, val, (LED_TYPE *)&led[i]);
|
||||||
|
}
|
||||||
|
rgblight_set();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rgblight_config.hue = hue;
|
rgblight_config.hue = hue;
|
||||||
|
@ -450,7 +477,7 @@ void rgblight_task(void) {
|
||||||
} else if (rgblight_config.mode >= 21 && rgblight_config.mode <= 23) {
|
} else if (rgblight_config.mode >= 21 && rgblight_config.mode <= 23) {
|
||||||
// mode = 21 to 23, knight mode
|
// mode = 21 to 23, knight mode
|
||||||
rgblight_effect_knight(rgblight_config.mode - 21);
|
rgblight_effect_knight(rgblight_config.mode - 21);
|
||||||
} else {
|
} else if (rgblight_config.mode == 24) {
|
||||||
// mode = 24, christmas mode
|
// mode = 24, christmas mode
|
||||||
rgblight_effect_christmas();
|
rgblight_effect_christmas();
|
||||||
}
|
}
|
||||||
|
@ -604,13 +631,13 @@ void rgblight_effect_christmas(void) {
|
||||||
static uint16_t last_timer = 0;
|
static uint16_t last_timer = 0;
|
||||||
uint16_t hue;
|
uint16_t hue;
|
||||||
uint8_t i;
|
uint8_t i;
|
||||||
if (timer_elapsed(last_timer) < 1000) {
|
if (timer_elapsed(last_timer) < RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
last_timer = timer_read();
|
last_timer = timer_read();
|
||||||
current_offset = (current_offset + 1) % 2;
|
current_offset = (current_offset + 1) % 2;
|
||||||
for (i = 0; i < RGBLED_NUM; i++) {
|
for (i = 0; i < RGBLED_NUM; i++) {
|
||||||
hue = 0 + ((RGBLED_NUM * (i + current_offset)) % 2) * 80;
|
hue = 0 + ((i/RGBLIGHT_EFFECT_CHRISTMAS_STEP + current_offset) % 2) * 120;
|
||||||
sethsv(hue, rgblight_config.sat, rgblight_config.val, (LED_TYPE *)&led[i]);
|
sethsv(hue, rgblight_config.sat, rgblight_config.val, (LED_TYPE *)&led[i]);
|
||||||
}
|
}
|
||||||
rgblight_set();
|
rgblight_set();
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#define RGBLIGHT_H
|
#define RGBLIGHT_H
|
||||||
|
|
||||||
#ifdef RGBLIGHT_ANIMATIONS
|
#ifdef RGBLIGHT_ANIMATIONS
|
||||||
#define RGBLIGHT_MODES 24
|
#define RGBLIGHT_MODES 34
|
||||||
#else
|
#else
|
||||||
#define RGBLIGHT_MODES 1
|
#define RGBLIGHT_MODES 1
|
||||||
#endif
|
#endif
|
||||||
|
@ -22,6 +22,14 @@
|
||||||
#define RGBLIGHT_EFFECT_DUALKNIGHT_LENGTH 4
|
#define RGBLIGHT_EFFECT_DUALKNIGHT_LENGTH 4
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL
|
||||||
|
#define RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL 1000
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef RGBLIGHT_EFFECT_CHRISTMAS_STEP
|
||||||
|
#define RGBLIGHT_EFFECT_CHRISTMAS_STEP 2
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef RGBLIGHT_HUE_STEP
|
#ifndef RGBLIGHT_HUE_STEP
|
||||||
#define RGBLIGHT_HUE_STEP 10
|
#define RGBLIGHT_HUE_STEP 10
|
||||||
#endif
|
#endif
|
||||||
|
@ -65,6 +73,7 @@ void rgblight_decrease(void);
|
||||||
void rgblight_toggle(void);
|
void rgblight_toggle(void);
|
||||||
void rgblight_enable(void);
|
void rgblight_enable(void);
|
||||||
void rgblight_step(void);
|
void rgblight_step(void);
|
||||||
|
void rgblight_step_reverse(void);
|
||||||
void rgblight_mode(uint8_t mode);
|
void rgblight_mode(uint8_t mode);
|
||||||
void rgblight_set(void);
|
void rgblight_set(void);
|
||||||
void rgblight_update_dword(uint32_t dword);
|
void rgblight_update_dword(uint32_t dword);
|
||||||
|
|
|
@ -46,7 +46,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#define MATRIX_COL_PINS { F1, F0, B0 }
|
#define MATRIX_COL_PINS { F1, F0, B0 }
|
||||||
#define UNUSED_PINS
|
#define UNUSED_PINS
|
||||||
|
|
||||||
/* COL2ROW or ROW2COL */
|
/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
|
||||||
#define DIODE_DIRECTION COL2ROW
|
#define DIODE_DIRECTION COL2ROW
|
||||||
|
|
||||||
// #define BACKLIGHT_PIN B7
|
// #define BACKLIGHT_PIN B7
|
||||||
|
|
|
@ -49,6 +49,13 @@ void action_exec(keyevent_t event)
|
||||||
|
|
||||||
keyrecord_t record = { .event = event };
|
keyrecord_t record = { .event = event };
|
||||||
|
|
||||||
|
#if (defined(ONESHOT_TIMEOUT) && (ONESHOT_TIMEOUT > 0))
|
||||||
|
if (has_oneshot_layer_timed_out()) {
|
||||||
|
dprintf("Oneshot layer: timeout\n");
|
||||||
|
clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef NO_ACTION_TAPPING
|
#ifndef NO_ACTION_TAPPING
|
||||||
action_tapping_process(record);
|
action_tapping_process(record);
|
||||||
#else
|
#else
|
||||||
|
@ -126,13 +133,6 @@ void process_action(keyrecord_t *record, action_t action)
|
||||||
uint8_t tap_count = record->tap.count;
|
uint8_t tap_count = record->tap.count;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (defined(ONESHOT_TIMEOUT) && (ONESHOT_TIMEOUT > 0))
|
|
||||||
if (has_oneshot_layer_timed_out()) {
|
|
||||||
dprintf("Oneshot layer: timeout\n");
|
|
||||||
clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (event.pressed) {
|
if (event.pressed) {
|
||||||
// clear the potential weak mods left by previously pressed keys
|
// clear the potential weak mods left by previously pressed keys
|
||||||
clear_weak_mods();
|
clear_weak_mods();
|
||||||
|
|
|
@ -47,10 +47,15 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
* 0100|10| usage(10) (reserved)
|
* 0100|10| usage(10) (reserved)
|
||||||
* 0100|11| usage(10) (reserved)
|
* 0100|11| usage(10) (reserved)
|
||||||
*
|
*
|
||||||
* ACT_MOUSEKEY(0110): TODO: Not needed?
|
*
|
||||||
|
* ACT_MOUSEKEY(0101): TODO: Merge these two actions to conserve space?
|
||||||
* 0101|xxxx| keycode Mouse key
|
* 0101|xxxx| keycode Mouse key
|
||||||
*
|
*
|
||||||
* 011x|xxxx xxxx xxxx (reseved)
|
* ACT_SWAP_HANDS(0110):
|
||||||
|
* 0110|xxxx| keycode Swap hands (keycode on tap, or options)
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* 0111|xxxx xxxx xxxx (reserved)
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* Layer Actions(10xx)
|
* Layer Actions(10xx)
|
||||||
|
@ -67,7 +72,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
* ee: on event(01:press, 10:release, 11:both)
|
* ee: on event(01:press, 10:release, 11:both)
|
||||||
*
|
*
|
||||||
* 1001|xxxx|xxxx xxxx (reserved)
|
* 1001|xxxx|xxxx xxxx (reserved)
|
||||||
* 1001|oopp|BBBB BBBB 8-bit Bitwise Operation???
|
|
||||||
*
|
*
|
||||||
* ACT_LAYER_TAP(101x):
|
* ACT_LAYER_TAP(101x):
|
||||||
* 101E|LLLL| keycode On/Off with tap key (0x00-DF)[TAP]
|
* 101E|LLLL| keycode On/Off with tap key (0x00-DF)[TAP]
|
||||||
|
|
|
@ -20,11 +20,33 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#include "progmem.h"
|
#include "progmem.h"
|
||||||
|
|
||||||
|
|
||||||
#define MACRO_NONE 0
|
|
||||||
|
typedef uint8_t macro_t;
|
||||||
|
|
||||||
|
#define MACRO_NONE (macro_t*)0
|
||||||
#define MACRO(...) ({ static const macro_t __m[] PROGMEM = { __VA_ARGS__ }; &__m[0]; })
|
#define MACRO(...) ({ static const macro_t __m[] PROGMEM = { __VA_ARGS__ }; &__m[0]; })
|
||||||
#define MACRO_GET(p) pgm_read_byte(p)
|
#define MACRO_GET(p) pgm_read_byte(p)
|
||||||
|
|
||||||
typedef uint8_t macro_t;
|
// Sends press when the macro key is pressed, release when release, or tap_macro when the key has been tapped
|
||||||
|
#define MACRO_TAP_HOLD(record, press, release, tap_macro) ( ((record)->event.pressed) ? \
|
||||||
|
( ((record)->tap.count <= 0 || (record)->tap.interrupted) ? (press) : MACRO_NONE ) : \
|
||||||
|
( ((record)->tap.count > 0 && !((record)->tap.interrupted)) ? (tap_macro) : (release) ) )
|
||||||
|
|
||||||
|
// Holds down the modifier mod when the macro key is held, or sends macro instead when tapped
|
||||||
|
#define MACRO_TAP_HOLD_MOD(record, macro, mod) MACRO_TAP_HOLD(record, (MACRO(D(mod), END)), MACRO(U(mod), END), macro)
|
||||||
|
|
||||||
|
// Holds down the modifier mod when the macro key is held, or pressed a shifted key when tapped (eg: shift+3 for #)
|
||||||
|
#define MACRO_TAP_SHFT_KEY_HOLD_MOD(record, key, mod) MACRO_TAP_HOLD_MOD(record, (MACRO(I(10), D(LSFT), T(key), U(LSFT), END)), mod)
|
||||||
|
|
||||||
|
|
||||||
|
// Momentary switch layer when held, sends macro if tapped
|
||||||
|
#define MACRO_TAP_HOLD_LAYER(record, macro, layer) ( ((record)->event.pressed) ? \
|
||||||
|
( ((record)->tap.count <= 0 || (record)->tap.interrupted) ? ({layer_on((layer)); MACRO_NONE; }) : MACRO_NONE ) : \
|
||||||
|
( ((record)->tap.count > 0 && !((record)->tap.interrupted)) ? (macro) : ({layer_off((layer)); MACRO_NONE; }) ) )
|
||||||
|
|
||||||
|
// Momentary switch layer when held, presses a shifted key when tapped (eg: shift+3 for #)
|
||||||
|
#define MACRO_TAP_SHFT_KEY_HOLD_LAYER(record, key, layer) MACRO_TAP_HOLD_LAYER(record, MACRO(I(10), D(LSFT), T(key), U(LSFT), END), layer)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef NO_ACTION_MACRO
|
#ifndef NO_ACTION_MACRO
|
||||||
|
|
|
@ -14,6 +14,7 @@ GNU General Public License for more details.
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include "keyboard.h"
|
#include "keyboard.h"
|
||||||
#include "matrix.h"
|
#include "matrix.h"
|
||||||
|
|
|
@ -50,7 +50,7 @@ void matrix_init(void);
|
||||||
uint8_t matrix_scan(void);
|
uint8_t matrix_scan(void);
|
||||||
/* whether modified from previous scan. used after matrix_scan. */
|
/* whether modified from previous scan. used after matrix_scan. */
|
||||||
bool matrix_is_modified(void) __attribute__ ((deprecated));
|
bool matrix_is_modified(void) __attribute__ ((deprecated));
|
||||||
/* whether a swtich is on */
|
/* whether a switch is on */
|
||||||
bool matrix_is_on(uint8_t row, uint8_t col);
|
bool matrix_is_on(uint8_t row, uint8_t col);
|
||||||
/* matrix state on row */
|
/* matrix state on row */
|
||||||
matrix_row_t matrix_get_row(uint8_t row);
|
matrix_row_t matrix_get_row(uint8_t row);
|
||||||
|
|
|
@ -134,13 +134,6 @@ typedef union {
|
||||||
} nkro;
|
} nkro;
|
||||||
#endif
|
#endif
|
||||||
} __attribute__ ((packed)) report_keyboard_t;
|
} __attribute__ ((packed)) report_keyboard_t;
|
||||||
/*
|
|
||||||
typedef struct {
|
|
||||||
uint8_t mods;
|
|
||||||
uint8_t reserved;
|
|
||||||
uint8_t keys[REPORT_KEYS];
|
|
||||||
} __attribute__ ((packed)) report_keyboard_t;
|
|
||||||
*/
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t buttons;
|
uint8_t buttons;
|
||||||
|
|
|
@ -15,6 +15,7 @@ endif
|
||||||
|
|
||||||
LUFA_SRC = lufa.c \
|
LUFA_SRC = lufa.c \
|
||||||
descriptor.c \
|
descriptor.c \
|
||||||
|
outputselect.c \
|
||||||
$(LUFA_SRC_USB)
|
$(LUFA_SRC_USB)
|
||||||
|
|
||||||
ifeq ($(strip $(MIDI_ENABLE)), yes)
|
ifeq ($(strip $(MIDI_ENABLE)), yes)
|
||||||
|
|
|
@ -53,6 +53,7 @@
|
||||||
#include "lufa.h"
|
#include "lufa.h"
|
||||||
#include "quantum.h"
|
#include "quantum.h"
|
||||||
#include <util/atomic.h>
|
#include <util/atomic.h>
|
||||||
|
#include "outputselect.h"
|
||||||
|
|
||||||
#ifdef NKRO_ENABLE
|
#ifdef NKRO_ENABLE
|
||||||
#include "keycode_config.h"
|
#include "keycode_config.h"
|
||||||
|
@ -589,59 +590,33 @@ void EVENT_USB_Device_ControlRequest(void)
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Host driver
|
* Host driver
|
||||||
p
|
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
static uint8_t keyboard_leds(void)
|
static uint8_t keyboard_leds(void)
|
||||||
{
|
{
|
||||||
return keyboard_led_stats;
|
return keyboard_led_stats;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define SendToUSB 1
|
|
||||||
#define SendToBT 2
|
|
||||||
#define SendToBLE 4
|
|
||||||
|
|
||||||
static inline uint8_t where_to_send(void) {
|
|
||||||
#ifdef ADAFRUIT_BLE_ENABLE
|
|
||||||
#if 0
|
|
||||||
if (adafruit_ble_is_connected()) {
|
|
||||||
// For testing, send to BLE as a priority
|
|
||||||
return SendToBLE;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// This is the real policy
|
|
||||||
if (USB_DeviceState != DEVICE_STATE_Configured) {
|
|
||||||
if (adafruit_ble_is_connected()) {
|
|
||||||
return SendToBLE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
return ((USB_DeviceState == DEVICE_STATE_Configured) ? SendToUSB : 0)
|
|
||||||
#ifdef BLUETOOTH_ENABLE
|
|
||||||
|| SendToBT
|
|
||||||
#endif
|
|
||||||
;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void send_keyboard(report_keyboard_t *report)
|
static void send_keyboard(report_keyboard_t *report)
|
||||||
{
|
{
|
||||||
|
uint8_t timeout = 255;
|
||||||
|
uint8_t where = where_to_send();
|
||||||
|
|
||||||
#ifdef BLUETOOTH_ENABLE
|
#ifdef BLUETOOTH_ENABLE
|
||||||
|
if (where == OUTPUT_BLUETOOTH || where == OUTPUT_USB_AND_BT) {
|
||||||
bluefruit_serial_send(0xFD);
|
bluefruit_serial_send(0xFD);
|
||||||
for (uint8_t i = 0; i < KEYBOARD_EPSIZE; i++) {
|
for (uint8_t i = 0; i < KEYBOARD_EPSIZE; i++) {
|
||||||
bluefruit_serial_send(report->raw[i]);
|
bluefruit_serial_send(report->raw[i]);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
uint8_t timeout = 255;
|
|
||||||
uint8_t where = where_to_send();
|
|
||||||
|
|
||||||
#ifdef ADAFRUIT_BLE_ENABLE
|
#ifdef ADAFRUIT_BLE_ENABLE
|
||||||
if (where & SendToBLE) {
|
if (where == OUTPUT_ADAFRUIT_BLE) {
|
||||||
adafruit_ble_send_keys(report->mods, report->keys, sizeof(report->keys));
|
adafruit_ble_send_keys(report->mods, report->keys, sizeof(report->keys));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!(where & SendToUSB)) {
|
if (where != OUTPUT_USB && where != OUTPUT_USB_AND_BT) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -681,8 +656,11 @@ static void send_keyboard(report_keyboard_t *report)
|
||||||
static void send_mouse(report_mouse_t *report)
|
static void send_mouse(report_mouse_t *report)
|
||||||
{
|
{
|
||||||
#ifdef MOUSE_ENABLE
|
#ifdef MOUSE_ENABLE
|
||||||
|
uint8_t timeout = 255;
|
||||||
|
uint8_t where = where_to_send();
|
||||||
|
|
||||||
#ifdef BLUETOOTH_ENABLE
|
#ifdef BLUETOOTH_ENABLE
|
||||||
|
if (where == OUTPUT_BLUETOOTH || where == OUTPUT_USB_AND_BT) {
|
||||||
bluefruit_serial_send(0xFD);
|
bluefruit_serial_send(0xFD);
|
||||||
bluefruit_serial_send(0x00);
|
bluefruit_serial_send(0x00);
|
||||||
bluefruit_serial_send(0x03);
|
bluefruit_serial_send(0x03);
|
||||||
|
@ -692,19 +670,17 @@ static void send_mouse(report_mouse_t *report)
|
||||||
bluefruit_serial_send(report->v); // should try sending the wheel v here
|
bluefruit_serial_send(report->v); // should try sending the wheel v here
|
||||||
bluefruit_serial_send(report->h); // should try sending the wheel h here
|
bluefruit_serial_send(report->h); // should try sending the wheel h here
|
||||||
bluefruit_serial_send(0x00);
|
bluefruit_serial_send(0x00);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
uint8_t timeout = 255;
|
|
||||||
|
|
||||||
uint8_t where = where_to_send();
|
|
||||||
|
|
||||||
#ifdef ADAFRUIT_BLE_ENABLE
|
#ifdef ADAFRUIT_BLE_ENABLE
|
||||||
if (where & SendToBLE) {
|
if (where == OUTPUT_ADAFRUIT_BLE) {
|
||||||
// FIXME: mouse buttons
|
// FIXME: mouse buttons
|
||||||
adafruit_ble_send_mouse_move(report->x, report->y, report->v, report->h);
|
adafruit_ble_send_mouse_move(report->x, report->y, report->v, report->h);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (!(where & SendToUSB)) {
|
|
||||||
|
if (where != OUTPUT_USB && where != OUTPUT_USB_AND_BT) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -746,8 +722,11 @@ static void send_system(uint16_t data)
|
||||||
|
|
||||||
static void send_consumer(uint16_t data)
|
static void send_consumer(uint16_t data)
|
||||||
{
|
{
|
||||||
|
uint8_t timeout = 255;
|
||||||
|
uint8_t where = where_to_send();
|
||||||
|
|
||||||
#ifdef BLUETOOTH_ENABLE
|
#ifdef BLUETOOTH_ENABLE
|
||||||
|
if (where == OUTPUT_BLUETOOTH || where == OUTPUT_USB_AND_BT) {
|
||||||
static uint16_t last_data = 0;
|
static uint16_t last_data = 0;
|
||||||
if (data == last_data) return;
|
if (data == last_data) return;
|
||||||
last_data = data;
|
last_data = data;
|
||||||
|
@ -761,17 +740,16 @@ static void send_consumer(uint16_t data)
|
||||||
bluefruit_serial_send(0x00);
|
bluefruit_serial_send(0x00);
|
||||||
bluefruit_serial_send(0x00);
|
bluefruit_serial_send(0x00);
|
||||||
bluefruit_serial_send(0x00);
|
bluefruit_serial_send(0x00);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
uint8_t timeout = 255;
|
|
||||||
uint8_t where = where_to_send();
|
|
||||||
|
|
||||||
#ifdef ADAFRUIT_BLE_ENABLE
|
#ifdef ADAFRUIT_BLE_ENABLE
|
||||||
if (where & SendToBLE) {
|
if (where == OUTPUT_ADAFRUIT_BLE) {
|
||||||
adafruit_ble_send_consumer_key(data, 0);
|
adafruit_ble_send_consumer_key(data, 0);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (!(where & SendToUSB)) {
|
|
||||||
|
if (where != OUTPUT_USB && where != OUTPUT_USB_AND_BT) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
/*
|
||||||
|
Copyright 2017 Priyadi Iman Nurcahyo
|
||||||
|
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 "lufa.h"
|
||||||
|
#include "outputselect.h"
|
||||||
|
#ifdef ADAFRUIT_BLE_ENABLE
|
||||||
|
#include "adafruit_ble.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
uint8_t desired_output = OUTPUT_DEFAULT;
|
||||||
|
|
||||||
|
void set_output(uint8_t output) {
|
||||||
|
set_output_user(output);
|
||||||
|
desired_output = output;
|
||||||
|
}
|
||||||
|
|
||||||
|
__attribute__((weak))
|
||||||
|
void set_output_user(uint8_t output) {
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t auto_detect_output(void) {
|
||||||
|
if (USB_DeviceState == DEVICE_STATE_Configured) {
|
||||||
|
return OUTPUT_USB;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef ADAFRUIT_BLE_ENABLE
|
||||||
|
if (adafruit_ble_is_connected()) {
|
||||||
|
return OUTPUT_ADAFRUIT_BLE;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef BLUETOOTH_ENABLE
|
||||||
|
return OUTPUT_BLUETOOTH; // should check if BT is connected here
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return OUTPUT_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t where_to_send(void) {
|
||||||
|
if (desired_output == OUTPUT_AUTO) {
|
||||||
|
return auto_detect_output();
|
||||||
|
}
|
||||||
|
return desired_output;
|
||||||
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
Copyright 2012 Jun Wako <wakojun@gmail.com>
|
Copyright 2017 Priyadi Iman Nurcahyo
|
||||||
This program is free software: you can redistribute it and/or modify
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
the Free Software Foundation, either version 2 of the License, or
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
@ -12,20 +12,30 @@ You should have received a copy of the GNU General Public License
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <avr/io.h>
|
enum outputs {
|
||||||
#include "stdint.h"
|
OUTPUT_AUTO,
|
||||||
#include "led.h"
|
|
||||||
|
|
||||||
|
OUTPUT_NONE,
|
||||||
|
OUTPUT_USB,
|
||||||
|
OUTPUT_BLUETOOTH,
|
||||||
|
OUTPUT_ADAFRUIT_BLE,
|
||||||
|
|
||||||
void led_set(uint8_t usb_led)
|
// backward compatibility
|
||||||
{
|
OUTPUT_USB_AND_BT
|
||||||
if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
|
};
|
||||||
// output low
|
|
||||||
DDRB |= (1<<2);
|
/**
|
||||||
PORTB &= ~(1<<2);
|
* backward compatibility for BLUETOOTH_ENABLE, send to BT and USB by default
|
||||||
} else {
|
*/
|
||||||
// Hi-Z
|
#ifndef OUTPUT_DEFAULT
|
||||||
DDRB &= ~(1<<2);
|
#ifdef BLUETOOTH_ENABLE
|
||||||
PORTB &= ~(1<<2);
|
#define OUTPUT_DEFAULT OUTPUT_USB_AND_BT
|
||||||
}
|
#else
|
||||||
}
|
#define OUTPUT_DEFAULT OUTPUT_AUTO
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void set_output(uint8_t output);
|
||||||
|
void set_output_user(uint8_t output);
|
||||||
|
uint8_t auto_detect_output(void);
|
||||||
|
uint8_t where_to_send(void);
|
|
@ -280,7 +280,7 @@ const PROGMEM uchar keyboard_hid_report[] = {
|
||||||
0x95, 0x06, // Report Count (6),
|
0x95, 0x06, // Report Count (6),
|
||||||
0x75, 0x08, // Report Size (8),
|
0x75, 0x08, // Report Size (8),
|
||||||
0x15, 0x00, // Logical Minimum (0),
|
0x15, 0x00, // Logical Minimum (0),
|
||||||
0x25, 0xFF, 0x00, // Logical Maximum(255),
|
0x26, 0xFF, 0x00, // Logical Maximum(255),
|
||||||
0x05, 0x07, // Usage Page (Key Codes),
|
0x05, 0x07, // Usage Page (Key Codes),
|
||||||
0x19, 0x00, // Usage Minimum (0),
|
0x19, 0x00, // Usage Minimum (0),
|
||||||
0x29, 0xFF, // Usage Maximum (255),
|
0x29, 0xFF, // Usage Maximum (255),
|
||||||
|
@ -350,7 +350,7 @@ const PROGMEM uchar mouse_hid_report[] = {
|
||||||
0xa1, 0x01, // COLLECTION (Application)
|
0xa1, 0x01, // COLLECTION (Application)
|
||||||
0x85, REPORT_ID_SYSTEM, // REPORT_ID (2)
|
0x85, REPORT_ID_SYSTEM, // REPORT_ID (2)
|
||||||
0x15, 0x01, // LOGICAL_MINIMUM (0x1)
|
0x15, 0x01, // LOGICAL_MINIMUM (0x1)
|
||||||
0x25, 0xb7, 0x00, // LOGICAL_MAXIMUM (0xb7)
|
0x26, 0xb7, 0x00, // LOGICAL_MAXIMUM (0xb7)
|
||||||
0x19, 0x01, // USAGE_MINIMUM (0x1)
|
0x19, 0x01, // USAGE_MINIMUM (0x1)
|
||||||
0x29, 0xb7, // USAGE_MAXIMUM (0xb7)
|
0x29, 0xb7, // USAGE_MAXIMUM (0xb7)
|
||||||
0x75, 0x10, // REPORT_SIZE (16)
|
0x75, 0x10, // REPORT_SIZE (16)
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
TRAVIS_COMMIT_MESSAGE="${TRAVIS_COMMIT_MESSAGE:-none}"
|
||||||
|
TRAVIS_COMMIT_RANGE="${TRAVIS_COMMIT_RANGE:-HEAD~1..HEAD}"
|
||||||
|
|
||||||
|
if [[ "$TRAVIS_COMMIT_MESSAGE" != *"[skip build]"* ]] ; then
|
||||||
|
exit_code=0
|
||||||
|
NEFM=$(git diff --name-only -n 1 ${TRAVIS_COMMIT_RANGE} | grep -Ev '^(keyboards/)' | wc -l)
|
||||||
|
if [[ $NEFM -gt 0 ]] ; then
|
||||||
|
echo "Making all keymaps for all keyboards"
|
||||||
|
make all-keyboards AUTOGEN="true"
|
||||||
|
: $((exit_code = $exit_code + $?))
|
||||||
|
else
|
||||||
|
MKB=$(git diff --name-only -n 1 ${TRAVIS_COMMIT_RANGE} | grep -oP '(?<=keyboards\/)([a-zA-Z0-9_]+)' | sort -u)
|
||||||
|
for KB in $MKB ; do
|
||||||
|
echo "Making all keymaps for $KB"
|
||||||
|
make "$KB" AUTOGEN=true
|
||||||
|
: $((exit_code = $exit_code + $?))
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
exit $exit_code
|
||||||
|
fi
|
|
@ -7,21 +7,49 @@ rev=$(git rev-parse --short HEAD)
|
||||||
git config --global user.name "Travis CI"
|
git config --global user.name "Travis CI"
|
||||||
git config --global user.email "jack.humb+travis.ci@gmail.com"
|
git config --global user.email "jack.humb+travis.ci@gmail.com"
|
||||||
|
|
||||||
make ergodox-ez AUTOGEN=true
|
if [[ "$TRAVIS_BRANCH" == "master" ]] ; then
|
||||||
|
|
||||||
find . -name ".build" | xargs rm -rf
|
increment_version ()
|
||||||
cd ..
|
{
|
||||||
git clone https://$GH_TOKEN@github.com/jackhumbert/qmk.fm.git
|
declare -a part=( ${1//\./ } )
|
||||||
cd qmk.fm
|
part[2]=$((part[2] + 1))
|
||||||
git submodule update --init --recursive
|
new="${part[*]}"
|
||||||
rm -rf keyboard
|
echo -e "${new// /.}"
|
||||||
rm -rf keyboards
|
}
|
||||||
cp -r ../qmk_firmware/keyboards .
|
|
||||||
mkdir keyboards/ergodox_ez/
|
|
||||||
cp ../qmk_firmware/util/ergodox_ez.html keyboards/ergodox_ez/index.html
|
|
||||||
cp ../qmk_firmware/readme.md qmk_readme.md
|
|
||||||
./generate.sh
|
|
||||||
|
|
||||||
git add -A
|
NEFM=$(git diff --name-only -n 1 ${TRAVIS_COMMIT_RANGE} | grep -Ev '^(keyboards/)' | wc -l)
|
||||||
git commit -m "generated from qmk_firmware/$TRAVIS_BRANCH@${rev}"
|
if [[ $NEFM -gt 0 ]] ; then
|
||||||
git push
|
echo "Essential files modified."
|
||||||
|
git fetch --tags
|
||||||
|
lasttag=$(git tag | grep -Ev '\-' | xargs -I@ git log --format=format:"%ai @%n" -1 @ | sort -V | awk '{print $4}' | tail -1)
|
||||||
|
newtag=$(increment_version $lasttag)
|
||||||
|
git tag $newtag
|
||||||
|
git push --tags -q https://$GH_TOKEN@github.com/qmk/qmk_firmware
|
||||||
|
else
|
||||||
|
echo "No essential files modified."
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$TRAVIS_COMMIT_MESSAGE" != *"[skip build]"* ]] ; then
|
||||||
|
|
||||||
|
make ergodox-ez AUTOGEN=true
|
||||||
|
|
||||||
|
find . -name ".build" | xargs rm -rf
|
||||||
|
cd ..
|
||||||
|
git clone https://$GH_TOKEN@github.com/jackhumbert/qmk.fm.git
|
||||||
|
cd qmk.fm
|
||||||
|
git submodule update --init --recursive
|
||||||
|
#rm -rf keyboard
|
||||||
|
#rm -rf keyboards
|
||||||
|
yes | cp -rf ../qmk_firmware/keyboards .
|
||||||
|
#mkdir keyboards/ergodox_ez/
|
||||||
|
cp ../qmk_firmware/util/ergodox_ez.html keyboards/ergodox_ez/index.html
|
||||||
|
cp ../qmk_firmware/readme.md qmk_readme.md
|
||||||
|
./generate.sh
|
||||||
|
|
||||||
|
git add -A
|
||||||
|
git commit -m "generated from qmk/qmk_firmware@${rev}"
|
||||||
|
git push
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|