diff options
24 files changed, 1453 insertions, 249 deletions
@@ -38,7 +38,7 @@ ERROR_FILE := $(BUILD_DIR)/error_occured 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 # so the CURRENT_PATH_ELEMENT will beome the new head # and the PATH_ELEMENTS are the rest that are still unprocessed @@ -47,16 +47,16 @@ define NEXT_PATH_ELEMENT $$(eval PATH_ELEMENTS := $$(wordlist 2,9999,$$(PATH_ELEMENTS))) endef -# We change the / to spaces so that we more easily can work with the elements +# We change the / to spaces so that we more easily can work with the elements # separately PATH_ELEMENTS := $(subst /, ,$(STARTING_DIR)) # Initialize the path elements list for further processing $(eval $(call NEXT_PATH_ELEMENT)) -# This function sets the KEYBOARD; KEYMAP and SUBPROJECT to the correct +# This function sets the KEYBOARD; KEYMAP and SUBPROJECT to the correct # variables depending on which directory you stand in. -# It's really a very simple if else chain, if you squint enough, -# but the makefile syntax makes it very verbose. +# It's really a very simple if else chain, if you squint enough, +# but the makefile syntax makes it very verbose. # If we are in a subfolder of keyboards ifeq ($(CURRENT_PATH_ELEMENT),keyboards) $(eval $(call NEXT_PATH_ELEMENT)) @@ -111,7 +111,7 @@ endif .DEFAULT_GOAL := all ifneq ($(KEYMAP),) ifeq ($(SUBPROJECT),) - # Inside a keymap folder, just build the keymap, with the + # Inside a keymap folder, just build the keymap, with the # default subproject .DEFAULT_GOAL := $(KEYBOARD)-$(KEYMAP) else @@ -163,7 +163,7 @@ define TRY_TO_MATCH_RULE_FROM_LIST_HELPER3 ifneq ($1,) ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,$$(firstword $1)),true) MATCHED_ITEM := $$(firstword $1) - else + else $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER3,$$(wordlist 2,9999,$1))) endif endif @@ -171,10 +171,10 @@ endef # A recursive helper function for finding the longest match # $1 The list to be checed -# 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 define TRY_TO_MATCH_RULE_FROM_LIST_HELPER2 - # Stop the recursion when the list is empty + # Stop the recursion when the list is empty ifneq ($1,) RULE_BEFORE := $$(RULE) $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER3,$1)) @@ -270,7 +270,7 @@ define PARSE_KEYBOARD $$(eval $$(call PARSE_SUBPROJECT,$$(SUBPROJECT))) # If there's no matching subproject, we assume it's the default # This will allow you to leave the subproject part of the target out - else + else $$(eval $$(call PARSE_SUBPROJECT,)) endif endef @@ -285,7 +285,7 @@ endef # When entering this, the keyboard and subproject are known, so now we need # to determine which keymaps are going to get compiled define PARSE_SUBPROJECT - # If we want to compile the default subproject, then we need to + # If we want to compile the default subproject, then we need to # include the correct makefile to determine the actual name of it CURRENT_SP := $1 ifeq ($$(CURRENT_SP),) @@ -304,7 +304,7 @@ define PARSE_SUBPROJECT endif endif # The special allsp is handled later - ifneq ($$(CURRENT_SP),allsp) + ifneq ($$(CURRENT_SP),allsp) # get a list of all keymaps KEYMAPS := $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/keymaps/*/.))) ifneq ($$(CURRENT_SP),) @@ -343,7 +343,7 @@ define PARSE_SUBPROJECT endif endef -# If we want to parse all subprojects, but the keyboard doesn't have any, +# If we want to parse all subprojects, but the keyboard doesn't have any, # then use defaultsp instead define PARSE_ALL_SUBPROJECTS ifeq ($$(SUBPROJECTS),) @@ -448,7 +448,7 @@ endef # 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 overriden by specifying silent=false # from the command line define SET_SILENT_MODE ifdef SUB_IS_SILENT @@ -481,11 +481,12 @@ endef # Allow specifying just the subproject, in the keyboard directory, which will compile all keymaps SUBPROJECTS := $(notdir $(patsubst %/Makefile,%,$(wildcard ./*/Makefile))) .PHONY: $(SUBPROJECTS) -$(SUBPROJECTS): %: %-allkm +$(SUBPROJECTS): %: %-allkm # Let's match everything, we handle all the rule parsing ourselves .PHONY: % -%: +ifndef SKIP_GIT +%: # 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; # Check if the submodules are dirty, and display a warning if they are @@ -505,8 +506,24 @@ $(SUBPROJECTS): %: %-allkm # But we return the error code at the end, to trigger travis failures $(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND)) if [ -f $(ERROR_FILE) ]; then printf "$(MSG_ERRORS)" & exit 1; fi; - $(foreach TEST,$(TESTS),$(RUN_TEST)) + $(foreach TEST,$(TESTS),$(RUN_TEST)) + if [ -f $(ERROR_FILE) ]; then printf "$(MSG_ERRORS)" & exit 1; fi; +else +%: + # 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; + rm -f $(ERROR_FILE) > /dev/null 2>&1 + $(eval $(call PARSE_RULE,$@)) + $(eval $(call SET_SILENT_MODE)) + # Run all the commands in the same shell, notice the + at the first line + # it has to be there to allow parallel execution of the submake + # This always tries to compile everything, even if error occurs in the middle + # But we return the error code at the end, to trigger travis failures + $(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND)) + if [ -f $(ERROR_FILE) ]; then printf "$(MSG_ERRORS)" & exit 1; fi; + $(foreach TEST,$(TESTS),$(RUN_TEST)) if [ -f $(ERROR_FILE) ]; then printf "$(MSG_ERRORS)" & exit 1; fi; +endif # All should compile everything .PHONY: all @@ -526,7 +543,11 @@ test: test-all test-clean: test-all-clean # Generate the version.h file -GIT_VERSION := $(shell git describe --abbrev=6 --dirty --always --tags 2>/dev/null || date +"%Y-%m-%d-%H:%M:%S") +ifndef SKIP_GIT + GIT_VERSION := $(shell git describe --abbrev=6 --dirty --always --tags 2>/dev/null || date +"%Y-%m-%d-%H:%M:%S") +else + GIT_VERSION := NA +endif BUILD_DATE := $(shell date +"%Y-%m-%d-%H:%M:%S") $(shell echo '#define QMK_VERSION "$(GIT_VERSION)"' > $(ROOT_DIR)/quantum/version.h) $(shell echo '#define QMK_BUILDDATE "$(BUILD_DATE)"' >> $(ROOT_DIR)/quantum/version.h) diff --git a/keyboards/ergodox/keymaps/dvorak_plover/README.md b/keyboards/ergodox/keymaps/dvorak_plover/README.md new file mode 100644 index 0000000000..c8287b0195 --- /dev/null +++ b/keyboards/ergodox/keymaps/dvorak_plover/README.md @@ -0,0 +1,14 @@ +Dvorak support, plover support, gaming support + +I'm used to the Kinesis, so originally I was just going to patch up +the thumb keys to be more familiar. But the ergodox is really well +suited to NKRO support in Plover, so I added a layer for that, and +then I remembered that dvorak can be really annoying for video +games (try to reach WASD), so I added a layer for that. + +The result is probably a bit idiosyncratic, but it works for me. + +(I also don't have any press/hold distinction keys, because that +confuses my fuzzy little brain.) + +Contributed by seebs (seebs@seebs.net) diff --git a/keyboards/ergodox/keymaps/dvorak_plover/keymap.c b/keyboards/ergodox/keymaps/dvorak_plover/keymap.c new file mode 100644 index 0000000000..d0505609d7 --- /dev/null +++ b/keyboards/ergodox/keymaps/dvorak_plover/keymap.c @@ -0,0 +1,230 @@ +#include "ergodox.h" +#include "debug.h" +#include "action_layer.h" + +#define BASE 0 // default layer +#define SYMB 1 // symbols +#define PLVR 2 // media keys +#define QWRT 3 // qwerty layer for gaming + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | = | 1 | 2 | 3 | 4 | 5 | Esc | | Esc | 6 | 7 | 8 | 9 | 0 | \ | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | ' | , | . | P | Y | L1 | | L2 | F | G | C | R | L | / | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | LGui | A | O | E | U | I |------| |------| D | H | T | N | S | - | + * |--------+------+------+------+------+------| Esc | | L3 |------+------+------+------+------+--------| + * | LShift | ; | Q | J | K | X | | | | B | M | W | V | Z | RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |Lalt | Grv | | Left | Right| | Up | Down | [ | ] | RAlt | + * `----------------------------------' `----------------------------------' + * ,-------------. ,---------------. + * | LCtrl| Alt | | LGui | RCtrl | + * ,------|------|------| |------+--------+------. + * | | | Home | | PgUp | | | + * |Backsp|Delete|------| |------| Enter |Space | + * | ace| | End | | PgDn | | | + * `--------------------' `----------------------' + */ +// If it accepts an argument (i.e, is a function), it doesn't need KC_. +// Otherwise, it needs KC_* +[BASE] = KEYMAP( // layer 0 : default + // left hand + KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC, + KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, MO(SYMB), + KC_LGUI, KC_A, KC_O, KC_E, KC_U, KC_I, + KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_ESC, + KC_LALT, KC_GRV, KC_ESC, KC_LEFT,KC_RGHT, + KC_LCTL, KC_LALT, + KC_HOME, + KC_BSPC,KC_DEL,KC_END, + // right hand + KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS, + TG(PLVR), KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, + KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, + TG(QWRT),KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, + KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_RALT, + KC_LGUI, KC_RCTL, + KC_PGUP, + KC_PGDN,KC_ENT, KC_SPC + ), +/* Keymap 1: Symbol Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | ! | @ | { | } | | | | | | Up | KP7 | KP8 | KP9 | KP* | F12 | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | # | $ | ( | ) | ` |------| |------| Down | KP4 | KP5 | KP6 | KP+ | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | % | ^ | [ | ] | ~ | | | | & | KP1 | KP2 | KP3 | KP/ | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | KP. | KP0 | KP= | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// SYMBOLS +[SYMB] = KEYMAP( + // left hand + KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, + KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS, + 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_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_UP, KC_P7, KC_P8, KC_P9, KC_PAST, KC_F12, + KC_DOWN, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_TRNS, + KC_TRNS, KC_AMPR, KC_P1, KC_P2, KC_P3, KC_PSLS, KC_TRNS, + KC_TRNS,KC_PDOT, KC_P0, KC_PEQL, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +/* Keymap 2: Steno for Plover from https://github.com/shayneholmes/tmk_keyboard/commit/11290f8489013018f778627db725160c745e75bd + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | 1 | 2 | 3 | 4 | 5 | | | L2 | 6 | 7 | 8 | 9 | 0 | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | q | w | e | r | t |------| |------| y | u | i | o | p | [ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | a | s | d | f | g | | | | h | j | k | l | ; | ' | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | c | v |------| |------| n | m | + * | | | | | | | | + * `--------------------' `--------------------' + */ + +[PLVR] = KEYMAP( // layout: layer 2: Steno for Plover + // left hand + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS, + KC_NO, KC_Q, KC_W, KC_E, KC_R, KC_T, + KC_NO, KC_A, KC_S, KC_D, KC_F, KC_G, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_FN4, KC_NO, + KC_NO, + KC_C, KC_V, KC_NO, + // right hand + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, + TG(2), KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS, + KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, + KC_NO, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_NO, KC_N, KC_M +), +/* Keymap 3: qwerty-ish + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | = | 1 | 2 | 3 | 4 | 5 | Esc | | Esc | 6 | 7 | 8 | 9 | 0 | - | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | E | R | T | | | | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | LGui | A | S | D | F | G |------| |------| H | J | K | L | ; | LGui | + * |--------+------+------+------+------+------| Spc | | L3 |------+------+------+------+------+--------| + * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | Lalt | Grv | '" | Left | Right| | Up | Down | [ | ] | RAlt | + * `----------------------------------' `----------------------------------' + * ,-------------. ,---------------. + * | LCtrl| LAlt | | LGui | RCtrl | + * ,------|------|------| |------+--------+------. + * | | | Home | | PgUp | | | + * |Backsp|Delete|------| |------| Enter |Space | + * | ace| | End | | PgDn | | | + * `--------------------' `----------------------' + */ +[QWRT] = KEYMAP( // layer 3: qwerty for gaming + // left hand + KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), + KC_LGUI, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_SPACE, + KC_LALT, KC_GRV, KC_QUOT, KC_LEFT,KC_RGHT, + KC_LCTL, KC_LALT, + KC_HOME, + KC_BSPC,KC_DEL,KC_END, + // right hand + KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + KC_NO, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + TG(QWRT), KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, + KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_RALT, + KC_LGUI, KC_RCTL, + KC_PGUP, + KC_PGDN,KC_ENT, KC_SPC + ), +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols) +}; + +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) { + // TODO: Make this relevant to the ErgoDox EZ. + case 1: + ergodox_right_led_1_on(); + break; + case 2: + ergodox_right_led_2_on(); + break; + case 3: + ergodox_right_led_3_on(); + break; + default: + // none + break; + } + +}; diff --git a/keyboards/ergodox/keymaps/sethbc/Makefile b/keyboards/ergodox/keymaps/sethbc/Makefile index 8c4ff87845..457a3d01d4 100644 --- a/keyboards/ergodox/keymaps/sethbc/Makefile +++ b/keyboards/ergodox/keymaps/sethbc/Makefile @@ -1,14 +1,3 @@ -BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) -EXTRAKEY_ENABLE = yes # Audio control and System control(+450) -CONSOLE_ENABLE = no # Console for debug(+400) -COMMAND_ENABLE = no # Commands for debug and configuration -CUSTOM_MATRIX = yes # Custom matrix file for the ErgoDox EZ -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 -MIDI_ENABLE = no # MIDI controls -UNICODE_ENABLE = yes # Unicode - ifndef QUANTUM_DIR include ../../../../Makefile endif diff --git a/keyboards/ergodox/keymaps/sethbc/keymap.c b/keyboards/ergodox/keymaps/sethbc/keymap.c index 6846c4d529..8816ad63bb 100644 --- a/keyboards/ergodox/keymaps/sethbc/keymap.c +++ b/keyboards/ergodox/keymaps/sethbc/keymap.c @@ -15,7 +15,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LGUI, KC_GRV, KC_BSLS, KC_LEFT, KC_RGHT, KC_LCTL, KC_LALT, KC_HOME, - KC_SPC, KC_BSPC, KC_END, + KC_BSPC, KC_DEL, KC_END, // right hand MO(FN2), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_LBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_RBRC, diff --git a/keyboards/ergodox/keymaps/sethbc/readme.md b/keyboards/ergodox/keymaps/sethbc/readme.md index 510b2f99c8..57b5d0ec7c 100644 --- a/keyboards/ergodox/keymaps/sethbc/readme.md +++ b/keyboards/ergodox/keymaps/sethbc/readme.md @@ -1,3 +1,4 @@ # sethbc's Ergodox EZ keymap -Largely based on the Ergodox Infinity default keymap +Largely based on the Ergodox Infinity default keymap, but layer locking has been +removed in favor of momentary layer activation diff --git a/keyboards/ergodox/keymaps/videck/Makefile b/keyboards/ergodox/keymaps/videck/Makefile new file mode 100644 index 0000000000..5c7d21f2cc --- /dev/null +++ b/keyboards/ergodox/keymaps/videck/Makefile @@ -0,0 +1,19 @@ +AUDIO_ENABLE:=no +BACKLIGHT_ENABLE:=no +BLUETOOTH_ENABLE:=no +BOOTMAGIC_ENABLE:=no +COMMAND_ENABLE:=no +CONSOLE_ENABLE:=no +EXTRAKEY_ENABLE:=yes +MIDI_ENABLE:=no +MOUSEKEY_ENABLE:=yes +NKRO_ENABLE:=no +RGBLIGHT_ENABLE:=no +SLEEP_LED_ENABLE:=no +TAP_DANCE_ENABLE:=yes +UNICODEMAP_ENABLE:=no +UNICODE_ENABLE:=no + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/ergodox/keymaps/videck/config.h b/keyboards/ergodox/keymaps/videck/config.h new file mode 100644 index 0000000000..d89aabe779 --- /dev/null +++ b/keyboards/ergodox/keymaps/videck/config.h @@ -0,0 +1,13 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +#ifndef NO_DEBUG + #define NO_DEBUG +#endif +#ifndef NO_PRINT + #define NO_PRINT +#endif + +#endif diff --git a/keyboards/ergodox/keymaps/videck/keymap.c b/keyboards/ergodox/keymaps/videck/keymap.c new file mode 100644 index 0000000000..7bd6274e94 --- /dev/null +++ b/keyboards/ergodox/keymaps/videck/keymap.c @@ -0,0 +1,179 @@ +#include <stdbool.h> + +#include "ergodox.h" +#include "action_layer.h" + +enum { + BASE = 0, // Default layer + ARROWS = 1, // Arrows and Fx keys layer + MOUSE = 2, // Mouse movement and buttons layer + PARENS = 3, // Parenthesis easy access layer + + TD_L = 0, // Tap dance index for left shift + TD_R = 1 // Tap dance index for right shift +}; + +// See the videck.png image for a visualization of the layout. +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [BASE] = KEYMAP( + // left hand + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_HOME, + KC_EQL, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_END, + MO(PARENS), KC_A, KC_S, KC_D, KC_F, KC_G, + TD(TD_L), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_BSPC, + KC_LCTL, KC_LALT, KC_VOLD, KC_VOLU, KC_MUTE, + KC_ESC, KC_LGUI, + TG(MOUSE), + KC_SPC, KC_TAB, TG(ARROWS), + // right hand + KC_PGUP, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + KC_PGDN, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_DELT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, TD(TD_R), + KC_LBRC, KC_RBRC, KC_EQL, KC_RALT, KC_RCTL, + KC_APP, KC_ESC, + KC_INS, + KC_SLCK, KC_ENT, KC_SPC + ), + [ARROWS] = KEYMAP( + // left hand + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_NO, + KC_TRNS, KC_TRNS, KC_TRNS, + // right hand + KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F12, + KC_LEFT, KC_DOWN, KC_UP, 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 + ), + [MOUSE] = KEYMAP( + // left hand + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_BTN3, KC_TRNS, + KC_TRNS, + KC_BTN1, KC_BTN2, KC_NO, + // right hand + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_MS_L, KC_MS_D, KC_MS_U, 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_TRNS, KC_TRNS + ), + [PARENS] = KEYMAP( + // left hand + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_NO, + KC_TRNS, KC_TRNS, KC_NO, + // right hand + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LCBR, KC_RCBR, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_LPRN, KC_RPRN, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS + ) +}; + +typedef void (*videck_tap_dance_trigger_t) (const uint16_t kc); + +typedef struct +{ + uint16_t kc1; + uint16_t kc2; + videck_tap_dance_trigger_t trigger; +} videck_tap_dance_tuple_t; + +static void videck_tap_dance_finished (qk_tap_dance_state_t *state, void *user_data) { + videck_tap_dance_tuple_t *const tuple = (videck_tap_dance_tuple_t *)user_data; + + if (state->count == 1) { + register_code16 (tuple->kc1); + } else if (state->count == 2) { + register_code16 (tuple->kc2); + } +} + +static void videck_tap_dance_reset (qk_tap_dance_state_t *state, void *user_data) { + videck_tap_dance_tuple_t *const tuple = (videck_tap_dance_tuple_t *)user_data; + + if (state->count == 1) { + unregister_code16 (tuple->kc1); + } else if (state->count == 2) { + unregister_code16 (tuple->kc2); + tuple->trigger(tuple->kc2); + } +} + +static bool caps_lock_is_on; + +// Toggles caps lock status. +static void videck_caps_trigger (const uint16_t kc) { + caps_lock_is_on ^= true; +} + +#define ACTION_TAP_DANCE_DOUBLE_TRIGGER(kc1, kc2, double_trigger) { \ + .fn = { NULL, videck_tap_dance_finished, videck_tap_dance_reset }, \ + .user_data = (void *)&((videck_tap_dance_tuple_t) { kc1, kc2, double_trigger }), \ + } + +qk_tap_dance_action_t tap_dance_actions[] = { + [TD_L] = ACTION_TAP_DANCE_DOUBLE_TRIGGER(KC_LSFT, KC_CAPS, videck_caps_trigger), + [TD_R] = ACTION_TAP_DANCE_DOUBLE_TRIGGER(KC_RSFT, KC_CAPS, videck_caps_trigger) +}; + +// Runs just one time when the keyboard initializes. +void matrix_init_user(void) { + ergodox_led_all_set(LED_BRIGHTNESS_LO); + caps_lock_is_on = false; +}; + +static void indicate_using_led(const uint8_t led, const bool enabled) { + if (enabled) { + ergodox_right_led_on(led); + } else { + ergodox_right_led_off(led); + } +} + +static inline void indicate_caps_lock_state(const bool enabled) { + indicate_using_led(1, enabled); +} + +static inline void indicate_arrows_layer_state(const bool enabled) { + indicate_using_led(2, enabled); +} + +static inline void indicate_mouse_layer_state(const bool enabled) { + indicate_using_led(3, enabled); +} + +// Runs constantly in the background, in a loop. +void matrix_scan_user(void) { + // Check if we have shift locked. + indicate_caps_lock_state(caps_lock_is_on); + indicate_arrows_layer_state(IS_LAYER_ON(ARROWS)); + indicate_mouse_layer_state(IS_LAYER_ON(MOUSE)); +}; diff --git a/keyboards/ergodox/keymaps/videck/readme.md b/keyboards/ergodox/keymaps/videck/readme.md new file mode 100644 index 0000000000..759e81bac5 --- /dev/null +++ b/keyboards/ergodox/keymaps/videck/readme.md @@ -0,0 +1,24 @@ +ViDeck keymap for ErgoDox +========================= + +This is a QWERTY layout based on the US layout, where Vi functionality has been +especially considered. + +# Features +* Mouse movements using the Vi movement keys. +* Vi movement keys doubling as arrow keys. +* Shift lock using double tap. +* A coder's modifier key for easy input of parenthesis. +* Acess to the escape key using either thumb. +* Reasonably accessible Scroll Lock key (useful if you, like me, want to switch + to a non-US layout once in a while in X). + +# Missing keys +* Caps Lock (shift lock is used instead). +* Pause/Break. +* Print Screen. + +# LEDs +* Shift lock is indicated using first LED. +* Arrow keys layer is indicated using second LED. +* Mouse keys layer is indicated using third LED. diff --git a/keyboards/ergodox/keymaps/videck/videck.json b/keyboards/ergodox/keymaps/videck/videck.json new file mode 100644 index 0000000000..7068cf5485 --- /dev/null +++ b/keyboards/ergodox/keymaps/videck/videck.json @@ -0,0 +1,443 @@ +[ + { + "backcolor": "#333333", + "background": { + "name": "PBT Black", + "style": "background-image: url('/bg/plastic/pbt-black.png');" + }, + "switchMount": "cherry", + "switchBrand": "gateron", + "switchType": "KS-3-Red" + }, + [ + { |