diff --git a/keyboards/ergodox_ez/keymaps/algernon/Makefile b/keyboards/ergodox_ez/keymaps/algernon/Makefile index 3db507c8f21..cd7e9e9d2a6 100644 --- a/keyboards/ergodox_ez/keymaps/algernon/Makefile +++ b/keyboards/ergodox_ez/keymaps/algernon/Makefile @@ -2,6 +2,24 @@ BOOTMAGIC_ENABLE=no COMMAND_ENABLE=no SLEEP_LED_ENABLE=no UNICODE_ENABLE=no +FORCE_NKRO ?= yes + +ifeq (${FORCE_NKRO},yes) +OPT_DEFS += -DFORCE_NKRO +endif + +KEYMAP_VERSION = $(shell \ + if [ -d "${KEYMAP_PATH}/.git" ]; then \ + cd "${KEYMAP_PATH}" && git describe --abbrev=6 --dirty --always --tags --match 'v*' 2>/dev/null; \ + else echo QMK; fi) + +KEYMAP_BRANCH = $(shell \ + if [ -d "${KEYMAP_PATH}/.git" ]; then \ + cd "${KEYMAP_PATH}"; \ + fi; \ + git rev-parse --abbrev-ref HEAD 2>/dev/null) + +OPT_DEFS += -DKEYMAP_VERSION=\"$(KEYMAP_VERSION)\\\#$(KEYMAP_BRANCH)\" ifndef QUANTUM_DIR include ../../../../Makefile diff --git a/keyboards/ergodox_ez/keymaps/algernon/config.h b/keyboards/ergodox_ez/keymaps/algernon/config.h index 4cb878ebce5..9bb1025be5e 100644 --- a/keyboards/ergodox_ez/keymaps/algernon/config.h +++ b/keyboards/ergodox_ez/keymaps/algernon/config.h @@ -24,6 +24,4 @@ #undef LEADER_TIMEOUT #define LEADER_TIMEOUT 1000 -#define FORCE_NKRO - #endif diff --git a/keyboards/ergodox_ez/keymaps/algernon/images/base-layer.png b/keyboards/ergodox_ez/keymaps/algernon/images/base-layer.png index 1a7c0f48053..c4e298b6b75 100644 Binary files a/keyboards/ergodox_ez/keymaps/algernon/images/base-layer.png and b/keyboards/ergodox_ez/keymaps/algernon/images/base-layer.png differ diff --git a/keyboards/ergodox_ez/keymaps/algernon/images/emacs-layer.png b/keyboards/ergodox_ez/keymaps/algernon/images/emacs-layer.png deleted file mode 100644 index 1aa23cc00ef..00000000000 Binary files a/keyboards/ergodox_ez/keymaps/algernon/images/emacs-layer.png and /dev/null differ diff --git a/keyboards/ergodox_ez/keymaps/algernon/images/experimental-layer.png b/keyboards/ergodox_ez/keymaps/algernon/images/experimental-layer.png index c5e695b8c14..81155851b56 100644 Binary files a/keyboards/ergodox_ez/keymaps/algernon/images/experimental-layer.png and b/keyboards/ergodox_ez/keymaps/algernon/images/experimental-layer.png differ diff --git a/keyboards/ergodox_ez/keymaps/algernon/images/hun-layer.png b/keyboards/ergodox_ez/keymaps/algernon/images/hun-layer.png index f1e5f9ec07b..104a9544d0e 100644 Binary files a/keyboards/ergodox_ez/keymaps/algernon/images/hun-layer.png and b/keyboards/ergodox_ez/keymaps/algernon/images/hun-layer.png differ diff --git a/keyboards/ergodox_ez/keymaps/algernon/images/nav-n-media-layer.png b/keyboards/ergodox_ez/keymaps/algernon/images/nav-n-media-layer.png new file mode 100644 index 00000000000..16d29e124df Binary files /dev/null and b/keyboards/ergodox_ez/keymaps/algernon/images/nav-n-media-layer.png differ diff --git a/keyboards/ergodox_ez/keymaps/algernon/images/one-handed-layer.png b/keyboards/ergodox_ez/keymaps/algernon/images/one-handed-layer.png index 283559b3a97..698d11e5f20 100644 Binary files a/keyboards/ergodox_ez/keymaps/algernon/images/one-handed-layer.png and b/keyboards/ergodox_ez/keymaps/algernon/images/one-handed-layer.png differ diff --git a/keyboards/ergodox_ez/keymaps/algernon/images/steno-layer.png b/keyboards/ergodox_ez/keymaps/algernon/images/steno-layer.png index e747bfb414b..fe3c03c932f 100644 Binary files a/keyboards/ergodox_ez/keymaps/algernon/images/steno-layer.png and b/keyboards/ergodox_ez/keymaps/algernon/images/steno-layer.png differ diff --git a/keyboards/ergodox_ez/keymaps/algernon/keymap.c b/keyboards/ergodox_ez/keymaps/algernon/keymap.c index 4eea6874c74..fdc63a8136d 100644 --- a/keyboards/ergodox_ez/keymaps/algernon/keymap.c +++ b/keyboards/ergodox_ez/keymaps/algernon/keymap.c @@ -15,13 +15,14 @@ enum { BASE = 0, + EXPRM, + ARRW, APPSEL, HUN, - EMACS, + NMDIA, OHLFT, OHRGT, PLVR, - EXPRM }; /* Macros */ @@ -33,7 +34,6 @@ enum { A_PLVR, A_ESC, A_MPN, - A_COLN, // Function / number keys KF_1, // 1, F1 @@ -61,17 +61,6 @@ enum { A_MDL, A_MDR, - // Emacs layer keys - AE_VIS, // Visual mode - AE_PSTDEL, // Paste/Delete - AE_CPYC, // Copy/Cut - AE_EMACS, // Emacs copy & paste mode - AE_TERM, // Terminal copy & paste mode - AE_OTHER, // Other copy & paste mode - AE_INS, // Insert mode - AE_OVR, // Overwrite mode - AE_APPND, // Append - // Hungarian layer keys HU_AA, // Á HU_OO, // Ó @@ -102,11 +91,13 @@ enum { F_CTRL }; -/* States & timers */ +/* Custom keycodes */ + +enum { + CT_CLN = 0x7101 +}; -uint8_t m_visual_state = 0; -static uint16_t m_cutdel_timer; -static uint16_t m_copypaste_timer; +/* States & timers */ uint16_t gui_timer = 0; @@ -123,13 +114,8 @@ uint16_t oh_left_blink_timer = 0; uint8_t oh_right_blink = 0; uint16_t oh_right_blink_timer = 0; -enum { - CP_EMACS = 0, - CP_TERM = 1, - CP_OTHER = 2, -}; - -uint8_t cp_mode = CP_EMACS; +uint8_t ct_cln_count = 0; +uint16_t ct_cln_timer = 0; /* The Keymap */ @@ -138,18 +124,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 0: Base Layer * * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | Apps | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 | + * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | 1HND | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 | * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | Next/Prev | ' | , | . | P | Y | [ | | ] | F | G | C | R | L | = | + * | Next/Prev | ' | , | . | P | Y | [ | | ] | F | G | C | R | L | \ | * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | Tab | A | O | E | U | I |------| |------| D | H | T | N | S | \ | + * | Tab | A | O | E | U | I |------| |------| D | H | T | N | S | = | * |-----------+------+------+------+------+------| ( | | ) |------+------+------+------+------+-----------| * | Play/Pause| / | Q | J | K | X | | | | B | M | W | V | Z | Stop | * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' - * | Home | End | Down | Up | : | | - | Left | Right| PgUp | PgDn | + * | | | Left | Up | : | | - | Down | Rght | | | * `-----------------------------------' `-----------------------------------' * ,-------------. ,-------------. - * | LAlt | GUI | |EMACS | 1HND | + * | LAlt | GUI | | MDIA | ARRW | * ,------|------|------| |------+------+------. * | | | Ctrl | | LEAD | | | * |Backsp|LShift|------| |------| Enter| Space| @@ -162,25 +148,116 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ,M(A_MPN) ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC ,KC_TAB ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I ,KC_MPLY ,KC_SLSH ,KC_Q ,KC_J ,KC_K ,KC_X ,KC_LPRN -,KC_HOME ,KC_END ,KC_DOWN ,KC_UP ,M(A_COLN) +,KC_NO ,KC_NO ,KC_LEFT ,KC_UP ,CT_CLN ,F(F_ALT),F(F_GUI) ,F(F_CTRL) ,KC_BSPC,F(F_SFT),M(A_ESC) // right hand - ,KC_APP ,M(KF_6),M(KF_7),M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11 - ,KC_RBRC ,KC_F ,KC_G ,KC_C ,KC_R ,KC_L ,KC_EQL - ,KC_D ,KC_H ,KC_T ,KC_N ,KC_S ,KC_BSLS - ,KC_RPRN ,KC_B ,KC_M ,KC_W ,KC_V ,KC_Z ,KC_MSTP - ,KC_MINS,KC_LEFT,KC_RGHT ,KC_PGUP ,KC_PGDN + ,M(OH_LEFT),M(KF_6),M(KF_7),M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11 + ,KC_RBRC ,KC_F ,KC_G ,KC_C ,KC_R ,KC_L ,KC_BSLS + ,KC_D ,KC_H ,KC_T ,KC_N ,KC_S ,KC_EQL + ,KC_RPRN ,KC_B ,KC_M ,KC_W ,KC_V ,KC_Z ,KC_MSTP + ,KC_MINS,KC_DOWN,KC_RGHT ,KC_NO ,KC_NO - ,OSL(EMACS),M(OH_LEFT) + ,OSL(NMDIA),OSL(ARRW) ,KC_LEAD - ,F(F_HUN),KC_ENT ,KC_SPC + ,F(F_HUN) ,KC_ENT ,KC_SPC ), -/* Keymap 1: Application select layer +/* Keymap 1: Experimental layer + * + * ,-----------------------------------------------------. ,-----------------------------------------------------. + * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | 1HND | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 | + * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| + * | Next/Prev | ' | , | . | P | Y | [ | | ] | L | F | C | R | J | = | + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | Tab | A | O | E | U | I |------| |------| D | H | T | N | S | \ | + * |-----------+------+------+------+------+------| ( | | ) |------+------+------+------+------+-----------| + * | Play/Pause| Z | G | V | K | X | | | | Q | M | W | B | / | Stop | + * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' + * | | | Left | Up | : | | - | Down | Rght | | | + * `-----------------------------------' `-----------------------------------' + * ,-------------. ,-------------. + * | LAlt | GUI | | MDIA | ARRW | + * ,------|------|------| |------+------+------. + * | | | Ctrl | | LEAD | | | + * |Backsp|LShift|------| |------| Enter| Space| + * | | | ESC | | HUN | | | + * `--------------------' `--------------------' + */ +[EXPRM] = KEYMAP( +// left hand + KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR) +,M(A_MPN) ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC +,KC_TAB ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I +,KC_MPLY ,KC_Z ,KC_G ,KC_V ,KC_K ,KC_X ,KC_LPRN +,KC_NO ,KC_NO ,KC_LEFT ,KC_UP ,CT_CLN + + ,F(F_ALT),F(F_GUI) + ,F(F_CTRL) + ,KC_BSPC,F(F_SFT),M(A_ESC) + + // right hand + ,M(OH_LEFT),M(KF_6),M(KF_7),M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11 + ,KC_RBRC ,KC_L ,KC_F ,KC_C ,KC_R ,KC_J ,KC_BSLS + ,KC_D ,KC_H ,KC_T ,KC_N ,KC_S ,KC_EQL + ,KC_RPRN ,KC_Q ,KC_M ,KC_W ,KC_B ,KC_SLSH ,KC_MSTP + ,KC_MINS,KC_DOWN,KC_RGHT ,KC_NO ,KC_NO + + ,OSL(NMDIA),OSL(ARRW) + ,KC_LEAD + ,F(F_HUN) ,KC_ENT ,KC_SPC + ), + +/* Keymap 2: Arrow layer + * + * ,-----------------------------------------------------. ,-----------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| + * | | | | | | | | | | | | | | | | + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | | | | | | |------| |------| | | | | | | + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | | | | | | | | | | | | | | | | + * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' + * | | | Home | PgUp | | | | PgDn | End | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ + +[ARRW] = 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_HOME ,KC_PGUP ,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_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + ,KC_TRNS ,KC_PGDN ,KC_END ,KC_TRNS ,KC_TRNS + + ,KC_TRNS ,KC_TRNS + ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS + ), + +/* Keymap 3: Application select layer * * ,-----------------------------------------------------. ,-----------------------------------------------------. * | |Music |Slack |Emacs |Term |Chrome| | | | | | | | | | @@ -227,7 +304,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ), -/* Keymap 2: Hungarian Layer +/* Keymap 4: Hungarian Layer * * ,-----------------------------------------------------. ,-----------------------------------------------------. * | | | | | | | | | | | | | | | | @@ -251,73 +328,73 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [HUN] = KEYMAP( // left hand - 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 ,M(HU_OEE),KC_NO ,M(HU_UEE),KC_NO ,KC_NO ,KC_NO ,M(HU_AA),M(HU_OO) ,M(HU_EE),M(HU_UU) ,M(HU_II) -,KC_TRNS ,KC_NO ,M(HU_OE) ,KC_NO ,M(HU_UE) ,KC_NO ,KC_NO -,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_NO +,KC_NO ,KC_NO ,M(HU_OE) ,KC_NO ,M(HU_UE) ,KC_NO ,KC_NO +,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO - ,KC_TRNS ,KC_TRNS - ,KC_TRNS - ,KC_TRNS ,KC_TRNS ,KC_TRNS + ,KC_NO ,KC_NO + ,KC_NO + ,KC_NO ,KC_TRNS ,KC_TRNS // right hand ,KC_TRNS ,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 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO - ,KC_NO ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,F(F_BSE),KC_TRNS ,KC_TRNS ), -/* Keymap 3: Spacemacs layer +/* Keymap 5: Navigation & Media layer * * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | MS Slow | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 |ScrLCK| |ScrLCK| 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 | + * | MS Slow | | | | | |ScrLCK| |ScrLCK| | | | | | | * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | MS Normal | | Home | Up | PgUp | |Visual| |Scroll| $ |MsUpL | MsUp |MsUpR | R |PrintScreen| - * |-----------+------+------+------+------+------| Mode | | Up |------+------+------+------+------+-----------| - * | MS Fast |APPEND| Left | Down | Right| INS |------| |------| D |MsLeft| MsDn |MsRght| | | - * |-----------+------+------+------+------+------| Cut | |Scroll|------+------+------+------+------+-----------| - * | Play/Pause| | End | Down | PgDn | X | Copy | | Down | |MsDnL | W |MsDnR | | Stop | + * | MS Normal | | Home | Up | PgUp | | | |Scroll| |MsUpL | MsUp |MsUpR | |PrintScreen| + * |-----------+------+------+------+------+------| | | Up |------+------+------+------+------+-----------| + * | MS Fast | | Left | Down | Right| |------| |------| |MsLeft| MsDn |MsRght| | | + * |-----------+------+------+------+------+------| | |Scroll|------+------+------+------+------+-----------| + * | Play/Pause| | End | Down | PgDn | | | | Down | |MsDnL | MsDn |MsDnR | | Stop | * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' - * |EmacsM|TermM |OtherM| | | |Vol Up|Vol Dn| Mute | | | + * | | | | | | | | | | | | * `----------------------------------' `----------------------------------' * ,-------------. ,-------------. - * | Alt | GUI | | BASE | MClk | + * | Mute | VlUp | | BASE | MClk | * ,------|------|------| |------+------+------. - * |Delete| | Ctrl | | Prev |Left |Right | - * | |LShift|------| |------| Click| Click| - * |Paste | | ESC | | Next | | | + * | | | VlDn | | Prev |Left |Right | + * | SPC | Enter|------| |------| Click| Click| + * | | | ESC | | Next | | | * `--------------------' `--------------------' */ -[EMACS] = KEYMAP( +[NMDIA] = KEYMAP( // left hand - KC_ACL0 ,M(KF_1) ,M(KF_2) ,M(KF_3) ,M(KF_4) ,M(KF_5) ,LGUI(KC_L) -,KC_ACL1 ,KC_NO ,KC_HOME ,KC_UP ,KC_PGUP ,KC_NO ,M(AE_VIS) -,KC_ACL2 ,M(AE_APPND) ,KC_LEFT ,KC_DOWN ,KC_RIGHT,M(AE_INS) -,KC_MPLY ,KC_NO ,KC_END ,KC_DOWN ,KC_PGDN ,KC_X ,M(AE_CPYC) -,M(AE_EMACS),M(AE_TERM) ,M(AE_OTHER),KC_NO ,KC_NO - ,KC_TRNS ,KC_TRNS - ,KC_TRNS - ,M(AE_PSTDEL),KC_TRNS ,KC_TRNS + KC_ACL0 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,LGUI(KC_L) +,KC_ACL1 ,KC_NO ,KC_HOME ,KC_UP ,KC_PGUP ,KC_NO ,KC_NO +,KC_ACL2 ,KC_NO ,KC_LEFT ,KC_DOWN ,KC_RIGHT,KC_NO +,KC_MPLY ,KC_NO ,KC_END ,KC_DOWN ,KC_PGDN ,KC_NO ,KC_NO +,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO + ,KC_MUTE ,KC_VOLU + ,KC_VOLD + ,KC_SPC,KC_ENTER,M(A_ESC) // right hand - ,LGUI(KC_L),M(KF_6) ,M(KF_7) ,M(KF_8) ,M(KF_9) ,M(KF_10) ,M(KF_11) - ,KC_WH_U ,KC_DLR ,M(A_MUL),KC_MS_U ,M(A_MUR),M(AE_OVR),KC_PSCR - ,KC_D ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_NO ,KC_NO - ,KC_WH_D ,KC_NO ,M(A_MDL),KC_W ,M(A_MDR),KC_NO ,KC_MSTP - ,KC_VOLU ,KC_VOLD ,KC_MUTE ,KC_NO ,KC_NO + ,LGUI(KC_L),KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO + ,KC_WH_U ,KC_NO ,M(A_MUL),KC_MS_U ,M(A_MUR),KC_NO ,KC_PSCR + ,KC_NO ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_NO ,KC_NO + ,KC_WH_D ,KC_NO ,M(A_MDL),KC_MS_D ,M(A_MDR),KC_NO ,KC_MSTP + ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_TRNS ,KC_MS_BTN3 ,KC_MPRV ,KC_MNXT ,KC_BTN1 ,KC_BTN2 ), -/* Keymap 5: One-handed, left side +/* Keymap 6: One-handed, left side * * ,-----------------------------------------------------. * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 |A BSE| @@ -362,7 +439,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ,KC_NO ,KC_NO ,KC_NO ), -/* Keymap 6: One-handed, right side +/* Keymap 7: One-handed, right side * * ,-----------------------------------------------------. * | = F11 | 0 F10| 9 F9 | 8 F8 | 7 F7 | 6 F6 |A BSE| @@ -407,15 +484,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ,KC_NO ,KC_NO ,KC_NO ), -/* Keymap 7: Steno for Plover +/* Keymap 8: Steno for Plover * * ,--------------------------------------------------. ,--------------------------------------------------. * | | | | | | | BASE | | | | | | | | | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | # | # | # | # | # | | | | # | # | # | # | # | # | + * | | # | # | # | # | # | # | | # | # | # | # | # | # | # | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | | | T | P | H | |------| |------| | F | P | L | T | D | - * |--------+ S +------+------+------+ * | | | | * +------+------+------+------+--------| + * |--------+ S +------+------+------+ * | * | | * | * +------+------+------+------+--------| * | | | K | W | R | | | | | | R | B | G | S | Z | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' * | | | | | | | | | | | | @@ -432,9 +509,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [PLVR] = KEYMAP( // left hand KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, M(A_PLVR), -KC_NO, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, KC_NO, +KC_NO, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, KC_NO, PV_LS, PV_LT, PV_LP, PV_LH, PV_STAR, -KC_NO, PV_LS, PV_LK, PV_LW, PV_LR, PV_STAR, KC_NO, +KC_NO, PV_LS, PV_LK, PV_LW, PV_LR, PV_STAR, PV_STAR, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, @@ -442,61 +519,15 @@ 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, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, + PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_STAR, PV_RF, PV_RP, PV_RL, PV_RT, PV_RD, - KC_NO, PV_STAR, PV_RR, PV_RB, PV_RG, PV_RS, PV_RZ, - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + PV_STAR, PV_STAR, PV_RR, PV_RB, PV_RG, PV_RS, PV_RZ, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,PV_E, PV_U ), -/* Keymap 8: Experimental layer - * - * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | Apps | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 | - * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | Next/Prev | ' | , | . | P | Y | [ | | ] | Q | F | C | R | J | = | - * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | Tab | A | O | E | U | I |------| |------| D | H | T | N | S | \ | - * |-----------+------+------+------+------+------| ( | | ) |------+------+------+------+------+-----------| - * | Play/Pause| Z | K | V | G | X | | | | L | M | W | B | / | Stop | - * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' - * | Home | End | Down | Up | : | | - | Left | Right| PgUp | PgDn | - * `-----------------------------------' `-----------------------------------' - * ,-------------. ,-------------. - * | LAlt | GUI | |EMACS | 1HND | - * ,------|------|------| |------+------+------. - * | | | Ctrl | | LEAD | | | - * |Backsp|LShift|------| |------| Enter| Space| - * | | | ESC | | HUN | | | - * `--------------------' `--------------------' - */ -[EXPRM] = KEYMAP( -// left hand - KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR) -,M(A_MPN) ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC -,KC_TAB ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I -,KC_MPLY ,KC_Z ,KC_K ,KC_V ,KC_G ,KC_X ,KC_LPRN -,KC_HOME ,KC_END ,KC_DOWN ,KC_UP ,M(A_COLN) - - ,F(F_ALT),F(F_GUI) - ,F(F_CTRL) - ,KC_BSPC,F(F_SFT),M(A_ESC) - - // right hand - ,KC_APP ,M(KF_6),M(KF_7),M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11 - ,KC_RBRC ,KC_Q ,KC_F ,KC_C ,KC_R ,KC_J ,KC_EQL - ,KC_D ,KC_H ,KC_T ,KC_N ,KC_S ,KC_BSLS - ,KC_RPRN ,KC_L ,KC_M ,KC_W ,KC_B ,KC_SLSH ,KC_MSTP - ,KC_MINS,KC_LEFT,KC_RGHT ,KC_PGUP ,KC_PGDN - - ,OSL(EMACS),M(OH_LEFT) - ,KC_LEAD - ,F(F_HUN),KC_ENT ,KC_SPC - ), - - }; const uint16_t PROGMEM fn_actions[] = { @@ -616,26 +647,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) } break; - case A_COLN: - if (keyboard_report->mods & MOD_BIT(KC_LSFT) || - ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) { - int oneshot = ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out()); - - if (record->event.pressed) { - if (oneshot) - clear_oneshot_mods (); - unregister_code (KC_LSFT); - - register_code (KC_SCLN); - unregister_code (KC_SCLN); - if (!oneshot) - register_code (KC_LSFT); - } - } else { - return MACRODOWN (D(RSFT), T(SCLN), U(RSFT), END); - } - break; - case A_MPN: if (record->event.pressed) { if (keyboard_report->mods & MOD_BIT(KC_LSFT) || @@ -722,126 +733,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) mousekey_send(); break; - /* EMACS layer stuff */ - case AE_EMACS: - if (record->event.pressed) { - cp_mode = CP_EMACS; - } - break; - - case AE_TERM: - if (record->event.pressed) { - cp_mode = CP_TERM; - } - break; - - case AE_OTHER: - if (record->event.pressed) { - cp_mode = CP_OTHER; - } - break; - - case AE_VIS: - if (cp_mode == CP_EMACS && record->event.pressed) { - return MACRO(T(V), END); - } - break; - - case AE_CPYC: - if (record->event.pressed) { - m_copypaste_timer = timer_read (); - } else { - if (timer_elapsed (m_copypaste_timer) > TAPPING_TERM) { - // Long press: Cut - switch (cp_mode) { - case CP_EMACS: - return MACRO(T(X), END); - break; - case CP_TERM: - return MACRO(D(RCTRL), D(RSFT), T(X), U(RSFT), U(RCTRL), END); - break; - case CP_OTHER: - return MACRO(D(RCTRL), T(X), U(RCTRL), END); - break; - } - } else { - // Short press: Copy - switch (cp_mode) { - case CP_EMACS: - return MACRO(T(Y), END); - break; - case CP_TERM: - return MACRO(D(RCTRL), D(RSFT), T(C), U(RSFT), U(RCTRL), END); - break; - case CP_OTHER: - return MACRO(D(RCTRL), T(C), U(RCTRL), END); - break; - } - } - } - break; - - case AE_PSTDEL: - if (record->event.pressed) { - m_cutdel_timer = timer_read (); - } else { - if (timer_elapsed (m_cutdel_timer) > TAPPING_TERM) { - // Long press: Delete - switch (cp_mode) { - case CP_EMACS: - return MACRO(T(D), END); - break; - case CP_TERM: - case CP_OTHER: - return MACRO(T(DEL), END); - break; - } - } else { - // Short press: Paste - switch (cp_mode) { - case CP_EMACS: - if (keyboard_report->mods & MOD_BIT(KC_RSFT)) { - unregister_code (KC_RSFT); - return MACRO(U(RSFT), T(RBRC), T(P), D(RSFT), END); - } - else - return MACRO(T(P), END); - break; - case CP_TERM: - return MACRO(D(RCTRL), D(RSFT), T(V), U(RSFT), U(RCTRL), END); - break; - case CP_OTHER: - return MACRO(D(RCTRL), T(V), U(RCTRL), END); - break; - } - } - } - break; - - case AE_INS: - if (record->event.pressed) { - return MACRO(T(I), END); - } else { - layer_clear(); - } - break; - - case AE_OVR: - if (record->event.pressed) { - return MACRO(T(R), END); - } else { - layer_clear(); - } - break; - - case AE_APPND: - if (record->event.pressed) { - return MACRO(T(A), END); - } else { - layer_clear(); - } - break; - /* Plover base */ case A_PLVR: toggle_steno(record->event.pressed); @@ -872,7 +763,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) break; case APP_SLK: - return MACRODOWN(T(S), T(C), T(U), T(D), T(C), T(L), T(O), T(U), T(D), T(ENT), END); + return MACRODOWN(T(S), T(L), T(A), T(C), T(K), T(ENT), END); case APP_EMCS: return MACRODOWN(T(E), T(M), T(A), T(C), T(S), T(ENT), END); @@ -1000,6 +891,21 @@ void matrix_scan_user(void) { if (gui_timer && timer_elapsed (gui_timer) > TAPPING_TERM) unregister_code (KC_LGUI); + if (ct_cln_timer && timer_elapsed (ct_cln_timer) > TAPPING_TERM) { + if (ct_cln_count == 1) { + register_code (KC_RSFT); + register_code (KC_SCLN); + unregister_code (KC_SCLN); + unregister_code (KC_RSFT); + } else if (ct_cln_count == 2) { + register_code (KC_SCLN); + unregister_code (KC_SCLN); + } + + ct_cln_count = 0; + ct_cln_timer = 0; + } + if (layer != OHLFT) oh_left_blink = 0; if (layer != OHRGT) @@ -1008,7 +914,7 @@ void matrix_scan_user(void) { if (layer == HUN) { ergodox_right_led_2_on(); ergodox_right_led_3_on(); - } else if (layer == EMACS) { + } else if (layer == NMDIA) { ergodox_right_led_1_on(); ergodox_right_led_2_on(); } else if (layer == PLVR) { @@ -1055,7 +961,7 @@ void matrix_scan_user(void) { ergodox_right_led_1_on (); } else { ergodox_right_led_1_set (LED_BRIGHTNESS_LO); - if (layer != OHLFT && layer != EMACS && layer != PLVR && layer != EXPRM) + if (layer != OHLFT && layer != NMDIA && layer != PLVR && layer != EXPRM) ergodox_right_led_1_off (); } @@ -1065,7 +971,7 @@ void matrix_scan_user(void) { ergodox_right_led_2_on (); } else { ergodox_right_led_2_set (LED_BRIGHTNESS_LO); - if (layer != OHRGT && layer != HUN && layer != OHLFT && layer != EMACS && layer != PLVR && layer != EXPRM) + if (layer != OHRGT && layer != HUN && layer != OHLFT && layer != NMDIA && layer != PLVR && layer != EXPRM) ergodox_right_led_2_off (); } @@ -1087,11 +993,9 @@ void matrix_scan_user(void) { ang_do_unicode (); } -#ifdef QMK_VERSION SEQ_ONE_KEY (KC_V) { - SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); + SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ (" QMK_VERSION "/" KEYMAP_VERSION ")"); } -#endif SEQ_ONE_KEY (KC_L) { /* λ */ @@ -1165,8 +1069,36 @@ void matrix_scan_user(void) { ergodox_right_led_2_off (); _delay_ms (100); ergodox_right_led_3_off (); - } } } } + +bool process_record_user (uint16_t keycode, keyrecord_t *record) { + switch(keycode) { + case CT_CLN: + if (record->event.pressed) { + ct_cln_count++; + ct_cln_timer = timer_read (); + } else { + } + return false; + break; + + default: + if (ct_cln_count == 1) { + register_code (KC_RSFT); + register_code (KC_SCLN); + unregister_code (KC_SCLN); + unregister_code (KC_RSFT); + } else if (ct_cln_count == 2) { + register_code (KC_SCLN); + unregister_code (KC_SCLN); + } + ct_cln_count = 0; + ct_cln_timer = 0; + break; + } + + return true; +} diff --git a/keyboards/ergodox_ez/keymaps/algernon/readme.md b/keyboards/ergodox_ez/keymaps/algernon/readme.md index c66b33f3d95..6b7e8fa2e12 100644 --- a/keyboards/ergodox_ez/keymaps/algernon/readme.md +++ b/keyboards/ergodox_ez/keymaps/algernon/readme.md @@ -10,13 +10,29 @@ history of the layout, see my Some of the things in the layout only work when one uses Spacemacs and GNOME under Linux. Your mileage may vary. +## Table of Contents + +* [Layouts](#layouts) + - [Base layer](#base-layer) + - [Experimental layer](#experimental-layer) + - [Hungarian layer](#hungarian-layer) + - [Navigation and media layer](#navigation-and-media-layer) + - [One-handed layer](#one-handed-layer) + - [Steno layer](#steno-layer) + - [LED states](#led-states) +* [Building](#building) + - [Using on Windows](#using-on-windows) +* [Changelog](#changelog) +* [License](#license) + +# Layouts + ## Base layer [![Base layer](images/base-layer.png)](http://www.keyboard-layout-editor.com/#/gists/28f7eb305fdbff943613e1dc7aa9e82b) -At its core, this is a Dvorak layout, with some minor changes (for example, `-` -being on the left half, and on the innermost key of the bottom row on the -right). The more interesting parts are how certain keys behave: +At its core, this is a Dvorak layout, with some minor changes. The more +interesting parts are how certain keys behave: * The keys on the number row double as function keys, when held for a bit longer than an usual tap. This allows me to use the function keys without having to @@ -33,9 +49,13 @@ right). The more interesting parts are how certain keys behave: normal layout. * The `ESC` key also doubles as a one-shot cancel key: if tapped while any of the one-shot modifiers are in-flight (as in, single-tapped, and not expired - yet), it cancels all one-shot modifiers. Otherwise it sends the usual keycode. -* The **Emacs** and **Hun** layer keys are one-shot, the **1Hand** and **STENO** - keys are toggles. + yet), it cancels all one-shot modifiers. It also cancels the **Hun** layer, if + active. Otherwise it sends the usual keycode. +* The **Media**, **Arrow**, and **Hun** layer keys are one-shot, the **1Hand** + and **STENO** keys are toggles. +* Toggling the **Arrow** layer toggles between the cursor arrows and the paging + keys on the bottom row. +* Tapping the `:` key once yields `:`, tapping it twice yields `;`. * The **Lead** key allows me to type in a sequence of keys, and trigger some actions: - `LEAD u` enters unicode input mode, by sending the GTK+ key sequence that @@ -45,8 +65,19 @@ right). The more interesting parts are how certain keys behave: - `LEAD y` types `\o/`. - `LEAD w m` maximises the currently focused window. - `LEAD e` makes the [experimental layer](#experimental-layer) the default. - - `LEAD v` prints the firmware version, the keyboard and the keymap, if - compiled with a QMK version that has these available. + - `LEAD v` prints the firmware version, the keyboard and the keymap. + +## Experimental layer + +[![Experimental layer](images/experimental-layer.png)](http://www.keyboard-layout-editor.com/#/gists/6ff50bf71248e05aab5b3fec4fae3d08) + +While using the standard Dvorak layout, I encountered a number of +inconveniences, and on this layer, I am playing with ideas to make the layout +feel better. Initially, it was based on [Capewell-Dvorak][cpd], but that too, +had shortcomings I was not happy with. So now this is something inbetween, with +own observations thrown in. How it works out in the long run remains to be seen. + + [cpd]: http://www.michaelcapewell.com/projects/keyboard/layout_capewell-dvorak.htm ## Hungarian layer @@ -57,32 +88,12 @@ variant. For some, which can have other diatribes, the long one is on top, short's on bottom. Tapping any of the accented characters takes us back to the base layer. -## Emacs layer - -[![Emacs layer](images/emacs-layer.png)](http://www.keyboard-layout-editor.com/#/gists/c59c453f9fe1a3238ba1494e7e5c6892) - -This layer is primarily for navigating text - and for some mousing and other -things, because there was space. Most of the keys should be pretty -self-explanatory, except for a few: - -* There are three keys on the bottom row of the left side, that change how some - of the other keys - explained just below - work. The keys are for *Emacs - mode* (the default), *Terminal mode*, and *Traditional mode*, respectively. -* The *Visual mode* key (the top big key on the left side) sends the `v` key in - *Emacs mode*, to enter Visual mode in Spacemacs. In all other modes, it is a - no-op. -* The *Copy/Cut* key (the bottom big key on the left side) sends the copy - command on tap, the cut one when held for longer than a normal tap. The **copy - command** is `y` in *Emacs mode*, `Ctrl-Shift-c` in *Terminal mode*, and - `Ctrl-c` in *Traditional mode*. The **cut command** is `x` in *Emacs mode*, - `Ctrl-Shift-x` in *Terminal Mode* and `Ctrl-x` in *Traditional mode*. -* The *Paste/Delete* key (the leftmost key on the left thumb cluster) sends the - paste command on tap, the delete one when held longer than a normal tap. The - **paste command** is `p` in *Emacs mode*, `Ctrl-Shift-v` in *Terminal mode*, - and `Ctrl-v` in *Traditional mode*. The **delete command** is `d` in *Emacs - mode*, and `DEL` in the other two. -* The `A`, `I` and `R` keys will - after sending themselves - clear the layer - back to the base layer. This allows a quick escape from the layer. +## Navigation and media layer + +[![Navigation and media layer](images/nav-n-media-layer.png)](http://www.keyboard-layout-editor.com/#/gists/c59c453f9fe1a3238ba1494e7e5c6892) + +This layer is primarily for navigating with the cursor or the mouse, and some +media things. ## One-handed layer @@ -113,33 +124,50 @@ This is to be used with [Plover](http://www.openstenoproject.org/plover/), nothing really fancy here. The **STENO** key toggles the layer on and off, and sends the toggle command to Plover too. -## Experimental layer - -[![Experimental layer](images/experimental-layer.png)](http://www.keyboard-layout-editor.com/#/gists/6ff50bf71248e05aab5b3fec4fae3d08) - -While using the standard Dvorak layout, I encountered a number of -inconveniences, and on this layer, I am playing with ideas to make the layout -feel better. Initially, it was based on [Capewell-Dvorak][cpd], but that too, -had shortcomings I was not happy with. So now this is something inbetween, with -own observations thrown in. How it works out in the long run remains to be seen. - - [cpd]: http://www.michaelcapewell.com/projects/keyboard/layout_capewell-dvorak.htm +## LED states + +The primary purpose of the LEDs is to show the modifier status, a secondary, to +show which layer is active. Each modifier, `Shift`, `Alt` and `Control` each +have their designated LEDs: the *red*, *green* and *blue*, respectively. When a +modifier is in a one-shot state, the respective LED will turn on with a dimmer +light. If the modifier is toggled on, the brightness of the LED turns full. + +For the layers, the following rules apply: + +* When the [Experimental layer](#experimental-layer) is toggled on, LEDs will + light up from left to right in a sequence, then turn off. When the layer is + toggled off, the LEDs light up and turn off in the other direction. No LEDs + are on while the layer is active. +* When the [Hungarian layer](#hungarian-layer) is active, the *green* and *blue* + LEDs are on. +* When the [Navigation and media layer](#navigation-and-media-layer) is active, + the *red* and *green* ones are on. +* When the [One-handed layer](#one-handed-layer) is active, the *green* LED is + on and bright, and either the *red* or the *blue* one is going to slowly + blink, depending on the currently active side. +* For the [Steno layer](#steno-layer), all LEDs will be turned on. + +Unless noted otherwise, the layers use a dim light for the LEDs, while modifiers +use a stronger one, and modifiers override any layer preferences. For example, +when on the one-handed layer, with the left side active (*red* light blinking), +if `Shift` is on, the *red* light will be constantly on. # Building 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, or symlinked -to `keyboards/ergodox_ez/algernon`. One way to achieve that is this: +[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 [qmk]: https://github.com/jackhumbert/qmk_firmware ``` $ git clone https://github.com/jackhumbert/qmk_firmware.git -$ cd qmk_firmware/keyboards/ergodox_ez -$ git clone https://github.com/algernon/ergodox-layout.git keymaps/algernon -$ make KEYMAP=algernon +$ cd qmk_firmware +$ git clone https://github.com/algernon/ergodox-layout.git \ + keyboards/ergodox_ez/keymaps/algernon-master +$ make KEYBOARD=ergodox_ez KEYMAP=algernon-master ``` From time to time, updates may be submitted back to the QMK repository. If you @@ -147,10 +175,54 @@ are reading it there, you can build the firmware like any other firmware included with it (assuming you are in the root directory of the firmware): ``` -$ cd keyboards/ergodox_ez -$ make KEYMAP=algernon +$ make KEYBOARD=ergodox_ez KEYMAP=algernon ``` +## Using on Windows + +The keymap default to forcing NKRO, which seems to upset Windows, and except the +modifiers, none of them work. If you experience this problem, recompile the +firmware with `FORCE_NKRO=no` added to the `make` command line. + +# Changelog + +## v1.2 - 2016-06-22 + +* The forced NKRO mode can be easily toggled off at compile-time, to make the + firmware compatible with [certain operating systems](#using-on-windows). +* The `:;` key has changed behaviour: to access the `;` symbol, the key needs to + be double-tapped, instead of shifted. +* The `=` and `\` keys were swapped, `=` moved to the home row, on both the + [base](#base-layer) and the [experimental](#experimental-layer) layers. +* The arrow and navigation keys were redone, they are now more accessible, but + the navigation keys require an extra tap to access. +* The **Emacs** layer is gone, replaced by a simplified + [navigation and media](#navigation-and-media-layer) layer. +* `LEAD v` types the firmware version, and the keymap version. +* On the [experimental](#experimental-layer) layer, the `L` and `Q`, and the `K` + and `G` keys were swapped. +* The [Steno](#steno-layer) layer gained a few more `#` and `*` keys, to make it + easier on my fingers. + +## v1.1 - 2016-06-14 + +* The keyboard starts in NKRO mode, bootmagic and other things are disabled. +* A [Steno](#steno-layer) layer was added, to be used with Plover. +* An [experimental](#experimental-layer) layer was added, something halfway + between Dvorak and Capewell-Dvorak. A work in progress. +* `LEAD y` types `\o/`. +* Some keys on the [Base](#base-layer) layer have been moved around: + - `?` moved to the left pinky, left of `Q`. + - `=` shifted one row down, but `F11` stayed where it was. + - `-` on the left half was replaced by `Tab`. + - `Tab`'s original position is taken by a `Media Next`/`Media Prev` key. + - `:` now inputs `;` when shifted. +* `ESC` cancels the [Hungarian](#hungarian-layer) layer too, not just modifiers. + +## v1.0 - 2016-05-26 + +Initial version. + # License The layout, being a derivative of the original TMK firmware which is under the