18
.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,11 @@ 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;
|
notifications:
|
||||||
fi
|
webhooks:
|
||||||
|
urls:
|
||||||
|
- https://webhooks.gitter.im/e/cca31de3d44b9adb617b
|
||||||
|
on_success: change # options: [always|never|change] default: always
|
||||||
|
on_failure: always # options: [always|never|change] default: always
|
||||||
|
on_start: never # options: [always|never|change] default: always
|
|
@ -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}
|
||||||
|
|
38
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
|
||||||
|
|
||||||
|
@ -487,7 +487,7 @@ $(SUBPROJECTS): %: %-allkm
|
||||||
.PHONY: %
|
.PHONY: %
|
||||||
%:
|
%:
|
||||||
# Check if we have the CMP tool installed
|
# Check if we have the CMP tool installed
|
||||||
cmp --version >/dev/null 2>&1; if [ $$? -gt 0 ]; then printf "$(MSG_NO_CMP)"; exit 1; fi;
|
cmp $(ROOT_DIR)/Makefile $(ROOT_DIR)/Makefile >/dev/null 2>&1; if [ $$? -gt 0 ]; then printf "$(MSG_NO_CMP)"; exit 1; fi;
|
||||||
# Check if the submodules are dirty, and display a warning if they are
|
# Check if the submodules are dirty, and display a warning if they are
|
||||||
ifndef SKIP_GIT
|
ifndef SKIP_GIT
|
||||||
git submodule status --recursive 2>/dev/null | \
|
git submodule status --recursive 2>/dev/null | \
|
||||||
|
@ -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
|
||||||
|
@ -156,18 +161,26 @@ ifeq ($(strip $(AUDIO_ENABLE)), yes)
|
||||||
SRC += $(QUANTUM_DIR)/audio/luts.c
|
SRC += $(QUANTUM_DIR)/audio/luts.c
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(strip $(FAUXCLICKY_ENABLE)), yes)
|
||||||
|
OPT_DEFS += -DFAUXCLICKY_ENABLE
|
||||||
|
SRC += $(QUANTUM_DIR)/fauxclicky.c
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(strip $(UCIS_ENABLE)), yes)
|
ifeq ($(strip $(UCIS_ENABLE)), yes)
|
||||||
OPT_DEFS += -DUCIS_ENABLE
|
OPT_DEFS += -DUCIS_ENABLE
|
||||||
UNICODE_ENABLE = yes
|
SRC += $(QUANTUM_DIR)/process_keycode/process_unicode_common.c
|
||||||
|
SRC += $(QUANTUM_DIR)/process_keycode/process_ucis.c
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(strip $(UNICODEMAP_ENABLE)), yes)
|
ifeq ($(strip $(UNICODEMAP_ENABLE)), yes)
|
||||||
OPT_DEFS += -DUNICODEMAP_ENABLE
|
OPT_DEFS += -DUNICODEMAP_ENABLE
|
||||||
UNICODE_ENABLE = yes
|
SRC += $(QUANTUM_DIR)/process_keycode/process_unicode_common.c
|
||||||
|
SRC += $(QUANTUM_DIR)/process_keycode/process_unicodemap.c
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(strip $(UNICODE_ENABLE)), yes)
|
ifeq ($(strip $(UNICODE_ENABLE)), yes)
|
||||||
OPT_DEFS += -DUNICODE_ENABLE
|
OPT_DEFS += -DUNICODE_ENABLE
|
||||||
|
SRC += $(QUANTUM_DIR)/process_keycode/process_unicode_common.c
|
||||||
SRC += $(QUANTUM_DIR)/process_keycode/process_unicode.c
|
SRC += $(QUANTUM_DIR)/process_keycode/process_unicode.c
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
1. If you have ever installed WinAVR, uninstall it.
|
1. If you have ever installed WinAVR, uninstall it.
|
||||||
2. Install [MHV AVR Tools](https://infernoembedded.com/sites/default/files/project/MHV_AVR_Tools_20131101.exe). Disable smatch, but **be sure to leave the option to add the tools to the PATH checked**.
|
2. Install [MHV AVR Tools](https://infernoembedded.com/sites/default/files/project/MHV_AVR_Tools_20131101.exe). Disable smatch, but **be sure to leave the option to add the tools to the PATH checked**.
|
||||||
3. Install [MinGW](https://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download). During installation, uncheck the option to install a graphical user interface. **DO NOT change the default installation folder.** The scripts depend on the default location.
|
3. Install [MinGW](https://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download). During installation, uncheck the option to install a graphical user interface. **DO NOT change the default installation folder.** The scripts depend on the default location.
|
||||||
4. Clone this repository. [This link will download it as a zip file, which you'll need to extract.](https://github.com/jackhumbert/qmk_firmware/archive/master.zip) Open the extracted folder in Windows Explorer.
|
4. Clone this repository. [This link will download it as a zip file, which you'll need to extract.](https://github.com/qmk/qmk_firmware/archive/master.zip) Open the extracted folder in Windows Explorer.
|
||||||
5. Double-click on the 1-setup-path-win batch script to run it. You'll need to accept a User Account Control prompt. Press the spacebar to dismiss the success message in the command prompt that pops up.
|
5. Double-click on the 1-setup-path-win batch script to run it. You'll need to accept a User Account Control prompt. Press the spacebar to dismiss the success message in the command prompt that pops up.
|
||||||
6. Right-click on the 2-setup-environment-win batch script, select "Run as administrator", and accept the User Account Control prompt. This part may take a couple of minutes, and you'll need to approve a driver installation, but once it finishes, your environment is complete!
|
6. Right-click on the 2-setup-environment-win batch script, select "Run as administrator", and accept the User Account Control prompt. This part may take a couple of minutes, and you'll need to approve a driver installation, but once it finishes, your environment is complete!
|
||||||
7. Future build commands should be run from the standard Windows command prompt, which you can find by searching for "command prompt" from the start menu or start screen. Ignore the "MHV AVR Shell".
|
7. Future build commands should be run from the standard Windows command prompt, which you can find by searching for "command prompt" from the start menu or start screen. Ignore the "MHV AVR Shell".
|
||||||
|
@ -38,7 +38,7 @@ Debian/Ubuntu example:
|
||||||
If you have any problems building the firmware, you can try using a tool called Vagrant. It will set up a virtual computer with a known configuration that's ready-to-go for firmware building. OLKB does NOT host the files for this virtual computer. Details on how to set up Vagrant are in the [VAGRANT_GUIDE file](VAGRANT_GUIDE.md).
|
If you have any problems building the firmware, you can try using a tool called Vagrant. It will set up a virtual computer with a known configuration that's ready-to-go for firmware building. OLKB does NOT host the files for this virtual computer. Details on how to set up Vagrant are in the [VAGRANT_GUIDE file](VAGRANT_GUIDE.md).
|
||||||
|
|
||||||
## Verify Your Installation
|
## Verify Your Installation
|
||||||
1. If you haven't already, obtain this repository ([https://github.com/jackhumbert/qmk_firmware](https://github.com/jackhumbert/qmk_firmware)). You can either download it as a zip file and extract it, or clone it using the command line tool git or the Github Desktop application.
|
1. If you haven't already, obtain this repository ([https://github.com/qmk/qmk_firmware](https://github.com/qmk/qmk_firmware)). You can either download it as a zip file and extract it, or clone it using the command line tool git or the Github Desktop application.
|
||||||
2. Open up a terminal or command prompt and navigate to the `qmk_firmware` folder using the `cd` command. The command prompt will typically open to your home directory. If, for example, you cloned the repository to your Documents folder, then you would type `cd Documents/qmk_firmware`. If you extracted the file from a zip, then it may be named `qmk_firmware-master` instead.
|
2. Open up a terminal or command prompt and navigate to the `qmk_firmware` folder using the `cd` command. The command prompt will typically open to your home directory. If, for example, you cloned the repository to your Documents folder, then you would type `cd Documents/qmk_firmware`. If you extracted the file from a zip, then it may be named `qmk_firmware-master` instead.
|
||||||
3. To confirm that you're in the correct location, you can display the contents of your current folder using the `dir` command on Windows, or the `ls` command on Linux or Mac. You should see several files, including `readme.md` and a `quantum` folder. From here, you need to navigate to the appropriate folder under `keyboards/`. For example, if you're building for a Planck, run `cd keyboards/planck`.
|
3. To confirm that you're in the correct location, you can display the contents of your current folder using the `dir` command on Windows, or the `ls` command on Linux or Mac. You should see several files, including `readme.md` and a `quantum` folder. From here, you need to navigate to the appropriate folder under `keyboards/`. For example, if you're building for a Planck, run `cd keyboards/planck`.
|
||||||
4. Once you're in the correct keyboard-specific folder, run the `make` command. This should output a lot of information about the build process. More information about the `make` command can be found below.
|
4. Once you're in the correct keyboard-specific folder, run the `make` command. This should output a lot of information about the build process. More information about the `make` command can be found below.
|
||||||
|
|
|
@ -234,7 +234,7 @@ If you did everything else right. This part should be a snap! Grab the latest so
|
||||||
###Build Planck and Load the Firmware
|
###Build Planck and Load the Firmware
|
||||||
```
|
```
|
||||||
$ cd ~/src
|
$ cd ~/src
|
||||||
$ git clone https://github.com/jackhumbert/qmk_firmware.git
|
$ git clone https://github.com/qmk/qmk_firmware.git
|
||||||
$ cd qmk_firmware/keyboards/planck
|
$ cd qmk_firmware/keyboards/planck
|
||||||
$ make
|
$ make
|
||||||
```
|
```
|
||||||
|
|
|
@ -183,7 +183,7 @@ As you move along, be sure that the Teensy is staying in place - recutting and s
|
||||||
|
|
||||||
From here, you should have a working keyboard with the correct firmware. Before we attach the Teensy permanently to the keyboard, let's quickly get some firmware loaded onto the Teensy so we can test each keyswitch.
|
From here, you should have a working keyboard with the correct firmware. Before we attach the Teensy permanently to the keyboard, let's quickly get some firmware loaded onto the Teensy so we can test each keyswitch.
|
||||||
|
|
||||||
To start out, download [the firmware](https://github.com/jackhumbert/qmk_firmware/) - we'll be using my (Jack's) fork of TMK called QMK/Quantum. We'll be doing a lot from the Terminal/command prompt, so get that open, along with a decent text editor like [Sublime Text](http://www.sublimetext.com/).
|
To start out, download [the firmware](https://github.com/qmk/qmk_firmware/) - we'll be using my (Jack's) fork of TMK called QMK/Quantum. We'll be doing a lot from the Terminal/command prompt, so get that open, along with a decent text editor like [Sublime Text](http://www.sublimetext.com/).
|
||||||
|
|
||||||
The first thing we're going to do is create a new project using the script in the root directory of the firmware. In your terminal, run this command with `<project_name>` replaced by the name of your project - it'll need to be different from any other project in the `keyboards/` folder:
|
The first thing we're going to do is create a new project using the script in the root directory of the firmware. In your terminal, run this command with `<project_name>` replaced by the name of your project - it'll need to be different from any other project in the `keyboards/` folder:
|
||||||
|
|
||||||
|
@ -276,7 +276,7 @@ This can be accomplished by using the following `keymaps` definition:
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
Note that the layout of the keycodes is similar to the physical layout of our keyboard - this make it much easier to see what's going on. A lot of the keycodes should be fairly obvious, but for a full list of them, check out [tmk_code/doc/keycode.txt](https://github.com/jackhumbert/qmk_firmware/blob/master/tmk_core/doc/keycode.txt) - there are also a lot of aliases to condense your keymap file.
|
Note that the layout of the keycodes is similar to the physical layout of our keyboard - this make it much easier to see what's going on. A lot of the keycodes should be fairly obvious, but for a full list of them, check out [tmk_code/doc/keycode.txt](https://github.com/qmk/qmk_firmware/blob/master/tmk_core/doc/keycode.txt) - there are also a lot of aliases to condense your keymap file.
|
||||||
|
|
||||||
It's also important to use the `KEYMAP` function we defined earlier - this is what allows the firmware to associate our intended readable keymap with the actual wiring.
|
It's also important to use the `KEYMAP` function we defined earlier - this is what allows the firmware to associate our intended readable keymap with the actual wiring.
|
||||||
|
|
||||||
|
@ -306,7 +306,7 @@ If you've done all of these things, keep in mind that sometimes you might have h
|
||||||
|
|
||||||
Now that you have a working board, it's time to get things in their permanent positions. I've often used liberal amounts of hot glue to secure and insulate things, so if that's your style, start spreading that stuff like butter. Otherwise, double-sided tape is always an elegant solution, and electrical tape is a distant second. Due to the nature of these builds, a lot of this part is up to you and how you planned (or didn't plan) things out.
|
Now that you have a working board, it's time to get things in their permanent positions. I've often used liberal amounts of hot glue to secure and insulate things, so if that's your style, start spreading that stuff like butter. Otherwise, double-sided tape is always an elegant solution, and electrical tape is a distant second. Due to the nature of these builds, a lot of this part is up to you and how you planned (or didn't plan) things out.
|
||||||
|
|
||||||
There are a lot of possibilities inside the firmware - check out the [readme](https://github.com/jackhumbert/qmk_firmware/blob/master/readme.md) for a full feature list, and dive into the different project (Planck, Ergodox EZ, etc) to see how people use all of them. You can always stop by [the OLKB subreddit for help!](http://reddit.com/r/olkb)
|
There are a lot of possibilities inside the firmware - check out the [readme](https://github.com/qmk/qmk_firmware/blob/master/readme.md) for a full feature list, and dive into the different project (Planck, Ergodox EZ, etc) to see how people use all of them. You can always stop by [the OLKB subreddit for help!](http://reddit.com/r/olkb)
|
||||||
|
|
||||||
## Trouble-shooting compiling
|
## Trouble-shooting compiling
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
### Windows
|
### Windows
|
||||||
1. Install [MHV AVR Tools](https://infernoembedded.com/sites/default/files/project/MHV_AVR_Tools_20131101.exe). Disable smatch, but **be sure to leave the option to add the tools to the PATH checked**.
|
1. Install [MHV AVR Tools](https://infernoembedded.com/sites/default/files/project/MHV_AVR_Tools_20131101.exe). Disable smatch, but **be sure to leave the option to add the tools to the PATH checked**.
|
||||||
2. Install [MinGW](https://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download). During installation, uncheck the option to install a graphical user interface. **DO NOT change the default installation folder.** The scripts depend on the default location.
|
2. Install [MinGW](https://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download). During installation, uncheck the option to install a graphical user interface. **DO NOT change the default installation folder.** The scripts depend on the default location.
|
||||||
3. Clone this repository. [This link will download it as a zip file, which you'll need to extract.](https://github.com/jackhumbert/qmk_firmware/archive/master.zip) Open the extracted folder in Windows Explorer.
|
3. Clone this repository. [This link will download it as a zip file, which you'll need to extract.](https://github.com/qmk/qmk_firmware/archive/master.zip) Open the extracted folder in Windows Explorer.
|
||||||
4. Right-click on the 1-setup-path-win batch script, select "Run as administrator", and accept the User Account Control prompt. Press the spacebar to dismiss the success message in the command prompt that pops up.
|
4. Right-click on the 1-setup-path-win batch script, select "Run as administrator", and accept the User Account Control prompt. Press the spacebar to dismiss the success message in the command prompt that pops up.
|
||||||
5. Right-click on the 2-setup-environment-win batch script, select "Run as administrator", and accept the User Account Control prompt. This part may take a couple of minutes, and you'll need to approve a driver installation, but once it finishes, your environment is complete!
|
5. Right-click on the 2-setup-environment-win batch script, select "Run as administrator", and accept the User Account Control prompt. This part may take a couple of minutes, and you'll need to approve a driver installation, but once it finishes, your environment is complete!
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ Note that, since it will be directly accessing USB hardware, the
|
||||||
`dfu-programmer` program needs to be run as root.
|
`dfu-programmer` program needs to be run as root.
|
||||||
|
|
||||||
## Verify Your Installation
|
## Verify Your Installation
|
||||||
1. Clone the following repository: https://github.com/jackhumbert/qmk_firmware
|
1. Clone the following repository: https://github.com/qmk/qmk_firmware
|
||||||
2. Open a Terminal and `cd` into `qmk_firmware/keyboards/planck`
|
2. Open a Terminal and `cd` into `qmk_firmware/keyboards/planck`
|
||||||
3. Run `make`. This should output a lot of information about the build process.
|
3. Run `make`. This should output a lot of information about the build process.
|
||||||
|
|
||||||
|
@ -80,7 +80,7 @@ when trying to 'make dfu' on Windows you need to copy the dfu-programmer.exe to
|
||||||
|
|
||||||
### Keymap
|
### Keymap
|
||||||
|
|
||||||
Unlike the other keymaps, prefixing the keycodes with `KC_` is required. A full list of the keycodes is available [here](https://github.com/jackhumbert/qmk_firmware/blob/master/tmk_core/doc/keycode.txt). For the keycodes available only in the extended keymap, see this [header file](https://github.com/jackhumbert/qmk_firmware/blob/master/quantum/keymap_common.h).
|
Unlike the other keymaps, prefixing the keycodes with `KC_` is required. A full list of the keycodes is available [here](https://github.com/qmk/qmk_firmware/blob/master/tmk_core/doc/keycode.txt). For the keycodes available only in the extended keymap, see this [header file](https://github.com/qmk/qmk_firmware/blob/master/quantum/keymap_common.h).
|
||||||
|
|
||||||
You can use modifiers with keycodes like this:
|
You can use modifiers with keycodes like this:
|
||||||
|
|
||||||
|
|
|
@ -88,7 +88,7 @@ We've added shortcuts to make common modifier/tap (mod-tap) mappings more compac
|
||||||
|
|
||||||
### Remember: These are just aliases
|
### Remember: These are just aliases
|
||||||
|
|
||||||
These functions work the same way that their `ACTION_*` functions do - they're just quick aliases. To dig into all of the tmk ACTION_* functions, please see the [TMK documentation](https://github.com/jackhumbert/qmk_firmware/blob/master/tmk_core/doc/keymap.md#2-action).
|
These functions work the same way that their `ACTION_*` functions do - they're just quick aliases. To dig into all of the tmk ACTION_* functions, please see the [TMK documentation](https://github.com/qmk/qmk_firmware/blob/master/tmk_core/doc/keymap.md#2-action).
|
||||||
|
|
||||||
Instead of using `FNx` when defining `ACTION_*` functions, you can use `F(x)` - the benefit here is being able to use more than 32 function actions (up to 4096), if you happen to need them.
|
Instead of using `FNx` when defining `ACTION_*` functions, you can use `F(x)` - the benefit here is being able to use more than 32 function actions (up to 4096), if you happen to need them.
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<!-- -*- mode: markdown; fill-column: 8192 -*- -->
|
<!-- -*- mode: markdown; fill-column: 8192 -*- -->
|
||||||
|
|
||||||
Mnemes Swedish Bonaza
|
Mnemes Swedish Bonanza
|
||||||
=======================
|
=======================
|
||||||
|
|
||||||
My Layout in process, most of the code is shamelessly stolen from [algernons][algernon] excellent layout
|
My Layout in process, most of the code is shamelessly stolen from [algernons][algernon] excellent layout
|
||||||
|
@ -33,6 +33,8 @@ It's for Windows (current work forces me to) and Swedish (matter of birth) so ym
|
||||||
- `LEAD s l` : `λ`.
|
- `LEAD s l` : `λ`.
|
||||||
- `LEAD s s` : `¯\_(ツ)_/¯`
|
- `LEAD s s` : `¯\_(ツ)_/¯`
|
||||||
- `LEAD s f` : `凸(ツ)凸`
|
- `LEAD s f` : `凸(ツ)凸`
|
||||||
|
- `LEAD u l` : Set unicode input mode to linux.
|
||||||
|
- `LEAD s w` : Set unicode input mode to windows.
|
||||||
- `LEAD a *` : Application switching based on position in start menu. Very specific to my computer.
|
- `LEAD a *` : Application switching based on position in start menu. Very specific to my computer.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#define ONESHOT_TIMEOUT 3000
|
#define ONESHOT_TIMEOUT 3000
|
||||||
#define TAPPING_TERM 200
|
#define TAPPING_TERM 200
|
||||||
#define PREVENT_STUCK_MODIFIERS
|
#define PREVENT_STUCK_MODIFIERS
|
||||||
|
#define FORCE_NKRO
|
||||||
#define LEADER_TIMEOUT 1000
|
#define LEADER_TIMEOUT 1000
|
||||||
|
|
||||||
#include "../../config.h"
|
#include "../../config.h"
|
||||||
|
|
Before Width: | Height: | Size: 448 KiB After Width: | Height: | Size: 446 KiB |
Before Width: | Height: | Size: 420 KiB After Width: | Height: | Size: 415 KiB |
Before Width: | Height: | Size: 423 KiB After Width: | Height: | Size: 423 KiB |
|
@ -7,43 +7,47 @@
|
||||||
/*
|
/*
|
||||||
*WINDOWS SWEDISH
|
*WINDOWS SWEDISH
|
||||||
*/
|
*/
|
||||||
#define KN_HALF KC_GRV // 1/2
|
/*
|
||||||
#define KN_PLUS KC_MINS // +
|
*WINDOWS SWEDISH
|
||||||
#define KN_ACUT KC_EQL // ´
|
*/
|
||||||
#define KN_AO KC_LBRC // Å
|
#define KN_HALF KC_GRV // 1/2
|
||||||
#define KN_UMLA KC_RBRC // ¨
|
#define KN_PLUS KC_MINS // +
|
||||||
#define KN_OE KC_SCLN // Ö
|
#define KN_ACUT KC_EQL // ´
|
||||||
#define KN_AE KC_QUOT // Ä
|
#define KN_AO KC_LBRC // Å
|
||||||
#define KN_QUOT KC_NUHS // '
|
#define KN_UMLA KC_RBRC // ¨
|
||||||
#define KN_LABK KC_NUBS // <
|
#define KN_OE KC_SCLN // Ö
|
||||||
#define KN_MINS KC_SLSH // -
|
#define KN_AE KC_QUOT // Ä
|
||||||
#define KN_EXLM LSFT(KC_1) // !
|
#define KN_QUOT KC_NUHS // '
|
||||||
#define KN_DQT LSFT(KC_2) // "
|
#define KN_LABK KC_NUBS // <
|
||||||
#define KN_AT RALT(KC_2) // @
|
#define KN_MINS KC_SLSH // -
|
||||||
#define KN_HASH LSFT(KC_3) // #
|
#define KN_EXLM LSFT(KC_1) // !
|
||||||
#define KN_DLR RALT(KC_4) // $
|
#define KN_DQT LSFT(KC_2) // "
|
||||||
#define KN_PERC LSFT(KC_5) // %
|
#define KN_AT RALT(KC_2) // @
|
||||||
#define KN_AMPR LSFT(KC_6) // &
|
#define KN_HASH LSFT(KC_3) // #
|
||||||
#define KN_SLSH LSFT(KC_7) // /
|
#define KN_EUR LSFT(KC_4) // €
|
||||||
#define KN_LPRN LSFT(KC_8) // (
|
#define KN_DLR RALT(KC_4) // $
|
||||||
#define KN_RPRN LSFT(KC_9) // )
|
#define KN_PERC LSFT(KC_5) // %
|
||||||
#define KN_EQL LSFT(KC_0) // =
|
#define KN_AMPR LSFT(KC_6) // &
|
||||||
#define KN_UNDS LSFT(KN_MINS) // _
|
#define KN_SLSH LSFT(KC_7) // /
|
||||||
#define KN_QUES LSFT(KN_PLUS) // ?
|
#define KN_LPRN LSFT(KC_8) // (
|
||||||
#define KN_GRAV LSFT(KN_ACUT) // `
|
#define KN_RPRN LSFT(KC_9) // )
|
||||||
#define KN_LCBR RALT(KC_7) // {
|
#define KN_EQL LSFT(KC_0) // =
|
||||||
#define KN_RCBR RALT(KC_0) // }
|
#define KN_UNDS LSFT(KN_MINS) // _
|
||||||
#define KN_LBRC RALT(KC_8) // [
|
#define KN_QUES LSFT(KN_PLUS) // ?
|
||||||
#define KN_RBRC RALT(KC_9) // ]
|
#define KN_GRAV LSFT(KN_ACUT) // `
|
||||||
#define KN_RABK LSFT(KN_LABK) // <
|
#define KN_LCBR RALT(KC_7) // {
|
||||||
#define KN_COLN LSFT(KC_DOT) // :
|
#define KN_RCBR RALT(KC_0) // }
|
||||||
#define KN_SCLN LSFT(KC_COMM) // :
|
#define KN_LBRC RALT(KC_8) // [
|
||||||
#define KN_PIPE RALT(KN_LABK) // |
|
#define KN_RBRC RALT(KC_9) // ]
|
||||||
#define KN_QUES LSFT(KN_PLUS) // ?
|
#define KN_RABK LSFT(KN_LABK) // <
|
||||||
#define KN_CIRC LSFT(KN_UMLA) // ^
|
#define KN_COLN LSFT(KC_DOT) // :
|
||||||
#define KN_ASTR LSFT(KN_QUOT) // *
|
#define KN_SCLN LSFT(KC_COMM) // :
|
||||||
#define KN_TILD RALT(KN_UMLA) // ~
|
#define KN_PIPE RALT(KN_LABK) // |
|
||||||
#define KN_BSLS RALT(KN_PLUS) //
|
#define KN_QUES LSFT(KN_PLUS) // ?
|
||||||
|
#define KN_CIRC LSFT(KN_UMLA) // ^
|
||||||
|
#define KN_ASTR LSFT(KN_QUOT) // *
|
||||||
|
#define KN_TILD RALT(KN_UMLA) // ~
|
||||||
|
#define KN_BSLS RALT(KN_PLUS) //
|
||||||
|
|
||||||
#define OSM_LCTL OSM(MOD_LCTL)
|
#define OSM_LCTL OSM(MOD_LCTL)
|
||||||
#define OSM_LALT OSM(MOD_LALT)
|
#define OSM_LALT OSM(MOD_LALT)
|
||||||
|
@ -85,16 +89,10 @@ enum {
|
||||||
TD_EQ
|
TD_EQ
|
||||||
};
|
};
|
||||||
|
|
||||||
//Custom keycodes
|
|
||||||
enum {
|
|
||||||
PLACEHOLDER = SAFE_RANGE
|
|
||||||
};
|
|
||||||
|
|
||||||
//State and timers
|
//State and timers
|
||||||
uint16_t kf_timers[12];
|
uint16_t kf_timers[12];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
[BASE] = {
|
[BASE] = {
|
||||||
|
@ -103,14 +101,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
{ KC_TAB ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_NO ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KN_AO },
|
{ KC_TAB ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_NO ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KN_AO },
|
||||||
{ OSM_LCTL ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,KC_NO ,KC_H ,KC_J ,KC_K ,KC_L ,KN_OE ,KN_AE },
|
{ OSM_LCTL ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,KC_NO ,KC_H ,KC_J ,KC_K ,KC_L ,KN_OE ,KN_AE },
|
||||||
{ OSM_LSFT ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,KC_DELT ,KC_N ,KC_M ,KC_COMM ,KC_DOT ,KN_MINS ,OSM_LSFT },
|
{ OSM_LSFT ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,KC_DELT ,KC_N ,KC_M ,KC_COMM ,KC_DOT ,KN_MINS ,OSM_LSFT },
|
||||||
{ MO(NAV) ,OSM_LCTL ,OSM_LALT ,KC_LGUI ,KC_SPC ,LT(SYM,KC_BSPC) ,KC_HYP ,LT(SYM,KC_ENT) ,KC_SPC ,KC_LEAD ,KC_LALT ,KC_LCTRL ,MO(NAV) }
|
{ MO(NAV) ,OSM_LCTL ,OSM_LALT ,KC_LGUI ,MO(SYM) ,KC_BSPC ,KC_ENT ,KC_SPC ,MO(SYM) ,KC_LEAD ,KC_LALT ,KC_LCTRL ,KC_HYP }
|
||||||
|
|
||||||
},
|
},
|
||||||
[NAV] = {
|
[NAV] = {
|
||||||
|
|
||||||
{ KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS },
|
{ KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS },
|
||||||
{ KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_NO ,KC_PGUP ,KC_HOME ,KC_UP ,KC_END ,KC_TRNS ,KC_TRNS },
|
{ KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_NO ,KC_HOME ,KC_PGDN ,KC_PGUP ,KC_END ,KC_TRNS ,KC_TRNS },
|
||||||
{ KC_TRNS ,KC_LSFT ,KC_LCTL ,KC_LALT ,KC_L ,KC_TRNS ,KC_NO ,KC_PGDN ,KC_LEFT ,KC_DOWN ,KC_RIGHT ,KC_TRNS ,KC_TRNS },
|
{ KC_TRNS ,KC_LSFT ,KC_LCTL ,KC_LALT ,KC_L ,KC_TRNS ,KC_NO ,KC_LEFT ,KC_DOWN ,KC_UP ,KC_RIGHT ,KC_TRNS ,KC_TRNS },
|
||||||
{ KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS },
|
{ KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS },
|
||||||
{ KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_VOLD ,KC_VOLU }
|
{ KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_VOLD ,KC_VOLU }
|
||||||
|
|
||||||
|
@ -119,8 +117,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
{ KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,TD(TD_EQ) ,KC_NO ,TD(TD_FUN) ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS },
|
{ KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,TD(TD_EQ) ,KC_NO ,TD(TD_FUN) ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS },
|
||||||
{ KC_TRNS ,KN_LABK ,KN_RABK ,KN_LCBR ,KN_RCBR ,KN_PLUS ,KC_NO ,KN_AT ,KN_DQT ,KN_QUOT ,KN_GRAV ,KN_SLSH ,KC_TRNS },
|
{ KC_TRNS ,KN_LABK ,KN_RABK ,KN_LCBR ,KN_RCBR ,KN_PLUS ,KC_NO ,KN_AT ,KN_DQT ,KN_QUOT ,KN_GRAV ,KN_SLSH ,KC_TRNS },
|
||||||
{ KC_TRNS ,KN_EXLM ,KN_EQL ,KN_LPRN ,KN_RPRN ,KN_MINS ,KC_NO ,KN_UNDS ,KN_SCLN ,KN_COLN ,KN_AMPR ,KN_PIPE ,KC_TRNS },
|
{ KC_TRNS ,KN_EXLM ,KN_EQL ,KN_LPRN ,KN_RPRN ,KN_MINS ,KC_NO ,KN_UNDS ,KN_CIRC ,KN_DLR ,KN_AMPR ,KN_PIPE ,KC_TRNS },
|
||||||
{ KC_TRNS ,KN_DLR ,KN_PERC ,KN_LBRC ,KN_RBRC ,KN_ASTR ,KC_TRNS ,KN_HASH ,KC_COMM ,KC_DOT ,KN_QUES ,KN_BSLS ,KC_TRNS },
|
{ KC_TRNS ,KN_EUR ,KN_PERC ,KN_LBRC ,KN_RBRC ,KN_ASTR ,KC_TRNS ,KN_HASH ,KN_SCLN ,KN_COLN ,KN_QUES ,KN_BSLS ,KC_TRNS },
|
||||||
{ KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS }
|
{ KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -302,6 +300,15 @@ void matrix_scan_user(void) {
|
||||||
register_code (KC_LGUI); TAP_ONCE (KC_7); unregister_code (KC_LGUI);
|
register_code (KC_LGUI); TAP_ONCE (KC_7); unregister_code (KC_LGUI);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SEQ_TWO_KEYS (KC_U, KC_L) {
|
||||||
|
set_unicode_input_mode(UC_LNX);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SEQ_TWO_KEYS (KC_U, KC_W) {
|
||||||
|
set_unicode_input_mode(UC_WINC);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
SEQ_TWO_KEYS (KC_S, KC_S) {
|
SEQ_TWO_KEYS (KC_S, KC_S) {
|
||||||
// ¯\_(ツ)_/¯
|
// ¯\_(ツ)_/¯
|
||||||
|
|
|
@ -0,0 +1,83 @@
|
||||||
|
#include "clueboard.h"
|
||||||
|
|
||||||
|
// Helpful defines
|
||||||
|
#define GRAVE_MODS (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
|
||||||
|
#define _______ KC_TRNS
|
||||||
|
|
||||||
|
// 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 _BL 0
|
||||||
|
#define _FL 1
|
||||||
|
#define _CL 2
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
/* Keymap _BL: Base Layer (Default Layer)
|
||||||
|
*/
|
||||||
|
[_BL] = KEYMAP(
|
||||||
|
F(0), 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_GRV, KC_BSPC, KC_PGUP, \
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN, \
|
||||||
|
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, \
|
||||||
|
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP, \
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_SPC,KC_SPC, KC_HENK, KC_RALT, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
|
||||||
|
|
||||||
|
/* Keymap _FL: Function Layer
|
||||||
|
*/
|
||||||
|
[_FL] = KEYMAP(
|
||||||
|
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL, BL_STEP, \
|
||||||
|
_______, _______, _______,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK, KC_PAUS, _______, _______, _______, _______, \
|
||||||
|
_______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
|
||||||
|
_______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_PGUP, \
|
||||||
|
_______, _______, _______, _______, _______,_______, _______, _______, _______, MO(_FL), KC_HOME, KC_PGDN, KC_END),
|
||||||
|
|
||||||
|
/* Keymap _CL: Control layer
|
||||||
|
*/
|
||||||
|
[_CL] = KEYMAP(
|
||||||
|
_______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI, \
|
||||||
|
_______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD, \
|
||||||
|
_______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
|
||||||
|
MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI, \
|
||||||
|
_______, _______, _______,_______, RGB_MOD, RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI),
|
||||||
|
};
|
||||||
|
|
||||||
|
/* This is a list of user defined functions. F(N) corresponds to item N
|
||||||
|
of this list.
|
||||||
|
*/
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
[0] = ACTION_FUNCTION(0), // Calls action_function()
|
||||||
|
};
|
||||||
|
|
||||||
|
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||||
|
static uint8_t mods_pressed;
|
||||||
|
|
||||||
|
switch (id) {
|
||||||
|
case 0:
|
||||||
|
/* Handle the combined Grave/Esc key
|
||||||
|
*/
|
||||||
|
mods_pressed = get_mods()&GRAVE_MODS; // Check to see what mods are pressed
|
||||||
|
|
||||||
|
if (record->event.pressed) {
|
||||||
|
/* The key is being pressed.
|
||||||
|
*/
|
||||||
|
if (mods_pressed) {
|
||||||
|
add_key(KC_GRV);
|
||||||
|
send_keyboard_report();
|
||||||
|
} else {
|
||||||
|
add_key(KC_ESC);
|
||||||
|
send_keyboard_report();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/* The key is being released.
|
||||||
|
*/
|
||||||
|
if (mods_pressed) {
|
||||||
|
del_key(KC_GRV);
|
||||||
|
send_keyboard_report();
|
||||||
|
} else {
|
||||||
|
del_key(KC_ESC);
|
||||||
|
send_keyboard_report();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
After Width: | Height: | Size: 110 KiB |
|
@ -0,0 +1,15 @@
|
||||||
|
```
|
||||||
|
___ _____ _ _ _ __ __ _ __
|
||||||
|
|__ \ / ____| | | | | | / / / /(_) / /
|
||||||
|
||) | | | | |_ _ ___| |__ ___ __ _ _ __ __| | / /_ / /_ / /
|
||||||
|
|/ / | | | | | | |/ _ \ '_ \ / _ \ / _` | '__/ _` | | '_ \| '_ \ / /
|
||||||
|
|_| | |____| | |_| | __/ |_) | (_) | (_| | | | (_| | | (_) | (_) / / _
|
||||||
|
(_) \_____|_|\__,_|\___|_.__/ \___/ \__,_|_| \__,_| \___/ \___/_/ (_)
|
||||||
|
```
|
||||||
|
|
||||||
|
![Clueboard Layout Image](layout.png)
|
||||||
|
|
||||||
|
# Caps Fn Layout
|
||||||
|
|
||||||
|
This is the default layout except that Caps Lock acts like Caps Lock when
|
||||||
|
tapped but Fn when held.
|
|
@ -1,7 +1,8 @@
|
||||||
#include "clueboard.h"
|
#include "clueboard.h"
|
||||||
|
|
||||||
// Used for SHIFT_ESC
|
// Helpful defines
|
||||||
#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
|
#define GRAVE_MODS (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
|
||||||
|
#define _______ KC_TRNS
|
||||||
|
|
||||||
// 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.
|
||||||
|
@ -9,21 +10,10 @@
|
||||||
// entirely and just use numbers.
|
// entirely and just use numbers.
|
||||||
#define _BL 0
|
#define _BL 0
|
||||||
#define _FL 1
|
#define _FL 1
|
||||||
#define _RS 2
|
#define _CL 2
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
/* Keymap _BL: (Base Layer) Default Layer
|
/* Keymap _BL: Base Layer (Default Layer)
|
||||||
* ,--------------------------------------------------------------------------. ,----.
|
|
||||||
* |Esc~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| BS| |PGUP|
|
|
||||||
* |--------------------------------------------------------------------------| |----|
|
|
||||||
* | Tab| Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |PGDN|
|
|
||||||
* |--------------------------------------------------------------------------| `----'
|
|
||||||
* |Capslck| A| S| D| F| G| H| J| K| L| ;| '| # | Ent|
|
|
||||||
* |-----------------------------------------------------------------------------.
|
|
||||||
* |Shift| BS| Z| X| C| V| B| N| M| ,| .| /| BS|Shift| UP|
|
|
||||||
* |------------------------------------------------------------------------|----|----.
|
|
||||||
* | Ctrl| Gui| Alt| MHen| Space| Space| Hen| Alt| Ctrl| _FL|LEFT|DOWN|RGHT|
|
|
||||||
* `----------------------------------------------------------------------------------'
|
|
||||||
*/
|
*/
|
||||||
[_BL] = KEYMAP(
|
[_BL] = KEYMAP(
|
||||||
F(0), 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_GRV, KC_BSPC, KC_PGUP, \
|
F(0), 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_GRV, KC_BSPC, KC_PGUP, \
|
||||||
|
@ -33,61 +23,44 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_SPC,KC_SPC, KC_HENK, KC_RALT, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
|
KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_SPC,KC_SPC, KC_HENK, KC_RALT, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
|
||||||
|
|
||||||
/* Keymap _FL: Function Layer
|
/* Keymap _FL: Function Layer
|
||||||
* ,--------------------------------------------------------------------------. ,----.
|
|
||||||
* | `| F1| F2| F3| F4| F5| F6| F7| F8| F9| F10| F11| F12| | Del| |BLIN|
|
|
||||||
* |--------------------------------------------------------------------------| |----|
|
|
||||||
* | | | | | | | | |PScr|SLck|Paus| | | | |BLDE|
|
|
||||||
* |--------------------------------------------------------------------------| `----'
|
|
||||||
* | | | _RS| | | | | | | | | | | |
|
|
||||||
* |-----------------------------------------------------------------------------.
|
|
||||||
* | | | | | | | | | | | | | | |PGUP|
|
|
||||||
* |------------------------------------------------------------------------|----|----.
|
|
||||||
* | | | | | | | | | | _FL|HOME|PGDN| END|
|
|
||||||
* `----------------------------------------------------------------------------------'
|
|
||||||
*/
|
*/
|
||||||
[_FL] = KEYMAP(
|
[_FL] = KEYMAP(
|
||||||
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_DEL, BL_STEP, \
|
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL, BL_STEP, \
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PSCR,KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
_______, _______, _______,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK, KC_PAUS, _______, _______, _______, _______, \
|
||||||
KC_TRNS, KC_TRNS, MO(_RS),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
_______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
|
||||||
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_PGUP, \
|
_______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_PGUP, \
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), KC_HOME, KC_PGDN, KC_END),
|
_______, _______, _______, _______, _______,_______, _______, _______, _______, MO(_FL), KC_HOME, KC_PGDN, KC_END),
|
||||||
|
|
||||||
/* Keymap _RS: Reset layer
|
/* Keymap _CL: Control layer
|
||||||
* ,--------------------------------------------------------------------------. ,----.
|
|
||||||
* | | | | | | | | | | | | | | | | | |
|
|
||||||
* |--------------------------------------------------------------------------| |----|
|
|
||||||
* | | | | |RESET| | | | | | | | | | | |
|
|
||||||
* |--------------------------------------------------------------------------| `----'
|
|
||||||
* | | | _RS| | | | | | | | | | | |
|
|
||||||
* |-----------------------------------------------------------------------------.
|
|
||||||
* | | | | | | | | | | | | | | | |
|
|
||||||
* |------------------------------------------------------------------------|----|----.
|
|
||||||
* | | | | | | | | | | _FL| | | |
|
|
||||||
* `----------------------------------------------------------------------------------'
|
|
||||||
*/
|
*/
|
||||||
[_RS] = KEYMAP(
|
[_CL] = KEYMAP(
|
||||||
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, RGB_TOG, RGB_VAI, \
|
_______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI, \
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_VAD, \
|
_______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD, \
|
||||||
KC_TRNS, KC_TRNS, MO(_RS),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
_______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
|
||||||
MO(_FL), KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), RGB_SAI, \
|
MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI, \
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, RGB_MOD, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_HUD, RGB_SAD, RGB_HUI),
|
_______, _______, _______,_______, RGB_MOD, RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI),
|
||||||
};
|
|
||||||
|
|
||||||
enum function_id {
|
|
||||||
SHIFT_ESC,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* This is a list of user defined functions. F(N) corresponds to item N
|
||||||
|
of this list.
|
||||||
|
*/
|
||||||
const uint16_t PROGMEM fn_actions[] = {
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
[0] = ACTION_FUNCTION(SHIFT_ESC),
|
[0] = ACTION_FUNCTION(0), // Calls action_function()
|
||||||
};
|
};
|
||||||
|
|
||||||
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||||
static uint8_t shift_esc_shift_mask;
|
static uint8_t mods_pressed;
|
||||||
|
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case SHIFT_ESC:
|
case 0:
|
||||||
shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK;
|
/* Handle the combined Grave/Esc key
|
||||||
|
*/
|
||||||
|
mods_pressed = get_mods()&GRAVE_MODS; // Check to see what mods are pressed
|
||||||
|
|
||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
if (shift_esc_shift_mask) {
|
/* The key is being pressed.
|
||||||
|
*/
|
||||||
|
if (mods_pressed) {
|
||||||
add_key(KC_GRV);
|
add_key(KC_GRV);
|
||||||
send_keyboard_report();
|
send_keyboard_report();
|
||||||
} else {
|
} else {
|
||||||
|
@ -95,7 +68,9 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||||
send_keyboard_report();
|
send_keyboard_report();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (shift_esc_shift_mask) {
|
/* The key is being released.
|
||||||
|
*/
|
||||||
|
if (mods_pressed) {
|
||||||
del_key(KC_GRV);
|
del_key(KC_GRV);
|
||||||
send_keyboard_report();
|
send_keyboard_report();
|
||||||
} else {
|
} else {
|
||||||
|
|
After Width: | Height: | Size: 110 KiB |
|
@ -0,0 +1,17 @@
|
||||||
|
```
|
||||||
|
___ _____ _ _ _ __ __ _ __
|
||||||
|
|__ \ / ____| | | | | | / / / /(_) / /
|
||||||
|
||) | | | | |_ _ ___| |__ ___ __ _ _ __ __| | / /_ / /_ / /
|
||||||
|
|/ / | | | | | | |/ _ \ '_ \ / _ \ / _` | '__/ _` | | '_ \| '_ \ / /
|
||||||
|
|_| | |____| | |_| | __/ |_) | (_) | (_| | | | (_| | | (_) | (_) / / _
|
||||||
|
(_) \_____|_|\__,_|\___|_.__/ \___/ \__,_|_| \__,_| \___/ \___/_/ (_)
|
||||||
|
```
|
||||||
|
|
||||||
|
![Clueboard Layout Image](layout.png)
|
||||||
|
|
||||||
|
# Default Clueboard Layout
|
||||||
|
|
||||||
|
This is the default layout that comes flashed on every Clueboard. For the most
|
||||||
|
part it's a straightforward and easy to follow layout. The only unusual key is
|
||||||
|
the key in the upper left, which sends Escape normally, but Grave when any of
|
||||||
|
the Ctrl, Alt, or GUI modifiers are held down.
|
|
@ -0,0 +1,83 @@
|
||||||
|
#include "clueboard.h"
|
||||||
|
|
||||||
|
// Helpful defines
|
||||||
|
#define GRAVE_MODS (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
|
||||||
|
#define _______ KC_TRNS
|
||||||
|
|
||||||
|
// 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 _BL 0
|
||||||
|
#define _FL 1
|
||||||
|
#define _CL 2
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
/* Keymap _BL: Base Layer (Default Layer)
|
||||||
|
*/
|
||||||
|
[_BL] = KEYMAP(
|
||||||
|
F(0), 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_GRV, KC_BSPC, KC_PGUP, \
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN, \
|
||||||
|
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, \
|
||||||
|
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP, \
|
||||||
|
KC_LCTL, KC_LALT, KC_LGUI,KC_MHEN, KC_SPC, KC_SPC, KC_HENK, KC_RGUI, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
|
||||||
|
|
||||||
|
/* Keymap _FL: Function Layer
|
||||||
|
*/
|
||||||
|
[_FL] = KEYMAP(
|
||||||
|
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL, BL_STEP, \
|
||||||
|
_______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, _______, \
|
||||||
|
_______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
|
||||||
|
_______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_PGUP, \
|
||||||
|
_______, _______, _______, _______, _______,_______, _______, _______, _______, MO(_FL), KC_HOME, KC_PGDN, KC_END),
|
||||||
|
|
||||||
|
/* Keymap _CL: Control layer
|
||||||
|
*/
|
||||||
|
[_CL] = KEYMAP(
|
||||||
|
_______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI, \
|
||||||
|
_______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD, \
|
||||||
|
_______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
|
||||||
|
MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI, \
|
||||||
|
_______, _______, _______,_______, RGB_MOD, RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI),
|
||||||
|
};
|
||||||
|
|
||||||
|
/* This is a list of user defined functions. F(N) corresponds to item N
|
||||||
|
of this list.
|
||||||
|
*/
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
[0] = ACTION_FUNCTION(0), // Calls action_function()
|
||||||
|
};
|
||||||
|
|
||||||
|
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||||
|
static uint8_t mods_pressed;
|
||||||
|
|
||||||
|
switch (id) {
|
||||||
|
case 0:
|
||||||
|
/* Handle the combined Grave/Esc key
|
||||||
|
*/
|
||||||
|
mods_pressed = get_mods()&GRAVE_MODS; // Check to see what mods are pressed
|
||||||
|
|
||||||
|
if (record->event.pressed) {
|
||||||
|
/* The key is being pressed.
|
||||||
|
*/
|
||||||
|
if (mods_pressed) {
|
||||||
|
add_key(KC_GRV);
|
||||||
|
send_keyboard_report();
|
||||||
|
} else {
|
||||||
|
add_key(KC_ESC);
|
||||||
|
send_keyboard_report();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/* The key is being released.
|
||||||
|
*/
|
||||||
|
if (mods_pressed) {
|
||||||
|
del_key(KC_GRV);
|
||||||
|
send_keyboard_report();
|
||||||
|
} else {
|
||||||
|
del_key(KC_ESC);
|
||||||
|
send_keyboard_report();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
After Width: | Height: | Size: 105 KiB |
|
@ -0,0 +1,15 @@
|
||||||
|
```
|
||||||
|
___ _____ _ _ _ __ __ _ __
|
||||||
|
|__ \ / ____| | | | | | / / / /(_) / /
|
||||||
|
||) | | | | |_ _ ___| |__ ___ __ _ _ __ __| | / /_ / /_ / /
|
||||||
|
|/ / | | | | | | |/ _ \ '_ \ / _ \ / _` | '__/ _` | | '_ \| '_ \ / /
|
||||||
|
|_| | |____| | |_| | __/ |_) | (_) | (_| | | | (_| | | (_) | (_) / / _
|
||||||
|
(_) \_____|_|\__,_|\___|_.__/ \___/ \__,_|_| \__,_| \___/ \___/_/ (_)
|
||||||
|
```
|
||||||
|
|
||||||
|
![Clueboard Layout Image](layout.png)
|
||||||
|
|
||||||
|
# Default Clueboard Layout for Mac
|
||||||
|
|
||||||
|
This is the default Clueboard layout with Alt and GUI switched to match Mac
|
||||||
|
conventions.
|
|
@ -1,85 +0,0 @@
|
||||||
#include "clueboard.h"
|
|
||||||
|
|
||||||
// Used for SHIFT_ESC
|
|
||||||
#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
|
|
||||||
|
|
||||||
// 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 _BL 0
|
|
||||||
#define _FL 1
|
|
||||||
#define _RS 2
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
/* Keymap _BL: (Base Layer) Default Layer
|
|
||||||
* ,--------------------------------------------------------------------------. ,----.
|
|
||||||
* | Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| ~| BS| |PgUp|
|
|
||||||
* |--------------------------------------------------------------------------| |----|
|
|
||||||
* | Tab| Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |PgDn|
|
|
||||||
* |--------------------------------------------------------------------------| `----'
|
|
||||||
* |Capslck| A| S| D| F| G| H| J| K| L| ;| '| # | Ent|
|
|
||||||
* |-----------------------------------------------------------------------------.
|
|
||||||
* |Shift| BS| Z| X| C| V| B| N| M| ,| .| /| BS|Shift| Up|
|
|
||||||
* |------------------------------------------------------------------------|----|----.
|
|
||||||
* | Ctrl| Alt| Gui| MHen| Space| Space| Hen| Gui| Alt| Ctrl|Left|Down|Rght|
|
|
||||||
* `----------------------------------------------------------------------------------'
|
|
||||||
*/
|
|
||||||
[_BL] = KEYMAP(
|
|
||||||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_PGUP, \
|
|
||||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN, \
|
|
||||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, \
|
|
||||||
MO(_FL), KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FL), KC_UP, \
|
|
||||||
KC_LCTL, KC_LALT, KC_LGUI,KC_MHEN, KC_SPC, KC_SPC, KC_HENK, KC_RGUI, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
|
|
||||||
|
|
||||||
/* Keymap _FL: Function Layer
|
|
||||||
* ,--------------------------------------------------------------------------. ,----.
|
|
||||||
* | `| F1| F2| F3| F4| F5| F6| F7| F8| F9| F10| F11| F12| | Del| |BLIN|
|
|
||||||
* |--------------------------------------------------------------------------| |----|
|
|
||||||
* | | | | | | | | |PScr|SLck|Paus| | | | |BLDE|
|
|
||||||
* |--------------------------------------------------------------------------| `----'
|
|
||||||
* | | | _RS| | | | | | | | | | | |
|
|
||||||
* |-----------------------------------------------------------------------------.
|
|
||||||
* | | | | | | | | | | | | | | |PGUP|
|
|
||||||
* |------------------------------------------------------------------------|----|----.
|
|
||||||
* | | | | | | | | | | _FL|HOME|PGDN| END|
|
|
||||||
* `----------------------------------------------------------------------------------'
|
|
||||||
*/
|
|
||||||
[_FL] = KEYMAP(
|
|
||||||
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_DEL, BL_STEP, \
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
|
||||||
KC_TRNS, KC_TRNS, MO(_RS),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
|
||||||
MO(_FL), KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), KC_PGUP, \
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END),
|
|
||||||
|
|
||||||
/* Keymap _RS: Reset/Underlight layer
|
|
||||||
* ,--------------------------------------------------------------------------. ,----.
|
|
||||||
* | | | | | | | | | | | | | | | | | |
|
|
||||||
* |--------------------------------------------------------------------------| |----|
|
|
||||||
* | | | | |RESET| | | | | | | | | | | |
|
|
||||||
* |--------------------------------------------------------------------------| `----'
|
|
||||||
* | | | _RS| | | | | | | | | | | |
|
|
||||||
* |-----------------------------------------------------------------------------.
|
|
||||||
* | | | | | | | | | | | | | | | |
|
|
||||||
* |------------------------------------------------------------------------|----|----.
|
|
||||||
* | | | | | | | | | | _FL| | | |
|
|
||||||
* `----------------------------------------------------------------------------------'
|
|
||||||
*/
|
|
||||||
[_RS] = KEYMAP(
|
|
||||||
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, RGB_TOG, RGB_VAI, \
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_VAD, \
|
|
||||||
KC_TRNS, KC_TRNS, MO(_RS),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
|
||||||
MO(_FL), KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), RGB_SAI, \
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, RGB_MOD, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_HUD, RGB_SAD, RGB_HUI),
|
|
||||||
};
|
|
||||||
|
|
||||||
/*enum function_id {
|
|
||||||
};*/
|
|
||||||
|
|
||||||
const uint16_t PROGMEM fn_actions[] = {
|
|
||||||
};
|
|
||||||
|
|
||||||
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
|
||||||
switch (id) {
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
#include "clueboard.h"
|
||||||
|
|
||||||
|
// Helpful defines
|
||||||
|
#define _______ KC_TRNS
|
||||||
|
|
||||||
|
// 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 _BL 0
|
||||||
|
#define _FL 1
|
||||||
|
#define _CL 2
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
/* Keymap _BL: Base Layer (Default Layer)
|
||||||
|
*/
|
||||||
|
[_BL] = KEYMAP(
|
||||||
|
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_PGUP, \
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN, \
|
||||||
|
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, \
|
||||||
|
MO(_FL), KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FL), KC_UP, \
|
||||||
|
KC_LCTL, KC_LALT, KC_LGUI,KC_MHEN, KC_SPC, KC_SPC, KC_HENK, KC_RGUI, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
|
||||||
|
|
||||||
|
/* Keymap _FL: Function Layer
|
||||||
|
*/
|
||||||
|
[_FL] = KEYMAP(
|
||||||
|
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL, BL_STEP, \
|
||||||
|
_______, _______, _______,_______,_______,_______,_______,_______,_______,KC_SLCK, KC_PAUS, _______, _______, _______, _______, \
|
||||||
|
_______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
|
||||||
|
MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), KC_PGUP, \
|
||||||
|
_______, _______, _______,_______, _______,_______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END),
|
||||||
|
|
||||||
|
/* Keymap _CL: Reset/Underlight layer
|
||||||
|
*/
|
||||||
|
[_CL] = KEYMAP(
|
||||||
|
_______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI, \
|
||||||
|
_______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD, \
|
||||||
|
_______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
|
||||||
|
MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI, \
|
||||||
|
_______, _______, _______,_______, RGB_MOD, RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI),
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
};
|
||||||
|
|
||||||
|
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||||
|
};
|
After Width: | Height: | Size: 109 KiB |
|
@ -0,0 +1,14 @@
|
||||||
|
```
|
||||||
|
___ _____ _ _ _ __ __ _ __
|
||||||
|
|__ \ / ____| | | | | | / / / /(_) / /
|
||||||
|
||) | | | | |_ _ ___| |__ ___ __ _ _ __ __| | / /_ / /_ / /
|
||||||
|
|/ / | | | | | | |/ _ \ '_ \ / _ \ / _` | '__/ _` | | '_ \| '_ \ / /
|
||||||
|
|_| | |____| | |_| | __/ |_) | (_) | (_| | | | (_| | | (_) | (_) / / _
|
||||||
|
(_) \_____|_|\__,_|\___|_.__/ \___/ \__,_|_| \__,_| \___/ \___/_/ (_)
|
||||||
|
```
|
||||||
|
|
||||||
|
![Clueboard Layout Image](layout.png)
|
||||||
|
|
||||||
|
# Maximised Clueboard Layout
|
||||||
|
|
||||||
|
This layout is intended for a board with one or both shifts split. The outside key on the split shift is an Fn, while the inside is shift. The bottom row has all the mods on both sides, optimised for a Mac.
|
|
@ -0,0 +1 @@
|
||||||
|
MOUSEKEY_ENABLE = yes
|
|
@ -0,0 +1,93 @@
|
||||||
|
#include "clueboard.h"
|
||||||
|
|
||||||
|
// Helpful defines
|
||||||
|
#define GRAVE_MODS (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
|
||||||
|
#define _______ KC_TRNS
|
||||||
|
|
||||||
|
// 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 _BL 0
|
||||||
|
#define _FL 1
|
||||||
|
#define _CL 2
|
||||||
|
#define _ML 3
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
/* Keymap _BL: Base Layer (Default Layer)
|
||||||
|
*/
|
||||||
|
[_BL] = KEYMAP(
|
||||||
|
F(0), 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_GRV, KC_BSPC, KC_PGUP, \
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN, \
|
||||||
|
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, \
|
||||||
|
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP, \
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_SPC,KC_SPC, KC_HENK, KC_RALT, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
|
||||||
|
|
||||||
|
/* Keymap _FL: Function Layer
|
||||||
|
*/
|
||||||
|
[_FL] = KEYMAP(
|
||||||
|
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL, BL_STEP, \
|
||||||
|
_______, _______, _______,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK, KC_PAUS, _______, _______, _______, _______, \
|
||||||
|
_______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
|
||||||
|
_______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_PGUP, \
|
||||||
|
_______, _______, _______, _______, _______,_______, _______, _______, _______, MO(_FL), KC_HOME, KC_PGDN, KC_END),
|
||||||
|
|
||||||
|
/* Keymap _CL: Control layer
|
||||||
|
*/
|
||||||
|
[_CL] = KEYMAP(
|
||||||
|
_______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI, \
|
||||||
|
_______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD, \
|
||||||
|
_______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
|
||||||
|
MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI, \
|
||||||
|
_______, _______, _______,_______, RGB_MOD, RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI),
|
||||||
|
|
||||||
|
/* Keymap _ML: Mouse layer
|
||||||
|
*/
|
||||||
|
[_ML] = KEYMAP(
|
||||||
|
_______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, _______, _______, \
|
||||||
|
_______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, _______, \
|
||||||
|
_______, _______, KC_BTN3,KC_BTN2,KC_BTN1,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
|
||||||
|
_______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_MS_U, \
|
||||||
|
_______, _______, _______,_______, LT(_ML, KC_SPC),LT(_ML, KC_SPC), _______, KC_BTN1, KC_BTN2, KC_BTN3, KC_MS_L, KC_MS_D,KC_MS_R),
|
||||||
|
};
|
||||||
|
|
||||||
|
/* This is a list of user defined functions. F(N) corresponds to item N
|
||||||
|
of this list.
|
||||||
|
*/
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
[0] = ACTION_FUNCTION(0), // Calls action_function()
|
||||||
|
};
|
||||||
|
|
||||||
|
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||||
|
static uint8_t mods_pressed;
|
||||||
|
|
||||||
|
switch (id) {
|
||||||
|
case 0:
|
||||||
|
/* Handle the combined Grave/Esc key
|
||||||
|
*/
|
||||||
|
mods_pressed = get_mods()&GRAVE_MODS; // Check to see what mods are pressed
|
||||||
|
|
||||||
|
if (record->event.pressed) {
|
||||||
|
/* The key is being pressed.
|
||||||
|
*/
|
||||||
|
if (mods_pressed) {
|
||||||
|
add_key(KC_GRV);
|
||||||
|
send_keyboard_report();
|
||||||
|
} else {
|
||||||
|
add_key(KC_ESC);
|
||||||
|
send_keyboard_report();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/* The key is being released.
|
||||||
|
*/
|
||||||
|
if (mods_pressed) {
|
||||||
|
del_key(KC_GRV);
|
||||||
|
send_keyboard_report();
|
||||||
|
} else {
|
||||||
|
del_key(KC_ESC);
|
||||||
|
send_keyboard_report();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
After Width: | Height: | Size: 140 KiB |
|
@ -0,0 +1,16 @@
|
||||||
|
```
|
||||||
|
___ _____ _ _ _ __ __ _ __
|
||||||
|
|__ \ / ____| | | | | | / / / /(_) / /
|
||||||
|
||) | | | | |_ _ ___| |__ ___ __ _ _ __ __| | / /_ / /_ / /
|
||||||
|
|/ / | | | | | | |/ _ \ '_ \ / _ \ / _` | '__/ _` | | '_ \| '_ \ / /
|
||||||
|
|_| | |____| | |_| | __/ |_) | (_) | (_| | | | (_| | | (_) | (_) / / _
|
||||||
|
(_) \_____|_|\__,_|\___|_.__/ \___/ \__,_|_| \__,_| \___/ \___/_/ (_)
|
||||||
|
```
|
||||||
|
|
||||||
|
![Clueboard Layout Image](layout.png)
|
||||||
|
|
||||||
|
# MouseKeys Layout
|
||||||
|
|
||||||
|
This layout adds a mouse layer. When you hold down the spacebar the arrow keys
|
||||||
|
will move your mouse cursor. You can click using the 3 mods to the left of the
|
||||||
|
arrow keys, or the 3 keys under your primary fingers on the home row.
|
|
@ -0,0 +1,83 @@
|
||||||
|
#include "clueboard.h"
|
||||||
|
|
||||||
|
// Helpful defines
|
||||||
|
#define GRAVE_MODS (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
|
||||||
|
#define _______ KC_TRNS
|
||||||
|
|
||||||
|
// 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 _BL 0
|
||||||
|
#define _FL 1
|
||||||
|
#define _CL 2
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
/* Keymap _BL: Base Layer (Default Layer)
|
||||||
|
*/
|
||||||
|
[_BL] = KEYMAP(
|
||||||
|
F(0), 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_GRV, KC_BSPC, KC_PGUP, \
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN, \
|
||||||
|
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, \
|
||||||
|
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP, \
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_SPC,KC_SPC, KC_HENK, KC_RALT, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
|
||||||
|
|
||||||
|
/* Keymap _FL: Function Layer
|
||||||
|
*/
|
||||||
|
[_FL] = KEYMAP(
|
||||||
|
S(KC_GRV), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_GRV), KC_DEL, BL_STEP, \
|
||||||
|
S(KC_TAB), S(KC_Q), S(KC_W),S(KC_E),S(KC_R),S(KC_T), S(KC_Y), S(KC_U),S(KC_I),S(KC_O), S(KC_P), S(KC_LBRC),S(KC_RBRC),S(KC_BSLS), S(KC_PGDN), \
|
||||||
|
S(KC_LCTL),S(KC_A), MO(_CL),S(KC_D),S(KC_F),S(KC_G), S(KC_H), S(KC_J),S(KC_K),S(KC_L), S(KC_SCLN),S(KC_QUOT),S(KC_NUHS),S(KC_ENT), \
|
||||||
|
MO(_FL), S(KC_NUBS),S(KC_Z),S(KC_X),S(KC_C),S(KC_V), S(KC_B), S(KC_N),S(KC_M),S(KC_COMM),S(KC_DOT), S(KC_SLSH),S(KC_RO), KC_RSFT, KC_PGUP, \
|
||||||
|
KC_LCTL, KC_LALT, KC_LGUI,MO(_FL), S(KC_SPC),S(KC_SPC), MO(_FL), KC_RGUI, KC_RALT, KC_RCTL, KC_HOME, KC_PGDN, KC_END),
|
||||||
|
|
||||||
|
/* Keymap _CL: Control layer
|
||||||
|
*/
|
||||||
|
[_CL] = KEYMAP(
|
||||||
|
_______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI, \
|
||||||
|
_______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD, \
|
||||||
|
_______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
|
||||||
|
MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI, \
|
||||||
|
_______, _______, _______,_______, RGB_MOD,RGB_MOD, _______, _______, _______, _______, RGB_HUD,RGB_SAD,RGB_HUI),
|
||||||
|
};
|
||||||
|
|
||||||
|
/* This is a list of user defined functions. F(N) corresponds to item N
|
||||||
|
of this list.
|
||||||
|
*/
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
[0] = ACTION_FUNCTION(0), // Calls action_function()
|
||||||
|
};
|
||||||
|
|
||||||
|
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||||
|
static uint8_t mods_pressed;
|
||||||
|
|
||||||
|
switch (id) {
|
||||||
|
case 0:
|
||||||
|
/* Handle the combined Grave/Esc key
|
||||||
|
*/
|
||||||
|
mods_pressed = get_mods()&GRAVE_MODS; // Check to see what mods are pressed
|
||||||
|
|
||||||
|
if (record->event.pressed) {
|
||||||
|
/* The key is being pressed.
|
||||||
|
*/
|
||||||
|
if (mods_pressed) {
|
||||||
|
add_key(KC_GRV);
|
||||||
|
send_keyboard_report();
|
||||||
|
} else {
|
||||||
|
add_key(KC_ESC);
|
||||||
|
send_keyboard_report();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/* The key is being released.
|
||||||
|
*/
|
||||||
|
if (mods_pressed) {
|
||||||
|
del_key(KC_GRV);
|
||||||
|
send_keyboard_report();
|
||||||
|
} else {
|
||||||
|
del_key(KC_ESC);
|
||||||
|
send_keyboard_report();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
After Width: | Height: | Size: 105 KiB |
|
@ -0,0 +1,17 @@
|
||||||
|
```
|
||||||
|
___ _____ _ _ _ __ __ _ __
|
||||||
|
|__ \ / ____| | | | | | / / / /(_) / /
|
||||||
|
||) | | | | |_ _ ___| |__ ___ __ _ _ __ __| | / /_ / /_ / /
|
||||||
|
|/ / | | | | | | |/ _ \ '_ \ / _ \ / _` | '__/ _` | | '_ \| '_ \ / /
|
||||||
|
|_| | |____| | |_| | __/ |_) | (_) | (_| | | | (_| | | (_) | (_) / / _
|
||||||
|
(_) \_____|_|\__,_|\___|_.__/ \___/ \__,_|_| \__,_| \___/ \___/_/ (_)
|
||||||
|
```
|
||||||
|
|
||||||
|
![Clueboard Layout Image](layout.png)
|
||||||
|
|
||||||
|
# Shift Fn Clueboard Layout
|
||||||
|
|
||||||
|
This is an experimental layout. It makes the left shift key a dual roll key.
|
||||||
|
For most keys it acts as a shift key, but for some keys it activates an
|
||||||
|
alternate function instead. Primarily I use this to access the F-keys under
|
||||||
|
the number rows.
|
|
@ -1,7 +1,8 @@
|
||||||
#include "clueboard.h"
|
#include "clueboard.h"
|
||||||
|
|
||||||
// Used for SHIFT_ESC
|
// Helpful defines
|
||||||
#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
|
#define GRAVE_MODS (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
|
||||||
|
#define _______ KC_TRNS
|
||||||
|
|
||||||
// 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.
|
||||||
|
@ -9,21 +10,10 @@
|
||||||
// entirely and just use numbers.
|
// entirely and just use numbers.
|
||||||
#define _BL 0
|
#define _BL 0
|
||||||
#define _FL 1
|
#define _FL 1
|
||||||
#define _RS 2
|
#define _CL 2
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
/* Keymap _BL: (Base Layer) Default Layer
|
/* Keymap _BL: Base Layer (Default Layer)
|
||||||
* ,--------------------------------------------------------------------------. ,----.
|
|
||||||
* |Esc~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| BS| |PGUP|
|
|
||||||
* |--------------------------------------------------------------------------| |----|
|
|
||||||
* | Tab| Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |PGDN|
|
|
||||||
* |--------------------------------------------------------------------------| `----'
|
|
||||||
* |Capslck| A| S| D| F| G| H| J| K| L| ;| '| # | Ent|
|
|
||||||
* |-----------------------------------------------------------------------------.
|
|
||||||
* |Shift| BS| Z| X| C| V| B| N| M| ,| .| /| BS|Shift| UP|
|
|
||||||
* |------------------------------------------------------------------------|----|----.
|
|
||||||
* | Ctrl| Gui| Alt| MHen| Space| Space| Hen| Alt| Ctrl| _FL|LEFT|DOWN|RGHT|
|
|
||||||
* `----------------------------------------------------------------------------------'
|
|
||||||
*/
|
*/
|
||||||
[_BL] = KEYMAP(
|
[_BL] = KEYMAP(
|
||||||
F(0), 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_GRV, KC_BSPC, KC_PGUP, \
|
F(0), 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_GRV, KC_BSPC, KC_PGUP, \
|
||||||
|
@ -33,61 +23,41 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
KC_LCTL,KC_LALT,KC_LGUI,MO(_FL), KC_SPC, KC_SPC, MO(_FL), KC_RGUI, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
|
KC_LCTL,KC_LALT,KC_LGUI,MO(_FL), KC_SPC, KC_SPC, MO(_FL), KC_RGUI, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
|
||||||
|
|
||||||
/* Keymap _FL: Function Layer
|
/* Keymap _FL: Function Layer
|
||||||
* ,--------------------------------------------------------------------------. ,----.
|
|
||||||
* | `| F1| F2| F3| F4| F5| F6| F7| F8| F9| F10| F11| F12| | Del| |BLIN|
|
|
||||||
* |--------------------------------------------------------------------------| |----|
|
|
||||||
* | | | | | | | | |PScr|SLck|Paus| | | | |BLDE|
|
|
||||||
* |--------------------------------------------------------------------------| `----'
|
|
||||||
* | | | _RS| | | | | | | | | | | |
|
|
||||||
* |-----------------------------------------------------------------------------.
|
|
||||||
* | | | | | | | | | | | | | | |PGUP|
|
|
||||||
* |------------------------------------------------------------------------|----|----.
|
|
||||||
* | | | | | | | | | | _FL|HOME|PGDN| END|
|
|
||||||
* `----------------------------------------------------------------------------------'
|
|
||||||
*/
|
*/
|
||||||
[_FL] = KEYMAP(
|
[_FL] = KEYMAP(
|
||||||
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS,KC_DEL, BL_STEP, \
|
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,KC_DEL, BL_STEP, \
|
||||||
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PSCR,KC_SLCK,KC_PAUS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, \
|
_______,_______,_______,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK,KC_PAUS,_______,_______,_______, _______, \
|
||||||
KC_TRNS,KC_TRNS,MO(_RS),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
|
_______,_______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \
|
||||||
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_PGUP, \
|
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, KC_PGUP, \
|
||||||
KC_TRNS,KC_TRNS,KC_TRNS,MO(_FL), KC_TRNS,KC_TRNS, MO(_FL),KC_TRNS,KC_TRNS,MO(_FL),KC_HOME,KC_PGDN,KC_END),
|
_______,_______,_______,MO(_FL), _______,_______, MO(_FL),_______,_______,MO(_FL),KC_HOME,KC_PGDN,KC_END),
|
||||||
|
|
||||||
/* Keymap _RS: Reset layer
|
/* Keymap _CL: Control layer
|
||||||
* ,--------------------------------------------------------------------------. ,----.
|
|
||||||
* | | | | | | | | | | | | | | | | | |
|
|
||||||
* |--------------------------------------------------------------------------| |----|
|
|
||||||
* | | | | |RESET| | | | | | | | | | | |
|
|
||||||
* |--------------------------------------------------------------------------| `----'
|
|
||||||
* | | | _RS| | | | | | | | | | | |
|
|
||||||
* |-----------------------------------------------------------------------------.
|
|
||||||
* | | | | | | | | | | | | | | | |
|
|
||||||
* |------------------------------------------------------------------------|----|----.
|
|
||||||
* | | | | | | | | | | _FL| | | |
|
|
||||||
* `----------------------------------------------------------------------------------'
|
|
||||||
*/
|
*/
|
||||||
[_RS] = KEYMAP(
|
[_CL] = KEYMAP(
|
||||||
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, \
|
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
|
||||||
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, \
|
_______,_______,_______,_______,RESET, _______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
|
||||||
KC_TRNS,KC_TRNS,MO(_RS),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
|
_______,_______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \
|
||||||
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, \
|
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
|
||||||
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,MO(_FL),KC_TRNS, KC_TRNS, KC_TRNS),
|
_______,_______,_______,_______, _______,_______, _______,_______,_______,MO(_FL),_______, _______, _______),
|
||||||
};
|
|
||||||
|
|
||||||
enum function_id {
|
|
||||||
SHIFT_ESC,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const uint16_t PROGMEM fn_actions[] = {
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
[0] = ACTION_FUNCTION(SHIFT_ESC),
|
[0] = ACTION_FUNCTION(0),
|
||||||
};
|
};
|
||||||
|
|
||||||
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||||
static uint8_t shift_esc_shift_mask;
|
static uint8_t mods_pressed;
|
||||||
|
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case SHIFT_ESC:
|
case 0:
|
||||||
shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK;
|
/* Handle the combined Grave/Esc key
|
||||||
|
*/
|
||||||
|
mods_pressed = get_mods()&GRAVE_MODS; // Check to see what mods are pressed
|
||||||
|
|
||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
if (shift_esc_shift_mask) {
|
/* The key is being pressed.
|
||||||
|
*/
|
||||||
|
if (mods_pressed) {
|
||||||
add_key(KC_GRV);
|
add_key(KC_GRV);
|
||||||
send_keyboard_report();
|
send_keyboard_report();
|
||||||
} else {
|
} else {
|
||||||
|
@ -95,7 +65,9 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||||
send_keyboard_report();
|
send_keyboard_report();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (shift_esc_shift_mask) {
|
/* The key is being released.
|
||||||
|
*/
|
||||||
|
if (mods_pressed) {
|
||||||
del_key(KC_GRV);
|
del_key(KC_GRV);
|
||||||
send_keyboard_report();
|
send_keyboard_report();
|
||||||
} else {
|
} else {
|
||||||
|
|
After Width: | Height: | Size: 109 KiB |
|
@ -1,3 +1,14 @@
|
||||||
|
```
|
||||||
|
___ _____ _ _ _ __ __ _ __
|
||||||
|
|__ \ / ____| | | | | | / / / /(_) / /
|
||||||
|
||) | | | | |_ _ ___| |__ ___ __ _ _ __ __| | / /_ / /_ / /
|
||||||
|
|/ / | | | | | | |/ _ \ '_ \ / _ \ / _` | '__/ _` | | '_ \| '_ \ / /
|
||||||
|
|_| | |____| | |_| | __/ |_) | (_) | (_| | | | (_| | | (_) | (_) / / _
|
||||||
|
(_) \_____|_|\__,_|\___|_.__/ \___/ \__,_|_| \__,_| \___/ \___/_/ (_)
|
||||||
|
```
|
||||||
|
|
||||||
|
![Clueboard Layout Image](layout.png)
|
||||||
|
|
||||||
# skullY's Clueboard Layout
|
# skullY's Clueboard Layout
|
||||||
|
|
||||||
This layout is what I (@skullydazed) use on my personal Clueboards. I mostly use it for programming, CAD, and general typing.
|
This layout is what I (@skullydazed) use on my personal Clueboards. I mostly use it for programming, CAD, and general typing.
|
||||||
|
|
|
@ -0,0 +1,83 @@
|
||||||
|
#include "clueboard.h"
|
||||||
|
|
||||||
|
// Helpful defines
|
||||||
|
#define GRAVE_MODS (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
|
||||||
|
#define _______ KC_TRNS
|
||||||
|
|
||||||
|
// 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 _BL 0
|
||||||
|
#define _FL 1
|
||||||
|
#define _CL 2
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
/* Keymap _BL: Base Layer (Default Layer)
|
||||||
|
*/
|
||||||
|
[_BL] = KEYMAP(
|
||||||
|
F(0), 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_GRV, KC_BSPC, KC_PGUP, \
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN, \
|
||||||
|
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, \
|
||||||
|
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP, \
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_SPC, KC_SPC, KC_HENK, KC_RALT, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
|
||||||
|
|
||||||
|
/* Keymap _FL: Function Layer
|
||||||
|
*/
|
||||||
|
[_FL] = KEYMAP(
|
||||||
|
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL, KC_INS, \
|
||||||
|
_______, _______, _______,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK, KC_PAUS, _______, _______, _______, KC_DEL, \
|
||||||
|
_______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
|
||||||
|
_______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_PGUP, \
|
||||||
|
_______, _______, _______, _______, _______,_______, _______, _______, _______, MO(_FL), KC_HOME, KC_PGDN, KC_END),
|
||||||
|
|
||||||
|
/* Keymap _CL: Control layer
|
||||||
|
*/
|
||||||
|
[_CL] = KEYMAP(
|
||||||
|
_______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI, \
|
||||||
|
_______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD, \
|
||||||
|
_______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
|
||||||
|
MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI, \
|
||||||
|
_______, _______, _______,_______, RGB_MOD,RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD,RGB_HUI),
|
||||||
|
};
|
||||||
|
|
||||||
|
/* This is a list of user defined functions. F(N) corresponds to item N
|
||||||
|
of this list.
|
||||||
|
*/
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
[0] = ACTION_FUNCTION(0), // Calls action_function()
|
||||||
|
};
|
||||||
|
|
||||||
|
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||||
|
static uint8_t mods_pressed;
|
||||||
|
|
||||||
|
switch (id) {
|
||||||
|
case 0:
|
||||||
|
/* Handle the combined Grave/Esc key
|
||||||
|
*/
|
||||||
|
mods_pressed = get_mods()&GRAVE_MODS; // Check to see what mods are pressed
|
||||||
|
|
||||||
|
if (record->event.pressed) {
|
||||||
|
/* The key is being pressed.
|
||||||
|
*/
|
||||||
|
if (mods_pressed) {
|
||||||
|
add_key(KC_GRV);
|
||||||
|
send_keyboard_report();
|
||||||
|
} else {
|
||||||
|
add_key(KC_ESC);
|
||||||
|
send_keyboard_report();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/* The key is being released.
|
||||||
|
*/
|
||||||
|
if (mods_pressed) {
|
||||||
|
del_key(KC_GRV);
|
||||||
|
send_keyboard_report();
|
||||||
|
} else {
|
||||||
|
del_key(KC_ESC);
|
||||||
|
send_keyboard_report();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
After Width: | Height: | Size: 109 KiB |
|
@ -0,0 +1,15 @@
|
||||||
|
```
|
||||||
|
___ _____ _ _ _ __ __ _ __
|
||||||
|
|__ \ / ____| | | | | | / / / /(_) / /
|
||||||
|
||) | | | | |_ _ ___| |__ ___ __ _ _ __ __| | / /_ / /_ / /
|
||||||
|
|/ / | | | | | | |/ _ \ '_ \ / _ \ / _` | '__/ _` | | '_ \| '_ \ / /
|
||||||
|
|_| | |____| | |_| | __/ |_) | (_) | (_| | | | (_| | | (_) | (_) / / _
|
||||||
|
(_) \_____|_|\__,_|\___|_.__/ \___/ \__,_|_| \__,_| \___/ \___/_/ (_)
|
||||||
|
```
|
||||||
|
|
||||||
|
![Clueboard Layout Image](layout.png)
|
||||||
|
|
||||||
|
# Default Clueboard Layout
|
||||||
|
|
||||||
|
This is the default layout except that Caps Lock has been changed to Control
|
||||||
|
and Insert and Delete have been put into the Fn layer.
|
|
@ -0,0 +1,83 @@
|
||||||
|
#include "clueboard.h"
|
||||||
|
|
||||||
|
// Helpful defines
|
||||||
|
#define GRAVE_MODS (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
|
||||||
|
#define _______ KC_TRNS
|
||||||
|
|
||||||
|
// 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 _BL 0
|
||||||
|
#define _FL 1
|
||||||
|
#define _CL 2
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
/* Keymap _BL: Base Layer (Default Layer)
|
||||||
|
*/
|
||||||
|
[_BL] = KEYMAP(
|
||||||
|
F(0), 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_GRV, KC_BSPC, KC_INS, \
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, \
|
||||||
|
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, \
|
||||||
|
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP, \
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_SPC,KC_SPC, KC_HENK, KC_RALT, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
|
||||||
|
|
||||||
|
/* Keymap _FL: Function Layer
|
||||||
|
*/
|
||||||
|
[_FL] = KEYMAP(
|
||||||
|
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL, BL_STEP, \
|
||||||
|
_______, _______, _______,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK, KC_PAUS, _______, _______, _______, _______, \
|
||||||
|
_______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
|
||||||
|
_______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_PGUP, \
|
||||||
|
_______, _______, _______, _______, _______,_______, _______, _______, _______, MO(_FL), KC_HOME, KC_PGDN, KC_END),
|
||||||
|
|
||||||
|
/* Keymap _CL: Control layer
|
||||||
|
*/
|
||||||
|
[_CL] = KEYMAP(
|
||||||
|
_______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI, \
|
||||||
|
_______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD, \
|
||||||
|
_______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
|
||||||
|
MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI, \
|
||||||
|
_______, _______, _______,_______, RGB_MOD, RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI),
|
||||||
|
};
|
||||||
|
|
||||||
|
/* This is a list of user defined functions. F(N) corresponds to item N
|
||||||
|
of this list.
|
||||||
|
*/
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
[0] = ACTION_FUNCTION(0), // Calls action_function()
|
||||||
|
};
|
||||||
|
|
||||||
|
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||||
|
static uint8_t mods_pressed;
|
||||||
|
|
||||||
|
switch (id) {
|
||||||
|
case 0:
|
||||||
|
/* Handle the combined Grave/Esc key
|
||||||
|
*/
|
||||||
|
mods_pressed = get_mods()&GRAVE_MODS; // Check to see what mods are pressed
|
||||||
|
|
||||||
|
if (record->event.pressed) {
|
||||||
|
/* The key is being pressed.
|
||||||
|
*/
|
||||||
|
if (mods_pressed) {
|
||||||
|
add_key(KC_GRV);
|
||||||
|
send_keyboard_report();
|
||||||
|
} else {
|
||||||
|
add_key(KC_ESC);
|
||||||
|
send_keyboard_report();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/* The key is being released.
|
||||||
|
*/
|
||||||
|
if (mods_pressed) {
|
||||||
|
del_key(KC_GRV);
|
||||||
|
send_keyboard_report();
|
||||||
|
} else {
|
||||||
|
del_key(KC_ESC);
|
||||||
|
send_keyboard_report();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
After Width: | Height: | Size: 108 KiB |
|
@ -0,0 +1,17 @@
|
||||||
|
```
|
||||||
|
___ _____ _ _ _ __ __ _ __
|
||||||
|
|__ \ / ____| | | | | | / / / /(_) / /
|
||||||
|
||) | | | | |_ _ ___| |__ ___ __ _ _ __ __| | / /_ / /_ / /
|
||||||
|
|/ / | | | | | | |/ _ \ '_ \ / _ \ / _` | '__/ _` | | '_ \| '_ \ / /
|
||||||
|
|_| | |____| | |_| | __/ |_) | (_) | (_| | | | (_| | | (_) | (_) / / _
|
||||||
|
(_) \_____|_|\__,_|\___|_.__/ \___/ \__,_|_| \__,_| \___/ \___/_/ (_)
|
||||||
|
```
|
||||||
|
|
||||||
|
![Clueboard Layout Image](layout.png)
|
||||||
|
|
||||||
|
# Default Clueboard Layout
|
||||||
|
|
||||||
|
This is the default layout that comes flashed on every Clueboard. For the most
|
||||||
|
part it's a straightforward and easy to follow layout. The only unusual key is
|
||||||
|
the key in the upper left, which sends Escape normally, but Grave when any of
|
||||||
|
the Ctrl, Alt, or GUI modifiers are held down.
|
|
@ -90,14 +90,14 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||||
# Build Options
|
# Build Options
|
||||||
# comment out to disable the options.
|
# comment out to disable the options.
|
||||||
#
|
#
|
||||||
BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
|
BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
|
||||||
MOUSEKEY_ENABLE ?= no # Mouse keys(+4700)
|
MOUSEKEY_ENABLE ?= no # Mouse keys(+4700)
|
||||||
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
EXTRAKEY_ENABLE ?= no # Audio control and System control(+450)
|
||||||
CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
||||||
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
||||||
NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
AUDIO_ENABLE ?= no
|
AUDIO_ENABLE ?= no
|
||||||
RGBLIGHT_ENABLE ?= no # Enable keyboard underlight functionality
|
RGBLIGHT_ENABLE ?= yes # Enable keyboard underlight functionality
|
||||||
MIDI_ENABLE ?= no # MIDI controls
|
MIDI_ENABLE ?= no # MIDI controls
|
||||||
UNICODE_ENABLE ?= no # Unicode
|
UNICODE_ENABLE ?= no # Unicode
|
||||||
BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
|
|
@ -8,7 +8,7 @@ Beginner's keymap emulates standard QWERTY keyboard for beginners. Once you get
|
||||||
* Easy on beginners. It has everything you need for your day to day usage.
|
* Easy on beginners. It has everything you need for your day to day usage.
|
||||||
|
|
||||||
#### Cons
|
#### Cons
|
||||||
* Keys are not ergonomically placed to take full advantage of Ergodox-EZ. Take a look at this [Default Keymap](https://github.com/jackhumbert/qmk_firmware/blob/master/keyboards/ergodox_ez/keymaps/default/readme.md)
|
* Keys are not ergonomically placed to take full advantage of Ergodox-EZ. Take a look at this [Default Keymap](https://github.com/qmk/qmk_firmware/blob/master/keyboards/ergodox/keymaps/default/readme.md)
|
||||||
* While multiple layers are possible, beginner's keymap only uses one additional layer for mouse, function and volume keys.
|
* While multiple layers are possible, beginner's keymap only uses one additional layer for mouse, function and volume keys.
|
||||||
|
|
||||||
#### Notes
|
#### Notes
|
||||||
|
|
|
@ -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.
|
|
@ -121,10 +121,10 @@ There is a very small tool in `tools/layer-notify`, that listens to the HID cons
|
||||||
To make my workflow easier, this layout is maintained in [its own repository][algernon:ez-layout]. To build it, you will need the [QMK][qmk] firmware checked out, and this repo either checked out to something like `keyboards/ergodox_ez/algernon-master`. One way to achieve that is this:
|
To make my workflow easier, this layout is maintained in [its own repository][algernon:ez-layout]. To build it, you will need the [QMK][qmk] firmware checked out, and this repo either checked out to something like `keyboards/ergodox_ez/algernon-master`. One way to achieve that is this:
|
||||||
|
|
||||||
[algernon:ez-layout]: https://github.com/algernon/ergodox-layout
|
[algernon:ez-layout]: https://github.com/algernon/ergodox-layout
|
||||||
[qmk]: https://github.com/jackhumbert/qmk_firmware
|
[qmk]: https://github.com/qmk/qmk_firmware
|
||||||
|
|
||||||
```
|
```
|
||||||
$ git clone https://github.com/jackhumbert/qmk_firmware.git
|
$ git clone https://github.com/qmk/qmk_firmware.git
|
||||||
$ cd qmk_firmware
|
$ cd qmk_firmware
|
||||||
$ git clone https://github.com/algernon/ergodox-layout.git \
|
$ git clone https://github.com/algernon/ergodox-layout.git \
|
||||||
keyboards/ergodox/keymaps/algernon-master
|
keyboards/ergodox/keymaps/algernon-master
|
||||||
|
|
|
@ -312,6 +312,8 @@ uint16_t hex_to_keycode(uint8_t hex)
|
||||||
return NEO_E;
|
return NEO_E;
|
||||||
case 0xF:
|
case 0xF:
|
||||||
return NEO_F;
|
return NEO_F;
|
||||||
|
default:
|
||||||
|
return KC_NO;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
TAP_DANCE_ENABLE = no
|
After Width: | Height: | Size: 294 KiB |
After Width: | Height: | Size: 230 KiB |
|
@ -0,0 +1,256 @@
|
||||||
|
#include "ergodox.h"
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
/* Keymap 0: Basic layer
|
||||||
|
* MEH: Alt+Control+Shift
|
||||||
|
* HYPER: Alt+Control+Shift+Gui
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | ` ~ | 1 ! | 2 @ | 3 # | 4 $ | 5 % | 6 ^ | | 7 & | 8 * | 9 ( | 0 ) | - _ | = + | Backsp |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | TAB | Q | W | F | P | G |TG(3) | |TG(4) | J | L | U | Y | ; : | ' " |
|
||||||
|
* |--------+------+------+------+------+------|F-lck | |N-lck |------+------+------+------+------+--------|
|
||||||
|
* | CAPS | A | R | S | T | D |------| |------| H | N | E | I | O | ENT |
|
||||||
|
* |--------+------+------+------+------+------| MEH | | MEH |------+------+------+------+------+--------|
|
||||||
|
* | Shift | Z | X | C | V | B | | | | K | M | , < | . > | UP | Shift |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* | LCTL | LCTL | LGUI | LALT | LGUI | | RALT | RCTL | LEFT | DOWN | RIGHT|
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,--------------. ,--------------.
|
||||||
|
* | Esc | App | | Ins | Del |
|
||||||
|
* ,------|------|-------| |------+-------+------.
|
||||||
|
* | | | Home | | PgUp | | |
|
||||||
|
* | MO(2)| MO(4)|-------| |------| Space |Space |
|
||||||
|
* |symbol|N-Lock| End | | PgDn | | |
|
||||||
|
* `---------------------' `---------------------'
|
||||||
|
*/
|
||||||
|
[0] = KEYMAP( // layer 0 : default
|
||||||
|
// left hand
|
||||||
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6,
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, TG(3),
|
||||||
|
KC_CAPS, KC_A, KC_R, KC_S, KC_T, KC_D,
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MEH,
|
||||||
|
KC_LCTL, KC_LCTL, KC_LGUI, KC_LALT, KC_LGUI,
|
||||||
|
|
||||||
|
KC_ESC, KC_APP,
|
||||||
|
KC_HOME,
|
||||||
|
MO(2), MO(4), KC_END,
|
||||||
|
|
||||||
|
// right hand
|
||||||
|
KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
|
||||||
|
TG(4), KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_QUOT,
|
||||||
|
KC_H, KC_N, KC_E, KC_I, KC_O, KC_ENT,
|
||||||
|
KC_MEH, KC_K, KC_M, KC_COMM, KC_DOT, KC_UP, KC_RSFT,
|
||||||
|
KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT,
|
||||||
|
|
||||||
|
KC_INS, KC_DEL,
|
||||||
|
KC_PGUP,
|
||||||
|
KC_PGDN, KC_SPC, KC_SPC
|
||||||
|
),
|
||||||
|
|
||||||
|
/* Keymap 1: QWERTY layer (games)
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | | | | | | | | | | | | | | | |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | | Q | W | E | R | T | | | | Y | U | I | O | P | |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | A | S | D | F | G |------| |------| H | J | K | L | ; | |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | Z | X | C | V | B | | | | N | M | | | | |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* | | | | | | | | | | | |
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | | | | | |
|
||||||
|
* ,------|------|------| |------+--------+------.
|
||||||
|
* | | | | | | | |
|
||||||
|
* | | |------| |------| | |
|
||||||
|
* | | | | | | | |
|
||||||
|
* `--------------------' `----------------------'
|
||||||
|
*/
|
||||||
|
[1] = KEYMAP( // layer 1: QWERTY layer (games)
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_TRNS,
|
||||||
|
KC_TRNS, KC_A, KC_S, KC_D, KC_F, KC_G,
|
||||||
|
KC_TRNS, KC_Z, KC_X, KC_C, KC_V, KC_B, 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_TRNS,
|
||||||
|
KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_TRNS,
|
||||||
|
KC_TRNS, KC_N, KC_M, 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
|
||||||
|
),
|
||||||
|
|
||||||
|
/* Keymap 2: Symbol Layer
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | | | | + | < | % | # | DF(1)| | | & | [ | ] | \ | : | " |
|
||||||
|
* |--------+------+------+------+------+------|QWERTY| | |------+------+------+------+------+--------|
|
||||||
|
* | | ! | - | > | = | @ |------| |------| * | { | } | / | ? | |
|
||||||
|
* |--------+------+------+------+------+------| DF(0)| | |------+------+------+------+------+--------|
|
||||||
|
* | | NUBS | NUHS | / | $ | ^ |COLEMAK | | | | ( | ) | | | |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* | | | | | | | | | | | |
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | | | | | |
|
||||||
|
* ,------|------|------| |------+------+------.
|
||||||
|
* | | | | | | | |
|
||||||
|
* | | |------| |------| | |
|
||||||
|
* | | | | | | | |
|
||||||
|
* `--------------------' `--------------------'
|
||||||
|
*/
|
||||||
|
// SYMBOLS
|
||||||
|
[2] = KEYMAP(
|
||||||
|
// left hand
|
||||||
|
KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
|
||||||
|
KC_TRNS, KC_PIPE, KC_PLUS, KC_LT, KC_PERC, KC_HASH, DF(1),
|
||||||
|
KC_LBRC, KC_EXCLAIM, KC_MINUS, KC_GT, KC_EQUAL, KC_AT,
|
||||||
|
KC_TRNS, KC_NUBS, KC_NUHS, KC_SLSH, KC_DOLLAR, KC_CIRC, DF(0),
|
||||||
|
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_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS,
|
||||||
|
KC_TRNS, KC_AMPERSAND, KC_LBRC, KC_RBRC, KC_BSLS, KC_COLN, KC_DQT,
|
||||||
|
KC_ASTERISK, KC_LCBR, KC_RCBR, KC_SLSH, KC_QUES, KC_TRNS,
|
||||||
|
KC_TRNS, KC_PIPE, KC_LPRN, KC_RPRN, 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
|
||||||
|
),
|
||||||
|
|
||||||
|
/* Keymap 3:
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | | | | | | | | | | | | | | | |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | | | | | |------| |------| | | | | | |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | | | | | | HYPR | | HYPR | | | | | | |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* | | | | | | | | | | | |
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | | | | | |
|
||||||
|
* ,------|------|------| |------+------+------.
|
||||||
|
* | | | | | | | |
|
||||||
|
* | | |------ |------| | |
|
||||||
|
* | | | | | | | |
|
||||||
|
* `--------------------' `--------------------'
|
||||||
|
*/
|
||||||
|
// F-keys
|
||||||
|
[3] = KEYMAP(
|
||||||
|
KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HYPR,
|
||||||
|
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_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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_HYPR, 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
|
||||||
|
),
|
||||||
|
/* Keymap 4: Numlock
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | RESET | | | |P-SCRE|S-LOCK|PAUSE | |NLOCK | CALC | = | / | * | | |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | | | | | | | | | | Vol+ | 7 | 8 | 9 | - | |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | | | | | |------| |------| Vol- | 4 | 5 | 6 | + | |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | | | | | | HYPR | | HYPR | Mute | 1 | 2 | 3 |Enter | |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* | | | | | | | | 0 | . | RCTL | RCTL |
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | | | | | |
|
||||||
|
* ,------|------|------| |------+------+------.
|
||||||
|
* | | | | | | | |
|
||||||
|
* | | |------ |------| | |
|
||||||
|
* | | | | | | | |
|
||||||
|
* `--------------------' `--------------------'
|
||||||
|
*/
|
||||||
|
[4] = KEYMAP(
|
||||||
|
RESET, KC_LSFT, KC_LSFT, KC_SYSREQ, KC_PSCR, KC_SLCK, KC_PAUSE,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HYPR,
|
||||||
|
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_NLCK, KC_CALC, KC_PEQL, KC_PSLS, KC_PAST, KC_LSFT, KC_TRNS,
|
||||||
|
KC_TRNS, KC_VOLU, KC_P7, KC_P8, KC_P9, KC_PMNS, KC_TRNS,
|
||||||
|
KC_VOLD, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_TRNS,
|
||||||
|
KC_HYPR, KC_MUTE, KC_P1, KC_P2, KC_P3, KC_PENT, KC_TRNS,
|
||||||
|
KC_TRNS, KC_P0, KC_PDOT, KC_RCTL, KC_RCTL,
|
||||||
|
|
||||||
|
KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS
|
||||||
|
),
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Runs constantly in the background, in a loop.
|
||||||
|
void matrix_scan_user(void) {
|
||||||
|
static uint8_t state;
|
||||||
|
|
||||||
|
ergodox_board_led_off();
|
||||||
|
ergodox_right_led_1_off();
|
||||||
|
ergodox_right_led_2_off();
|
||||||
|
ergodox_right_led_3_off();
|
||||||
|
|
||||||
|
//reduce LED on time to 1/6th because LEDs are too strong
|
||||||
|
if (++state < 6) return;
|
||||||
|
state = 0;
|
||||||
|
|
||||||
|
//bit 1: default layer 1 - QWERTY
|
||||||
|
if (default_layer_state & (1UL << 1)) ergodox_right_led_1_on();
|
||||||
|
|
||||||
|
uint8_t layer = biton32(layer_state);
|
||||||
|
|
||||||
|
//layer 2 : Symbols (& Fs)
|
||||||
|
//if (layer == 2) ergodox_right_led_2_on();
|
||||||
|
|
||||||
|
//layer 3 : F-lock
|
||||||
|
if (layer == 3) ergodox_right_led_2_on();
|
||||||
|
|
||||||
|
//layer 4 : Num-lock
|
||||||
|
if (layer == 4) ergodox_right_led_3_on();
|
||||||
|
};
|
|
@ -0,0 +1,23 @@
|
||||||
|
# ErgoDox EZ colemak_programmer
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
* Qwerty and colemak 2 in 1
|
||||||
|
* Use DF() macro to swap the bottom layer so it behaves literally as collemak or qwerty
|
||||||
|
* Graphical creator did not allow this so I had to use TO(0) and TO(1) on the picture
|
||||||
|
* Symbol layer programmers friendly
|
||||||
|
* Not only symbols are easy to access but common combination are easy too: ->, =>, !=, etc.
|
||||||
|
* Windows and Mac
|
||||||
|
* The extra repeated Win key is very handy on Mac
|
||||||
|
* Numlock
|
||||||
|
|
||||||
|
I came to this layout after several iterations. It is not the ultimate best ergonomic layout but it is the best if you switch back and forth between ergodox and laptops.
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
* The Quote and Enter can be swapped
|
||||||
|
* If you use sculpted key caps try turning the bottom key 180 degrees so it became very comfortable to type with thumb.
|
||||||
|
|
||||||
|
Alternatively view the [graphical creator version](http://configure.ergodox-ez.com/keyboard_layouts/kmevwm/edit) but beware it is not the same due to the creator limitations.
|
||||||
|
|
||||||
|
![Default](colemak_programmer_001.jpg)
|
||||||
|
![Default](colemak_programmer_002.jpg)
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,166 @@
|
||||||
|
#include "ergodox.h"
|
||||||
|
#include "keymap_dvorak.h"
|
||||||
|
#include "debug.h"
|
||||||
|
#include "action_layer.h"
|
||||||
|
|
||||||
|
/******************************************************************************************
|
||||||
|
* DVORAK LAYOUT (see http://djelibeibi.unex.es/dvorak/)
|
||||||
|
* Layer 1: auxiliary keys
|
||||||
|
* Layer 2: full qwerty layout
|
||||||
|
*****************************************************************************************/
|
||||||
|
|
||||||
|
// LAYERS
|
||||||
|
#define BASE 0 // dvorak layout (default)
|
||||||
|
#define AUX 1 // auxiliary keys
|
||||||
|
|
||||||
|
// MACROS
|
||||||
|
/* #define OBRACE 0 // key { or shift */
|
||||||
|
/* #define CBRACE 1 // key } or shift */
|
||||||
|
/* #define OBRACK 2 // key [ or left alt */
|
||||||
|
/* #define CBRACK 3 // key ] or left alt */
|
||||||
|
/* #define CAPS 4 // caps lock */
|
||||||
|
|
||||||
|
// LEDS
|
||||||
|
#define USB_LED_NUM_LOCK 0
|
||||||
|
#define USB_LED_CAPS_LOCK 1
|
||||||
|
#define USB_LED_SCROLL_LOCK 2
|
||||||
|
#define USB_LED_COMPOSE 3
|
||||||
|
#define USB_LED_KANA 4
|
||||||
|
|
||||||
|
// TIMERS
|
||||||
|
#define KEY_TAP_FAST 85
|
||||||
|
#define KEY_TAP_SLOW 95
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
/* Keymap 0: Base layer
|
||||||
|
* Keys with double values (like Esc/Ctrl) correspond to the 'tapped' key and the 'held' key, respectively
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | | 1 | 2 | 3 | 4 | 5 | Esc | | Esc | 6 | 7 | 8 | 9 | 0 | = / + |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | ~ |" / ' |, / < |. / > | P | Y | [ | | ] | F | G | C | H | L | / / ? |
|
||||||
|
* |--------+------+------+------+------+------| { | | } |------+------+------+------+------+--------|
|
||||||
|
* | Tab | A | O | E |U/LSft| I/L1 |------| |------| D/L1|R/RSft| T | N | S | - / _ |
|
||||||
|
* |--------+------+------+------+------+------| LGUI | | LGUI |------+------+------+------+------+--------|
|
||||||
|
* | {/LSft |; / : | Q | J | K | X | | | | B | M | W | V | Z | }/RSft |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* | | | | | ~L1 | | ~L1 | | | \ / || |
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | HOME | END | | LEFT | RIGHT|
|
||||||
|
* ,------|------|------| |------+--------+------.
|
||||||
|
* | BSPC | DEL | PGUP | | UP | SPACE |RETURN|
|
||||||
|
* | / | / |------| |------| / | / |
|
||||||
|
* | LCTL | LALT |PGDWN | | DOWN | LALT | LCTL |
|
||||||
|
* `--------------------' `----------------------'
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
[BASE] = KEYMAP(
|
||||||
|
// left hand
|
||||||
|
KC_NO, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC,
|
||||||
|
KC_TILD, DV_QUOT, DV_COMM,DV_DOT, DV_P, DV_Y, DV_LBRC,
|
||||||
|
KC_TAB, DV_A, DV_O, DV_E, SFT_T(DV_U), LT(AUX, DV_I),
|
||||||
|
SFT_T(DV_LBRC), DV_SCLN, DV_Q, DV_J, DV_K, DV_X, KC_LGUI,
|
||||||
|
KC_NO, KC_NO, KC_NO, KC_NO, MO(AUX),
|
||||||
|
KC_HOME, KC_END,
|
||||||
|
KC_PGUP,
|
||||||
|
CTL_T(KC_BSPC), ALT_T(KC_DEL), KC_PGDN,
|
||||||
|
// right hand
|
||||||
|
KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, DV_EQL,
|
||||||
|
DV_RBRC, DV_F, DV_G, DV_C, DV_R, DV_L, DV_SLSH,
|
||||||
|
LT(AUX, DV_D), SFT_T(DV_H), DV_T, DV_N, DV_S, DV_MINS,
|
||||||
|
KC_LGUI, DV_B, DV_M, DV_W, DV_V, DV_Z, SFT_T(DV_RBRC),
|
||||||
|
MO(AUX), KC_NO, KC_NO, KC_BSLS, KC_NO,
|
||||||
|
KC_LEFT, KC_RIGHT,
|
||||||
|
KC_UP,
|
||||||
|
KC_DOWN, ALT_T(KC_ENT), CTL_T(KC_SPC)
|
||||||
|
),
|
||||||
|
/* Keymap 1: Aux layer
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | VolUp | | | | | | SLEEP | PWR | | | | | | |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | VolDn | F1 | F2 | F3 | F4 | | | | | | 7 | 8 | 9 | * | |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | F5 | F6 | F7 | F8 | TRANS|------| |------|TRANS | 4 | 5 | 6 | + | |
|
||||||
|
* |--------+------+------+------+------+------| | |PSCR |------+-----aan+------+------+------+--------|
|
||||||
|
* | TRANS | F9 | F10 | F11 | F12 | | | | | | 1 | 2 | 3 | / | TRANS |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* |CTRL-S|CTRL-Z|CTRL-X|CTRL-C| TRANS| | TRANS| . | 0 | = | |
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | TRANS| TRANS| | TRANS| TRANS|
|
||||||
|
* ,------|------|------| |------+------+------.
|
||||||
|
* | | | TRANS| | TRANS| | |
|
||||||
|
* |TRANS |TRANS |------| |------| TRANS| TRANS|
|
||||||
|
* | | | TRANS| | TRANS| | |
|
||||||
|
* `--------------------' `--------------------'
|
||||||
|
*/
|
||||||
|
[AUX] = KEYMAP(
|
||||||
|
// left hand
|
||||||
|
KC_VOLU, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_SLEP,
|
||||||
|
KC_VOLD, KC_F1, KC_F2, KC_F3, KC_F4, KC_NO, KC_NO,
|
||||||
|
KC_NO , KC_F5, KC_F6, KC_F7, KC_F8, KC_TRNS,
|
||||||
|
KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO,
|
||||||
|
LCTL(DV_S), LCTL(DV_Z), LCTL(DV_X), LCTL(DV_C), KC_TRNS,
|
||||||
|
KC_TRNS , KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
// right hand
|
||||||
|
KC_PWR, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||||
|
KC_NO, KC_NO, KC_7, KC_8, KC_9, KC_PAST, KC_NO,
|
||||||
|
KC_TRNS, KC_4, KC_5, KC_6, KC_PPLS, KC_NO,
|
||||||
|
KC_PSCR, KC_NO, KC_1, KC_2, KC_3, KC_PSLS, KC_TRNS,
|
||||||
|
KC_TRNS,KC_DOT, KC_0, KC_PEQL, KC_NO,
|
||||||
|
KC_TRNS , KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS
|
||||||
|
),
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
[1] = ACTION_LAYER_TAP_TOGGLE(AUX) // FN1 - Momentary Layer 1 (Aux)
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
|
{
|
||||||
|
// MACRODOWN only works in this function
|
||||||
|
switch(id) {
|
||||||
|
case 0:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
register_code(KC_RSFT);
|
||||||
|
} else {
|
||||||
|
unregister_code(KC_RSFT);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return MACRO_NONE;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Runs just one time when the keyboard initializes.
|
||||||
|
void matrix_init_user(void) {
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
// Runs constantly in the background, in a loop.
|
||||||
|
void matrix_scan_user(void) {
|
||||||
|
|
||||||
|
uint8_t layer = biton32(layer_state);
|
||||||
|
|
||||||
|
ergodox_board_led_off();
|
||||||
|
ergodox_right_led_1_off();
|
||||||
|
ergodox_right_led_2_off();
|
||||||
|
ergodox_right_led_3_off();
|
||||||
|
switch (layer) {
|
||||||
|
case 1:
|
||||||
|
ergodox_right_led_1_on();
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
ergodox_right_led_2_on();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// none
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,74 @@
|
||||||
|
# Ergodox Dvorak Layout with emacs binding in mind - software version
|
||||||
|
|
||||||
|
This configuration is the same as the dvorak_emacs layout, but using a sofware dvorak configuration
|
||||||
|
instead of a firmware configuration. This layout is for those who run their computer in dvorak mode.
|
||||||
|
|
||||||
|
* Control & Alt key on the thumbs (activated if pressed with another key).
|
||||||
|
* In the same way, "U" and "R" are the shift modifier if pressed with another key.
|
||||||
|
* "I" and "D" set the layer 1 for the auxiliary keys if pressed with another key.
|
||||||
|
* Software layout set to english.
|
||||||
|
|
||||||
|
## Keymap Layers
|
||||||
|
- L0: dvorak with some customizations (see layout below)
|
||||||
|
- L1: auxiliary keys (includes function keys, numpad...)
|
||||||
|
|
||||||
|
|
||||||
|
### Keymap 0: Base layer
|
||||||
|
Keys with double values (like U/LSft) correspond to the 'tapped' key and the 'held' key, respectively
|
||||||
|
|
||||||
|
<pre><code>
|
||||||
|
|
||||||
|
,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
| | 1 | 2 | 3 | 4 | 5 | Esc | | Esc | 6 | 7 | 8 | 9 | 0 | = |
|
||||||
|
|--------|------|------|------|------|-------------| |------|------|------|------|------|------|--------|
|
||||||
|
| ~ | ' | , | . | P | Y | [ | | ] | F | G | C | H | L | / |
|
||||||
|
|--------|------|------|------|------|------| { | | } |------|------|------|------|------|--------|
|
||||||
|
| Tab | A | O | E |U/LSft| I/L1 |------| |------| D/L1|R/RSft| T | N | S | - |
|
||||||
|
|--------|------|------|------|------|------| LGUI | | LGUI |------|------|------|------|------|--------|
|
||||||
|
| {/LSft | ; | Q | J | K | X | | | | B | M | W | V | Z | }/RSft |
|
||||||
|
`--------|------|------|------|------|-------------' `-------------|------|------|------|------|--------'
|
||||||
|
| | | | | ~L1 | | ~L1 | | | \ | |
|
||||||
|
`----------------------------------' `----------------------------------'
|
||||||
|
,-------------. ,-------------.
|
||||||
|
| HOME | END | | LEFT | RIGHT|
|
||||||
|
,------|------|------| |------|--------|------.
|
||||||
|
| BSPC | DEL | PGUP | | UP | SPACE |RETURN|
|
||||||
|
| / | / |------| |------| / | / |
|
||||||
|
| LCTL | LALT |PGDWN | | DOWN | LALT | LCTL |
|
||||||
|
`--------------------' `----------------------'
|
||||||
|
|
||||||
|
</pre></code>
|
||||||
|
|
||||||
|
### Keymap 1: Aux layer
|
||||||
|
|
||||||
|
<pre><code>
|
||||||
|
|
||||||
|
,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
| VolUp | | | | | | SLEEP | PWR | | | | | | |
|
||||||
|
|--------|------|------|------|------|-------------| |------|------|------|------|------|------|--------|
|
||||||
|
| VolDn | F1 | F2 | F3 | F4 | | | | | | 7 | 8 | 9 | * | |
|
||||||
|
|--------|------|------|------|------|------| | | |------|------|------|------|------|--------|
|
||||||
|
| | F5 | F6 | F7 | F8 | TRANS|------| |------|TRANS | 4 | 5 | 6 | + | |
|
||||||
|
|--------|------|------|------|------|------| | |PSCR |------|------|------|------|------|--------|
|
||||||
|
| TRANS | F9 | F10 | F11 | F12 | | | | | | 1 | 2 | 3 | / | TRANS |
|
||||||
|
`--------|------|------|------|------|-------------' `-------------|------|------|------|------|--------'
|
||||||
|
|CTRL-S|CTRL-Z|CTRL-X|CTRL-C| TRANS| | TRANS| . | 0 | = | |
|
||||||
|
`----------------------------------' `----------------------------------'
|
||||||
|
,-------------. ,-------------.
|
||||||
|
| TRANS| TRANS| | TRANS| TRANS|
|
||||||
|
,------|------|------| |------|------|------.
|
||||||
|
| | | TRANS| | TRANS| | |
|
||||||
|
|TRANS |TRANS |------| |------| TRANS| TRANS|
|
||||||
|
| | | TRANS| | TRANS| | |
|
||||||
|
`--------------------' `--------------------'
|
||||||
|
|
||||||
|
</pre></code>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Generation of .hex file
|
||||||
|
> In the "qmk_firmware/keyboards/ergodox" directory.
|
||||||
|
|
||||||
|
> Execute "make dvorak_emacs". Then the hex file "ergodox_ez_dvorak_emacs.hex" is in the root directory : "qmk_firmware".
|
||||||
|
|
||||||
|
> Flash with `teensy_loader` binary
|
|
@ -4,5 +4,5 @@ SLEEP_LED_ENABLE=no
|
||||||
FORCE_NKRO ?= yes
|
FORCE_NKRO ?= yes
|
||||||
DEBUG_ENABLE = no
|
DEBUG_ENABLE = no
|
||||||
CONSOLE_ENABLE = no
|
CONSOLE_ENABLE = no
|
||||||
TAP_DANCE_ENABLE = yes
|
TAP_DANCE_ENABLE = no
|
||||||
MOUSEKEY_ENABLE = yes
|
MOUSEKEY_ENABLE = yes
|
||||||
|
|
|
@ -7,7 +7,6 @@ Layers
|
||||||
------
|
------
|
||||||
|
|
||||||
* BASE: this is where you type.
|
* BASE: this is where you type.
|
||||||
* SHELL_LAYER: this is a permanent layer which I use when I don't need the F keys and gives me bash shortcuts on the top row.
|
|
||||||
* SHELL_NAV: hold down the Tab key to access shell/terminal navigation shorcuts such as forward/backward word, history, Ctrl+C, screen tab movement.
|
* SHELL_NAV: hold down the Tab key to access shell/terminal navigation shorcuts such as forward/backward word, history, Ctrl+C, screen tab movement.
|
||||||
* KEY_NAV: arrow key movement with backward/forward word support, and copy/paste.
|
* KEY_NAV: arrow key movement with backward/forward word support, and copy/paste.
|
||||||
* KEY_SEL: same as above, but every movement shift-selects.
|
* KEY_SEL: same as above, but every movement shift-selects.
|
||||||
|
@ -20,6 +19,12 @@ Layers
|
||||||
Updates
|
Updates
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
2017/02/10:
|
||||||
|
* Made left shift an MO for SHELL_NAV, and symbol+right shift CAPSLOCK. Made all modifiers OSM.
|
||||||
|
|
||||||
|
2017/01/28:
|
||||||
|
* Made the capslock key a dual momentary layer activation for BRACKETS and SHELL_NAV. One keypress held down for BRACKETS, one keypress, released and then held down for SHELL_NAV
|
||||||
|
|
||||||
2017/01/22:
|
2017/01/22:
|
||||||
* Made brackets toggle an OSL on the left capslock
|
* Made brackets toggle an OSL on the left capslock
|
||||||
* Added SHELL_LAYER
|
* Added SHELL_LAYER
|
||||||
|
|
|
@ -6,7 +6,6 @@
|
||||||
#include "action_code.h"
|
#include "action_code.h"
|
||||||
|
|
||||||
#define BASE 0 // default layer
|
#define BASE 0 // default layer
|
||||||
#define SHELL_LAYER 1
|
|
||||||
#define SHELL_NAV 2
|
#define SHELL_NAV 2
|
||||||
#define KEY_NAV 3 // key navigation layer
|
#define KEY_NAV 3 // key navigation layer
|
||||||
#define KEY_SEL 4 // key selection layer
|
#define KEY_SEL 4 // key selection layer
|
||||||
|
@ -37,41 +36,25 @@
|
||||||
#define END_NEWLINE 17
|
#define END_NEWLINE 17
|
||||||
|
|
||||||
|
|
||||||
const uint16_t PROGMEM fn_actions[] = {
|
|
||||||
[1] = ACTION_LAYER_TAP_TOGGLE(KEY_NAV), // FN1 - keynav layer
|
|
||||||
[2] = ACTION_LAYER_TAP_TOGGLE(NUMBER), // FN2 - number layer
|
|
||||||
[3] = ACTION_MODS_ONESHOT(MOD_LSFT), // FN3 - shift modifier / oneshot
|
|
||||||
[4] = ACTION_MODS_ONESHOT(MOD_LCTL), // FN4 - ctrl modifier / oneshot
|
|
||||||
[5] = ACTION_MODS_ONESHOT(MOD_LALT), // FN5 - alt modifier / oneshot
|
|
||||||
};
|
|
||||||
|
|
||||||
//Tap Dance Declarations
|
|
||||||
enum {
|
|
||||||
TD_SHIFT_CAPSLOCK = 0,
|
|
||||||
TD_BRK_LEFT = 1,
|
|
||||||
TD_BRK_RIGHT = 2
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
// base layer
|
// base layer
|
||||||
[BASE] = KEYMAP( // layer 0 : default
|
[BASE] = KEYMAP( // layer 0 : default
|
||||||
// left hand
|
// left hand
|
||||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
|
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
|
||||||
LT(SHELL_NAV,KC_TAB), KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, MO(KEY_SEL),
|
KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, MO(KEY_SEL),
|
||||||
OSL(BRACKETS), KC_A, KC_O, KC_E, KC_U, KC_I,
|
MO(BRACKETS), KC_A, KC_O, KC_E, KC_U, KC_I,
|
||||||
OSM(MOD_LSFT), KC_SCLN, KC_Q, KC_J, KC_K, KC_X, MO(KEY_NAV),
|
MO(SHELL_NAV), KC_SCLN, KC_Q, KC_J, KC_K, KC_X, MO(KEY_NAV),
|
||||||
OSL(SHORTCUTS),KC_FN4, KC_FN5,OSL(SYMBOL),MO(NUMBER),
|
OSL(SHORTCUTS),OSM(MOD_LCTL), OSM(MOD_LALT),OSL(SYMBOL),MO(NUMBER),
|
||||||
// thumb cluster
|
// thumb cluster
|
||||||
MO(MOUSE), RCTL(KC_S),
|
OSM(MOD_LSFT), RCTL(KC_S),
|
||||||
RCTL(KC_DEL),
|
RCTL(KC_DEL),
|
||||||
KC_BSPC,RCTL(KC_BSPC),KC_DEL,
|
KC_BSPC,RCTL(KC_BSPC),KC_DEL,
|
||||||
// right hand
|
// right hand
|
||||||
KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSLS,
|
KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSLS,
|
||||||
KC_PGUP, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH,
|
KC_PGUP, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH,
|
||||||
KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS,
|
KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS,
|
||||||
KC_PGDN, KC_B, KC_M, KC_W, KC_V, KC_Z, TD(TD_SHIFT_CAPSLOCK),
|
KC_PGDN, KC_B, KC_M, KC_W, KC_V, KC_Z, OSM(MOD_LSFT),
|
||||||
// lower keys - browser tab control
|
// lower keys - browser tab control
|
||||||
RSFT(RCTL(KC_TAB)), RCTL(KC_TAB), RCTL(KC_T), LALT(KC_LEFT), RCTL(KC_W),
|
RSFT(RCTL(KC_TAB)), RCTL(KC_TAB), RCTL(KC_T), LALT(KC_LEFT), RCTL(KC_W),
|
||||||
// thumb cluster
|
// thumb cluster
|
||||||
|
@ -82,31 +65,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// permanent shell layer - meant to be used while in a terminal. only the top keys are overriden
|
|
||||||
[SHELL_LAYER] = KEYMAP(
|
|
||||||
// left hand
|
|
||||||
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,LALT(KC_DOT),RCTL(KC_R),RCTL(KC_C),
|
|
||||||
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
|
|
||||||
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
|
|
||||||
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
|
|
||||||
// bottom row
|
|
||||||
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
|
|
||||||
// thumb cluster
|
|
||||||
KC_TRNS,KC_TRNS,
|
|
||||||
KC_TRNS,
|
|
||||||
KC_TRNS,KC_TRNS,KC_TRNS,
|
|
||||||
// right hand
|
|
||||||
RCTL(KC_W), LALT(KC_B),LALT(KC_F), KC_LEFT, KC_RIGHT, LALT(KC_D), KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
|
||||||
// bottom row
|
|
||||||
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
|
|
||||||
// thumb cluster
|
|
||||||
KC_TRNS, KC_TRNS,
|
|
||||||
KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS
|
|
||||||
),
|
|
||||||
|
|
||||||
// shell navigation layer
|
// shell navigation layer
|
||||||
[SHELL_NAV] = KEYMAP(
|
[SHELL_NAV] = KEYMAP(
|
||||||
|
@ -270,11 +228,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
MEH(KC_F7), MEH(KC_F8), MEH(KC_F9), MEH(KC_F10), MEH(KC_F11), MEH(KC_F12), M(SWITCH_NDS),
|
MEH(KC_F7), MEH(KC_F8), MEH(KC_F9), MEH(KC_F10), MEH(KC_F11), MEH(KC_F12), M(SWITCH_NDS),
|
||||||
KC_TRNS, MEH(KC_A), MEH(KC_B), MEH(KC_C), MEH(KC_D), MEH(KC_E), MEH(KC_F),
|
KC_TRNS, MEH(KC_A), MEH(KC_B), MEH(KC_C), MEH(KC_D), MEH(KC_E), MEH(KC_F),
|
||||||
MEH(KC_G), MEH(KC_H), MEH(KC_I), MEH(KC_J), MEH(KC_K), MEH(KC_L),
|
MEH(KC_G), MEH(KC_H), MEH(KC_I), MEH(KC_J), MEH(KC_K), MEH(KC_L),
|
||||||
KC_TRNS, MEH(KC_M), MEH(KC_N), MEH(KC_O), MEH(KC_P), MEH(KC_Q), MEH(KC_R),
|
KC_TRNS, MEH(KC_M), MEH(KC_N), MEH(KC_O), MEH(KC_P), MEH(KC_Q), KC_CAPSLOCK,
|
||||||
MEH(KC_S), MEH(KC_T), MEH(KC_U), MEH(KC_V), MEH(KC_X),
|
MEH(KC_S), MEH(KC_T), MEH(KC_U), MEH(KC_V), MEH(KC_X),
|
||||||
MEH(KC_6), MEH(KC_7),
|
MEH(KC_6), MEH(KC_7),
|
||||||
MEH(KC_8),
|
MEH(KC_8),
|
||||||
MEH(KC_9), TO(BASE), TO(SHELL_LAYER)
|
MEH(KC_9), MEH(KC_Y), MEH(KC_Z)
|
||||||
),
|
),
|
||||||
|
|
||||||
|
|
||||||
|
@ -397,6 +355,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
return MACRO_NONE;
|
return MACRO_NONE;
|
||||||
};
|
};
|
||||||
|
@ -415,13 +374,6 @@ void led_set_user(uint8_t usb_led) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
qk_tap_dance_action_t tap_dance_actions[] = {
|
|
||||||
[TD_SHIFT_CAPSLOCK] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_CAPSLOCK),
|
|
||||||
[TD_BRK_LEFT] = ACTION_TAP_DANCE_DOUBLE (KC_LPRN, KC_LCBR),
|
|
||||||
[TD_BRK_RIGHT] = ACTION_TAP_DANCE_DOUBLE (KC_RPRN, KC_RCBR)
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// 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) {
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
This layout is inspired by the "kinesis-qwerty-mod" from benblazak's
|
This layout is inspired by the "kinesis-qwerty-mod" from benblazak's
|
||||||
[ergodox-firmware](https://github.com/benblazak/ergodox-firmware), as well as by the "german" layout from the
|
[ergodox-firmware](https://github.com/benblazak/ergodox-firmware), as well as by the "german" layout from the
|
||||||
[qmk_firmware](https://github.com/jackhumbert/qmk_firmware).
|
[qmk_firmware](https://github.com/qmk/qmk_firmware).
|
||||||
The goal was to have a layout that is pretty close to an ordinary German
|
The goal was to have a layout that is pretty close to an ordinary German
|
||||||
keyboard, so I don't have to make adjustments on the operating system level
|
keyboard, so I don't have to make adjustments on the operating system level
|
||||||
and I keep some of the muscle memory to use a regular keyboard.
|
and I keep some of the muscle memory to use a regular keyboard.
|
||||||
|
|
|
@ -8,15 +8,16 @@
|
||||||
#define MDIA 2 // media keys
|
#define MDIA 2 // media keys
|
||||||
|
|
||||||
//macros
|
//macros
|
||||||
#define CTL_SFT_T 100
|
#define CTL_SFT_T 100 // open type
|
||||||
#define CTL_SFT_G 101
|
#define CTL_SFT_G 101 // find references
|
||||||
#define CTL_ALT_H 102
|
#define CTL_ALT_H 102 // open call hierarchy
|
||||||
|
#define CTL_SFT_R 103 // open resource
|
||||||
|
|
||||||
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
|
||||||
*
|
*
|
||||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
* | = | 1 | 2 | 3 | 4 | 5 | ESC | | M 100| 6 | 7 | 8 | 9 | 0 | - |
|
* | = | 1 | 2 | 3 | 4 | 5 | ESC | |M100/3| 6 | 7 | 8 | 9 | 0 | - |
|
||||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
* |TAB /Alt| Q | W | E | R | T | Meh | | Meh | Y | U | I | O | P |\ / ALT |
|
* |TAB /Alt| Q | W | E | R | T | Meh | | Meh | Y | U | I | O | P |\ / ALT |
|
||||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
@ -38,7 +39,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
// Otherwise, it needs KC_*
|
// Otherwise, it needs KC_*
|
||||||
[BASE] = KEYMAP( // layer 0 : default
|
[BASE] = KEYMAP( // layer 0 : default
|
||||||
// left hand
|
// left hand
|
||||||
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC,
|
LT(MDIA, KC_EQL),KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC,
|
||||||
ALT_T(KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, ALL_T(KC_NO),
|
ALT_T(KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, ALL_T(KC_NO),
|
||||||
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G,
|
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G,
|
||||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, MO(SYMB),
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, MO(SYMB),
|
||||||
|
@ -47,9 +48,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
KC_HOME,
|
KC_HOME,
|
||||||
KC_SPC,KC_BSPC,KC_END,
|
KC_SPC,KC_BSPC,KC_END,
|
||||||
// right hand
|
// right hand
|
||||||
M(CTL_SFT_T),KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
|
LT(M(CTL_SFT_T),
|
||||||
MEH_T(KC_NO),KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
|
M(CTL_SFT_R)),KC_6, KC_7, KC_8, KC_9, KC_0, LT(MDIA, KC_MINS),
|
||||||
KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),CTL_T(KC_QUOT),
|
MEH_T(KC_NO), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
|
||||||
|
KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN), CTL_T(KC_QUOT),
|
||||||
MO(SYMB), KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT,
|
MO(SYMB), KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT,
|
||||||
LALT(KC_LSFT),KC_LEFT,KC_DOWN,KC_UP, KC_RIGHT,
|
LALT(KC_LSFT),KC_LEFT,KC_DOWN,KC_UP, KC_RIGHT,
|
||||||
KC_LALT, KC_CAPS,
|
KC_LALT, KC_CAPS,
|
||||||
|
@ -101,7 +103,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
/* Keymap 2: Media and mouse keys
|
/* Keymap 2: Media and mouse keys
|
||||||
*
|
*
|
||||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
* | | | | | | | | | | | | | | | |
|
* | | | | | | |RESET | |RESET | | | | | | |
|
||||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
* | | | | MsUp | | | | | | | | | | | |
|
* | | | | MsUp | | | | | | | | | | | |
|
||||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
@ -121,7 +123,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
*/
|
*/
|
||||||
// MEDIA AND MOUSE
|
// MEDIA AND MOUSE
|
||||||
[MDIA] = KEYMAP(
|
[MDIA] = KEYMAP(
|
||||||
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, RESET,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, 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,
|
||||||
|
@ -130,7 +132,7 @@ 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,
|
RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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,
|
||||||
|
@ -172,6 +174,12 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
}
|
}
|
||||||
return MACRO(U(LCTL), U(LALT), END);
|
return MACRO(U(LCTL), U(LALT), END);
|
||||||
break;
|
break;
|
||||||
|
case CTL_SFT_R:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
return MACRO(D(LCTL), D(LSFT), T(R), END);
|
||||||
|
}
|
||||||
|
return MACRO(U(LCTL), U(LSFT), END);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return MACRO_NONE;
|
return MACRO_NONE;
|
||||||
};
|
};
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
|
|
||||||
This keymapping is designed to be reasonably familiar to an ordinary Mac keyboard while taking advantage of the Ergodox EZ's features. Caps lock instead enables a layer which allows a user to use HJKL as arrow keys and to control media. Shift and control have additional mappings on S and D to provide easier access while holding down caps lock.
|
This keymapping is designed to be reasonably familiar to an ordinary Mac keyboard while taking advantage of the Ergodox EZ's features. Caps lock instead enables a layer which allows a user to use HJKL as arrow keys and to control media. Shift and control have additional mappings on S and D to provide easier access while holding down caps lock.
|
||||||
|
|
||||||
If you choose to compile this yourself, be sure to compile with `#define PREVENT_STUCK_MODIFIERS` in your `config.h`. Firmware built using [qmk_firmware](https://github.com/jackhumbert/qmk_firmware/).
|
If you choose to compile this yourself, be sure to compile with `#define PREVENT_STUCK_MODIFIERS` in your `config.h`. Firmware built using [qmk_firmware](https://github.com/qmk/qmk_firmware/).
|
||||||
|
|
|
@ -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"
|
||||||
|
@ -8,6 +9,7 @@
|
||||||
#define SYMB 1 // symbols layer
|
#define SYMB 1 // symbols layer
|
||||||
#define MDIA 2 // media layer
|
#define MDIA 2 // media layer
|
||||||
#define SPEC 3 // special layer
|
#define SPEC 3 // special layer
|
||||||
|
#define RBASE 4 // reverse default layer
|
||||||
|
|
||||||
#define LSymb 10 // left symbol-shift key
|
#define LSymb 10 // left symbol-shift key
|
||||||
#define LMdia 11 // left media-shift key
|
#define LMdia 11 // left media-shift key
|
||||||
|
@ -16,15 +18,23 @@
|
||||||
#define RMdia 14 // right media-shift key
|
#define RMdia 14 // right media-shift key
|
||||||
#define RSpec 15 // right special-shift key
|
#define RSpec 15 // right special-shift key
|
||||||
|
|
||||||
|
#define NotEq 16 // != macro
|
||||||
|
#define GrtEq 17 // >= macro
|
||||||
|
#define LesEq 18 // <= macro
|
||||||
|
#define DeRef 19 // -> macro
|
||||||
|
|
||||||
#define MUL 20 // mouse up left
|
#define MUL 20 // mouse up left
|
||||||
#define MUR 21 // mouse up right
|
#define MUR 21 // mouse up right
|
||||||
#define MDL 22 // mouse down left
|
#define MDL 22 // mouse down left
|
||||||
#define MDR 23 // mouse down right
|
#define MDR 23 // mouse down right
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The Ordinary Layout for the Ergodox EZ keyboard, v4.20
|
* The Ordinary Layout for the Ergodox EZ keyboard, v5
|
||||||
*
|
*
|
||||||
* Modifications from default by Nicholas Keene ergodoxez@nicholaskeene.com
|
* Modifications from the default Ergodox EZ layout
|
||||||
|
* by Nicholas Keene ergodoxez@nicholaskeene.com
|
||||||
*
|
*
|
||||||
* No rights reserved. This software is in the public domain.
|
* No rights reserved. This software is in the public domain.
|
||||||
* Credit me if you are friendly but if you're a jerk don't bother.
|
* Credit me if you are friendly but if you're a jerk don't bother.
|
||||||
|
@ -43,7 +53,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
* |------------+------+------+------+------+-------------| |------+------+------+------+------+------+------------|
|
* |------------+------+------+------+------+-------------| |------+------+------+------+------+------+------------|
|
||||||
* | Media Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \| Media |
|
* | Media Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \| Media |
|
||||||
* |------------+------+------+------+------+------| | | |------+------+------+------+------+------------|
|
* |------------+------+------+------+------+------| | | |------+------+------+------+------+------------|
|
||||||
* | Symbol | A | S | D | F | G |------| |------| H | J | K | L | ; | '" Symbol |
|
* | Symbol | ^A | S | D | ^F | G |------| |------| H | ^J | K | L | ^; | '" Symbol |
|
||||||
* |------------+------+------+------+------+------|Shift | | Tab |------+------+------+------+------+------------|
|
* |------------+------+------+------+------+------|Shift | | Tab |------+------+------+------+------+------------|
|
||||||
* | Capitals | Z | X | C | V | B | -Tab | | | N | M | , | . | / | Capitals |
|
* | Capitals | Z | X | C | V | B | -Tab | | | N | M | , | . | / | Capitals |
|
||||||
* `------------+------+------+------+------+-------------' `-------------+------+------+------+------+------------'
|
* `------------+------+------+------+------+-------------' `-------------+------+------+------+------+------------'
|
||||||
|
@ -61,22 +71,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
// left hand
|
// left hand
|
||||||
F(LSpec) ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,KC_ESC
|
F(LSpec) ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,KC_ESC
|
||||||
,F(LMdia) ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_LBRC
|
,F(LMdia) ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_LBRC
|
||||||
,M(LSymb) ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G
|
,M(LSymb) ,LT(RBASE, KC_A),KC_S ,KC_D ,LT(RBASE, KC_F) ,KC_G
|
||||||
,KC_LSFT ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,LSFT(KC_TAB)
|
,KC_LSFT ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,LSFT(KC_TAB)
|
||||||
,KC_LCTL ,KC_MEH ,KC_HYPR,KC_LALT,KC_LGUI
|
,KC_LCTL ,MEH_T(KC_NO) ,ALL_T(KC_NO),KC_LALT,KC_LGUI
|
||||||
,KC_HOME,KC_END
|
,KC_HOME,KC_END
|
||||||
,KC_PGUP
|
,KC_PGUP
|
||||||
,KC_BSPC,KC_DEL ,KC_PGDN
|
,KC_BSPC,KC_DEL ,KC_PGDN
|
||||||
// right hand
|
// right hand
|
||||||
,KC_MINS ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,F(RSpec)
|
,KC_MINS ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,F(RSpec)
|
||||||
,KC_RBRC ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,F(RMdia)
|
,KC_RBRC ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,F(RMdia)
|
||||||
,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,F(RSymb)
|
,KC_H ,LT(RBASE, KC_J),KC_K ,KC_L ,LT(RBASE,KC_SCLN),F(RSymb)
|
||||||
,KC_TAB ,KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH ,KC_RSFT
|
,KC_TAB ,KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH ,KC_RSFT
|
||||||
,KC_RGUI,KC_RALT,KC_HYPR ,KC_MEH ,KC_RCTL
|
,KC_RGUI ,KC_RALT,KC_HYPR,KC_MEH ,KC_RCTL
|
||||||
,KC_LEFT ,KC_RGHT
|
,KC_LEFT ,KC_RGHT
|
||||||
,KC_UP
|
,KC_UP
|
||||||
,KC_DOWN ,KC_ENT ,KC_SPC
|
,KC_DOWN ,KC_ENT ,KC_SPC
|
||||||
),
|
),
|
||||||
|
|
||||||
/******* Symbols Layer *************************************************************************************************
|
/******* Symbols Layer *************************************************************************************************
|
||||||
*
|
*
|
||||||
|
@ -86,17 +96,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
* | | ! | @ | { | } | & | < | | > | | | 7 | 8 | 9 | / | |
|
* | | ! | @ | { | } | & | < | | > | | | 7 | 8 | 9 | / | |
|
||||||
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
|
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
|
||||||
* | | # | $ | ( | ) | ` |------| |------| / | 4 | 5 | 6 | * | |
|
* | | # | $ | ( | ) | ` |------| |------| / | 4 | 5 | 6 | * | |
|
||||||
* |-----------+------+------+------+------+------| Tab | | Shift|------+------+------+------+------+-----------|
|
* |-----------+------+------+------+------+------| ' | | " |------+------+------+------+------+-----------|
|
||||||
* | | % | ^ | [ | ] | ~ | | | -Tab| \ | 1 | 2 | 3 | - | |
|
* | | % | ^ | [ | ] | ~ | | | | \ | 1 | 2 | 3 | - | |
|
||||||
* `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
|
* `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
|
||||||
* | LCtrl | Meh |Hyper | LAlt | LGui | | 0 | . | = | + | Ent |
|
* | ; | & | * | < | > | | 0 | . | = | + | Enter |
|
||||||
* `-----------------------------------' `-----------------------------------'
|
* `-----------------------------------' `-----------------------------------'
|
||||||
* ,-------------. ,-------------.
|
* ,-------------. ,-------------.
|
||||||
* | Left | Right| | Home | End |
|
* | |||| | |||| | | |||| | |||| |
|
||||||
* ,------|------|------| |------+------+------.
|
* ,------|------|------| |------+------+------.
|
||||||
* | | | Up | | PgUp | | |
|
* | Plus | Equal| |||| | | |||| | Under| Dash |
|
||||||
* |Space |Enter |------| |------|BackSp| Del |
|
* | | |------| |------| Score| |
|
||||||
* | | | Down | | PgDn | | |
|
* | + | = | != | | -> | _ | - |
|
||||||
* `--------------------' `--------------------'
|
* `--------------------' `--------------------'
|
||||||
*/
|
*/
|
||||||
[SYMB] = KEYMAP(
|
[SYMB] = KEYMAP(
|
||||||
|
@ -104,34 +114,34 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
KC_TRNS ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_ESC
|
KC_TRNS ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_ESC
|
||||||
,KC_TRNS ,KC_EXLM ,KC_AT ,KC_LCBR ,KC_RCBR ,KC_AMPR ,LSFT(KC_COMM)
|
,KC_TRNS ,KC_EXLM ,KC_AT ,KC_LCBR ,KC_RCBR ,KC_AMPR ,LSFT(KC_COMM)
|
||||||
,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_TAB
|
,KC_TRNS ,KC_PERC ,KC_CIRC ,KC_LBRC ,KC_RBRC ,KC_TILD ,KC_QUOT
|
||||||
,KC_LCTL ,KC_MEH ,KC_HYPR ,KC_LALT ,KC_LGUI
|
,KC_SCLN ,KC_AMPR ,KC_ASTR ,LSFT(KC_COMM),LSFT(KC_DOT)
|
||||||
,KC_LEFT ,KC_RGHT
|
,M(GrtEq),M(LesEq)
|
||||||
,KC_UP
|
,KC_NO
|
||||||
,KC_SPC ,KC_ENT ,KC_DOWN
|
,KC_PLUS ,KC_EQL ,M(NotEq)
|
||||||
// right hand
|
// right hand
|
||||||
,KC_MINS ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_TRNS
|
,KC_MINS ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_TRNS
|
||||||
,LSFT(KC_DOT),KC_PIPE ,KC_7 ,KC_8 ,KC_9 ,KC_SLSH ,KC_TRNS
|
,LSFT(KC_DOT),KC_PIPE ,KC_7 ,KC_8 ,KC_9 ,KC_SLSH ,KC_TRNS
|
||||||
,KC_SLSH ,KC_4 ,KC_5 ,KC_6 ,KC_ASTR ,KC_TRNS
|
,KC_SLSH ,KC_4 ,KC_5 ,KC_6 ,KC_ASTR ,KC_TRNS
|
||||||
,LSFT(KC_TAB),KC_BSLS ,KC_1 ,KC_2 ,KC_3 ,KC_MINS ,KC_TRNS
|
,LSFT(KC_QUOT),KC_BSLS ,KC_1 ,KC_2 ,KC_3 ,KC_MINS ,KC_TRNS
|
||||||
,KC_0 ,KC_DOT ,KC_EQL,KC_PLUS ,KC_ENT
|
,KC_0 ,KC_DOT ,KC_EQL,KC_PLUS ,KC_ENT
|
||||||
,KC_HOME ,KC_END
|
,KC_NO ,KC_NO
|
||||||
,KC_PGUP
|
,KC_NO
|
||||||
,KC_PGDN ,KC_BSPC ,KC_DEL
|
,M(DeRef) ,LSFT(KC_MINS),KC_MINS
|
||||||
),
|
),
|
||||||
|
|
||||||
/******* Media Layer *******************************************************************************************************
|
/******* Media Layer *******************************************************************************************************
|
||||||
*
|
*
|
||||||
* ,---------------------------------------------------------------. ,---------------------------------------------------------------.
|
* ,---------------------------------------------------------------. ,---------------------------------------------------------------.
|
||||||
* | | F11 | F12 | F13 | F14 | F15 | Esc | | | F16 | F17 | F18 | F19 | F20 | |
|
* | | F11 | F12 | F13 | F14 | F15 | Esc | | |||| | F16 | F17 | F18 | F19 | F20 | |
|
||||||
* |------+---------+---------+---------+---------+----------------| |------+---------+---------+---------+---------+---------+------|
|
* |------+---------+---------+---------+---------+----------------| |------+---------+---------+---------+---------+---------+------|
|
||||||
* | |Shut Down|MouseUpLf|Mouse Up |MouseUpRg|Volume Up|Scroll| |Scroll|PrintScrn| Home | Up | PgUp | Mail | |
|
* | |Shut Down|MouseUpLf|Mouse Up |MouseUpRg|Volume Up|Scroll| |Scroll|PrintScrn| Home | Up | PgUp | Mail | |
|
||||||
* |------+---------+---------+---------+---------+---------| Up | | Up |---------+---------+---------+---------+---------+------|
|
* |------+---------+---------+---------+---------+---------| Up | | Up |---------+---------+---------+---------+---------+------|
|
||||||
* | | Sleep |MouseLeft|MouseDown|MouseRght|Volume Dn|------| |------| Num Lock| Left | Down | Right | MyComp | |
|
* | | Sleep |MouseLeft|MouseDown|MouseRght|Volume Dn|------| |------| Num Lock| Left | Down | Right | MyComp | |
|
||||||
* |------+---------+---------+---------+---------+---------|Scroll| |Scroll|---------+---------+---------+---------+---------+------|
|
* |------+---------+---------+---------+---------+---------|Scroll| |Scroll|---------+---------+---------+---------+---------+------|
|
||||||
* | | |MouseDnLf|MouseDown|MouseDnRg| Mute | Down | | Down | | End | Down | PgDn | | |
|
* | | |||| |MouseDnLf|MouseDown|MouseDnRg| Mute | Down | | Down | |||| | End | Down | PgDn | |||| | |
|
||||||
* `------+---------+---------+---------+---------+----------------' `----------------+---------+---------+---------+---------+------'
|
* `------+---------+---------+---------+---------+----------------' `----------------+---------+---------+---------+---------+------'
|
||||||
* |LCtrl| Meh | MClick | LClick | R Click| |Cmd/Insrt|Optn/Del | Hyper | Meh |RCtrl|
|
* | ||| | |||| | MClick | LClick | R Click| | Insert | Del | |||| | |||| | ||| |
|
||||||
* `---------------------------------------------' `---------------------------------------------'
|
* `---------------------------------------------' `---------------------------------------------'
|
||||||
* ,-------------. ,-------------.
|
* ,-------------. ,-------------.
|
||||||
* | Stop |Refrsh| | Prev | Next |
|
* | Stop |Refrsh| | Prev | Next |
|
||||||
|
@ -147,7 +157,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
,KC_TRNS ,KC_POWER ,M(MUL) ,KC_MS_U ,M(MUR) ,KC_VOLU ,KC_WH_U
|
,KC_TRNS ,KC_POWER ,M(MUL) ,KC_MS_U ,M(MUR) ,KC_VOLU ,KC_WH_U
|
||||||
,KC_TRNS ,KC_SLEP ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_VOLD
|
,KC_TRNS ,KC_SLEP ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_VOLD
|
||||||
,KC_TRNS ,KC_NO ,M(MDL) ,KC_MS_D ,M(MDR) ,KC_MUTE ,KC_WH_D
|
,KC_TRNS ,KC_NO ,M(MDL) ,KC_MS_D ,M(MDR) ,KC_MUTE ,KC_WH_D
|
||||||
,KC_LCTL ,KC_MEH ,KC_BTN3 ,KC_BTN1 ,KC_BTN2
|
,KC_NO ,KC_NO ,KC_BTN3 ,KC_BTN1 ,KC_BTN2
|
||||||
,KC_WSTP ,KC_WREF
|
,KC_WSTP ,KC_WREF
|
||||||
,KC_WSCH
|
,KC_WSCH
|
||||||
,KC_WBAK ,KC_NO ,KC_WHOM
|
,KC_WBAK ,KC_NO ,KC_WHOM
|
||||||
|
@ -156,7 +166,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
,KC_WH_U ,KC_PSCR ,KC_HOME ,KC_UP ,KC_PGUP ,KC_MAIL ,KC_TRNS
|
,KC_WH_U ,KC_PSCR ,KC_HOME ,KC_UP ,KC_PGUP ,KC_MAIL ,KC_TRNS
|
||||||
,KC_NLCK ,KC_LEFT ,KC_DOWN ,KC_RIGHT,KC_MYCM ,KC_TRNS
|
,KC_NLCK ,KC_LEFT ,KC_DOWN ,KC_RIGHT,KC_MYCM ,KC_TRNS
|
||||||
,KC_WH_D ,KC_NO ,KC_END ,KC_DOWN ,KC_PGDN ,KC_NO ,KC_TRNS
|
,KC_WH_D ,KC_NO ,KC_END ,KC_DOWN ,KC_PGDN ,KC_NO ,KC_TRNS
|
||||||
,GUI_T(KC_INS),ALT_T(KC_DEL),KC_HYPR ,KC_MEH ,KC_RCTL
|
,KC_INS ,KC_DEL ,KC_NO ,KC_NO ,KC_NO
|
||||||
,KC_MPRV ,KC_MNXT
|
,KC_MPRV ,KC_MNXT
|
||||||
,KC_VOLU
|
,KC_VOLU
|
||||||
,KC_VOLD ,KC_MSTP ,KC_MPLY
|
,KC_VOLD ,KC_MSTP ,KC_MPLY
|
||||||
|
@ -202,7 +212,49 @@ 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 ,KC_TRNS
|
,KC_TRNS ,KC_TRNS ,KC_TRNS
|
||||||
)
|
),
|
||||||
|
|
||||||
|
/******* Reverse Base Layer *********************************************************************************************
|
||||||
|
*
|
||||||
|
* ,------------------------------------------------------. ,------------------------------------------------------.
|
||||||
|
* | =+ | 0 | 9 | 8 | 7 | 6 | - | | Esc | 5 | 4 | 3 | 2 | 1 | `~ |
|
||||||
|
* |------------+------+------+------+------+-------------| |------+------+------+------+------+------+------------|
|
||||||
|
* | \| | P | O | I | U | Y | ] | | [ | T | R | E | W | Q | Tab |
|
||||||
|
* |------------+------+------+------+------+------| | | |------+------+------+------+------+------------|
|
||||||
|
* | '" | ; | L | K | J | H |------| |------| G | F | D | S | A | |
|
||||||
|
* |------------+------+------+------+------+------| Tab | |Shift |------+------+------+------+------+------------|
|
||||||
|
* | Capitals | / | . | , | M | N | | | -Tab | B | V | C | X | Z | Capitals |
|
||||||
|
* `------------+------+------+------+------+-------------' `-------------+------+------+------+------+------------'
|
||||||
|
* | LCtrl | Meh |Hyper | LAlt | LGui | | RGui | RAlt | Hyper| Meh | RCtrl |
|
||||||
|
* `-----------------------------------' `-----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | Left | Right| | Home | End |
|
||||||
|
* ,------|------|------| |------+------+------.
|
||||||
|
* | | | Up | | PgUp | | |
|
||||||
|
* |Space |Enter |------| |------|BackSp| Del |
|
||||||
|
* | | | Down | | PgDn | | |
|
||||||
|
* `--------------------' `--------------------'
|
||||||
|
*/
|
||||||
|
[RBASE] = KEYMAP(
|
||||||
|
// left hand
|
||||||
|
KC_EQL ,KC_0 ,KC_9 ,KC_8 ,KC_7 ,KC_6 ,KC_MINS
|
||||||
|
,KC_BSLS ,KC_P ,KC_O ,KC_I ,KC_U ,KC_Y ,KC_RBRC
|
||||||
|
,KC_QUOT ,LT(RBASE, KC_SCLN) ,KC_L ,KC_K ,LT(RBASE, KC_J) ,KC_H
|
||||||
|
,KC_RSFT ,KC_SLSH ,KC_DOT ,KC_COMM,KC_M ,KC_N ,KC_TAB
|
||||||
|
,KC_RCTL ,MEH_T(KC_NO),ALL_T(KC_NO),KC_RALT,KC_RGUI
|
||||||
|
,KC_LEFT ,KC_RGHT
|
||||||
|
,KC_UP
|
||||||
|
,KC_SPC ,KC_ENT ,KC_DOWN
|
||||||
|
// right hand
|
||||||
|
,KC_ESC ,KC_5 ,KC_4 ,KC_3 ,KC_2 ,KC_1 ,KC_GRV
|
||||||
|
,KC_LBRC ,KC_T ,KC_R ,KC_E ,KC_W ,KC_Q ,KC_TAB
|
||||||
|
,KC_G ,LT(RBASE, KC_F),KC_D ,KC_S ,LT(RBASE, KC_A) ,KC_NO
|
||||||
|
,LSFT(KC_TAB),KC_B ,KC_V ,KC_C ,KC_X ,KC_Z ,KC_LSFT
|
||||||
|
,KC_LGUI,KC_LALT,KC_HYPR ,KC_MEH,KC_LCTL
|
||||||
|
,KC_HOME ,KC_END
|
||||||
|
,KC_PGUP
|
||||||
|
,KC_PGDN ,KC_BSPC ,KC_DEL
|
||||||
|
)
|
||||||
};
|
};
|
||||||
|
|
||||||
const uint16_t PROGMEM fn_actions[] = {
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
@ -226,14 +278,13 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
{
|
{
|
||||||
switch(id) {
|
switch(id) {
|
||||||
// There are two shift keys for each layer so we increment a layer_shift var when one
|
// There are two shift keys for each layer so we increment a layer_shift var when one
|
||||||
// is pressed and decrement when one is released. If both are pressed at the same time
|
// is pressed and decrement when one is released. The shift counts are bound between 0 and 2
|
||||||
// then the layer is locked (or unlocked). The shift counts are bound between 0 and 2
|
|
||||||
// only because sometimes rapid pressing led to irregular events; this way the states
|
// only because sometimes rapid pressing led to irregular events; this way the states
|
||||||
// are self healing during use.
|
// are self healing during use.
|
||||||
|
|
||||||
case LSymb: //
|
case LSymb: //
|
||||||
if (record->event.pressed) { // when the LSymb button is pressed
|
if (record->event.pressed) { // when the LSymb button is pressed
|
||||||
if(++symb_shift > 2) mdia_shift = 2; // increment the symb shift count, max two
|
if(++symb_shift > 2) symb_shift = 2; // increment the symb shift count, max two
|
||||||
if(spec_shift) symb_lock = !symb_lock; // if the Special layer is on, toggle the shift lock
|
if(spec_shift) symb_lock = !symb_lock; // if the Special layer is on, toggle the shift lock
|
||||||
layer_on(SYMB); // in any case, turn on the Symbols layer
|
layer_on(SYMB); // in any case, turn on the Symbols layer
|
||||||
} else { // when the LSymb button is released
|
} else { // when the LSymb button is released
|
||||||
|
@ -263,7 +314,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
|
|
||||||
case LSpec:
|
case LSpec:
|
||||||
if (record->event.pressed) { // when the LSpec button is pressed
|
if (record->event.pressed) { // when the LSpec button is pressed
|
||||||
if(symb_shift) symb_lock == !symb_lock; // if another layer button is engaged, then
|
if(symb_shift) symb_lock = !symb_lock; // if another layer button is engaged, then
|
||||||
else if(mdia_shift) mdia_lock = !mdia_lock; // lock that layer, be it caps or symb or mdia
|
else if(mdia_shift) mdia_lock = !mdia_lock; // lock that layer, be it caps or symb or mdia
|
||||||
else if (record->tap.count && !record->tap.interrupted && (!spec_shift)) {
|
else if (record->tap.count && !record->tap.interrupted && (!spec_shift)) {
|
||||||
register_code(KC_GRV); // otherwise, if it's an uninterrupted tap, emit a char
|
register_code(KC_GRV); // otherwise, if it's an uninterrupted tap, emit a char
|
||||||
|
@ -339,6 +390,30 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case NotEq:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
return MACRO( I(10), D(LSFT), T(EXLM), U(LSFT), T(EQL), END ); // !=
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GrtEq:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
return MACRO( I(10), D(LSFT), T(COMM), U(LSFT), T(EQL), END ); // <=
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case LesEq:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
return MACRO( I(10), D(LSFT), T(DOT), U(LSFT), T(EQL), END ); // >=
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DeRef:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
return MACRO( I(10), T(MINS), D(LSFT), T(DOT), U(LSFT), END ); // ->
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
// mouse diagonals
|
// mouse diagonals
|
||||||
|
|
||||||
case MUL: // mouse up left
|
case MUL: // mouse up left
|
||||||
|
|
Before Width: | Height: | Size: 96 KiB After Width: | Height: | Size: 118 KiB |
|
@ -7,10 +7,10 @@
|
||||||
[{y:-0.875,x:5.5},"T",{h:1.5},"{\n\n\n\n\n\n[",{x:4.5,h:1.5},"}\n\n\n\n\n\n]","Y"],
|
[{y:-0.875,x:5.5},"T",{h:1.5},"{\n\n\n\n\n\n[",{x:4.5,h:1.5},"}\n\n\n\n\n\n]","Y"],
|
||||||
[{y:-0.875,c:"#c6c600",t:"#002299",w:1.5},"Media\n\nTab\n\n\n\nShift",{c:"#cccccc",t:"#000000"},"Q",{x:14.5},"P",{c:"#c6c600",t:"#002299",w:1.5},"|\n\\\nMedia\n\n\n\n\nShift"],
|
[{y:-0.875,c:"#c6c600",t:"#002299",w:1.5},"Media\n\nTab\n\n\n\nShift",{c:"#cccccc",t:"#000000"},"Q",{x:14.5},"P",{c:"#c6c600",t:"#002299",w:1.5},"|\n\\\nMedia\n\n\n\n\nShift"],
|
||||||
[{y:-0.375,x:3.5,c:"#cccccc",t:"#000000"},"D",{x:10.5},"K"],
|
[{y:-0.375,x:3.5,c:"#cccccc",t:"#000000"},"D",{x:10.5},"K"],
|
||||||
[{y:-0.875,x:2.5},"S",{x:1},"F",{x:8.5},"J",{x:1},"L"],
|
[{y:-0.875,x:2.5},"S",{x:1,fa:[0,0,0,1]},"F\n\n\nreverse",{x:8.5},"J\n\n\nreverse",{x:1},"L"],
|
||||||
[{y:-0.875,x:5.5},"G",{x:6.5},"H"],
|
[{y:-0.875,x:5.5},"G",{x:6.5},"H"],
|
||||||
[{y:-0.875,c:"#c6c600",t:"#007d00",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#cccccc",t:"#000000"},"A",{x:14.5},":\n;",{c:"#c6c600",t:"#007d00",w:1.5},"\"\n'\nSymbols\n\n\n\n\nShift"],
|
[{y:-0.875,c:"#c6c600",t:"#007d00",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#cccccc",t:"#000000"},"A\n\n\nreverse",{x:14.5},":\n;\n\nreverse",{c:"#c6c600",t:"#007d00",w:1.5},"\"\n'\nSymbols\n\n\n\n\nShift"],
|
||||||
[{y:-0.625,x:6.5,c:"#ff8500",t:"#000000",fa:[0,0,0,1],h:1.5},"< Tab\n\n\nShift Tab",{x:4.5,h:1.5},"Tab >\n\n\nTab"],
|
[{y:-0.625,x:6.5,c:"#ff8500",t:"#000000",h:1.5},"< Tab\n\n\nShift Tab",{x:4.5,h:1.5},"Tab >\n\n\nTab"],
|
||||||
[{y:-0.75,x:3.5,c:"#cccccc"},"C",{x:10.5},"<\n,"],
|
[{y:-0.75,x:3.5,c:"#cccccc"},"C",{x:10.5},"<\n,"],
|
||||||
[{y:-0.875,x:2.5},"X",{x:1},"V",{x:8.5},"M",{x:1},">\n."],
|
[{y:-0.875,x:2.5},"X",{x:1},"V",{x:8.5},"M",{x:1},">\n."],
|
||||||
[{y:-0.875,x:5.5},"B",{x:6.5},"N"],
|
[{y:-0.875,x:5.5},"B",{x:6.5},"N"],
|
||||||
|
|
Before Width: | Height: | Size: 120 KiB After Width: | Height: | Size: 121 KiB |
|
@ -15,10 +15,10 @@
|
||||||
[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nDnLeft",{x:1},"Mouse\n\n\n\n\n\nDnRgt",{x:8.5,c:"#1e8fff"},"End",{x:1},"Page\n\n\n\n\n\nDown"],
|
[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nDnLeft",{x:1},"Mouse\n\n\n\n\n\nDnRgt",{x:8.5,c:"#1e8fff"},"End",{x:1},"Page\n\n\n\n\n\nDown"],
|
||||||
[{y:-0.875,x:5.5,c:"#9977ee"},"Mute",{x:6.5,c:"#737373",a:7},""],
|
[{y:-0.875,x:5.5,c:"#9977ee"},"Mute",{x:6.5,c:"#737373",a:7},""],
|
||||||
[{y:-0.875,c:"#c6c600",t:"#9e0000",a:4,w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#737373",t:"#000000",a:7},"",{x:14.5},"",{c:"#c6c600",t:"#9e0000",a:4,w:1.5},"\n\nCapitals\n\n\n\n\nShift"],
|
[{y:-0.875,c:"#c6c600",t:"#9e0000",a:4,w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#737373",t:"#000000",a:7},"",{x:14.5},"",{c:"#c6c600",t:"#9e0000",a:4,w:1.5},"\n\nCapitals\n\n\n\n\nShift"],
|
||||||
[{y:-0.375,x:3.5,c:"#0066cc",t:"#000000"},"Middle\n\n\n\n\n\nClick",{x:10.5,c:"#1e8fff",fa:[0,0,0,1]},"Delete\n\n\nOption"],
|
[{y:-0.375,x:3.5,c:"#0066cc",t:"#000000"},"Middle\n\n\n\n\n\nClick",{x:10.5,c:"#1e8fff"},"Delete"],
|
||||||
[{y:-0.875,x:2.5,c:"#0066cc"},"Left\n\n\n\n\n\nClick",{x:1},"Right\n\n\n\n\n\nClick",{x:8.5,c:"#1e8fff"},"Insert\n\n\nCmd",{x:1,c:"#dddd77"},"Hyper"],
|
[{y:-0.875,x:2.5,c:"#0066cc"},"Left\n\n\n\n\n\nClick",{x:1},"Right\n\n\n\n\n\nClick",{x:8.5,c:"#1e8fff"},"Insert",{x:1,c:"#737373",a:7},""],
|
||||||
[{y:-0.75,x:0.5},"Ctrl\n\n\nLCtrl","Meh",{x:14.5},"Meh","Crtl\n\n\nRCtrl"],
|
[{y:-0.75,x:0.5},"","",{x:14.5},"",""],
|
||||||
[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#6633ee"},"Stop\n\n\nBrowser","Reload\n\n\nBrowser"],
|
[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#6633ee",a:4,fa:[0,0,0,1]},"Stop\n\n\nBrowser","Reload\n\n\nBrowser"],
|
||||||
[{h:2},"< Web\n\n\nBrowser",{h:2},"Web >\n\n\nBrowser","Search\n\n\nBrowser"],
|
[{h:2},"< Web\n\n\nBrowser",{h:2},"Web >\n\n\nBrowser","Search\n\n\nBrowser"],
|
||||||
[{x:2},"Home\n\n\nBrowser"],
|
[{x:2},"Home\n\n\nBrowser"],
|
||||||
[{r:-30,rx:13,y:-1,x:-3},"Prev\n\n\nAudio\n\n\nTrack","Next\n\n\nAudio\n\n\nTrack"],
|
[{r:-30,rx:13,y:-1,x:-3},"Prev\n\n\nAudio\n\n\nTrack","Next\n\n\nAudio\n\n\nTrack"],
|
||||||
|
|
Before Width: | Height: | Size: 99 KiB After Width: | Height: | Size: 88 KiB |
|
@ -10,18 +10,18 @@
|
||||||
[{y:-0.875,x:2.5,c:"#bbddbb"},"$",{x:1},")",{x:8.5,c:"#89b087"},"4",{x:1},"6"],
|
[{y:-0.875,x:2.5,c:"#bbddbb"},"$",{x:1},")",{x:8.5,c:"#89b087"},"4",{x:1},"6"],
|
||||||
[{y:-0.875,x:5.5,c:"#bbddbb"},"`",{x:6.5},"/"],
|
[{y:-0.875,x:5.5,c:"#bbddbb"},"`",{x:6.5},"/"],
|
||||||
[{y:-0.875,c:"#000000",t:"#007d00",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#bbddbb",t:"#000000"},"#",{x:14.5,c:"#89b087"},"*",{c:"#000000",t:"#007d00",w:1.5},"\n\nSymbols\n\n\n\n\nShift"],
|
[{y:-0.875,c:"#000000",t:"#007d00",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#bbddbb",t:"#000000"},"#",{x:14.5,c:"#89b087"},"*",{c:"#000000",t:"#007d00",w:1.5},"\n\nSymbols\n\n\n\n\nShift"],
|
||||||
[{y:-0.625,x:6.5,c:"#ff8500",t:"#000000",fa:[0,0,0,1],h:1.5},"Tab >\n\n\nTab",{x:4.5,h:1.5},"< Tab\n\n\nShift Tab"],
|
[{y:-0.625,x:6.5,c:"#bbddbb",t:"#000000",a:6,h:1.5},"'",{x:4.5,h:1.5},"\""],
|
||||||
[{y:-0.75,x:3.5,c:"#bbddbb"},"[",{x:10.5,c:"#89b087"},"2"],
|
[{y:-0.75,x:3.5,a:4},"[",{x:10.5,c:"#89b087"},"2"],
|
||||||
[{y:-0.875,x:2.5,c:"#bbddbb"},"^",{x:1},"]",{x:8.5,c:"#89b087"},"1",{x:1},"3"],
|
[{y:-0.875,x:2.5,c:"#bbddbb"},"^",{x:1},"]",{x:8.5,c:"#89b087"},"1",{x:1},"3"],
|
||||||
[{y:-0.875,x:5.5,c:"#bbddbb"},"~",{x:6.5},"\\"],
|
[{y:-0.875,x:5.5,c:"#bbddbb"},"~",{x:6.5},"\\"],
|
||||||
[{y:-0.875,c:"#c6c600",t:"#9e0000",w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#bbddbb",t:"#000000"},"%",{x:14.5,c:"#89b087"},"-",{c:"#c6c600",t:"#9e0000",w:1.5},"\n\nCapitals\n\n\n\n\nShift"],
|
[{y:-0.875,c:"#c6c600",t:"#9e0000",w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#bbddbb",t:"#000000"},"%",{x:14.5,c:"#89b087"},"-",{c:"#c6c600",t:"#9e0000",w:1.5},"\n\nCapitals\n\n\n\n\nShift"],
|
||||||
[{y:-0.375,x:3.5,c:"#dddd77",t:"#000000"},"Option\n\n\nLAlt",{x:10.5,c:"#89b087"},"."],
|
[{y:-0.375,x:3.5,c:"#bbddbb",t:"#000000"},"<",{x:10.5,c:"#89b087"},"."],
|
||||||
[{y:-0.875,x:2.5,c:"#dddd77"},"Hyper",{x:1},"Cmd\n\n\nSuper",{x:8.5,c:"#89b087"},"0",{x:1},"="],
|
[{y:-0.875,x:2.5,c:"#bbddbb"},"*",{x:1},">",{x:8.5,c:"#89b087"},"0",{x:1},"="],
|
||||||
[{y:-0.75,x:0.5,c:"#dddd77"},"Ctrl\n\n\nLCtrl","Meh",{x:14.5,c:"#89b087"},"+","Enter"],
|
[{y:-0.75,x:0.5,c:"#bbddbb"},";","&",{x:14.5,c:"#89b087"},"+","Enter"],
|
||||||
[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#ff8500"},"Left","Right"],
|
[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#bbddbb"},"<=",">="],
|
||||||
[{h:2},"Space",{h:2},"Enter","Up"],
|
[{a:7,h:2},"+",{h:2},"=",{c:"#737373"},""],
|
||||||
[{x:2},"Down"],
|
[{x:2,c:"#bbddbb",a:4},"!="],
|
||||||
[{r:-30,rx:13,y:-1,x:-3},"Home","End"],
|
[{r:-30,rx:13,y:-1,x:-3,c:"#737373",a:7},"",""],
|
||||||
[{x:-3},"Page\n\n\n\n\n\nUp",{h:2},"< Del\n\n\nBackspace",{h:2},"Del >\n\n\nDelete"],
|
[{x:-3},"",{c:"#bbddbb",h:2},"_",{h:2},"-"],
|
||||||
[{x:-3},"Page\n\n\n\n\n\nDown"]
|
[{x:-3,a:4},"->"]
|
||||||
|
|
||||||
|
|
|
@ -10,12 +10,13 @@ no rights reserved, use for any purposes, credit me if you are a nice person
|
||||||
|
|
||||||
## The Base Layout ##
|
## The Base Layout ##
|
||||||
|
|
||||||
* *White Keys* are all the normal characters and symbols in all the normal locations (except for the brackets).
|
* *White Keys* are all the normal characters and symbols in all the normal locations (except for the brackets, and who touch-types brackets?).
|
||||||
* *Modifier Keys* are light yellow and in the traditional location: Control, Option, Command, plus Hyper and Meh.
|
* *Modifier Keys* are light yellow and in the traditional locationn at the bottom of the keyboard: Control, Option, Command, plus Hyper and Meh. Modifier keys are only found on the base layout.
|
||||||
* *Shift Keys* are dark yellow, found on the outsides of the keyboard. Capitals Shift (traditional shift) is found in the usual place and above that is found Symbol Shift, Media Shift, and Special Shift (Shift Lock).
|
* *Shift Keys* are dark yellow, found on the outsides of the keyboard. Capitals Shift (traditional Shift) is found in the usual place and above that are Symbol Shift, Media Shift, and Special Shift (Shift Lock).
|
||||||
* Several of the shift keys double for entry of characters which would typically be in those locations.
|
* Several of the shift keys double for entry of characters which would typically be in those locations.
|
||||||
* *Thumb Keys* shown in orange are for text navigation and manipulation.
|
* *Thumb Keys* shown in orange are for text navigation and manipulation.
|
||||||
* *Escape* is red and it is always found in that location no matter what.
|
* The keys under pinky fingers and index fingers will *reverse* the keyboard layout.
|
||||||
|
* *Escape* is red and it is always found in that location (*except* when the layout is reversed).
|
||||||
|
|
||||||
![Ordinary base layout](ordinary-base.png)
|
![Ordinary base layout](ordinary-base.png)
|
||||||
|
|
||||||
|
@ -23,12 +24,16 @@ The four big orange keys are arranged differently than in the default Ergodox EZ
|
||||||
|
|
||||||
The Forward Tab and Backward Tab keys are in their locations mostly because I ended up with two extra buttons and needed something to do with them. My muscle memory from using the Truly Ergonomic Keyboard makes me look for the Tab key with my right index finger, so it is handy to have this redundant Tab, and the idea with the Backward Tab key is that it becomes easy to navigate text fields in forms, or to indent/unindent code.
|
The Forward Tab and Backward Tab keys are in their locations mostly because I ended up with two extra buttons and needed something to do with them. My muscle memory from using the Truly Ergonomic Keyboard makes me look for the Tab key with my right index finger, so it is handy to have this redundant Tab, and the idea with the Backward Tab key is that it becomes easy to navigate text fields in forms, or to indent/unindent code.
|
||||||
|
|
||||||
|
#### Reversing The Base Layout ####
|
||||||
|
|
||||||
|
The Ordinary Layout can be used to perform one-handed chorded text input. If you hold down the key under either index finger or either pinky finger (A, F, J and Semicolon), the whole base layout reverses order. Most keys are _mirrored_ but the delete keys, home/end, and left/right arrow keys are merely *translated* to preserve directionality. Pro-tip: This feature is particularly handly for bringing the Enter key to the left hand when the right hand is using the mouse.
|
||||||
|
|
||||||
## The Symbols Layer ##
|
## The Symbols Layer ##
|
||||||
|
|
||||||
* *Symbols* shown in light green. All kinds of brackets are available on this layer. Ampersand and Pipe justapose each other. Pipe, slash, and backslash are arranged in a column.
|
* *Symbols* shown in light green. All kinds of brackets are available on this layer. Ampersand and Pipe juxtapose each other. Pipe, slash, and backslash are arranged in a column.
|
||||||
* *F-Keys* are bright green and overlay the row of numerals.
|
* *F-Keys* are bright green and overlay the row of numerals. This layer has F1-F10, higher *F-Keys* are on the Symbols layer.
|
||||||
* *Number pad* in dark green under the right hand includes all four arithmetic operations in the same order found on most number pads and features an Enter key. The keycodes emitted here are normal numeric keycodes, not the number-pad specific keycodes emitted by most number pads so that NumLock is not needed.
|
* *Number pad* in dark green under the right hand includes all four arithmetic operations in the same order found on most number pads and features an Enter key. The keycodes emitted here are normal numeric keycodes, not the number-pad specific keycodes emitted by most number pads so that NumLock is not needed.
|
||||||
* *Thumb keys* on this layer are the *reverse* of the orange keys on the base layer, with the keys either mirrored or shifted. This is powerful! Often I find myself using the mouse with my right hand, and the left hand needs to press Enter. Instead of reaching the left hand over to the right side of the keyboard, now I simply tap Symbols to reverse the turquoise keys, and Enter is right where it should be.
|
* The dark gray keys do nothing in case you bump them by accident.
|
||||||
|
|
||||||
![Ordinary symbol layout](ordinary-symbol.png)
|
![Ordinary symbol layout](ordinary-symbol.png)
|
||||||
|
|
||||||
|
@ -42,7 +47,7 @@ The Symbols Layer is based on the Coder Layer from the default Ergodox EZ layout
|
||||||
* Higher-order *F-Keys* are shown in bright green overylaying the numerals.
|
* Higher-order *F-Keys* are shown in bright green overylaying the numerals.
|
||||||
* *Application Keys* to control web browsers and audio players are dark purple but don't get too excited because these have weak support on operating systems I've looked at. Good luck.
|
* *Application Keys* to control web browsers and audio players are dark purple but don't get too excited because these have weak support on operating systems I've looked at. Good luck.
|
||||||
* The light purple keys are various operating system keys such as NumLock and Mute and a button to navigate to My Computer (usually your home dir).
|
* The light purple keys are various operating system keys such as NumLock and Mute and a button to navigate to My Computer (usually your home dir).
|
||||||
* The dark gray keys do nothing in case you bump them by accident
|
* The dark gray keys do nothing in case you bump them by accident.
|
||||||
|
|
||||||
![Ordinary media layout](ordinary-media.png)
|
![Ordinary media layout](ordinary-media.png)
|
||||||
|
|
||||||
|
@ -64,27 +69,33 @@ Multiple layers can be turned on at once. The Capitals layer will affect charact
|
||||||
|
|
||||||
The Special Shift layer is mostly used to lock the shift keys but in order to make this layout more _ordinary_ there are a few special sequences which put some keys near their most common traditional locations.
|
The Special Shift layer is mostly used to lock the shift keys but in order to make this layout more _ordinary_ there are a few special sequences which put some keys near their most common traditional locations.
|
||||||
|
|
||||||
### Escape ###
|
#### Escape ####
|
||||||
|
|
||||||
The One True Location for the Escape key is segregated way up on the top left of the keyboard. The Ergodox does not have a physical button in such a location and the nearest one is home to the tilde (er, grave) which is commonly found there. In the Ordinary layout the Escape key is found on all layers in the prominent location in the corner next to the 5, which is easy to remember, and yet it isn't natural for those of us with muscle memory flicking our wrists up and to the left looking for Escape.
|
The One True Location for an Escape key is separated from the rest of the keys, way up on the top left of the keyboard. The Ergodox does not have a physical button in such a location, however, and the nearest one is home to the tilde (er, *grave*) which is commonly found there. In the Ordinary layout the Escape key is found on all layers in the prominent location in the corner next to the 5, which is easy to remember, and yet it isn't natural for those of us with muscle memory flicking our wrists up and to the left looking for Escape.
|
||||||
|
|
||||||
The Ordinary layout offers as a consolation prize a Special sequence for Escape: Special Shift + 1. This is natural so you can tap the top left button, then the button next to it and get Escape. This gesture works in all layers.
|
The Ordinary layout offers as a consolation prize, a Special sequence for Escape: **Special Shift + 1**. This is natural so you can tap the top left button, then the button next to it and get Escape. This gesture works in all layers.
|
||||||
|
|
||||||
### Backspace ###
|
#### Backspace ####
|
||||||
|
|
||||||
At the top right corner of the Ergodox EZ you can a gesture similar to the special Escape sequence using the 0 key to produce a Backspace. Users of this keyboard and this layout are well advised to learn to use their thumbs for deleting text, but sometimes you are doing other computery things and just want to flick your digits up to the right and press backspace a bunch times.
|
At the top right corner of the Ergodox EZ you can do **Special Shift + 0** to produce a Backspace. Users of this keyboard and this layout are well advised to learn to use their thumbs for deleting text, but sometimes you are doing other computery things and just want to flick your digits up to the right and press backspace a bunch times.
|
||||||
|
|
||||||
### Other Characters ###
|
#### Other Characters ####
|
||||||
|
|
||||||
The Escape and Backspace special sequences are so useful why not have a few more? You can find dash under 9, left bracket under o, and right bracket under p. That's pretty much all the characters from the top right corner of the keyboard which moved to make room for the columnar layout.
|
The Escape and Backspace special sequences are so useful why not have a few more? You can find dash under 9, left bracket under o, and right bracket under p. That's pretty much all the characters from the top right corner of the keyboard which moved to make room for the columnar layout.
|
||||||
|
|
||||||
|
## Errata ##
|
||||||
|
|
||||||
|
Some of the symbols on the Symbols layer are produced by the keyboard by "capitalizing" another character (such as *!* from *1*) so when you type that key you will notice the Capitals Shift red LED turn on.
|
||||||
|
|
||||||
****
|
****
|
||||||
|
|
||||||
The Ordinary Layout for the Ergodox EZ keyboard, v4.20
|
The Ordinary Layout for the Ergodox EZ keyboard, v5
|
||||||
|
|
||||||
Modifications from default by Nicholas Keene ergodoxez@nicholaskeene.com
|
Modifications from default by Nicholas Keene ergodoxez@nicholaskeene.com
|
||||||
|
|
||||||
No rights reserved. This software is in the public domain. Credit me if you are friendly but if you're a jerk don't bother.
|
No rights reserved. This software is in the public domain. Credit me if you are friendly but if you're a jerk don't bother.
|
||||||
|
|
||||||
|
Keyboard layout images were created with http://www.keyboard-layout-editor.com/ by Ian Prest my thanks to that free service
|
||||||
|
|
||||||
Details: readme.md
|
Details: readme.md
|
||||||
https://github.com/nrrkeene/qmk_firmware/tree/master/keyboards/ergodox/keymaps/ordinary
|
https://github.com/nrrkeene/qmk_firmware/tree/master/keyboards/ergodox/keymaps/ordinary
|
||||||
|
|
|
@ -59,7 +59,7 @@ I have two commented out layers that are just templates, so I can easily create
|
||||||
# Building
|
# Building
|
||||||
|
|
||||||
```
|
```
|
||||||
$ git clone https://github.com/jackhumbert/qmk_firmware.git
|
$ git clone https://github.com/qmk/qmk_firmware.git
|
||||||
$ cd qmk_firmware/keyboards/ergodox/keymaps/pvinis
|
$ cd qmk_firmware/keyboards/ergodox/keymaps/pvinis
|
||||||
$ make
|
$ make
|
||||||
```
|
```
|
||||||
|
|
|
@ -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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -22,7 +22,7 @@ your own:
|
||||||
[hex]: https://raw.githubusercontent.com/algernon/ergodox-supercoder/master/supercoder.hex
|
[hex]: https://raw.githubusercontent.com/algernon/ergodox-supercoder/master/supercoder.hex
|
||||||
|
|
||||||
```
|
```
|
||||||
$ git clone https://github.com/jackhumbert/qmk_firmware.git
|
$ git clone https://github.com/qmk/qmk_firmware.git
|
||||||
$ cd qmk_firmware/keyboards/ergodox
|
$ cd qmk_firmware/keyboards/ergodox
|
||||||
$ git clone https://github.com/algernon/ergodox-supercoder.git keymaps/supercoder
|
$ git clone https://github.com/algernon/ergodox-supercoder.git keymaps/supercoder
|
||||||
$ make KEYMAP=supercoder
|
$ make KEYMAP=supercoder
|
||||||
|
|
|
@ -205,6 +205,7 @@ void matrix_init_user(void) {
|
||||||
|
|
||||||
// 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) {
|
||||||
|
__attribute__ ((unused))
|
||||||
uint32_t layer0 = layer_state & (1UL << 0),
|
uint32_t layer0 = layer_state & (1UL << 0),
|
||||||
layer1 = layer_state & (1UL << 1),
|
layer1 = layer_state & (1UL << 1),
|
||||||
layer2 = layer_state & (1UL << 2),
|
layer2 = layer_state & (1UL << 2),
|
||||||
|
|
|
@ -90,7 +90,7 @@ Your LEDs will change to indicate your layer. You'll know you are in the base la
|
||||||
|
|
||||||
To build, you will need the [QMK][qmk] firmware checked out. from there, dive into `keyboards/ergodox/keymaps/win10_writers-block/`
|
To build, you will need the [QMK][qmk] firmware checked out. from there, dive into `keyboards/ergodox/keymaps/win10_writers-block/`
|
||||||
|
|
||||||
[qmk]: https://github.com/jackhumbert/qmk_firmware
|
[qmk]: https://github.com/qmk/qmk_firmware
|
||||||
|
|
||||||
```
|
```
|
||||||
$ make keyboard=ergodox keymap=win10_writers-block
|
$ make keyboard=ergodox keymap=win10_writers-block
|
||||||
|
|
|
@ -25,7 +25,7 @@ If none of the existing keymaps suit you, you can create your own custom
|
||||||
keymap. This will require some experience with coding. Follow these steps
|
keymap. This will require some experience with coding. Follow these steps
|
||||||
to customize a keymap:
|
to customize a keymap:
|
||||||
|
|
||||||
- Read the [qmk firmware README](https://github.com/jackhumbert/qmk_firmware) from top to bottom. Then come back here. :)
|
- Read the [qmk firmware README](https://github.com/qmk/qmk_firmware) from top to bottom. Then come back here. :)
|
||||||
|
|
||||||
- Clone the qmk_firmware repository
|
- Clone the qmk_firmware repository
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,112 @@
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
# 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".
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# MCU name
|
||||||
|
#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
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# 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)
|
||||||
|
|
||||||
|
# Interrupt driven control endpoint task(+60)
|
||||||
|
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||||
|
|
||||||
|
|
||||||
|
# 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
|
||||||
|
# comment out to disable the options.
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
|
||||||
|
MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
|
||||||
|
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
||||||
|
# CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
||||||
|
# COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
||||||
|
KEYBOARD_LOCK_ENABLE ?= yes # Allow locking of keyboard via magic key
|
||||||
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
|
# SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
|
||||||
|
NKRO_ENABLE ?= yes # USB 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 ?= YES # MIDI controls
|
||||||
|
# UNICODE_ENABLE ?= YES # Unicode
|
||||||
|
# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
|
RGBLIGHT_ENABLE ?= yes # Enable RGB Underglow
|
||||||
|
|
||||||
|
ifndef QUANTUM_DIR
|
||||||
|
include ../../../../Makefile
|
||||||
|
endif
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
Unxmaal's GH60 Layout
|
||||||
|
=====================
|
||||||
|
* Mostly stolen from /u/robotmaxtron
|
||||||
|
|
||||||
|
##Quantum MK Firmware
|
||||||
|
For the full Quantum feature list, see the parent readme.md.
|
||||||
|
|
||||||
|
* Standard Mac ANSI layout
|
||||||
|
* Spacebar acts as space when tapped, Fn when held
|
||||||
|
* Menu acts as menu when tapped, Fn2 when held
|
||||||
|
* Layer1:
|
||||||
|
* Top row = `~, F1-F12, Del
|
||||||
|
* JKIL = arrow cluster
|
||||||
|
* Layer2:
|
||||||
|
* Top row = media controls
|
||||||
|
* JKIL = PgDn/Up/Home/Insert
|
||||||
|
* Backspace = Reset
|
||||||
|
|
||||||
|
### Additional Credits
|
||||||
|
Keymap has been based on various keymaps available from the QMK Repo for the GH60-SATAN and KC60 keyboards.
|
After Width: | Height: | Size: 1015 KiB |
|
@ -0,0 +1,190 @@
|
||||||
|
/*
|
||||||
|
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 geekhack
|
||||||
|
#define PRODUCT GH60
|
||||||
|
#define DESCRIPTION t.m.k. keyboard firmware for GH60
|
||||||
|
|
||||||
|
/* key matrix size */
|
||||||
|
#define MATRIX_ROWS 5
|
||||||
|
#define MATRIX_COLS 14
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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 { D0, D1, D2, D3, D5 }
|
||||||
|
// Rev A
|
||||||
|
// #define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B0, B5, B4, D7, D6, B3 }
|
||||||
|
// Rev B/C
|
||||||
|
#define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B7, B5, B4, D7, D6, B3 }
|
||||||
|
#define UNUSED_PINS
|
||||||
|
|
||||||
|
/* COL2ROW or ROW2COL */
|
||||||
|
#define DIODE_DIRECTION COL2ROW
|
||||||
|
|
||||||
|
/* 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
|
||||||
|
|
||||||
|
/* number of backlight levels */
|
||||||
|
#define BACKLIGHT_LEVELS 3
|
||||||
|
|
||||||
|
/* 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
|
||||||
|
|
||||||
|
/*
|
||||||
|
* RGB Underglow
|
||||||
|
* These settings are for the F4 by default:
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* #define ws2812_PORTREG PORTF
|
||||||
|
* #define ws2812_DDRREG DDRF
|
||||||
|
* #define ws2812_pin PF4
|
||||||
|
* #define RGBLED_NUM 14 // Number of LEDs
|
||||||
|
* #define RGBLIGHT_HUE_STEP 10
|
||||||
|
* #define RGBLIGHT_SAT_STEP 17
|
||||||
|
* #define RGBLIGHT_VAL_STEP 17
|
||||||
|
*
|
||||||
|
* The firmware supports 5 different light effects, and the color (hue, saturation, brightness) can be customized in most effects.
|
||||||
|
* To control the underglow, you need to modify your keymap file to assign those functions to some keys/key combinations.
|
||||||
|
* For details, please check this keymap. keyboard/planck/keymaps/yang/keymap.c
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Deprecated code below
|
||||||
|
#define ws2812_PORTREG PORTF
|
||||||
|
#define ws2812_DDRREG DDRF
|
||||||
|
#define ws2812_pin PF4
|
||||||
|
*/
|
||||||
|
#define RGB_DI_PIN F4
|
||||||
|
#define RGBLIGHT_ANIMATIONS
|
||||||
|
#define RGBLED_NUM 8 // Number of LEDs
|
||||||
|
#define RGBLIGHT_HUE_STEP 8
|
||||||
|
#define RGBLIGHT_SAT_STEP 8
|
||||||
|
#define RGBLIGHT_VAL_STEP 8
|
||||||
|
#endif
|
|
@ -0,0 +1,228 @@
|
||||||
|
#include "gh60.h"
|
||||||
|
#include "action_layer.h"
|
||||||
|
|
||||||
|
#define _BL 0
|
||||||
|
#define _AL 1
|
||||||
|
#define _FL 2
|
||||||
|
#define _UL 3
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
/*
|
||||||
|
* ANSI Base, Mac style
|
||||||
|
* ,-----------------------------------------------------------------------------.
|
||||||
|
* |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| = | Backsp |
|
||||||
|
* |-----------------------------------------------------------------------------|
|
||||||
|
* |Tab | Q | W | E | R | T | Y | U | I| O| P| [| ]| \|
|
||||||
|
* |-----------------------------------------------------------------------------|
|
||||||
|
* |Caps/Fn | A| S| D| F| G| H| J| K| L| ;| '| Enter |
|
||||||
|
* |-----------------------------------------------------------------------------|
|
||||||
|
* |Shift | Z| X| C| V| B| N| M| ,| .| /| Shift |
|
||||||
|
* |-----------------------------------------------------------------------------|
|
||||||
|
* |Fn|Alt |Gui | Space(tapped), Fn(held) |Gui |Alt |Menu(tapped, Fn2(held)|Ctrl|
|
||||||
|
* `-----------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_BL] = KEYMAP(
|
||||||
|
KC_ESC,KC_1,KC_2,KC_3,KC_4,KC_5,KC_6,KC_7,KC_8,KC_9,KC_0,KC_MINS,KC_EQL,KC_BSPC, \
|
||||||
|
KC_TAB,KC_Q,KC_W,KC_E,KC_R,KC_T,KC_Y,KC_U,KC_I,KC_O,KC_P,KC_LBRC,KC_RBRC,KC_BSLS, \
|
||||||
|
KC_LCTL,KC_A,KC_S,KC_D,KC_F,KC_G,KC_H,KC_J,KC_K,KC_L,KC_SCLN,KC_QUOT,KC_NO,KC_ENT, \
|
||||||
|
KC_LSFT,KC_NO,KC_Z,KC_X,KC_C,KC_V,KC_B,KC_N,KC_M,KC_COMM,KC_DOT,KC_SLSH,KC_NO,KC_RSFT, \
|
||||||
|
MO(1),KC_LALT,KC_LGUI, LT(1,KC_SPACE), KC_NO, KC_RGUI, KC_RALT, LT(2,KC_MENU), KC_RCTL),
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Pok3r style arrow cluster
|
||||||
|
* ,-----------------------------------------------------------.
|
||||||
|
* |`~ | F1| F2| F3| F4| F5| F6| F7| F8| F9| F10| F11| F12|DEL |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | | | | | | | | |Up| | | | | |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | | | | | | | |Left|Down|Right| | | |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | | | | | | | | | | | | |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | | | | | | | | |
|
||||||
|
* `-----------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_AL] = KEYMAP(
|
||||||
|
KC_GRV,KC_F1,KC_F2,KC_F3,KC_F4,KC_F5,KC_F6,KC_F7,KC_F8,KC_F9,KC_F10,KC_F11,KC_F12,KC_DELETE, \
|
||||||
|
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_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_LEFT,KC_DOWN,KC_RGHT,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
|
||||||
|
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
|
||||||
|
KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS),
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Secondary function layer
|
||||||
|
* ,-------------------------------------------------------------.
|
||||||
|
* | | | | | | | | RW|Play|FF| Mute| Vol Down | Vol up |Reset |
|
||||||
|
* |-------------------------------------------------------------|
|
||||||
|
* | | | | | | | | | |PgUp| | | | |
|
||||||
|
* |-------------------------------------------------------------|
|
||||||
|
* | | | | | | | |Home|PgDown|End| | | |
|
||||||
|
* |-------------------------------------------------------------|
|
||||||
|
* | | | | | | | | | | | | |
|
||||||
|
* |-------------------------------------------------------------|
|
||||||
|
* | | | | | | | | |
|
||||||
|
* `-------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_FL] = KEYMAP(
|
||||||
|
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_MPRV,KC_MPLY,KC_MNXT,KC_MUTE,KC_VOLD,KC_VOLU,RESET, \
|
||||||
|
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PGUP,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
|
||||||
|
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_HOME,KC_TRNS,KC_HOME,KC_PGDN,KC_END,KC_TRNS,KC_TRNS,KC_TRNS, \
|
||||||
|
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
|
||||||
|
KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS),
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Locking layer for controlling the underglow.
|
||||||
|
* NOTE: currently unused.
|
||||||
|
*
|
||||||
|
* ,-----------------------------------------------------------.
|
||||||
|
* | | | | | | | | | | | | | | |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | | | | | | | | | | | | | | |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | |On|Mode| | | | | | | | | | |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | | |Hue+|Hue-|Sat+|Sat-|Val+|Val-| | | | |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | | | | | | | | |
|
||||||
|
* `-----------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_UL] = KEYMAP(
|
||||||
|
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
|
||||||
|
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
|
||||||
|
KC_TRNS,F(4),F(5),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,F(6),F(7),F(8),F(9),F(10),F(11),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),
|
||||||
|
};
|
||||||
|
|
||||||
|
enum function_id {
|
||||||
|
RGBLED_TOGGLE,
|
||||||
|
RGBLED_STEP_MODE,
|
||||||
|
RGBLED_INCREASE_HUE,
|
||||||
|
RGBLED_DECREASE_HUE,
|
||||||
|
RGBLED_INCREASE_SAT,
|
||||||
|
RGBLED_DECREASE_SAT,
|
||||||
|
RGBLED_INCREASE_VAL,
|
||||||
|
RGBLED_DECREASE_VAL,
|
||||||
|
SHIFT_ESC,
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
[0] = ACTION_LAYER_MOMENTARY(2), // Momentary Fn overlay
|
||||||
|
[1] = ACTION_LAYER_TOGGLE(1), // Toggle Arrow Layer overlay
|
||||||
|
[2] = ACTION_LAYER_TAP_KEY(2, KC_CAPS), // Tap to toggle caps lock and hold to activate function layer
|
||||||
|
[3] = ACTION_LAYER_TOGGLE(3), // Toggle Underglow Layer overlay
|
||||||
|
[4] = ACTION_FUNCTION(RGBLED_TOGGLE), //Turn on/off underglow
|
||||||
|
[5] = ACTION_FUNCTION(RGBLED_STEP_MODE), // Change underglow mode
|
||||||
|
[6] = ACTION_FUNCTION(RGBLED_INCREASE_HUE),
|
||||||
|
[7] = ACTION_FUNCTION(RGBLED_DECREASE_HUE),
|
||||||
|
[8] = ACTION_FUNCTION(RGBLED_INCREASE_SAT),
|
||||||
|
[9] = ACTION_FUNCTION(RGBLED_DECREASE_SAT),
|
||||||
|
[10] = ACTION_FUNCTION(RGBLED_INCREASE_VAL),
|
||||||
|
[11] = ACTION_FUNCTION(RGBLED_DECREASE_VAL),
|
||||||
|
[12] = ACTION_FUNCTION(SHIFT_ESC),
|
||||||
|
[13] = ACTION_LAYER_TAP_KEY(1, KC_SPACE),
|
||||||
|
};
|
||||||
|
|
||||||
|
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
|
{
|
||||||
|
// MACRODOWN only works in this function
|
||||||
|
switch(id) {
|
||||||
|
case 0:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
register_code(KC_RSFT);
|
||||||
|
} else {
|
||||||
|
unregister_code(KC_RSFT);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return MACRO_NONE;
|
||||||
|
};
|
||||||
|
|
||||||
|
void matrix_scan_user(void) {
|
||||||
|
|
||||||
|
// Layer LED indicators
|
||||||
|
// ESC led on when in function layer, WASD cluster leds enabled when on arrow cluster
|
||||||
|
uint32_t layer = layer_state;
|
||||||
|
if (layer & (1<<1)) {
|
||||||
|
gh60_wasd_leds_on();
|
||||||
|
} else {
|
||||||
|
gh60_wasd_leds_off();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (layer & (1<<2)) {
|
||||||
|
gh60_esc_led_on();
|
||||||
|
} else {
|
||||||
|
gh60_esc_led_off();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
|
||||||
|
|
||||||
|
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||||
|
switch (id) {
|
||||||
|
case RGBLED_TOGGLE:
|
||||||
|
//led operations
|
||||||
|
if (record->event.pressed) {
|
||||||
|
rgblight_toggle();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RGBLED_INCREASE_HUE:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
rgblight_increase_hue();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RGBLED_DECREASE_HUE:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
rgblight_decrease_hue();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RGBLED_INCREASE_SAT:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
rgblight_increase_sat();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RGBLED_DECREASE_SAT:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
rgblight_decrease_sat();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RGBLED_INCREASE_VAL:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
rgblight_increase_val();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RGBLED_DECREASE_VAL:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
rgblight_decrease_val();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RGBLED_STEP_MODE:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
rgblight_step();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
static uint8_t shift_esc_shift_mask;
|
||||||
|
// Shift + ESC = ~
|
||||||
|
case SHIFT_ESC:
|
||||||
|
shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK;
|
||||||
|
if (record->event.pressed) {
|
||||||
|
if (shift_esc_shift_mask) {
|
||||||
|
add_key(KC_GRV);
|
||||||
|
send_keyboard_report();
|
||||||
|
} else {
|
||||||
|
add_key(KC_ESC);
|
||||||
|
send_keyboard_report();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (shift_esc_shift_mask) {
|
||||||
|
del_key(KC_GRV);
|
||||||
|
send_keyboard_report();
|
||||||
|
} else {
|
||||||
|
del_key(KC_ESC);
|
||||||
|
send_keyboard_report();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
};
|
|
@ -0,0 +1,3 @@
|
||||||
|
ifndef MAKEFILE_INCLUDED
|
||||||
|
include ../../Makefile
|
||||||
|
endif
|
|
@ -0,0 +1,43 @@
|
||||||
|
#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 GON
|
||||||
|
#define PRODUCT NerD
|
||||||
|
#define DESCRIPTION QMK port for the GON Nerd PCB
|
||||||
|
|
||||||
|
/* key matrix size */
|
||||||
|
#define MATRIX_ROWS 10
|
||||||
|
#define MATRIX_COLS 9
|
||||||
|
|
||||||
|
/* backlight */
|
||||||
|
#define BACKLIGHT_PIN B7
|
||||||
|
#define BACKLIGHT_LEVELS 3
|
||||||
|
|
||||||
|
/* matrix pins */
|
||||||
|
#define MATRIX_ROW_PINS { B4, E2, F4, F7, F1, F6, C6, F5, D7, C7 }
|
||||||
|
#define MATRIX_COL_PINS { E6, B0, B1, B2, B3, F0, D0, D5, D1 }
|
||||||
|
#define UNUSED_PINS
|
||||||
|
|
||||||
|
/* COL2ROW or ROW2COL */
|
||||||
|
#define DIODE_DIRECTION COL2ROW
|
||||||
|
|
||||||
|
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not 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 magic key command */
|
||||||
|
#define IS_COMMAND() ( \
|
||||||
|
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
||||||
|
)
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1 @@
|
||||||
|
#include "gonnerd.h"
|
|
@ -0,0 +1,42 @@
|
||||||
|
#ifndef GONNERD_H
|
||||||
|
#define GONNERD_H
|
||||||
|
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
#define KEYMAP_TKL( \
|
||||||
|
K08, K09, K18, K19, K28, K29, K38, K39, K48, K49, K58, K59, K68, K69, K88, K89, \
|
||||||
|
K00, K01, K10, K11, K20, K21, K30, K31, K40, K41, K50, K51, K60, K61, K80, K81, K84, \
|
||||||
|
K02, K03, K12, K13, K22, K23, K32, K33, K42, K43, K52, K53, K62, K63, K82, K83, K85, \
|
||||||
|
K04, K14, K15, K24, K25, K34, K35, K44, K45, K54, K55, K64, K71, K65, \
|
||||||
|
K07, K79, K16, K17, K26, K27, K36, K37, K46, K47, K56, K57, K66, K67, K86, \
|
||||||
|
K06, K05, K78, K70, K72, K73, K74, K75, K76, K77, K87 \
|
||||||
|
) \
|
||||||
|
{ \
|
||||||
|
{ K00, K10, K20, K30, K40, K50, K60, K70, K80 }, \
|
||||||
|
{ K01, K11, K21, K31, K41, K51, K61, K71, K81 }, \
|
||||||
|
{ K02, K12, K22, K32, K42, K52, K62, K72, K82 }, \
|
||||||
|
{ K03, K13, K23, K33, K43, K53, K63, K73, K83 }, \
|
||||||
|
{ K04, K14, K24, K34, K44, K54, K64, K74, K84 }, \
|
||||||
|
{ K05, K15, K25, K35, K45, K55, K65, K75, K85 }, \
|
||||||
|
{ K06, K16, K26, K36, K46, K56, K66, K76, K86 }, \
|
||||||
|
{ K07, K17, K27, K37, K47, K57, K67, K77, K87 }, \
|
||||||
|
{ K08, K18, K28, K38, K48, K58, K68, K78, K88 }, \
|
||||||
|
{ K09, K19, K29, K39, K49, K59, K69, K79, K89 } \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define KEYMAP_60( \
|
||||||
|
K08, K01, K10, K11, K20, K21, K30, K31, K40, K41, K50, K51, K60, K61, \
|
||||||
|
K02, K03, K12, K13, K22, K23, K32, K33, K42, K43, K52, K53, K62, K63, \
|
||||||
|
K04, K14, K15, K24, K25, K34, K35, K44, K45, K54, K55, K64, K71, K65, \
|
||||||
|
K07, K79, K16, K17, K26, K27, K36, K37, K46, K47, K56, K57, K66, K67, \
|
||||||
|
K06, K05, K78, K70, K72, K73, K74, K75 \
|
||||||
|
) KEYMAP_TKL( \
|
||||||
|
K08, 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, KC_NO, \
|
||||||
|
KC_NO, K01, K10, K11, K20, K21, K30, K31, K40, K41, K50, K51, K60, K61, KC_NO, KC_NO, KC_NO, \
|
||||||
|
K02, K03, K12, K13, K22, K23, K32, K33, K42, K43, K52, K53, K62, K63, KC_NO, KC_NO, KC_NO, \
|
||||||
|
K04, K14, K15, K24, K25, K34, K35, K44, K45, K54, K55, K64, K71, K65, \
|
||||||
|
K07, K79, K16, K17, K26, K27, K36, K37, K46, K47, K56, K57, K66, K67, KC_NO, \
|
||||||
|
K06, K05, K78, K70, K72, K73, K74, K75, KC_NO, KC_NO, KC_NO \
|
||||||
|
)
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,21 @@
|
||||||
|
# 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 = no # Enable keyboard backlight functionality
|
||||||
|
MIDI_ENABLE = no # MIDI controls
|
||||||
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
|
UNICODE_ENABLE = no # Unicode
|
||||||
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
||||||
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
|
|
||||||
|
ifndef QUANTUM_DIR
|
||||||
|
include ../../../../Makefile
|
||||||
|
endif
|
|
@ -0,0 +1,26 @@
|
||||||
|
#include "gonnerd.h"
|
||||||
|
|
||||||
|
#define __x__ KC_NO
|
||||||
|
|
||||||
|
// Keymap layers
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[0] = KEYMAP_60( /* Base */
|
||||||
|
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
|
||||||
|
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, __x__, KC_ENT, \
|
||||||
|
KC_LSFT, __x__, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, __x__, \
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL \
|
||||||
|
),
|
||||||
|
|
||||||
|
[1] = KEYMAP_60( /* System layer to have access to RESET button */
|
||||||
|
RESET, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, \
|
||||||
|
__x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, \
|
||||||
|
__x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, \
|
||||||
|
__x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, \
|
||||||
|
__x__, __x__, __x__, __x__, __x__, __x__, KC_TRNS, __x__ \
|
||||||
|
),
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,21 @@
|
||||||
|
# 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 = no # Enable keyboard backlight functionality
|
||||||
|
MIDI_ENABLE = no # MIDI controls
|
||||||
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
|
UNICODE_ENABLE = no # Unicode
|
||||||
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
||||||
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
|
|
||||||
|
ifndef QUANTUM_DIR
|
||||||
|
include ../../../../Makefile
|
||||||
|
endif
|
|
@ -0,0 +1,108 @@
|
||||||
|
#include "gonnerd.h"
|
||||||
|
|
||||||
|
// Keymap layers
|
||||||
|
#define BASE_LAYER 0
|
||||||
|
#define FUNCTION_LAYER 1
|
||||||
|
#define SYSTEM_LAYER 2
|
||||||
|
|
||||||
|
// Key aliases
|
||||||
|
#define __x__ KC_NO
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
/* Layer 0: Default Layer
|
||||||
|
* ,-----------------------------------------------------------.
|
||||||
|
* |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| = | BSp |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* |Funct | A| S| D| F| G| H| J| K| L| ;| '|Enter |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* |Shift | Z| X| C| V| B| N| M| ,| .| /| Shift |
|
||||||
|
* |-----------------------------------------------------------'
|
||||||
|
* | Ctl|Alt|Gui | Space |Gui |Alt| F2| Ctl |
|
||||||
|
* `-----------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[BASE_LAYER] = KEYMAP_60(
|
||||||
|
F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
|
||||||
|
MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, __x__, KC_ENT, \
|
||||||
|
KC_LSFT, __x__, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, __x__, \
|
||||||
|
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, MO(2), KC_RCTL \
|
||||||
|
),
|
||||||
|
|
||||||
|
/* Layer 1: Function Layer
|
||||||
|
* ,-----------------------------------------------------------.
|
||||||
|
* | | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11| F12| Del |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | |Prv|Ply|Nxt| | |Pg^|Hme|Up |End| |Br-|Br+| |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* |Hold |Mte|Vl-|Vl+| | |Pgv|Lft|Dwn|Rgt| | | |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | | | | | | | | | | | | |
|
||||||
|
* |-----------------------------------------------------------'
|
||||||
|
* | | | | | | | | |
|
||||||
|
* `-----------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[FUNCTION_LAYER] = KEYMAP_60(
|
||||||
|
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
|
||||||
|
__x__, KC_MPRV, KC_MPLY, KC_MNXT, __x__, __x__, KC_PGUP, KC_HOME, KC_UP, KC_END, __x__, KC_SLCK, KC_PAUS, __x__, \
|
||||||
|
KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, __x__, __x__, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, __x__, __x__, __x__, __x__, \
|
||||||
|
KC_LSFT, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, \
|
||||||
|
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, __x__, __x__, __x__, __x__ \
|
||||||
|
),
|
||||||
|
|
||||||
|
/* Layer 2: System Layer
|
||||||
|
* ,-----------------------------------------------------------.
|
||||||
|
* |Reset| | | | | | | | | | | | | |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | | | | | | | | | | | | | | |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | | | | | | | | | | | | | |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* | | | | | | | | | | | | |
|
||||||
|
* |-----------------------------------------------------------'
|
||||||
|
* | | | | | | | | |
|
||||||
|
* `-----------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[SYSTEM_LAYER] = KEYMAP_60(
|
||||||
|
RESET, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, \
|
||||||
|
__x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, \
|
||||||
|
__x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, \
|
||||||
|
__x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, __x__, \
|
||||||
|
__x__, __x__, __x__, __x__, __x__, __x__, KC_TRNS, __x__ \
|
||||||
|
),
|
||||||
|
};
|
||||||
|
|
||||||
|
enum function_id {
|
||||||
|
ESC_GRV, // Makes Esc behave like `~ when pressed with the left GUI modifier. This is the "switch between windows of the same application" key combination in macOS
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
[0] = ACTION_FUNCTION(ESC_GRV),
|
||||||
|
};
|
||||||
|
|
||||||
|
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||||
|
static uint8_t esc_grv_mask;
|
||||||
|
switch (id) {
|
||||||
|
case ESC_GRV:
|
||||||
|
esc_grv_mask = get_mods() & MOD_BIT(KC_LGUI);
|
||||||
|
if (record->event.pressed) {
|
||||||
|
if (esc_grv_mask) {
|
||||||
|
add_key(KC_GRV);
|
||||||
|
send_keyboard_report();
|
||||||
|
} else {
|
||||||
|
add_key(KC_ESC);
|
||||||
|
send_keyboard_report();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (esc_grv_mask) {
|
||||||
|
del_key(KC_GRV);
|
||||||
|
send_keyboard_report();
|
||||||
|
} else {
|
||||||
|
del_key(KC_ESC);
|
||||||
|
send_keyboard_report();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|