2
0
Просмотр исходного кода

Merge branch 'master' of https://github.com/jackhumbert/tmk_keyboard

Jack Humbert 10 лет назад
Родитель
Сommit
623666888f

+ 1 - 1
QUICK_START.md

@@ -20,6 +20,6 @@ See [doc/keymap.md](tmk_core/doc/keymap.md).
 
 ## Flashing the firmware
 
-The "easy" way to flash the firmware is using a tool from your host OS like the Teensy programming app. [ErgoDox EZ](keyboard/ergodox_ez/README.md) gives a great example.
+The "easy" way to flash the firmware is using a tool from your host OS like the Teensy programming app. [ErgoDox EZ](keyboard/ergodox_ez/readme.md) gives a great example.
 
 If you want to program via the command line you can uncomment the ['modifyvm'] lines in the Vagrantfile to enable the USB passthrough into Linux and then program using the command line tools like dfu-util/dfu-programmer or you can install the Teensy CLI version.

+ 139 - 0
keyboard/atreus/Makefile

@@ -0,0 +1,139 @@
+#----------------------------------------------------------------------------
+# 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".
+#----------------------------------------------------------------------------
+
+# Target file name (without extension).
+TARGET = atreus
+
+
+# Directory common source filess exist
+TOP_DIR = ../..
+TMK_DIR = ../../tmk_core
+
+# Directory keyboard dependent files exist
+TARGET_DIR = .
+
+# # project specific files
+SRC = atreus.c
+
+ifdef KEYMAP
+    SRC := keymaps/keymap_$(KEYMAP).c $(SRC)
+else
+    SRC := keymaps/keymap_default.c $(SRC)
+endif
+
+CONFIG_H = config.h
+
+# 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
+# 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 - not yet supported in LUFA
+# 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
+
+
+# Optimize size but this may cause error "relocation truncated to fit"
+#EXTRALDFLAGS = -Wl,--relax
+
+# Search Path
+VPATH += $(TARGET_DIR)
+VPATH += $(TOP_DIR)
+VPATH += $(TMK_DIR)
+
+include $(TOP_DIR)/quantum/quantum.mk
+

Разница между файлами не показана из-за своего большого размера
+ 184 - 0
keyboard/atreus/README.md


+ 29 - 0
keyboard/atreus/atreus.c

@@ -0,0 +1,29 @@
+#include "atreus.h"
+
+__attribute__ ((weak))
+void * matrix_init_user(void) {
+	// leave these blank
+};
+
+__attribute__ ((weak))
+void * matrix_scan_user(void) {
+	// leave these blank
+};
+
+void * matrix_init_kb(void) {
+	// put your keyboard start-up code here
+	// runs once when the firmware starts up
+
+	if (matrix_init_user) {
+		(*matrix_init_user)();
+	}
+};
+
+void * matrix_scan_kb(void) {
+	// put your looping keyboard code here
+	// runs every cycle (a lot)
+
+	if (matrix_scan_user) {
+		(*matrix_scan_user)();
+	}
+};

+ 29 - 0
keyboard/atreus/atreus.h

@@ -0,0 +1,29 @@
+#ifndef ATREUS_H
+#define ATREUS_H
+
+#include "matrix.h"
+#include "keymap_common.h"
+#include "backlight.h"
+#include <stddef.h>
+
+// This a shortcut to help you visually see your layout.
+// The following is an example using the Planck MIT layout
+// The first section contains all of the arguements
+// The second converts the arguments into a two-dimensional array
+#define KEYMAP( \
+	k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
+	k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
+	k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
+	k30, k31, k32, k33, k34,    k35,   k37, k38, k39, k3a, k3b \
+) \
+{ \
+	{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b }, \
+	{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b }, \
+	{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \
+	{ k30, k31, k32, k33, k34, k35, k35, k37, k38, k39, k3a, k3b } \
+} 
+
+void * matrix_init_user(void);
+void * matrix_scan_user(void);
+
+#endif

+ 82 - 0
keyboard/atreus/config.h

@@ -0,0 +1,82 @@
+/*
+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    Technomancy
+#define PRODUCT         Atreus
+#define DESCRIPTION     q.m.k. keyboard firmware for Atreus
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 11
+
+// Planck PCB default pin-out
+// Change this to how you wired your keyboard
+// COLS: Left to right, ROWS: Top to bottom
+#define COLS (int []){ F6, F5, F4, B7, B6, B5, B4, B3, B2, B1, B0}
+#define ROWS (int []){ D0, D1, D2, D3 }
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+//#define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE    5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif

+ 51 - 0
keyboard/atreus/keymaps/keymap_default.c

@@ -0,0 +1,51 @@
+// this is the style you want to emulate.
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+
+#include "atreus.h"
+
+// 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 _QW 0
+#define _RS 1
+#define _LW 2
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_QW] = { /* Qwerty */
+  {KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,   KC_TRNS,  KC_Y,    KC_U,    KC_I,    KC_O,    KC_P    },
+  {KC_A,    KC_S,    KC_D,    KC_F,    KC_G,   KC_TRNS,  KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN },
+  {KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,   KC_LALT,  KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH },
+  {KC_ESC, KC_TAB, KC_LGUI,  KC_LSFT, KC_BSPC,  KC_LCTL, KC_SPC,  MO(_RS), KC_MINS, KC_QUOT, KC_ENT  }
+},
+[_RS] = { /* [> RAISE <] */
+  {KC_EXLM, KC_AT,   KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS, KC_PGUP, KC_7,    KC_8,   KC_9, KC_ASTR},
+  {KC_HASH, KC_DLR,  KC_LPRN, KC_RPRN, KC_GRV,  KC_TRNS, KC_PGDN, KC_4,    KC_5,   KC_6, KC_PLUS},
+  {KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_LALT, KC_AMPR, KC_1,    KC_2,   KC_3, KC_BSLS},
+  {TG(_LW), KC_INS,  KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_SPC,  KC_TRNS, KC_DOT, KC_0, KC_EQL}
+},
+[_LW] = { /* [> LOWER <] */
+  {KC_INS,  KC_HOME, KC_UP,   KC_END,  KC_PGUP, KC_TRNS, KC_UP,   KC_F7,   KC_F8,   KC_F9,   KC_F10},
+  {KC_DELT, KC_LEFT, KC_DOWN, KC_RGHT, KC_DOWN, KC_TRNS, KC_DOWN, KC_F4,   KC_F5,   KC_F6,   KC_F11},
+  {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LALT, KC_TRNS, KC_F1,   KC_F2,   KC_F3,   KC_F12},
+  {KC_TRNS, KC_TRNS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_SPC,  DF(_QW), KC_TRNS, KC_TRNS, RESET}
+}};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+          if (record->event.pressed) {
+            register_code(KC_RSFT);
+          } else {
+            unregister_code(KC_RSFT);
+          }
+        break;
+      }
+    return MACRO_NONE;
+};

+ 1 - 1
keyboard/ergodox_ez/Makefile

@@ -93,7 +93,7 @@ OPT_DEFS += -DBOOTLOADER_SIZE=512
 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   = no # Console for debug(+400)
+# CONSOLE_ENABLE   = yes # Console for debug(+400)
 COMMAND_ENABLE   = yes # 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

Разница между файлами не показана из-за своего большого размера
+ 1507 - 1460
keyboard/ergodox_ez/keymaps/coderkun_neo2/coderkun_neo2.hex


+ 143 - 6
keyboard/ergodox_ez/keymaps/coderkun_neo2/keymap.c

@@ -5,11 +5,14 @@
 
 // Layer names
 #define BASE 0      // default layer
-#define FMU  1      // FMU layer
+#define PMQ  1      // poor man’s QWERTZ
+#define PMN  2      // poor man’s Neo
+#define FMU  3      // FMU layer
+#define NHL  4      // Neo’s software layer 4 rebuilt in Hardware
 
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Layer 0 (default)
+/* Layer 0: default
  * ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐     ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐
  * │  TAB  │  1  │  2  │  3  │  4  │  5  │  `  │     │  ´  │  6  │  7  │  8  │  9  │  0  │ BKSPC │
  * ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤     ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤
@@ -33,7 +36,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
         KC_TAB,     KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_EQL,
         NEO_Y,      NEO_X,  NEO_V,  NEO_L,  NEO_C,  NEO_W,  KC_HOME,
         NEO_L1_L,   NEO_U,  NEO_I,  NEO_A,  NEO_E,  NEO_O,
-        KC_LSFT,    NEO_UE, NEO_OE, NEO_AE, NEO_P,  NEO_Z,  KC_TRNS,
+        KC_LSFT,    NEO_UE, NEO_OE, NEO_AE, NEO_P,  NEO_Z,  TG(PMQ),
         KC_LCTL,    KC_LALT,MO(FMU),KC_LGUI,NEO_L2_L,
                                                     KC_LEFT,    KC_UP,
                                                                 KC_MINS,
@@ -42,13 +45,95 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
         DE_ACUT,    KC_6,   KC_7,   KC_8,   KC_9,   KC_0,   KC_BSPC,
         KC_END,     NEO_K,  NEO_H,  NEO_G,  NEO_F,  NEO_Q,  NEO_SS,
                     NEO_S,  NEO_N,  NEO_R,  NEO_T,  NEO_D,  NEO_L1_R,
-        KC_TRNS,    NEO_B,  NEO_M,  KC_COMM,KC_DOT, NEO_J,  KC_RSFT,
+        TG(PMN),    NEO_B,  NEO_M,  KC_COMM,KC_DOT, NEO_J,  KC_RSFT,
                             NEO_L2_R,KC_RGUI,MO(FMU),KC_RALT,KC_RCTL,
         KC_DOWN,    KC_RGHT,
         KC_MINS,
         MEH_T(KC_NO),KC_ENT,KC_SPC
     ),
-/* Layer 1 (F-keys, Mouse and Unicode)
+
+/* Layer 1: poor man’s QWERTZ
+ * based on kaimi’s layout
+ * ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐     ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐
+ * │  TAB  │  1  │  2  │  3  │  4  │  5  │  `  │     │  ´  │  6  │  7  │  8  │  9  │  0  │ BKSPC │
+ * ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤     ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤
+ * │   C   │  P  │  T  │  F  │  K  │  L  │ HOM │     │ END │  B  │  A  │  S  │  G  │  V  │  Y    │
+ * ├───────┼─────┼─────┼─────╆─────╅─────┤  E  │     │     ├─────╆─────╅─────┼─────┼─────┼───────┤
+ * │ Mod3  │  D  │  H  │  Ö  │  O  │  I  ├─────┤     ├─────┤  U  │  -  │  Z  │  E  │  X  │ Mod3  │
+ * ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│     │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤
+ * │ LSHFT │  Ä  │  Q  │  R  │  W  │  N  │     │     │     │  J  │  M  │  ,  │  .  │  ẞ  │ Shift │
+ * └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘     └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘
+ *   │ CTL │ ALT │ MO1 │ Win │ MO4 │                             │ M04 │ Win │ MO1 │ Alt │ CTL │
+ *   └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘
+ *                                   │  ←  │  ↑  │ │  ↓  │  →  │
+ *                             ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐
+ *                             │     │     │  ─  │ │  ─  │     │     │
+ *                             │ SPC │ RTN ├─────┤ ├─────┤ RTN │ SPC │
+ *                             │     │     │ HYP │ │ MEH │     │     │
+ *                             └─────┴─────┴─────┘ └─────┴─────┴─────┘
+ */
+[PMQ] = KEYMAP(
+        // left hand
+        KC_TAB,     KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_EQL,
+        DE_C,       DE_P,   DE_T,   DE_F,   DE_K,   DE_L,   KC_HOME,
+        NEO_L1_L,   DE_D,   DE_H,   DE_OE,  DE_O,   DE_I,
+        KC_LSFT,    DE_AE,  DE_Q,   DE_R,   DE_W,   DE_N,   KC_TRNS,
+        KC_LCTL,    KC_LALT,MO(FMU),KC_LGUI,MO(NHL),
+                                                    KC_LEFT,    KC_UP,
+                                                                KC_MINS,
+                                            KC_SPC, KC_ENT,    ALL_T(KC_NO),
+        // right hand
+        DE_ACUT,    KC_6,   KC_7,   KC_8,   KC_9,   KC_0,   KC_BSPC,
+        KC_END,     DE_B,   DE_A,   DE_S,   DE_G,   DE_V,   DE_Y,
+                    DE_U,   DE_MINS,DE_Z,   DE_E,   DE_X,   NEO_L1_R,
+        KC_TRNS,    DE_J,   DE_M,   DE_COMM,DE_DOT, DE_SS,  KC_RSFT,
+                            MO(NHL),KC_RGUI,MO(FMU),KC_RALT,KC_RCTL,
+        KC_DOWN,    KC_RGHT,
+        KC_MINS,
+        MEH_T(KC_NO),KC_ENT,KC_SPC
+    ),
+
+/* Layer 2: poor man’s Neo
+ * based on kaimi’s layout
+ * ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐     ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐
+ * │  TAB  │  1  │  2  │  3  │  4  │  5  │  `  │     │  ´  │  6  │  7  │  8  │  9  │  0  │ BKSPC │
+ * ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤     ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤
+ * │   Y   │  X  │  V  │  L  │  C  │  W  │ HOM │     │ END │  K  │  H  │  G  │  F  │  Q  │  ß    │
+ * ├───────┼─────┼─────┼─────╆─────╅─────┤  E  │     │     ├─────╆─────╅─────┼─────┼─────┼───────┤
+ * │ Mod3  │  U  │  I  │  A  │  E  │  O  ├─────┤     ├─────┤  S  │  N  │  R  │  T  │  D  │ Mod3  │
+ * ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│     │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤
+ * │ LSHFT │  Ü  │  Ö  │  Ä  │  P  │  Z  │     │     │     │  B  │  M  │  ,  │  .  │  J  │ Shift │
+ * └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘     └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘
+ *   │ CTL │ ALT │ MO1 │ Win │ MO4 │                             │ M04 │ Win │ MO1 │ Alt │ CTL │
+ *   └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘
+ *                                   │  ←  │  ↑  │ │  ↓  │  →  │
+ *                             ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐
+ *                             │     │     │  ─  │ │  ─  │     │     │
+ *                             │ SPC │ RTN ├─────┤ ├─────┤ RTN │ SPC │
+ *                             │     │     │ HYP │ │ MEH │     │     │
+ *                             └─────┴─────┴─────┘ └─────┴─────┴─────┘
+ */
+[PMN] = KEYMAP(
+        KC_TAB,     KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_EQL,
+        DE_Y,       DE_X,   DE_V,   DE_L,   DE_C,   DE_W,   KC_HOME,
+        KC_NO,      DE_U,   DE_I,   DE_A,   DE_E,   DE_O,
+        KC_LSFT,    DE_UE,  DE_OE,  DE_AE,  DE_P,   DE_Z,   KC_TRNS,
+        KC_LCTL,    KC_LALT,MO(FMU),KC_LGUI,MO(NHL),
+                                                    KC_LEFT,    KC_UP,
+                                                                KC_MINS,
+                                            KC_SPC, KC_ENT,    ALL_T(KC_NO),
+        // right hand
+        DE_ACUT,    KC_6,   KC_7,   KC_8,   KC_9,   KC_0,   KC_BSPC,
+        KC_END,     DE_K,   DE_H,   DE_G,   DE_F,   DE_Q,   DE_SS,
+                    DE_S,   DE_N,   DE_R,   DE_T,   DE_D,   KC_NO,
+        KC_TRNS,    DE_B,   DE_M,   KC_COMM,KC_DOT, DE_J,   KC_RSFT,
+                            MO(NHL),KC_RGUI,MO(FMU),KC_RALT,KC_RCTL,
+        KC_DOWN,    KC_RGHT,
+        KC_MINS,
+        MEH_T(KC_NO),KC_ENT,KC_SPC
+    ),
+
+/* Layer 3: F-keys, Mouse and Unicode
  * ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐     ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐
  * │       │     │     │     │     │     │     │     │     │     │     │     │     │     │       │
  * ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤     ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤
@@ -87,10 +172,55 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
         KC_BTN2,
         KC_TRNS,    KC_TRNS,KC_TRNS
     ),
+
+/* Layer 4: Neo’s software layer 4 rebuilt in Hardware
+ * based on kaimi’s layout
+ * ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐     ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐
+ * │       │     │     │     │     │     │     │     │     │     │     │     │     │     │       │
+ * ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤     ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤
+ * │       │ PgUp│ BSpc│  ↑  │ Del │ PgDn│     │     │     │     │  7  │  8  │  9  │  +  │   −   │
+ * ├───────┼─────┼─────┼─────╆─────╅─────┤     │     │     ├─────╆─────╅─────┼─────┼─────┼───────┤
+ * │       │ Home│  ←  │  ↓  │  →  │ End ├─────┤     ├─────┤     │  4  │  5  │  6  │  ,  │   .   │
+ * ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│     │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤
+ * │       │ Esc │ Tab │ Ins │ Ret │ Undo│     │     │     │     │  1  │  2  │  3  │     │       │
+ * └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘     └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘
+ *   │     │     │(MO1)│     │(MO4)│                             │(MO4)│     │(MO1)│     │     │
+ *   └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘
+ *                                   │     │     │ │     │     │
+ *                             ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐
+ *                             │     │     │     │ │     │     │     │
+ *                             │     │     ├─────┤ ├─────┤     │     │
+ *                             │     │     │     │ │     │     │     │
+ *                             └─────┴─────┴─────┘ └─────┴─────┴─────┘
+ */
+[NHL] = KEYMAP(
+        // left hand
+        KC_NO,      KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,
+        KC_NO,      KC_PGUP,KC_BSPC,KC_UP,  KC_DELT,KC_PGDN,KC_NO,
+        KC_NO,      KC_HOME,KC_LEFT,KC_DOWN,KC_RGHT,KC_END,
+        KC_NO,      KC_ESC, KC_TAB, KC_INS, KC_ENT, KC_UNDO,KC_TRNS,
+        KC_NO,      KC_NO,  KC_TRNS,KC_NO,  KC_TRNS,
+                                                    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_7,   KC_8,   KC_9,   DE_PLUS,DE_MINS,
+                    KC_NO,  KC_4,   KC_5,   KC_6,   KC_COMM,KC_DOT,
+        KC_TRNS,    KC_NO,  KC_1,   KC_2,   KC_3,   KC_NO,  KC_NO,
+                            KC_TRNS,KC_NO,  KC_TRNS,KC_NO,  KC_NO,
+        KC_NO,      KC_NO,
+        KC_NO,
+        KC_NO,      KC_NO,  KC_NO
+    ),
 };
 
 const uint16_t PROGMEM fn_actions[] = {
-    [1] = ACTION_LAYER_TAP_TOGGLE(FMU)
+    [BASE] = ACTION_FUNCTION(BASE),
+    [PMQ]  = ACTION_FUNCTION(PMQ),
+    [PMN]  = ACTION_FUNCTION(PMN),
+    [FMU]  = ACTION_LAYER_TAP_TOGGLE(FMU),
+    [NHL]  = ACTION_LAYER_TAP_TOGGLE(NHL)
 };
 
 
@@ -129,6 +259,13 @@ void * matrix_scan_user(void)
     switch (layer) {
         case FMU:
             ergodox_right_led_1_on();
+        break;
+        case PMQ:
+            ergodox_right_led_2_on();
+        break;
+        case PMN:
+            ergodox_right_led_3_on();
+        break;
         default:
             ergodox_board_led_off();
         break;

+ 31 - 0
keyboard/ergodox_ez/keymaps/coderkun_neo2/readme.md

@@ -0,0 +1,31 @@
+# coderkun’s Neo2 layout for the ErgoDox EZ
+
+The idea of this layout is to use it for [Neo2](http://www.neo-layout.org) but also provide layers to use QWERTZ with activated Neo driver and to use (basic) Neo when no driver is available (standard QWERTZ driver is active) (e. g. on other computers, in virtual machines) and to make heavily use of thumb keys.
+
+The main goal of the default layer is to provide a complete symmetric layout with each modifier equally placed for both hands (mirror, of course).
+
+It also features a layer for additional keys like F-keys (F1 – F12), some mouse keys and (hopefully in the near future) some useful Unicode symbols.
+
+
+## Layers
+
+0. Default layer for Neo2
+1. Poor man’s QWERTZ
+2. Poor man’s Neo
+3. F-keys, mouse keys und Unicode symbols
+4. Neo’s software layers 4 rebuilt in hardware
+
+
+## Build
+
+1. Enable Unicode in Makefile
+
+    ```
+    UNICODE_ENABLE   = yes
+    ```
+2. Build as usual
+
+    ```
+    make clean
+    make KEYMAP=coderkun_neo2
+    ```

Разница между файлами не показана из-за своего большого размера
+ 1285 - 1285
keyboard/ergodox_ez/keymaps/default/default.hex


Разница между файлами не показана из-за своего большого размера
+ 1101 - 1451
keyboard/ergodox_ez/keymaps/erez_experimental/erez_experimental.hex


+ 27 - 26
keyboard/ergodox_ez/keymaps/erez_experimental/keymap.c

@@ -1,3 +1,4 @@
+#include <keymap_extras/keymap_colemak.h>
 #include "ergodox_ez.h"
 #include "debug.h"
 #include "action_layer.h"
@@ -38,14 +39,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 // Otherwise, it needs KC_*
 [BASE] = KEYMAP(  // layer 0 : default
         // left hand
-        KC_EQL,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_LEFT,
-        KC_DELT,        KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   TG(SYMB),
-        KC_BSPC,        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),
-        LT(SYMB,KC_GRV),KC_QUOT,      LALT(KC_LSFT),  KC_LEFT,KC_RGHT,
-                                              ALT_T(KC_APP),  KC_LGUI,
-                                                              KC_HOME,
-                                               KC_SPC,KC_BSPC,KC_END,
+        KC_EQL,         KC_1,         KC_2,   KC_3,   KC_4,    KC_5,   KC_LEFT,
+        KC_DELT,        KC_Q,         KC_W,   KC_E,   KC_R,    KC_T,   TG(SYMB),
+        KC_BSPC,        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),
+        LT(SYMB,KC_GRV),KC_QUOT,      LALT(KC_LSFT),  KC_LEFT, KC_RGHT,
+                                              ALT_T(KC_APP),   KC_LGUI,
+                                                               KC_HOME,
+                                               KC_SPC,TG(SYMB),KC_END,
         // right hand
              KC_RGHT,     KC_6,KC_7,       KC_8,   KC_9,   KC_0,            KC_MINS,
              TG(SYMB),    KC_Y,KC_U,       KC_I,   KC_O,   KC_P,            KC_BSLS,
@@ -54,20 +55,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
                                KC_UP,      KC_DOWN,KC_LBRC,KC_RBRC,         KC_FN1,
              KC_LALT,        CTL_T(KC_ESC),
              KC_PGUP,
-             KC_PGDN,KC_TAB, KC_ENT
+             KC_PGDN,LT(SYMB, KC_TAB), KC_ENT
     ),
 /* Keymap 1: Symbol Layer
  *
  * ,--------------------------------------------------.           ,--------------------------------------------------.
  * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
  * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
+ * |        |   1  |   2  |   3  |   4  |      |      |           |      |      |      |   =  |      |      |   F12  |
  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
+ * |        |   5  |   6  |   7  |   8  |   9  |------|           |------|   &  |   -  |   _  |   ;  |   +  |        |
  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
+ * |        |   (  |   )  |   [  |   ]  |   0  |      |           |      |   |  |   (  |   )  |      |      |        |
  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
+ *   |      |      |      |      |      |                                       |      |      |      |      |      |
  *   `----------------------------------'                                       `----------------------------------'
  *                                        ,-------------.       ,-------------.
  *                                        |      |      |       |      |      |
@@ -80,20 +81,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 // 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_F1,  KC_F2,  KC_F3,         KC_F4,        KC_F5,   KC_TRNS,
+       KC_TRNS, KC_1,   KC_2,   KC_3,          KC_4,         KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_5,   KC_6,   KC_7,          KC_8,         KC_9,
+       KC_TRNS, KC_LPRN,KC_RPRN,KC_LBRC,       KC_RBRC,      KC_0,    KC_TRNS,
+       KC_TRNS, KC_TRNS,KC_TRNS,LCTL(KC_PGUP), LCTL(KC_PGDN),
+                                                                              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_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
-                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_DOT,  KC_0,    KC_EQL,  KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS,KC_EQL,  KC_TRNS, KC_TRNS, KC_F12,
+                KC_AMPR, KC_MINS,KC_UNDS, CM_SCLN, KC_PLUS, KC_TRNS,
+       KC_TRNS, KC_PIPE, KC_LPRN,KC_RPRN, KC_3,    KC_TRNS, KC_TRNS,
+                         KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS,
        KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS

+ 10 - 0
keyboard/ergodox_ez/keymaps/erez_experimental/readme.md

@@ -4,6 +4,16 @@ This is my personal layout which I use to test out ideas which may or may not ma
 
 Changelog:
 
+## Feb 5, 2016:
+
+* A whole new design for the symbol layer. Specifically:
+  * Put the minus, underscore, and semicolon right in the homerow for the right hand
+  * Parens are in better places for me
+  * The arrow keys now send Ctrl-PgUp and Ctrl-PgDn, for switching browser tabs with the arrows when in symbol layer
+  * Tab (right-hand outer thumb key) now does double duty to toggle symbol layer when held down
+  * Backspace (left-hand outer thumb key) now just toggles symbol layer (I wasn't using it as a backspace)
+  
+
 ## Jan 19, 2016:
 
 * Made J into dual-action key (Alt when held down), to make Alt-tab more ergonomic.

+ 160 - 27
keyboard/ergodox_ez/keymaps/osx_de/keymap.c

@@ -6,12 +6,26 @@
 #define BASE 0 // default layer
 #define SYMB 1 // symbols
 #define MDIA 2 // media keys
-#define CRSR 3 // media keys
+#define SMLY 3 // media keys
 #define NUMB 4 // number keys
+#define EGOS 5 // Egoshooter layer
 
 #define M_CTRL_CMDV 1
 #define M_CTRL_CMDC 2
 #define M_MEH_SH_ACUT 3
+#define M_DE_PLUS_CTRLALT 12
+#define M_DE_CIRC_CTRLCMD 13
+#define M_TOGGLE_5 14
+
+#define SM_SMILE 4
+#define SM_SMIRK 5
+#define SM_FROWN 6
+#define SM_CRY 7
+#define SM_KISS 8
+#define SM_HEART 9
+#define SM_LAUGH 10
+#define SM_SAD 11
+
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 /* Keymap 0: Basic layer
@@ -43,16 +57,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
         KC_TAB,                  DE_Q,         DE_W,   DE_E,   DE_R,   DE_T,   KC_LGUI,
         KC_LALT,                   DE_A,         DE_S,   DE_D,   DE_F,   DE_G,
         KC_LSFT,                 CTL_T(DE_Y),  DE_X,   DE_C,   DE_V,   DE_B,   KC_LALT,
-        LT(SYMB,KC_GRV),         DE_LESS,      LALT(KC_LSFT),  KC_LEFT,KC_RGHT,
+        LT(SYMB,DE_LESS),        M(M_DE_CIRC_CTRLCMD),      M(M_DE_PLUS_CTRLALT), LALT(KC_LSFT),  LGUI(KC_LSFT),
                                                			  	M(M_MEH_SH_ACUT), 	TG(2),
                                                               					KC_HOME,
-                                               				KC_BSPC,KC_DEL,		KC_END,
+                                               				KC_BSPC,KC_DEL,		LT(SMLY,KC_END),
         // right hand
              M(M_CTRL_CMDC),  DE_6,   DE_7,   DE_8,   DE_9,   DE_0,     	DE_SS,
              KC_RGUI,     DE_Z,   DE_U,   DE_I,   DE_O,   DE_P,         	DE_UE,
                           DE_H,   DE_J,   DE_K,   DE_L,   DE_OE,		ALT_T(DE_AE),
              KC_RALT,	  DE_N,   DE_M,   DE_COMM,DE_DOT, CTL_T(DE_MINS),   	KC_RSFT,
-                                  KC_UP,  KC_DOWN,LGUI(KC_LSFT),DE_PLUS,        LT(SYMB,DE_HASH),
+                                  KC_LEFT,  KC_UP,KC_DOWN,KC_RIGHT,        LT(SYMB,DE_HASH),
              TG(4),	  ALL_T(DE_ACUT),
              KC_PGUP,
              KC_PGDN,KC_ENT, KC_SPC
@@ -60,7 +74,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 /* Keymap 1: Symbol Layer
  *
  * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |  L5  |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
  * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
  * |        |  <   |  >   |   !  |  ?   |      |      |           |      |   \  |   [  |   ]  |   |  |   #  |   F12  |
  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
@@ -90,7 +104,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
                                                KC_TRNS,
                                KC_TRNS,KC_DEL,KC_TRNS,
        // right hand
-       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
+       M(M_TOGGLE_5), KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
        KC_TRNS, LALT(LSFT(KC_7)),   LALT(KC_5),   LALT(KC_6),    LALT(KC_7),    DE_HASH, KC_F12,
                 DE_SLSH,   DE_LPRN,   DE_RPRN,    LALT(KC_8),    LALT(KC_9), KC_TRNS,
        KC_TRNS, DE_AMPR, KC_GRV,   LSFT(KC_GRV),    DE_DQOT,    DE_QUOT, DE_QST,
@@ -102,7 +116,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 /* Keymap 2: Media and mouse keys
  *
  * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |      |      |      |      |      |      |           | Mute |      |      |      |      |      |  Play  |
+ * |        |      |      |      |      |      |      |           | Mute |      |      |      |      |      |  EGOS  |
  * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
  * |        |      | Lclk | MsUp | Rclk | WlUp |      |           |      |      |      |      |      |      |        |
  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
@@ -140,20 +154,20 @@ KEYMAP(
        KC_TRNS,
        KC_TRNS, KC_TRNS, KC_WBAK
 ),
-// ADNW-KOY layer
-/* Keymap 3: ADNW-Koy layer
- * ADNW-Koy is a special layout designed to be ergonomic. Was created using software to determine the most ergonomic way to type German and English texts.
+/* Keymap 3: Smiley layer
+ * making it easier to type smileys... tipp: on osx you can easily replace those smileys with the UTF-8 character using
+ * keyboard short commands...
  *
  * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |   -    |
+ * |        |      |      |      |      |      |      |           | :-)  | ;-)  | :-D  |      |      |      |        |
  * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |   K  |   .  |   O  |   ,  |   Y  |      |           |      |   V  |   G  |   C  |   L  |   ß  |   Z    |
+ * |        |      |      |      |      |      |      |           |      | :-{  | :-(  |      |      |      |        |
  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   H  |   A  |   E  |   I  |   U  |------|           |------|   D  |   T  |   R  |   N |   S  |  F/L2  |
+ * |        |      |      |      |      |      |------|           |------|  <3  | :-*  |      |      |      |        |
  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |X/Ctrl|   Q  |   Ä  |   Ü  |   Ö  |      |           |      |   B  |   P  |   W  |   M  |J/Ctrl| RShift |
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |</L1|  ^  |AltShf| Left | Right|                                       |  Up | Down | CMD-SHIFT |  ´  | //L1 |
+ *   |    |     |      |      |      |                                       |     |      |           |     |     r|
  *   `----------------------------------'                                       `----------------------------------'
  *                                        ,-------------.       ,-------------.
  *                                        |      |      |       |      |      |
@@ -165,18 +179,18 @@ KEYMAP(
  */
 KEYMAP(
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_K,    KC_DOT,  KC_O,    KC_COMM, KC_Z,    KC_TRNS,
-       KC_TRNS, KC_H,    KC_A,    KC_E,    KC_I,    KC_U,
-       KC_TRNS, CTL_T(KC_X),KC_Q,    DE_AE,   DE_UE,   DE_OE,   KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,    KC_TRNS,  KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,
+       KC_TRNS, KC_TRNS,    KC_TRNS,  KC_TRNS,    KC_TRNS,    KC_TRNS,
+       KC_TRNS, KC_TRNS,    KC_TRNS,  KC_TRNS,    KC_TRNS,    KC_TRNS,   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_SLSH,
-       KC_TRNS,  KC_V,    KC_G,    KC_C,    KC_L,    KC_MINS, KC_Y,
-                 KC_D,    KC_T,    KC_R,    KC_N,    KC_S, LT(MDIA,KC_F),
-       KC_TRNS,  KC_B,    KC_P,    KC_W,    KC_M,    CTL_T(KC_J), KC_TRNS,
+       M(SM_SMILE), M(SM_SMIRK), M(SM_LAUGH), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  M(SM_FROWN),    M(SM_SAD),    M(SM_CRY),    KC_TRNS,    KC_TRNS, KC_TRNS,
+                 M(SM_HEART),    M(SM_KISS),    KC_TRNS,    KC_TRNS,    KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS, KC_TRNS,
                           KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS,
        KC_TRNS,
@@ -195,9 +209,50 @@ KEYMAP(
        // right hand
        KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
        KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    LSFT(KC_RBRC), KC_F12,
-                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_RBRC, KC_TRNS,
+                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_RBRC, DE_MINS,
        KC_TRNS, LSFT(KC_6), KC_1,   KC_2,    KC_3,    LSFT(KC_7), KC_TRNS,
-                         KC_0,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
+                         KC_0,KC_DOT,  KC_0,    DE_EQL,  KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+
+/* Keymap 3: Egoshooter layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |  L5  |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |  SHIFT |      |      |      |      |      |------|           |------|      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   | CTRL |      |      |      |      |                                       |     |       |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |   F1 |  F2  |       |      |      |
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      |  F3  |       |      |        |      |
+ *                                 | SPACE|  CTRL|------|       |------|        |      |
+ *                                 |      |      |  F4  |       |      |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+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_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_LCTL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                                           KC_F1, KC_F2,
+                                                    KC_F3,
+                                  KC_SPC, KC_LCTL, KC_F4,
+       // right hand
+       M(M_TOGGLE_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,   KC_TRNS,   KC_TRNS,    KC_TRNS,    KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS,   KC_TRNS,    KC_TRNS,    KC_TRNS, KC_TRNS,
+                         KC_TRNS,KC_TRNS,  KC_TRNS,    KC_TRNS,  KC_TRNS,
        KC_TRNS, KC_TRNS,
        KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS
@@ -206,7 +261,7 @@ KEYMAP(
 
 const uint16_t PROGMEM fn_actions[] = {
     [1] = ACTION_LAYER_TAP_TOGGLE(SYMB),                // FN1 - Momentary Layer 1 (Symbols)
-    [2] = ACTION_LAYER_TAP_TOGGLE(CRSR)                // FN2 - Momentary Layer 2 (Cursors)
+    [2] = ACTION_LAYER_TAP_TOGGLE(SMLY)                // FN2 - Momentary Layer 2 (Smiley)
 };
 
 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
@@ -257,7 +312,80 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
 			}
 		}
 		break;
-      }
+	case M_DE_CIRC_CTRLCMD:
+		if (record->event.pressed) {
+			start = timer_read();
+			return MACRO(D(LCTRL),D(LGUI),END);
+		} else {
+			if (timer_elapsed(start) > 150){
+				return MACRO(U(LCTRL),U(LGUI),END);
+			} else {
+				return MACRO(U(LCTRL),U(LGUI),T(NUBS),END); 
+			}
+		}
+		break;
+	case M_DE_PLUS_CTRLALT:
+		if (record->event.pressed) {
+			start = timer_read();
+			return MACRO(D(LCTRL),D(LALT),END);
+		} else {
+			if (timer_elapsed(start) > 150){
+				return MACRO(U(LCTRL),U(LALT),END);
+			} else {
+				return MACRO(U(LCTRL),U(LALT),T(RBRC),END); 
+			}
+		}
+		break;
+	case SM_SMILE:
+		if (record->event.pressed) {
+			return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LSFT),T(9),U(LSFT),END);
+		}
+		break;
+
+	case SM_SMIRK:
+		if (record->event.pressed) {
+			return MACRO(D(LSFT),T(COMM),U(LSFT),T(SLSH),D(LSFT),T(9),U(LSFT),END);
+		}
+		break;
+	case SM_CRY:
+		if (record->event.pressed) {
+			return MACRO(D(LSFT),T(COMM),U(LSFT),T(SLSH),D(LSFT),T(8),U(LSFT),END);
+		}
+		break;
+ 
+	case SM_SAD:
+		if (record->event.pressed) {
+			return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LSFT),T(8),U(LSFT),END);
+		}
+		break;
+      
+	case SM_HEART:
+		if (record->event.pressed) {
+			return MACRO(T(GRV),T(3),END);
+		}
+		break;
+	case SM_LAUGH:
+		if (record->event.pressed) {
+			return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LSFT),T(D),U(LSFT),END);
+		}
+		break;
+	case SM_KISS:
+		if (record->event.pressed) {
+			return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LSFT),T(RBRC),U(LSFT),END);
+		}
+		break;
+	case SM_FROWN:
+		if (record->event.pressed) {
+			return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LALT),T(8),U(LALT),END);
+		}
+		break;
+    case M_TOGGLE_5:  
+       if (record->event.pressed){
+           layer_state ^= (1<<5);
+           layer_state &= (1<<5);
+        }
+        break;
+    }
     return MACRO_NONE;
 };
 
@@ -291,6 +419,11 @@ void * matrix_scan_user(void) {
             ergodox_right_led_3_on();
 	    //ergodox_board_led_on();
             break;
+        case 5: 
+        	ergodox_right_led_1_on();
+        	ergodox_right_led_2_on();
+        	ergodox_right_led_3_on();
+        	break;
         default:
             // none
             break;

+ 3 - 2
keyboard/ergodox_ez/keymaps/osx_de/readme.md

@@ -4,13 +4,14 @@ Dies ist nur ein kleiner Tweak der bestehenden firmware für das ErgoDox-EZ-Keyb
 
 - Die Umlaute sollten an einigermassen sinnvollen Plätzen liegen
 - der Umstieg sollte dadurch erleichtert werden, dass einige Tasten an ihren "normalen" Platz zurückgewandert sind. Z.B. ESC, Tab,...
-- die Leertaste lässt sich jetzt mit beiden Daumen bedienen 
+- die Leertaste ist jetzt auf der rechten seite, neben Enter. Dafür hat der linke Daumen nun Backspace und Delete. 
 - die CMD- und Alt-Tasten sind in der Mitte einfach erreichbar.
-- es gibt eine neue Layer für die Nutzung der Cursortasten, dort sind sie etwas einfacher angeordnet und sind z.B. auch für Spiele nutzbar
+- es gibt eine neue Layer die für Spiele genutzt werden kann (egosooter wie Counter Strike). Dort liegen die wichtigsten Tasten auf der linken Seite, im Daumenblock z.B. space und ctrl sowie die F-Tasten 1-4. Diese Layer ist über die Symbollayer erreichbar.
 - Die Symbollayer wurde dahingehend angepasst, dass die klammern, etc nun auf beiden hälften der Tastatur zu finden sind
 - der Zehnerblock wurde in eine eigene Layer umgezogen
 - die Meh und Hyper-Tasten wurden in die Daumenblöcke umgezogen
 
+
 ------------------------------   
 
 # ErgoDox EZ for OSX

+ 6 - 1
keyboard/planck/PCB_GUIDE.md

@@ -3,6 +3,7 @@
 ## Setting up the environment
 
 ### Windows
+
 1. Install [WinAVR Tools](http://sourceforge.net/projects/winavr/) for AVR GCC compiler.
 2. Install [DFU-Programmer][dfu-prog] (the -win one).
 3. Start DFU bootloader on the chip first time you will see 'Found New Hardware Wizard' to install driver. If you install device driver properly you can find chip name like 'ATmega32U4' under 'LibUSB-Win32 Devices' tree on 'Device Manager'. If not you will need to update its driver on 'Device Manager' to the `dfu-programmer` driver.
@@ -13,6 +14,7 @@ If you're using homebrew, you can use the following commands:
 
     brew tap osx-cross/avr
     brew install avr-libc
+    brew install dfu-programmer
 
 Otherwise, these instructions will work:
 
@@ -24,6 +26,9 @@ Otherwise, these instructions will work:
 1. Install AVR GCC with your favorite package manager.
 2. Install [DFU-Programmer][dfu-prog].
 
+Note that, since it will be directly accessing USB hardware, the
+`dfu-programmer` program needs to be run as root.
+
 ## Verify Your Installation
 1. Clone the following repository: https://github.com/jackhumbert/qmk_firmware
 2. Open a Terminal and `cd` into `qmk_firmware/keyboard/planck`
@@ -51,7 +56,7 @@ Generally, the instructions to flash the PCB are as follows:
 
 ### 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/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/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).
 
 You can use modifiers with keycodes like this:
 

+ 21 - 0
keyboard/planck/README.md

@@ -15,6 +15,27 @@ Depending on which keymap you would like to use, you will have to compile slight
 ### Default
 To build with the default keymap, simply run `make`.
 
+## Safety Considerations
+
+You probably don't want to "brick" your keyboard, making it impossible
+to rewrite firmware onto it.  Here are some of the parameters to show
+what things are (and likely aren't) too risky.
+
+- If a keyboard map does not include RESET, then, to get into DFU
+  mode, you will need to press the reset button on the PCB, which
+  requires unscrewing some bits.
+- Messing with tmk_core / common files might make the keyboard
+  inoperable
+- Too large a .hex file is trouble; `make dfu` will erase the block,
+  test the size (oops, wrong order!), which errors out, failing to
+  flash the keyboard
+- DFU tools do /not/ allow you to write into the bootloader (unless
+  you throw in extra fruitsalad of options), so there is little risk
+  there.
+- EEPROM has around a 100000 write cycle.  You shouldn't rewrite the
+  firmware repeatedly and continually; that'll burn the EEPROM
+  eventually.
+
 ### Other Keymaps
 Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` and see keymap document (you can find in top README.md) and existent keymap files.
 

+ 16 - 0
keyboard/planck/keymaps/cbbrowne/README.md

@@ -0,0 +1,16 @@
+cbbrowne custom keyboard
+==============================
+
+Due to cbbrowne@acm.org
+Christopher Browne
+
+This was originally based on the default keyboard map, but I have been
+doing sundry experimentation:
+
+ * To figure things out about the toolset
+ * I'm an Emacs guy, so will be needing a fair bit of tuning
+ * It made sense to mess around some with keyboard maps.
+   - I added Workman alongside Dvorak and Colemak
+     - Boy, oh boy, these don't help
+     - I have done 30 years of learning of Emacs key mappings, and these alternative keyboards massively mess me up
+   - I added a keypad, originally based on keymaps/numpad.c, but mighty substantially revised, as that one seems to be rotated 90 degrees from usual conventions for number pads

+ 302 - 0
keyboard/planck/keymaps/cbbrowne/keymap.c

@@ -0,0 +1,302 @@
+#include "planck.h"
+#ifdef BACKLIGHT_ENABLE
+  #include "backlight.h"
+#endif
+
+/* Each layer is given a name to aid in readability, which is then
+   used in the keymap matrix below.  The underscores do not denote 
+   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 could also skip them entirely and just use numbers, though that
+   means needing to manage the numbers.
+
+   It is preferable to keep the symbols short so that a line worth of
+   key mappings fits compactly onto a line of code. */
+
+/* This was originally based on planck/keymaps/default/default.c, and
+   then cbbrowne has revised things */
+
+/* Things I did not like about the default mapping 
+
+   - I find control too hard to get to.  I think I'll want it on a
+     left finger.  Gonna need to lose something to do that...
+   - Almost certainly, KC_LCTL should be on [2][1]
+   - having dash on [lower-j] is a bit nonintuitive, but may be OK
+   - I'll bet I should switch ESC/TAB
+   - I'm suspicious that I want to shift M(0) from [4][1] to [4][2],
+     and shift ESC off the first column so KC_LCTL and KC_LALT can
+     be on the first column.
+   - I think I wanna swap ' and ENTER
+
+   - All of the above are done :-)
+
+   - I'm keeping Colemak and Dvorak around for reference, and added
+     Workman just for fun.  They're useless to me, though.
+*/
+
+
+/* Some interesting things implemented
+
+   - There is a macro that writes out "cbbrowne" just because I could
+   - There is a (somewhat cruddy) linear congruential random number
+     generator.
+     - I would like to be seeding it with clock info to make it look
+       more random
+   - There are two macros that use the random number generators
+     - one, M_RANDDIGIT, generates a random digit based on state
+       of the random number generator
+     - the other, M_RANDLETTER, generates a random letter based on state
+       of the random number generator
+     - in both, note the use of register_code()/unregister_code()
+       to indicate the desired key
+*/
+
+/* Other things to do...
+
+   - Need to think about what zsh and readline actions I use lots
+   - Wanna figure out macros, so I can put in a "cbbrowne" macro
+   - Ought to ensure that Control-Alt-Delete is convenient enough
+   - How about Alt-F1 thru Alt-F8?
+   - What's the keystroke to get from X to console these days?
+   - I do indeed want a sweet number pad!
+   - A layer for doing console switching would not be a bad idea
+*/
+
+enum layers {
+  _QW = 0,  /* Qwerty mapping */
+  _LW, /* Lower layer, where top line has symbols !@#$%^&*() */
+  _RS, /* Raised layer, where top line has digits 1234567890 */
+  _KP, /* Key pad */
+};
+
+enum macro_id {
+  M_LED = 0,
+  M_USERNAME,
+  M_RANDDIGIT,
+  M_RANDLETTER
+};
+
+/* Note that Planck has dimensions 4 rows x 12 columns */
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_QW] = { /* Qwerty */
+  {KC_ESC,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC},
+  {KC_LCTL, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_ENT},
+  {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_QUOT },
+  {KC_TAB,  M(M_LED), KC_LALT, KC_LGUI, MO(_LW), KC_SPC,  KC_SPC,  MO(_RS), KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT}
+},
+[_RS] = { /* RAISE */
+  {KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC},
+  {KC_TRNS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS},
+  {KC_TRNS, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  DF(_QW), DF(_KP), DF(_KP), RESET,   KC_TRNS},
+  {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+[_LW] = { /* LOWER */
+  {KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
+  {KC_TRNS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
+  {KC_TRNS, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  DF(_QW), DF(_KP), DF(_KP), RESET,   KC_TRNS},
+  {KC_TRNS, DF(_KP), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+[_KP] = { /* Key Pad */
+  {KC_ESC,  M(M_USERNAME),    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_KP_ENTER, KC_KP_PLUS, KC_KP_PLUS, KC_KP_ENTER, KC_BSPC},
+  {KC_LCTL, M(M_RANDDIGIT),    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_KP_MINUS, KC_7, KC_8,    KC_9,  KC_ENT},
+  {KC_LSFT, M(M_RANDLETTER),    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_KP_PLUS,    KC_4, KC_5,  KC_6, KC_DOT},
+  {BL_STEP, M(M_LED), KC_LALT, KC_LGUI, KC_NO, KC_SPC,  KC_SPC,  DF(_QW),   KC_1, KC_2, KC_3,  KC_0}
+}
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+};
+
+/* This bit of logic seeds a wee linear congruential random number generator */
+
+static uint16_t random_value = 157;
+#define randadd 53
+#define randmul 181
+#define randmod 167
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+  switch(id) {
+  case M_LED:
+    if (record->event.pressed) {
+      register_code(KC_RSFT);
+#ifdef BACKLIGHT_ENABLE
+      backlight_step();
+#endif
+    } else {
+      unregister_code(KC_RSFT);
+    }
+    break;	    
+  case M_USERNAME:
+    if (record->event.pressed) {
+      return MACRO( I(1), T(C), T(B), T(B), T(R), T(O), T(W), T(N), T(E));
+    } else {
+      return MACRO_NONE ;
+    }
+    break;
+  case M_RANDDIGIT:
+    /* Generate, based on random number generator, a keystroke for
+       a numeric digit chosen at random */
+    random_value = ((random_value + randadd) * randmul) % randmod;
+    if (record->event.pressed) 
+    switch(random_value % 10) {
+    case 0:
+      register_code (KC_0);
+      unregister_code (KC_0);
+      break;
+    case 1:
+      register_code (KC_1);
+      unregister_code (KC_1);
+      break;
+    case 2:
+      register_code (KC_2);
+      unregister_code (KC_2);
+      break;
+    case 3:
+      register_code (KC_3);
+      unregister_code (KC_3);
+      break;
+    case 4:
+      register_code (KC_4);
+      unregister_code (KC_4);
+      break;
+    case 5:
+      register_code (KC_5);
+      unregister_code (KC_5);
+      break;
+    case 6:
+      register_code (KC_6);
+      unregister_code (KC_6);
+      break;
+    case 7:
+      register_code (KC_7);
+      unregister_code (KC_7);
+      break;
+    case 8:
+      register_code (KC_8);
+      unregister_code (KC_8);
+      break;
+    case 9:
+      register_code (KC_9);
+      unregister_code (KC_9);
+      break;
+    }
+    break;
+  case M_RANDLETTER:
+    /* Generate, based on random number generator, a keystroke for
+       a letter chosen at random */
+    random_value = ((random_value + randadd) * randmul) % randmod;
+    if (record->event.pressed) 
+    switch(random_value % 26) {
+    case 0:
+      register_code(KC_A);
+      unregister_code(KC_A);
+      break;
+    case 1:
+      register_code(KC_B);
+      unregister_code(KC_B);
+      break;
+    case 2:
+      register_code(KC_C);
+      unregister_code(KC_C);
+      break;
+    case 3:
+      register_code(KC_D);
+      unregister_code(KC_D);
+      break;
+    case 4:
+      register_code(KC_E);
+      unregister_code(KC_E);
+      break;
+    case 5:
+      register_code(KC_F);
+      unregister_code(KC_F);
+      break;
+    case 6:
+      register_code(KC_G);
+      unregister_code(KC_G);
+      break;
+    case 7:
+      register_code(KC_H);
+      unregister_code(KC_H);
+      break;
+    case 8:
+      register_code(KC_I);
+      unregister_code(KC_I);
+      break;
+    case 9:
+      register_code(KC_J);
+      unregister_code(KC_J);
+      break;
+    case 10:
+      register_code(KC_K);
+      unregister_code(KC_K);
+      break;
+    case 11:
+      register_code(KC_L);
+      unregister_code(KC_L);
+      break;
+    case 12:
+      register_code(KC_M); 
+      unregister_code(KC_M); 
+      break;
+    case 13:
+      register_code(KC_N);
+      unregister_code(KC_N);
+      break;
+    case 14:
+      register_code(KC_O);
+      unregister_code(KC_O);
+      break;
+    case 15:
+      register_code(KC_P);
+      unregister_code(KC_P);
+      break;
+    case 16:
+      register_code(KC_Q);
+      unregister_code(KC_Q);
+      break;
+    case 17:
+      register_code(KC_R);
+      unregister_code(KC_R);
+      break;
+    case 18:
+      register_code(KC_S);
+      unregister_code(KC_S);
+      break;
+    case 19:
+      register_code(KC_T);
+      unregister_code(KC_T);
+      break;
+    case 20:
+      register_code(KC_U);
+      unregister_code(KC_U);
+      break;
+    case 21:
+      register_code(KC_V);
+      unregister_code(KC_V);
+      break;
+    case 22:
+      register_code(KC_W);
+      unregister_code(KC_W);
+      break;
+    case 23:
+      register_code(KC_X);
+      unregister_code(KC_X);
+      break;
+    case 24:
+      register_code(KC_Y);
+      unregister_code(KC_Y);
+      break;
+    case 25:
+      register_code(KC_Z);
+      unregister_code(KC_Z);
+      break;
+    }
+    break;
+  }
+  return MACRO_NONE;
+};

+ 1 - 1
quantum/keymap_common.c

@@ -64,7 +64,7 @@ action_t action_for_key(uint8_t layer, keypos_t key)
     	action.code = ACTION_MACRO(keycode & 0xFF);
     	return action;
 #ifdef BACKLIGHT_ENABLE
-	} else if (keycode >= BL_0 & keycode <= BL_15) {
+	} else if (keycode >= BL_0 && keycode <= BL_15) {
         action_t action;
         action.code = ACTION_BACKLIGHT_LEVEL(keycode & 0x000F);
         return action;

+ 31 - 31
quantum/keymap_extras/keymap_colemak.h

@@ -24,7 +24,7 @@
 #define CM_E    KC_K
 #define CM_I    KC_L
 #define CM_O    KC_SCLN
-#define CM_SCLN LSFT(CM_SCLN)
+#define CM_COLN LSFT(CM_SCLN)
 
 #define CM_Z    KC_Z
 #define CM_X    KC_X
@@ -39,37 +39,37 @@
 
 // Make it easy to support these in macros
 // TODO: change macro implementation so these aren't needed
-#define KC_CM_Q    CM_Q    
-#define KC_CM_W    CM_W    
-#define KC_CM_F    CM_F    
-#define KC_CM_P    CM_P    
-#define KC_CM_G    CM_G    
-#define KC_CM_J    CM_J    
-#define KC_CM_L    CM_L    
-#define KC_CM_U    CM_U    
-#define KC_CM_Y    CM_Y    
-#define KC_CM_SCLN CM_SCLN 
+#define KC_CM_Q    CM_Q
+#define KC_CM_W    CM_W
+#define KC_CM_F    CM_F
+#define KC_CM_P    CM_P
+#define KC_CM_G    CM_G
+#define KC_CM_J    CM_J
+#define KC_CM_L    CM_L
+#define KC_CM_U    CM_U
+#define KC_CM_Y    CM_Y
+#define KC_CM_SCLN CM_SCLN
 
-#define KC_CM_A    CM_A    
-#define KC_CM_R    CM_R    
-#define KC_CM_S    CM_S    
-#define KC_CM_T    CM_T    
-#define KC_CM_D    CM_D    
-#define KC_CM_H    CM_H    
-#define KC_CM_N    CM_N    
-#define KC_CM_E    CM_E    
-#define KC_CM_I    CM_I    
-#define KC_CM_O    CM_O    
+#define KC_CM_A    CM_A
+#define KC_CM_R    CM_R
+#define KC_CM_S    CM_S
+#define KC_CM_T    CM_T
+#define KC_CM_D    CM_D
+#define KC_CM_H    CM_H
+#define KC_CM_N    CM_N
+#define KC_CM_E    CM_E
+#define KC_CM_I    CM_I
+#define KC_CM_O    CM_O
 
-#define KC_CM_Z    CM_Z    
-#define KC_CM_X    CM_X    
-#define KC_CM_C    CM_C    
-#define KC_CM_V    CM_V    
-#define KC_CM_B    CM_B    
-#define KC_CM_K    CM_K    
-#define KC_CM_M    CM_M    
-#define KC_CM_COMM CM_COMM 
-#define KC_CM_DOT  CM_DOT  
-#define KC_CM_SLSH CM_SLSH 
+#define KC_CM_Z    CM_Z
+#define KC_CM_X    CM_X
+#define KC_CM_C    CM_C
+#define KC_CM_V    CM_V
+#define KC_CM_B    CM_B
+#define KC_CM_K    CM_K
+#define KC_CM_M    CM_M
+#define KC_CM_COMM CM_COMM
+#define KC_CM_DOT  CM_DOT
+#define KC_CM_SLSH CM_SLSH
 
 #endif

+ 3 - 3
quantum/keymap_extras/keymap_nordic.h

@@ -48,12 +48,12 @@
 #define NO_LBRC ALGR(KC_8)
 #define NO_RBRC ALGR(KC_9)
 #define NO_RCBR	ALGR(KC_0)
-#define NO_PIPE ALGR(NO_ACUT)
+#define NO_PIPE ALGR(KC_NUBS)
 
 #define NO_EURO ALGR(KC_E)
 #define NO_TILD ALGR(NO_QUOT)
 
-#define NO_BSLS ALGR(NO_LESS)
+#define NO_BSLS ALGR(KC_MINS)
 #define NO_MU 	ALGR(KC_M)
 
-#endif
+#endif