Browse Source

Pull request 190 resolution with 'qmk/master' for merge

yoyoerx 9 years ago
parent
commit
baeffd99da

BIN
keyboard/ergodox_ez/keymaps/csharp_dev/csharp_dev.hex


BIN
keyboard/ergodox_ez/keymaps/csharp_dev/csharp_dev.png


BIN
keyboard/ergodox_ez/keymaps/csharp_dev/csharp_dev_legend.png


+ 27 - 70
keyboard/ergodox_ez/keymaps/csharp_dev/keymap.c

@@ -3,8 +3,7 @@
 #include "action_layer.h"
 
 #define BASE 0 // default layer
-#define QWERTY 1 // qwerty keys
-#define FKEYS 2 // F keys + macros
+#define FKEYS 1 // F keys + macros
 
 #define MACRO_PUBLIC 10
 #define MACRO_PRIVATE 11
@@ -43,12 +42,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  *   |Tab~CL|  <   |  >   |   |  |  &   |                                       |   =  |   +  |   -  |   *  |  L1  |
  *   `----------------------------------'                                       `----------------------------------'
  *                                        ,-------------.       ,-------------.
- *                                        |. ~L1 | , ~L2|       |Home~L1| End~L2|
- *                                 ,------|------|------|       |------+--------+------.
- *                                 |      |      | Copy |       | UP   |        |      |
- *                                 | Enter| Space|------|       |------|  Space |Enter |
- *                                 | ~LSFT| ~WIN | Past |       | DOWN |   ~WIN | ~LSFT|
- *                                 `--------------------'       `----------------------'
+ *                                        |. ~L1 | ,    |       |Home  |End~L1|
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      | Copy |       | UP   |      |      |
+ *                                 | Enter| Space|------|       |------| Space|Enter |
+ *                                 | ~WIN | ~LSFT| Past |       | DOWN | ~LSFT| ~WIN |
+ *                                 `--------------------'       `--------------------'
  */
 // If it accepts an argument (i.e, is a function), it doesn't need KC_.
 // Otherwise, it needs KC_*
@@ -59,110 +58,68 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
         KC_LCBR,        KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
         KC_RCBR,        ALT_T(KC_Z),  KC_X,   KC_C,   KC_V,   KC_B,   KC_SLASH,
         CTL_T(KC_TAB), LSFT(KC_COMMA),LSFT(KC_DOT),KC_PIPE,KC_AMPR, 
-                                              LT(1,KC_DOT),  LT(2,KC_COMM),
+                                              LT(1,KC_DOT),  KC_COMM,
                                                               LCTL(KC_C),
-                                               SFT_T(KC_ENTER),GUI_T(KC_SPACE),LCTL(KC_V),
+                                               GUI_T(KC_ENTER),SFT_T(KC_SPACE),LCTL(KC_V),
         // right hand
              LCTL(KC_S)  ,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,     KC_LBRACKET,
              KC_DELETE,       KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,   KC_RBRACKET,
                           KC_H,   KC_J,   KC_K,   KC_L,   KC_UNDS,LCTL(KC_Y),
              KC_SCOLON,KC_N,   KC_M, KC_QUOTE  ,KC_EXLM , LSFT(KC_SLASH),   LCTL(KC_Z),
                                   KC_EQUAL,KC_PLUS  ,  KC_MINUS,KC_ASTR  ,     TG(1),
-             LT(2,KC_HOME),         LT(1,KC_END),
+             KC_HOME,         LT(1,KC_END),
              KC_UP,
-             KC_DOWN,GUI_T(KC_SPACE), SFT_T(KC_ENTER)
+             KC_DOWN,SFT_T(KC_SPACE), GUI_T(KC_ENTER)
     ),
-/* Keymap 1: QWERTY layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |   `    |   1  |   2  |   3  |   4  |   5  |   -  |           |   =  |   6  |   7  |   8  |   9  |  0   |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |   Tab  |   Q  |   W  |   E  |   R  |   T  |      |           |      |   Y  |   U  |   I  |   O  |   P  |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |  Esc   |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |  ;   |   '    |
- * |--------+------+------+------+------+------|  Tab |           |  Esc |------+------+------+------+------+--------|
- * |  LSHFT |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |  /   |    \   |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   | CTRL | WIN  |  ALT |ALT GR| Esc  |                                       | PgUp | PgDw | Ins  | PtSc |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |  Cut |       |      |      |
- *                                 ,------|------|------|       |------+--------+------.
- *                                 |      |      |      |       |      |        |      |
- *                                 |      |      |------|       |------|   Left | Right|
- *                                 |      |      |      |       |      |        |      |
- *                                 `--------------------'       `----------------------'
- */
-// If it accepts an argument (i.e, is a function), it doesn't need KC_.
-// Otherwise, it needs KC_*
-[QWERTY] = KEYMAP(  // layer 2 : QWERTY
-        // left hand
-        KC_GRAVE,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_MINUS,
-        KC_TAB,        KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   KC_TRNS,
-        KC_ESCAPE,        KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
-        KC_LSHIFT,        KC_Z,  KC_X,   KC_C,   KC_V,   KC_B,   KC_TAB,
-        KC_LCTRL, KC_LGUI,KC_LALT,  KC_RALT,    KC_ESCAPE,
-                                              KC_TRNS,  LCTL(KC_X),
-                                                              KC_TRNS,
-                                               KC_TRNS,KC_TRNS,KC_TRNS,
-        // right hand
-             KC_EQUAL  ,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0, KC_TRNS,
-             KC_TRNS,       KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,            KC_TRNS,
-                          KC_H,   KC_J,   KC_K,   KC_L,   KC_SCOLON,  KC_QUOTE,
-             KC_ESCAPE,KC_N,   KC_M,   KC_TRNS,KC_DOT , KC_SLASH,   KC_NONUS_BSLASH,
-                                  KC_PGUP  ,  KC_PGDOWN,KC_INSERT  ,KC_PSCREEN,          KC_TRNS,
-             KC_TRNS,        KC_TRNS,
-             KC_TRNS,
-             KC_TRNS,KC_LEFT, KC_RIGHT
-    ),
-/* Keymap 2:  F keys + macros
+
+/* Keymap 1:  F keys + macros
  *
  * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           | Calc |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |  ESC   |  F1  |  F2  |  F3  |  F4  |  F5  |  `   |           | Calc |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
  * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |Public|Static|string|int   |return|      |           |      |//TODO|      |      |      |      |   F12  |
+ * |  Tab   |Public|Static|string|int   |return|      |           |      |//TODO|      |      |      |      |   F12  |
  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
  * |        |Privat|Const |var   |float |null  |------|           |------|new   |      |      |      |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |--------+------+------+------+------+------|  \   |           |  ~   |------+------+------+------+------+--------|
  * |        |      |      |void  |bool  |break;|      |           |      |();   |      |      |      |      |        |
  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      | Alt  |      |      |      |                                       |      |      |      |      |      |
+ *   |      |  WIN | Alt  |      |      |                                       | PgUp | PgDw | Ins  | PtSc |      |
  *   `----------------------------------'                                       `----------------------------------'
  *                                        ,-------------.       ,-------------.
  *                                        |      | Cut  |       |      |      |
  *                                 ,------|------|------|       |------+------+------.
  *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |------|       |------| Left | Right|
  *                                 |      |      |      |       |      |      |      |
  *                                 `--------------------'       `--------------------'
  */
 // FKEYS + MACROS
 [FKEYS] = KEYMAP(
        // left hand
-       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
-       KC_TRNS,M(MACRO_PUBLIC),M(MACRO_STATIC),  M(MACRO_STRING),M(MACRO_INT),M(MACRO_RETURN),KC_TRNS,
+       KC_ESCAPE,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_GRAVE,
+       KC_TAB,M(MACRO_PUBLIC),M(MACRO_STATIC),  M(MACRO_STRING),M(MACRO_INT),M(MACRO_RETURN),KC_TRNS,
        KC_TRNS,M(MACRO_PRIVATE),M(MACRO_CONST), M(MACRO_VAR),M(MACRO_FLOAT),M(MACRO_NULL),
-       KC_TRNS,KC_TRNS,KC_TRNS,M(MACRO_VOID),M(MACRO_BOOL),M(MACRO_BREAK),KC_TRNS,
-       KC_TRNS,KC_LALT,KC_TRNS,KC_TRNS,KC_TRNS,
-                                       KC_TRNS,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,M(MACRO_VOID),M(MACRO_BOOL),M(MACRO_BREAK),KC_BSLASH,
+       KC_TRNS,KC_LGUI,KC_LALT,KC_TRNS,KC_TRNS,
+                                       KC_TRNS,LCTL(KC_X),
                                                KC_TRNS,
                                KC_TRNS,KC_TRNS,KC_TRNS,
        // right hand
        KC_CALCULATOR, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
        KC_TRNS, M(MACRO_TODO),   KC_TRNS,   KC_TRNS,    KC_TRNS,    KC_TRNS, KC_F12,
                 M(MACRO_NEW), KC_TRNS,   KC_TRNS,    KC_TRNS,    KC_TRNS, KC_TRNS,
-       KC_TRNS, M(MACRO_PARENTHESE), KC_TRNS,   KC_TRNS,    KC_TRNS,    KC_TRNS, KC_TRNS,
-                         KC_TRNS,KC_TRNS,  KC_TRNS,   KC_TRNS,  KC_TRNS,
+       KC_TILD, M(MACRO_PARENTHESE), KC_TRNS,   KC_TRNS,    KC_TRNS,    KC_TRNS, KC_TRNS,
+                         KC_PGUP,KC_PGDOWN,  KC_INSERT,   KC_PSCREEN,  KC_TRNS,
        KC_TRNS, KC_TRNS,
        KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
+       KC_TRNS, KC_LEFT, KC_RIGHT
 ),
 
 
 };
 
 const uint16_t PROGMEM fn_actions[] = {
-    [1] = ACTION_LAYER_TAP_TOGGLE(QWERTY)                // FN1 - Momentary Layer 1
+    [1] = ACTION_LAYER_TAP_TOGGLE(FKEYS)                // FN1 - Momentary Layer 1
 };
 
 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)

+ 2 - 1
keyboard/ergodox_ez/keymaps/csharp_dev/readme.md

@@ -4,6 +4,8 @@
 
 * Feb 12, 2016 (V1): 
   * First version commit
+* Mar 20, 2016 (V2):
+  * Removed "Classic QWERTY" layer, inverted GUI and SHIFT on Hold for Space and Enter
 
 ## About
 This layout was conceived in an attempt to optimise keyboard layout for developers (C# more specifically, but it can work with most of other languages), and limit the keys required to perform the most frequent actions.
@@ -38,7 +40,6 @@ Still there are many way to improve or iterate on this:
 * Make it language agnostic
 * Check and compile language's keyboard's heatmaps to statistically define keys priority (e.g.  https://dzone.com/articles/most-pressed-keys-various )
 * QWERTY is still not the most efficient typing layout, I would like to create a Dvorak based similar layout in a near futur
-* Layout 1 is mainly here for safety, most of its unique keys could be transfered to Layout 2 and it could then be removed
 
 ## Issues 
 One of the issues encountered while creating this layout was that I did not find a way to have a key to send a modifier on hold, and a key combination while pressed (e.g. I can't set a Key to do Save (Ctrl + S) when pressed and Shift modifier when hold )

+ 15 - 10
keyboard/ergodox_ez/keymaps/mpiechotka/keymap.c

@@ -29,7 +29,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * | Del    |   Q  |   W  |   F  |   P  |   G  |  L1  |           |  L1  |   J  |   L  |   U  |   Y  |   ;  |   \    |
  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
  * | Esc    |   A  |   R  |   S  |   T  |   D  |------|           |------|   H  |   N  |   E  |   I  |  O   |   '    |
- * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
+ * |--------+------+------+------+------+------|   =  |           |   -  |------+------+------+------+------+--------|
  * | LShift |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   K  |   M  |   ,  |   .  |//Ctrl| RShift |
  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
  *   |Grv/L1|  '"  |AltShf| Left | Right|                                       |  Up  | Down |   [  |   ]  | ~L1  |
@@ -50,7 +50,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
         KC_EQL,         KC_1,     KC_2,   KC_3,   KC_4,          KC_5,   KC_LEFT,
         KC_DELT,        KC_Q,     KC_W,   KC_F,   KC_P,          KC_G,   TG(SYMB),
         KC_ESC,         KC_A,     KC_R,   KC_S,   KC_T,          KC_D,
-        KC_LSFT,        KC_Z,     KC_X,   KC_C,   KC_V,          KC_B,   ALL_T(KC_NO),
+        KC_LSFT,        KC_Z,     KC_X,   KC_C,   KC_V,          KC_B,   KC_EQL,
         LT(SYMB,KC_GRV),KC_QUOT,  LALT(KC_LSFT),  KC_LEFT,       KC_RGHT,
                                                              KC_LALT,       F(LWIN),
                                                                             KC_HOME,
@@ -59,7 +59,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
              KC_RGHT,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_MINS,
              TG(SYMB),    KC_J,   KC_L,   KC_U,   KC_Y,   KC_SCLN,          KC_BSLS,
                           KC_H,   KC_N,   KC_E,   KC_I,   KC_O,             KC_QUOT,
-             MEH_T(KC_NO),KC_K,   KC_M,   KC_COMM,KC_DOT, CTL_T(KC_SLSH),   KC_RSFT,
+             KC_MINS,     KC_K,   KC_M,   KC_COMM,KC_DOT, CTL_T(KC_SLSH),   KC_RSFT,
                                   KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          LT(SYMB,KC_NO),
              KC_LALT,         KC_RALT,
              KC_PGUP,
@@ -73,7 +73,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * | Del    |   Q  |   W  |   F  |   P  |   G  |  L1  |           |  L1  |   J  |   L  |   U  |   Y  |   ;  |   \    |
  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
  * | Esc    |   A  |   R  |   S  |   T  |   D  |------|           |------|   H  |   N  |   E  |   I  |  O   |   '    |
- * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
+ * |--------+------+------+------+------+------|   =  |           |   -  |------+------+------+------+------+--------|
  * | LShift |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   K  |   M  |   ,  |   .  |//Ctrl| RShift |
  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
  *   |Grv/L1|  '"  |AltShf| Left | Right|                                       |  Up  | Down |   [  |   ]  | ~L1  |
@@ -94,7 +94,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
         KC_EQL,         KC_1,     KC_2,   KC_3,   KC_4,          KC_5,   KC_LEFT,
         KC_DELT,        CM_Q,     CM_W,   CM_F,   CM_P,          CM_G,   TG(SYMB),
         KC_ESC,         CM_A,     CM_R,   CM_S,   CM_T,          CM_D,
-        KC_LSFT,        CM_Z,     CM_X,   CM_C,   CM_V,          CM_B,   ALL_T(KC_NO),
+        KC_LSFT,        CM_Z,     CM_X,   CM_C,   CM_V,          CM_B,   KC_EQL,
         LT(SYMB,KC_GRV),KC_QUOT,  LALT(KC_LSFT),  KC_LEFT,       KC_RGHT,
                                                              KC_LALT,       F(LWIN),
                                                                             KC_HOME,
@@ -103,7 +103,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
              KC_RGHT,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_MINS,
              TG(SYMB),    CM_J,   CM_L,   CM_U,   CM_Y,   KC_P, /*CM_SCLN*/ KC_BSLS,
                           CM_H,   CM_N,   CM_E,   CM_I,   CM_O,             KC_QUOT,
-             MEH_T(KC_NO),CM_K,   CM_M,   CM_COMM,CM_DOT, CTL_T(CM_SLSH),   KC_RSFT,
+             KC_MINS,     CM_K,   CM_M,   CM_COMM,CM_DOT, CTL_T(CM_SLSH),   KC_RSFT,
                                   KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          LT(SYMB,KC_NO),
              KC_LALT,         KC_RALT,
              KC_PGUP,
@@ -222,22 +222,27 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
         } else {
              unregister_code(KC_LGUI);
         }
+        break;
     case PC1:
         if (!record->event.pressed) {
-             return MACRO(T(SLCK), T(SLCK), T(1), T(ENT), END);
+             return MACRO(T(SLCK), W(50), T(SLCK), W(50), T(1), W(50), T(ENT), END);
         }
+        break;
     case PC2:
         if (!record->event.pressed) {
-             return MACRO(T(SLCK), T(SLCK), T(2), T(ENT), END);
+             return MACRO(T(SLCK), W(50), T(SLCK), W(50), T(2), W(50), T(ENT), END);
         }
+        break;
     case PC3:
         if (!record->event.pressed) {
-             return MACRO(T(SLCK), T(SLCK), T(3), T(ENT), END);
+             return MACRO(T(SLCK), W(50), T(SLCK), W(50), T(3), W(50), T(ENT), END);
         }
+        break;
     case PC4:
         if (!record->event.pressed) {
-             return MACRO(T(SLCK), T(SLCK), T(4), T(ENT), END);
+             return MACRO(T(SLCK), W(50), T(SLCK), W(50), T(4), W(50), T(ENT), END);
         }
+        break;
     }
     return MACRO_NONE;
 }

BIN
keyboard/ergodox_ez/keymaps/mpiechotka/mpiechotka.hex


+ 134 - 0
keyboard/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/keymap.c

@@ -0,0 +1,134 @@
+#include "ergodox_ez.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0
+#define SYMB 1
+#define PLVR 2
+#define ARRW 3
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [BASE] = KEYMAP(
+    KC_GRV,        KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_F14,
+    KC_TAB,        KC_Q,    KC_W,    KC_D,    KC_F,    KC_K,    TG(PLVR),
+    CTL_T(KC_ESC), KC_A,    KC_S,    KC_E,    KC_T,    KC_G,
+    KC_LSFT,       KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_LBRC,
+    KC_F1,         KC_F2,   KC_F3,   KC_LALT, KC_LGUI,
+    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    KC_VOLD, KC_MUTE,
+    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_VOLU,
+    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    KC_BSPC, CTL_T(KC_ESC), KC_FN1,
+    //
+    /*-*/          KC_F15,  KC_6,    KC_7,    KC_8,    KC_9,    KC_0,          KC_EQL,
+    /*-*/          KC_BSLS, KC_J,    KC_U,    KC_R,    KC_L,    KC_SCLN,       KC_MINS,
+    /*-*/          /*-*/    KC_Y,    KC_N,    KC_I,    KC_O,    KC_H,          KC_ENT,
+    /*-*/          KC_RBRC, KC_P,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,       KC_RSFT,
+    /*-*/          /*-*/    /*-*/    KC_RGUI, KC_RALT, KC_F4,   KC_F5,         KC_F6,
+    KC_MPLY,       KC_MNXT,
+    KC_MPRV,
+    KC_FN3,        KC_QUOT, KC_SPC
+  ),
+  [SYMB] = KEYMAP(
+    KC_TRNS,       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS,       KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_TRNS,
+    KC_TRNS,       KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC,
+    KC_TRNS,       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS,       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS,
+    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS,
+    /*-*/          /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS, KC_TRNS,
+    //
+    /*-*/          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,       KC_TRNS,
+    /*-*/          KC_TRNS, KC_6,    KC_7,    KC_8,    KC_9,    KC_0,          KC_TRNS,
+    /*-*/          /*-*/    KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN,       KC_TRNS,
+    /*-*/          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,       KC_TRNS,
+    /*-*/          /*-*/    /*-*/    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,       KC_TRNS,
+    KC_TRNS,       KC_TRNS,
+    KC_TRNS,
+    KC_TRNS,       KC_TRNS, KC_TRNS
+  ),
+  [PLVR] = KEYMAP(
+    KC_NO,         KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_TRNS,
+    KC_NO,         KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_TRNS,
+    KC_NO,         KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,
+    KC_NO,         KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_NO,
+    KC_TRNS,       KC_TRNS, KC_TRNS, KC_NO,   KC_NO,
+    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS,
+    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS,
+    /*-*/          /*-*/    /*-*/    /*-*/    KC_C,    KC_V,    KC_NO,
+    //
+    /*-*/          KC_TRNS, KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,         KC_NO,
+    /*-*/          KC_NO,   KC_6,    KC_7,    KC_8,    KC_9,    KC_0,          KC_NO,
+    /*-*/          /*-*/    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,          KC_LBRC,
+    /*-*/          KC_NO,   KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN,       KC_QUOT,
+    /*-*/          /*-*/    /*-*/    KC_NO,   KC_NO,   KC_NO,   KC_NO,         KC_NO,
+    KC_TRNS,       KC_TRNS,
+    KC_TRNS,
+    KC_NO,         KC_N,    KC_M
+  ),
+  [ARRW] = KEYMAP(
+    KC_TRNS,       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS,       KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_TRNS, KC_TRNS,
+    KC_TRNS,       KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+    KC_TRNS,       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS,       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS,
+    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS,
+    /*-*/          /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS, KC_TRNS,
+    //
+    /*-*/          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,       KC_TRNS,
+    /*-*/          KC_TRNS, KC_TRNS, KC_TRNS, KC_UP,   KC_TRNS, KC_TRNS,       KC_TRNS,
+    /*-*/          /*-*/    KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS,       KC_TRNS,
+    /*-*/          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,       KC_TRNS,
+    /*-*/          /*-*/    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS,       KC_TRNS,
+    KC_TRNS,
+    KC_TRNS,       KC_TRNS, KC_TRNS
+  ),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+  [SYMB] = ACTION_LAYER_TAP_TOGGLE(SYMB), // FN1 - Momentary Symbols Layer
+  [PLVR] = ACTION_LAYER_TAP_TOGGLE(PLVR), // FN2 - Momentary Plover Layer
+  [ARRW] = ACTION_LAYER_TAP_TOGGLE(ARRW), // FN3 - Momentary Arrows Layer
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+  switch(id) {
+    case 0:
+      if (record->event.pressed) {
+        register_code(KC_RSFT);
+      } else {
+        unregister_code(KC_RSFT);
+      }
+      break;
+  }
+  return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+  uint8_t layer = biton32(layer_state);
+  ergodox_board_led_off();
+  ergodox_right_led_1_off();
+  ergodox_right_led_2_off();
+  ergodox_right_led_3_off();
+  switch (layer) {
+    case SYMB:
+      ergodox_right_led_1_on();
+      break;
+    case PLVR:
+      ergodox_right_led_2_on();
+      break;
+    case ARRW:
+      ergodox_right_led_3_on();
+      break;
+    default:
+      break;
+  }
+};

+ 43 - 0
keyboard/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/readme.md

@@ -0,0 +1,43 @@
+# Roman's Layout
+
+There are four layers:
+
+- **BASE** is [Norman layout](https://normanlayout.info/).
+- **SYMB** for numbers and symbols.
+- **PLVR** is optimized for [Plover](http://www.openstenoproject.org).
+- **ARRW** for navigation.
+
+[![keyboard-layout](romanzolotarev-norman-plover-osx.png)](http://www.keyboard-layout-editor.com/#/gists/8ebcb701ecb763944417)
+
+## Switching
+
+- Tap `SYMB` to toggle **SYMB**.
+- Tap `ARRW` to toggle **ARRW**.
+- Hold `SYMB` (or `ARRW`) to activate **SYMB** (or **ARRW**) while holding.
+- Tap `PLVR` to toggle **PLVR**.
+
+## LEDs
+
+- Red: SYMB is on.
+- Green: PLVR is on.
+- Blue: ARRW is on.
+
+## Functional Keys
+
+- Tap `F1` to mute microphone via [Shush](http://mizage.com/shush/).
+- Tap `F2` to copy screenshot to the clipboard.
+- Hold `SHIFT` and tap `F2` to save screenshot as a file.
+- Tap `F3`, `F4`, `F5`, `F6` to resize a window via [Divvy](http://mizage.com/divvy/).
+- Tap `F14`, `F15` to adjust display brightness.
+
+## CTRL/ESC
+
+Both of those keys are frequently used in Vim.
+
+- Tap `CTRL/ESC` to send `ESC`.
+- Hold `CTRL/ESC` to use as `CTRL`.
+
+## Activate N-rollover
+
+- While in **BASE** hold left `SHIFT` and right `SHIRT` and then tap `N`.
+- Then you can activate **PLVR** and use ErgoDox EZ for steno.

BIN
keyboard/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/romanzolotarev-norman-plover-osx.hex


BIN
keyboard/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/romanzolotarev-norman-plover-osx.png


+ 352 - 237
keyboard/planck/CYGWIN_GUIDE.md

@@ -1,237 +1,352 @@
-#Planck Advanced (but not too advanced) `cygwin` Users Guide
-If you are a user of the [cygwin environment](https://cygwin.com) in Windows and want the freedom to use the latest tools available, then this is the guide for you. If compiling your own copy of the latest and greatest Gnu C Compiler makes you super happy, then this is the guide for you. If the command line make you smile, then this is the guide for you.
-
-
-This guide was written step by step as I went through the process on a `Windows 10` `x86_64` based system.  This should be generally applicable to to any `Windows` environment with `cygwin`.
-
-
-#####Do not skip steps. Do not move past a step until the previous step finishes successfully.
-
-
-
-Based on [avr-libc installation guide](http://www.nongnu.org/avr-libc/user-manual/install_tools.html)
-
-
-##Get the Required Packages
-Download the `cygwin` setup ([x86_64](https://cygwin.com/setup-x86_64.exe)) and install the default system plus the following if they are not already selected:
-- devel/gcc-core
-- devel/gcc-g++
-- devel/flex
-- devel/git
-- libs/libglib2.0_0
-- libs/libgcc1
-- interpreters/m4
-- web/wget
-
-The following sources will be required:
-- [gmp](https://gmplib.org/) (6.1.0)
-- [mpfr](http://www.mpfr.org/) (3.1.3)
-- [mpc](http://www.multiprecision.org/) (1.0.3) 
-- [binutils](https://www.sourceware.org/binutils/) (2.26)
-- [gcc](https://gcc.gnu.org/) (5.3.0)
-- [avr-libc](http://www.nongnu.org/avr-libc/) (2.0.0)
-
-The `dfu-programmer` will be required to flash the new firmware 
-- [dfu-programmer](https://dfu-programmer.github.io/) (0.7.2)
-
-
-The set of commands below will create a directory (`~/local/avr`) for the sources you compile to be installed on the machine and a directory (`~/src`) for these source files to be stored. The commands then download the sources of the needed packages and unpack them. Note: the expand commands are different depending on if the packages are offered as a `bz2` or `gz` archive
-
-```
-$ mkdir ~/local/avr
-$ mkdir ~/src
-$ cd ~/src
-$ wget https://gmplib.org/download/gmp/gmp-6.1.0.tar.bz2
-$ wget http://www.mpfr.org/mpfr-current/mpfr-3.1.3.tar.bz2
-$ wget ftp://ftp.gnu.org/gnu/mpc/mpc-1.0.3.tar.gz
-$ wget http://ftp.gnu.org/gnu/binutils/binutils-2.26.tar.gz
-$ wget http://mirror0.babylon.network/gcc/releases/gcc-5.3.0/gcc-5.3.0.tar.gz
-$ wget http://download.savannah.gnu.org/releases/avr-libc/avr-libc-2.0.0.tar.bz2
-$ tar -xjf gmp-6.1.0.tar.bz2
-$ tar -xjf mpfr-3.1.3.tar.bz2
-$ tar -zxf mpc-1.0.3.tar.gz
-$ tar -zxf binutils-2.26.tar.gz
-$ tar -zxf gcc-5.3.0.tar.gz
-$ tar -xjf avr-libc-2.0.0.tar.bz2 
-```
-
-##Setup the Build Environment
-These commands will set up the install directory and the `PATH` variable, which will allow you to access your installed packages.  Note: if you close the `cygwin` terminal window, you will need to rerun these commands, they are not permanent.
-```
-$ PREFIX=$HOME/local/avr
-$ export PREFIX
-$ PATH=/usr/local/bin:/usr/local/lib:/usr/local/include:/bin:/lib:/cygdrive/c/WINDOWS/system32:/cygdrive/c/WINDOWS
-$ PATH=$PATH:$PREFIX/bin
-$ export PATH
-```
-
-##The `gcc` Required Math Library Packages
-The following packages are required to be complied and installed in order to compile `gcc`.  They are not available through the `cygwin` package system, so we have to make them ourselves.  They must be complied in this order because each one depends on the previous.
-
-###Build and Install `gmp`
-```
-$ cd ~/src/gmp-6.1.0
-$ ./configure --enable-static --disable-shared
-$ make
-$ make check
-$ make install
-```
-
-###Build and Install `mpfr`
-```
-$ cd ~/src/mpfr-3.1.3
-$ ./configure --with-gmp-build=../gmp-6.1.0 --enable-static --disable-shared
-$ make
-$ make check
-$ make install
-```
-
-###Build and Install `mpc`
-```
-$ cd ~/src/mpc-1.0.3
-$ ./configure --with-gmp=/usr/local --with-mpfr=/usr/local --enable-static --disable-shared
-$ make
-$ make check
-$ make install
-```
-
-##OPTIONAL Part
-You can build and install a brand new `gcc` or you can use the one supplied by `cygwin`.  This will take about 4-5 hours to compile (It is a "native build", so it does the entire build **3 times**. This takes a long while). I would skip it.
-###Build and Install `gcc` on your Machine  
-```
-$ cd ~/src/gcc-5.3.0
-$ mkdir obj-local
-$ cd obj-local
-$ ../configure --enable-languages=c,c++ --with-gmp=/usr/local --with-mpfr=/usr/local --with-mpc=/usr/local --enable-static --disable-shared
-$ make
-$ make install
-```
-
-###Build and Install `binutils` on your Machine
-```
-$ cd ~/src/binutils-2.26
-$ mkdir obj-local
-$ cd obj-local
-$ ../configure
-$ make
-$ make install
-```
-##End OPTIONAL Part
-
-##Buliding `binutils`, `gcc`, and `avr-libc` for the AVR system
-Now we can make the critical stuff for compiling our firmware: `binutils`, `gcc`, and `avr-libc` for the AVR architecture.  These allow us to build and manipulate the firmware for the keyboard.
-
-###Build `binutils` for AVR
-```
-$ cd ~/src/binutils-2.26
-$ mkdir obj-avr
-$ cd obj-avr
-$ ../configure --prefix=$PREFIX --target=avr --disable-nls
-$ make
-$ make install
-```
-
-###Build `gcc` for AVR
-```
-$ cd ~/src/gcc-5.3.0
-$ mkdir obj-avr
-$ cd obj-avr
-$ ../configure --prefix=$PREFIX --target=avr --enable-languages=c,c++ --with-gmp=/usr/local --with-mpfr=/usr/local --with-mpc=/usr/local --enable-static --disable-shared --disable-nls --disable-libssp --with-dwarf2
-$ make
-$ make install
-```
-
-For building the `avr-libc`, we have to specify the host build system.  in my case it is `x86_64-unknown-cygwin`. You can look for build system type in the `gcc` configure notes for the proper `--build` specification to pass when you configure `avr-libc`.
-
-###Build `avr-libc` for AVR
-```
-$ cd ~/src/avr-libc-2.0.0
-$ ./configure --prefix=$PREFIX --build=x86_64-unknown-cygwin --host=avr
-$ make
-$ make install
-```
-
-##Install `dfu-programmer`
-To install the `dfu-programmer`, we must get if from [their website](https://dfu-programmer.github.io/) (no fancy command line tricks here, but [this](http://iweb.dl.sourceforge.net/project/dfu-programmer/dfu-programmer/0.7.2/dfu-programmer-win-0.7.2.zip) might work).
-Copy this file into your `cygwin` home directory.  (For me, it is `C:\cygwin64\home\Kevin`), extract the files, move `dfu-programmer.exe` to `~/local/avr/bin`. Most obnoxiously, the `libusb0_x86.dll` and `libusb0.sys` need to be moved from  `dfu/dfu-prog-usb-1.2.2/x86/` to a directory in the `Windows` `PATH` and the `cygwin` `PATH`. I achieved this by moving the files with Windows Explorer (you know, click and drag...) to  `C:\cygwin64\home\Kevin\local\avr\bin` Then, in a `WINDOWS` command prompt running:
-```
-C:\> set PATH=%PATH%;C:\cygwin64\home\Kevin\local\avr\bin
-```
-Adjust your path (for username) as needed. Also, `libusb0_x86.dll` needs to be renamed to `libusb0.dll`.  Why must this be so hard? You can tell that you were successful this way:
-```
-$ which dfu-programmer
-/home/Kevin/local/avr/bin/dfu-programmer
-
-$ dfu-programmer
-dfu-programmer 0.7.2
-https://github.com/dfu-programmer/dfu-programmer
-Type 'dfu-programmer --help'    for a list of commands
-     'dfu-programmer --targets' to list supported target devices
-```
-If you are not getting the above result, you will not be able to flash the firmware! 
-- Try making sure your `PATH` variables are set correctly for both `Windows` and `cygwin`. 
-- Do not extract it with `cygwin`'s `unzip` as it does not set the executable permissions correctly. If you did it anyway, do `chmod 755 dfu-programmer.exe`
-
-####Install the USB drivers
-These drivers are included in the `dfu-programmer` 0.7.2 (but you can get newer ones [here](http://iweb.dl.sourceforge.net/project/libusb-win32/libusb-win32-releases/1.2.6.0/libusb-win32-bin-1.2.6.0.zip)) and allow the `dfu-programmer` to program the firmware. From an **administrator-privileged** `Windows` terminal, run the following command (adjust the path as necessary) and accept the prompt that pops up:
-```
-C:\> pnputil -i -a C:\cygwin64\home\Kevin\dfu-prog-usb-1.2.2\atmel_usb_dfu.inf
-```
-This should be the result:
-```
-Microsoft PnP Utility
-
-Processing inf :            atmel_usb_dfu.inf
-Successfully installed the driver on a device on the system.
-Driver package added successfully.
-Published name :            oem104.inf
-
-
-Total attempted:              1
-Number successfully imported: 1
-```
-
-##Building and Flashing the Planck firmware!
-
-If you did everything else right. This part should be a snap! Grab the latest sources from `github`, make the Plank firmware, then flash it.
-
-###Build Planck and Load the Firmware
-```
-$ cd ~/src
-$ git clone https://github.com/jackhumbert/qmk_firmware.git
-$ cd qmk_firmware/keyboard/planck
-$ make
-```
-Make sure there are no errors.  You should end up with this or something similar:
-
-```
-Creating load file for Flash: planck.hex
-avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature planck.elf planck.hex
-
-Creating load file for EEPROM: planck.eep
-avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" \
---change-section-lma .eeprom=0 --no-change-warnings -O ihex planck.elf planck.eep || exit 0
-
-Creating Extended Listing: planck.lss
-avr-objdump -h -S -z planck.elf > planck.lss
-
-Creating Symbol Table: planck.sym
-avr-nm -n planck.elf > planck.sym
-
-Size after:
-   text    data     bss     dec     hex filename
-  18602      82     155   18839    4997 planck.elf
-
--------- end --------
-```
-
-If you do not get the above, you **did not** build the firmware, and you will have nothing to flash.  If you have the fresh clone from github, it was probably something gone wrong in this install process, go check and see what didn't work and threw errors or what steps you might have missed.
-
-But if everything went OK, you are ready to flash! Press the reset button on the bottom of the Planck, wait two seconds, then:
-```
-$ make dfu
-```
-.
-.
-.
-profit!!!
+#Planck Advanced (but not too advanced) `cygwin` Users Guide
+If you are a user of the [cygwin environment](https://cygwin.com) in Windows and want the freedom to use the latest tools available, then this is the guide for you. If compiling your own copy of the latest and greatest Gnu C Compiler makes you super happy, then this is the guide for you. If the command line make you smile, then this is the guide for you.
+
+This guide was written step by step as I went through the process on a `Windows 10` `x86_64` and a `Windows 7` `amd k10` based system.  This should be generally applicable to to any `Windows` environment with `cygwin`.
+
+#####Do not skip steps. Do not move past a step until the previous step finishes successfully.
+
+Based on [avr-libc installation guide](http://www.nongnu.org/avr-libc/user-manual/install_tools.html)
+
+##Get the Required Packages
+Download the `cygwin` setup ([x86_64](https://cygwin.com/setup-x86_64.exe)) and install the default system plus the following if they are not already selected:
+- devel/git
+- devel/gcc-core
+- devel/gcc-g++
+- devel/flex
+- devel/bison
+- devel/make
+- devel/texinfo
+- devel/gettext-devel
+- devel/automake
+- devel/autoconfig
+- devel/libtool
+- text/gettext
+- libs/libgcc1
+- interpreters/m4
+- web/wget
+- archive/unzip
+
+The following sources will be required:
+- [gmp](https://gmplib.org/) (6.1.0)
+- [mpfr](http://www.mpfr.org/) (3.1.4)
+- [mpc](http://www.multiprecision.org/) (1.0.3) 
+- [binutils](https://www.sourceware.org/binutils/) (2.26)
+- [gcc](https://gcc.gnu.org/) (5.3.0)
+- [avr-libc](http://www.nongnu.org/avr-libc/) (2.0.0)
+
+The `dfu-programmer` will be required to flash the new firmware 
+- [dfu-programmer](https://dfu-programmer.github.io/) (0.7.2)
+
+The set of commands below will create a directory (`~/local/avr`) for the sources you compile to be installed on the machine and a directory (`~/src`) for these source files to be stored. The commands then download the sources of the needed packages and unpack them. Note: the expand commands are different depending on if the packages are offered as a `bz2` or `gz` archive
+```
+$ mkdir ~/local
+$ mkdir ~/local/avr
+$ mkdir ~/src
+$ cd ~/src
+$ wget https://gmplib.org/download/gmp/gmp-6.1.0.tar.bz2
+$ wget http://www.mpfr.org/mpfr-3.1.4/mpfr-3.1.4.tar.bz2
+$ wget ftp://ftp.gnu.org/gnu/mpc/mpc-1.0.3.tar.gz
+$ wget http://ftp.gnu.org/gnu/binutils/binutils-2.26.tar.gz
+$ wget http://mirror0.babylon.network/gcc/releases/gcc-5.3.0/gcc-5.3.0.tar.gz
+$ wget http://download.savannah.gnu.org/releases/avr-libc/avr-libc-2.0.0.tar.bz2
+$ tar -xjf gmp-6.1.0.tar.bz2
+$ tar -xjf mpfr-3.1.4.tar.bz2
+$ tar -zxf mpc-1.0.3.tar.gz
+$ tar -zxf binutils-2.26.tar.gz
+$ tar -zxf gcc-5.3.0.tar.gz
+$ tar -xjf avr-libc-2.0.0.tar.bz2 
+```
+
+##Setup the Build Environment
+These commands will set up the install directory and the `PATH` variable, which will allow you to access your installed packages.  Note: if you close the `cygwin` terminal window, you will need to rerun these commands, they are not permanent.
+```
+$ PREFIX=$HOME/local/avr
+$ export PREFIX
+$ PATH=/usr/local/bin:/usr/local/lib:/usr/local/include:/bin:/lib:/cygdrive/c/WINDOWS/system32:/cygdrive/c/WINDOWS
+$ PATH=$PATH:$PREFIX/bin:$PREFIX/lib
+$ export PATH
+```
+
+##The `gcc` Required Math Library Packages
+The following packages are required to be complied and installed in order to compile `gcc`.  They are not sufficiently available through the `cygwin` package system, so we have to make them ourselves.  They must be complied in this order because each one depends on the previous. Verfiy that for each package, `make check` returns all passing and no fails.
+
+###Build and Install `gmp`
+```
+$ cd ~/src/gmp-6.1.0
+$ ./configure --enable-static --disable-shared
+$ make
+$ make check
+$ make install
+```
+
+###Build and Install `mpfr`
+```
+$ cd ~/src/mpfr-3.1.4
+$ ./configure --with-gmp-build=../gmp-6.1.0 --enable-static --disable-shared
+$ make
+$ make check
+$ make install
+```
+
+###Build and Install `mpc`
+```
+$ cd ~/src/mpc-1.0.3
+$ ./configure --with-gmp=/usr/local --with-mpfr=/usr/local --enable-static --disable-shared
+$ make
+$ make check
+$ make install
+```
+
+##OPTIONAL Part
+You can build and install a brand new `gcc` or you can use the one supplied by `cygwin`.  This will take about 4-5 hours to compile (It is a "native build", so it does the entire build **3 times**. This takes a long while).
+
+###Build and Install `gcc` for Your Machine  
+```
+$ cd ~/src/gcc-5.3.0
+$ mkdir obj-local
+$ cd obj-local
+$ ../configure --enable-languages=c,c++ --with-gmp=/usr/local --with-mpfr=/usr/local --with-mpc=/usr/local --enable-static --disable-shared
+$ make
+$ make install
+```
+##End OPTIONAL Part
+
+###Build and Install `binutils` for Your Machine
+```
+$ cd ~/src/binutils-2.26
+$ mkdir obj-local
+$ cd obj-local
+$ ../configure
+$ make
+$ make install
+```
+
+##Buliding `binutils`, `gcc`, and `avr-libc` for the AVR system
+Now we can make the critical stuff for compiling our firmware: `binutils`, `gcc`, and `avr-libc` for the AVR architecture.  These allow us to build and manipulate the firmware for the keyboard.
+
+###Build `binutils` for AVR
+If you plan to build and install `avr-gdb` also, use the `gdb` install at the end of this guide as it also builds the `binutils`
+```
+$ cd ~/src/binutils-2.26
+$ mkdir obj-avr
+$ cd obj-avr
+$ ../configure --prefix=$PREFIX --target=avr --disable-nls
+$ make
+$ make install
+```
+
+###Build `gcc` for AVR
+```
+$ cd ~/src/gcc-5.3.0
+$ mkdir obj-avr
+$ cd obj-avr
+$ ../configure --prefix=$PREFIX --target=avr --enable-languages=c,c++ --with-gmp=/usr/local --with-mpfr=/usr/local --with-mpc=/usr/local --enable-static --disable-shared --disable-nls --disable-libssp --with-dwarf2
+$ make
+$ make install
+```
+
+###Build `avr-libc` for AVR
+For building the `avr-libc`, we have to specify the host build system.  In my case it is `x86_64-unknown-cygwin`. You can look for build system type in the `gcc` configure notes for the proper `--build` specification to pass when you configure `avr-libc`.
+```
+$ cd ~/src/avr-libc-2.0.0
+$ ./configure --prefix=$PREFIX --build=x86_64-unknown-cygwin --host=avr
+$ make
+$ make install
+```
+
+##Building 'dfu-programmer' for flashing the firmware via USB and installing the drivers
+We can either build our own, or use the precomplied binaries.  The precompiled binaries don't play well with `cygwin` so it is better to build them ourselves.  The procedure for the precompiled binaries is included at the end of this guide.
+
+### Build and Install the `libusb`
+The `dfu-programmer` requires `libusb` so that it can interact with the USB system. These repos must be bootstrapped in order to create an appropriate `./configure` and `Makefile` for your system.
+```
+$ cd ~/src
+$ git clone https://github.com/libusb/libusb.git
+$ cd libusb
+$ ./bootstrap.sh
+$ ./configure
+$ make
+$ make install
+```
+
+### Build and Install the `dfu-programmer`
+```
+$ cd ~/src
+$ git clone https://github.com/dfu-programmer/dfu-programmer.git
+$ cd dfu-programmer
+$ ./bootstrap.sh
+$ ./configure
+$ make
+$ make install
+```
+
+Verify the installation with:
+```
+$ which dfu-programmer
+/usr/local/bin/dfu-programmer
+
+$ dfu-programmer
+dfu-programmer 0.7.2
+https://github.com/dfu-programmer/dfu-programmer
+Type 'dfu-programmer --help'    for a list of commands
+     'dfu-programmer --targets' to list supported target devices
+```
+If you are not getting the above result, you will not be able to flash the firmware! 
+
+###Install the USB drivers
+The drivers are included in the windows binary version of [`dfu-programmer` 0.7.2](http://iweb.dl.sourceforge.net/project/dfu-programmer/dfu-programmer/0.7.2/dfu-programmer-win-0.7.2.zip).
+```
+$ cd ~/src
+$ wget http://iweb.dl.sourceforge.net/project/dfu-programmer/dfu-programmer/0.7.2/dfu-programmer-win-0.7.2.zip
+$ unzip dfu-programmer-win-0.7.2.zip -d dfu-programmer-win-0.7.2
+```
+
+or
+
+The official drivers are found in [Atmel's `FLIP` installer](http://www.atmel.com/images/Flip%20Installer%20-%203.4.7.112.exe). Download and then install `FLIP`. Upon installation, the drivers will be found in `C:\Program Files (x86)\Atmel\Flip 3.4.7\usb`.
+
+Then, from an **administrator-privileged** `Windows` terminal, run the following command (adjust the path for username, etc. as necessary) and accept the prompt that pops up:
+```
+C:\> pnputil -i -a C:\cygwin64\home\Kevin\src\dfu-programmer-win-0.7.2\dfu-prog-usb-1.2.2\atmel_usb_dfu.inf
+or
+C:\> pnputil -i -a "C:\Program Files (x86)\Atmel\Flip 3.4.7\usb\atmel_usb_dfu.inf"
+```
+
+This should be the result:
+```
+Microsoft PnP Utility
+
+Processing inf :            atmel_usb_dfu.inf
+Successfully installed the driver on a device on the system.
+Driver package added successfully.
+Published name :            oem104.inf
+
+
+Total attempted:              1
+Number successfully imported: 1
+```
+
+Alternatively, the `Windows` driver can be installed when prompted by `Windows` when the keyboard is attached. Do not let `Windows` search for a driver; specify the path to search for a driver and point it to the `atmel_usb_dfu.inf` file.
+
+##Building and Flashing the Planck firmware!
+If you did everything else right. This part should be a snap! Grab the latest sources from `github`, make the Plank firmware, then flash it.
+
+###Build Planck and Load the Firmware
+```
+$ cd ~/src
+$ git clone https://github.com/jackhumbert/qmk_firmware.git
+$ cd qmk_firmware/keyboard/planck
+$ make
+```
+
+Make sure there are no errors.  You should end up with this or something similar:
+```
+Creating load file for Flash: planck.hex
+avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature planck.elf planck.hex
+
+Creating load file for EEPROM: planck.eep
+avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+--change-section-lma .eeprom=0 --no-change-warnings -O ihex planck.elf planck.eep || exit 0
+
+Creating Extended Listing: planck.lss
+avr-objdump -h -S -z planck.elf > planck.lss
+
+Creating Symbol Table: planck.sym
+avr-nm -n planck.elf > planck.sym
+
+Size after:
+   text    data     bss     dec     hex filename
+  18602      82     155   18839    4997 planck.elf
+
+-------- end --------
+```
+
+If you do not get the above, you **did not** build the firmware, and you will have nothing to flash.  If you have the fresh clone from `github`, it was probably something gone wrong in this install process, go check and see what didn't work and threw errors or what steps you might have missed.
+
+But if everything went OK, you are ready to flash! Press the reset button on the bottom of the Planck, wait two seconds, then:
+```
+$ make dfu
+```
+.
+.
+.
+profit!!!
+
+
+
+
+
+##extra bits...
+
+###Installing Precompiled `dfu-programmer` Binaries (not recommended for `cygwin`)
+To install the `dfu-programmer` from the binaries, we must get if from [the `dfu-programmer` website](https://dfu-programmer.github.io/) ([0.7.2](http://iweb.dl.sourceforge.net/project/dfu-programmer/dfu-programmer/0.7.2/dfu-programmer-win-0.7.2.zip)).
+
+Copy this file into your `cygwin` home\src directory.  (For me, it is `C:\cygwin64\home\Kevin\src`), extract the files, move `dfu-programmer.exe` to `~/local/avr/bin`. Most obnoxiously, the `libusb0_x86.dll` and `libusb0.sys` need to be moved from  `./dfu-prog-usb-1.2.2/x86/` to a directory in the `Windows` `PATH` and the `cygwin` `PATH`. This is because the `dfu-programmer` binary is `mingw` based, not `cygwin` based, so the `dlls` do not cooperate. I achieved acceptable pathing by moving the files to  `C:\cygwin64\home\Kevin\local\avr\bin` Then, in a `WINDOWS` command prompt running (Adjusting your path for username, etc. as needed):
+```
+C:\> set PATH=%PATH%;C:\cygwin64\home\Kevin\local\avr\bin
+```
+
+Then, rename `libusb0_x86.dll` to `libusb0.dll`.
+ 
+You can tell that you were successful by trying to execute 'dfu-programmer' from the 'cygwin' prompt:
+```
+$ which dfu-programmer
+/home/Kevin/local/avr/bin/dfu-programmer
+
+$ dfu-programmer
+dfu-programmer 0.7.2
+https://github.com/dfu-programmer/dfu-programmer
+Type 'dfu-programmer --help'    for a list of commands
+     'dfu-programmer --targets' to list supported target devices
+```
+
+If you are not getting the above result, you will not be able to flash the firmware! 
+- Try making sure your `PATH` variables are set correctly for both `Windows` and `cygwin`. 
+- Make sure the `dll` is named correctly.
+- Do not extract it with `cygwin`'s `unzip` as it does not set the executable permission. If you did it anyway, do `chmod +x dfu-programmer.exe`.
+- Still have problems? Try building it instead.
+
+
+##Debugging Tools
+
+These tools are for debugging your firmware, etc. before flashing. Theoretically, it can save your memory from wearing out. However, these tool do not work 100% for the Planck firmware.
+
+### `gdb` for AVR
+`gdb` has a simulator for AVR but it does not support all instructions (like WDT), so it immediately crashes when running the Planck firmware (because `lufa.c` disables the WDT in the first few lines of execution). But it can still be useful in debugging example code and test cases, if you know how to use it.
+
+```
+$ cd ~/src
+$ git clone git://sourceware.org/git/binutils-gdb.git
+$ cd binutils-gdb
+$ mkdir obj-avr
+$ cd obj-avr
+$ ../configure --prefix=$PREFIX --target=avr --build=x86_64-unknown-cygwin --with-gmp=/usr/local --with-mpfr=/usr/local --with-mpc=/usr/local --disable-nls --enable-static
+$ make
+$ make install
+```
+
+### `simulavr`
+`simulavr` is an AVR simulator.  It runs the complied AVR elfs. `simulavr` does not support the `atmega32u4` device... it does `atmega32` but that is not good enough for the firmware (no PORTE and other things), so you cannot run the Planck firmware. I use it to simulate ideas I have for features in separate test projects.
+
+This one is a major pain in the butt because it has a lot of dependencies and it is buggy.  I will do my best to explain it but... it was hard to figure out. A few things need to be changed in the 'Makefile' to make it work in `cygwin`.
+
+
+```
+$ cd ~/src
+$ git clone https://github.com/Traumflug/simulavr.git
+$ cd simulavr
+$ ./bootstrap
+$ ./configure --prefix=$PREFIX --enable-static --disable-tcl --disable-doxygen-doc
+```
+ Edit `src/Makefile.am` now so that `-no-undefined` is included (I did this by removing the SYS_MINGW conditional surrounding `libsim_la_LDFLAGS += -no-undefined` and  `libsimulavr_la_LDFLAGS += -no-undefined \ libsimulavr_la_LIBADD += $(TCL_LIB)`. Also, `$(EXEEXT)` is added after `kbdgentables` in two places.
+
+```
+$ make
+$ make install
+```
+
+
+TODO:
+- git repos for all sources
+- command line magic for cygwin setup
+- better options for `dfu-drivers`

+ 49 - 0
keyboard/planck/common_keymaps/keymap_mitch.c

@@ -0,0 +1,49 @@
+#include "keymap_common.h"
+
+const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = KEYMAP(
+  TAB,  Q,    W,    E,    R,    T,    Y,    U,    I,    O,    P,    BSPC,
+  LCTL, A,    S,    D,    F,    G,    H,    J,    K,    L,    SCLN, QUOT,
+  LSFT, Z,    X,    C,    V,    B,    N,    M,    COMM, DOT,  SLSH, FN3,
+  ESC,  DEL,  LALT, LGUI, FN2,  SPC,        FN1,  LEFT, DOWN, UP,   RGHT),
+[1] = KEYMAP(
+  GRV,  GRV,  FN22, FN19, FN10, TRNS, TRNS, 7,    8,    9,    0,    BSPC,
+  TRNS, LBRC, RBRC, FN23, FN24, TRNS, TRNS, 4,    5,    6,    TRNS, BSLS,
+  TRNS, MINS, FN20, EQL,  FN21, TRNS, TRNS, 1,    2,    3,    TRNS, ENT,
+  TRNS, TRNS, TRNS, TRNS, TRNS, SPC,        FN1,  TRNS, PGDN, PGUP, TRNS),
+[2] = KEYMAP(
+  FN26, FN10, FN11, FN12, FN13, FN14, FN15, FN17, FN18, FN19, FN10, DEL,
+  TRNS, TRNS, MUTE, VOLD, VOLU, TRNS, BSPC, FN14, FN15, FN16, TRNS, FN25,
+  TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, FN11, FN12, FN13, TRNS, ENT,
+  TRNS, TRNS, TRNS, TRNS, FN2,  ENT,        TRNS, TRNS, PGDN, PGUP, TRNS),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+  [1] = ACTION_LAYER_MOMENTARY(1),  // Switch layer raise
+  [2] = ACTION_LAYER_MOMENTARY(2),  // Switch layer lower
+
+  [3] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_ENT), // Right shift serves as Enter on tap
+
+  // Numeric shift modifiers
+  [10] = ACTION_MODS_KEY(MOD_LSFT, KC_0),
+  [11] = ACTION_MODS_KEY(MOD_LSFT, KC_1),
+  [12] = ACTION_MODS_KEY(MOD_LSFT, KC_2),
+  [13] = ACTION_MODS_KEY(MOD_LSFT, KC_3),
+  [14] = ACTION_MODS_KEY(MOD_LSFT, KC_4),
+  [15] = ACTION_MODS_KEY(MOD_LSFT, KC_5),
+  [16] = ACTION_MODS_KEY(MOD_LSFT, KC_6),
+  [17] = ACTION_MODS_KEY(MOD_LSFT, KC_7),
+  [18] = ACTION_MODS_KEY(MOD_LSFT, KC_8),
+  [19] = ACTION_MODS_KEY(MOD_LSFT, KC_9),
+
+  // Other shift modifiers
+  [20] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS), // _
+  [21] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL),  // +
+  [22] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV),  // ~
+  [23] = ACTION_MODS_KEY(MOD_LSFT, KC_LBRC), // {
+  [24] = ACTION_MODS_KEY(MOD_LSFT, KC_RBRC), // }
+  [25] = ACTION_MODS_KEY(MOD_LSFT, KC_BSLS), // |
+
+  // Switch windows in app
+  [26] = ACTION_MODS_KEY(MOD_LGUI, KC_GRV),
+};

+ 311 - 0
quantum/keymap_extras/keymap_bepo.h

@@ -0,0 +1,311 @@
+/* Keymap macros for the French BÉPO layout - http://bepo.fr */
+#ifndef KEYMAP_BEPO_H
+#define KEYMAP_BEPO_H
+
+#include "keymap_common.h"
+
+// Alt gr
+#ifndef ALTGR
+#define ALTGR(kc)   RALT(kc)
+#endif
+#ifndef ALGR
+#define ALGR(kc)    ALTGR(kc)
+#endif
+#define BP_ALGR KC_RALT
+
+// Normal characters
+// First row (on usual keyboards)
+#define BP_DOLLAR           KC_GRAVE            // $
+#define BP_DLR              BP_DOLLAR
+#define BP_DOUBLE_QUOTE     KC_1                // "
+#define BP_DQOT             BP_DOUBLE_QUOTE
+#define BP_LEFT_GUILLEMET   KC_2                // «
+#define BP_LGIL             BP_LEFT_GUILLEMET
+#define BP_RIGHT_GUILLEMET  KC_3                // »
+#define BP_RGIL             BP_RIGHT_GUILLEMET
+#define BP_LEFT_PAREN       KC_4                // (
+#define BP_LPRN             BP_LEFT_PAREN
+#define BP_RIGHT_PAREN      KC_5                // )
+#define BP_RPRN             BP_RIGHT_PAREN
+#define BP_AT               KC_6                // @
+#define BP_PLUS             KC_7                // +
+#define BP_MINUS            KC_8                // -
+#define BP_MINS             BP_MINUS
+#define BP_SLASH            KC_9                // /
+#define BP_SLSH             BP_SLASH
+#define BP_ASTERISK         KC_0                // *
+#define BP_ASTR             BP_ASTERISK
+#define BP_EQUAL            KC_MINUS            // =
+#define BP_EQL              BP_EQUAL
+#define BP_PERCENT          KC_EQUAL            // %
+#define BP_PERC             BP_PERCENT
+
+// Second row
+#define BP_B                KC_Q
+#define BP_E_ACUTE          KC_W        // é
+#define BP_ECUT             BP_E_ACUTE
+#define BP_P                KC_E
+#define BP_O                KC_R
+#define BP_E_GRAVE          KC_T        // è
+#define BP_EGRV             BP_E_GRAVE
+#define BP_DEAD_CIRCUMFLEX  KC_Y        // dead ^
+#define BP_DCRC             BP_DEAD_CIRCUMFLEX
+#define BP_V                KC_U
+#define BP_D                KC_I
+#define BP_L                KC_O
+#define BP_J                KC_P
+#define BP_Z                KC_LBRACKET
+#define BP_W                KC_RBRACKET
+
+// Third row
+#define BP_A            KC_A
+#define BP_U            KC_S
+#define BP_I            KC_D
+#define BP_E            KC_F
+#define BP_COMMA        KC_G        // ,
+#define BP_COMM         BP_COMMA
+#define BP_C            KC_H
+#define BP_T            KC_J
+#define BP_S            KC_K
+#define BP_R            KC_L
+#define BP_N            KC_SCOLON
+#define BP_M            KC_QUOTE
+#define BP_C_CEDILLA    KC_BSLASH   // ç
+#define BP_CCED         BP_C_CEDILLA
+
+// Fourth row
+#define BP_E_CIRCUMFLEX     KC_NONUS_BSLASH // ê
+#define BP_ECRC             BP_E_CIRCUMFLEX
+#define BP_A_GRAVE          KC_Z            // à
+#define BP_AGRV             BP_A_GRAVE
+#define BP_Y                KC_X
+#define BP_X                KC_C
+#define BP_DOT              KC_V            // .
+#define BP_K                KC_B
+#define BP_APOSTROPHE       KC_N
+#define BP_APOS             BP_APOSTROPHE   // '
+#define BP_Q                KC_M
+#define BP_G                KC_COMMA
+#define BP_H                KC_DOT
+#define BP_F                KC_SLASH
+
+// Shifted characters
+// First row
+#define BP_HASH     LSFT(BP_DOLLAR)     // #
+#define BP_1        LSFT(KC_1)
+#define BP_2        LSFT(KC_2)
+#define BP_3        LSFT(KC_3)
+#define BP_4        LSFT(KC_4)
+#define BP_5        LSFT(KC_5)
+#define BP_6        LSFT(KC_6)
+#define BP_7        LSFT(KC_7)
+#define BP_8        LSFT(KC_8)
+#define BP_9        LSFT(KC_9)
+#define BP_0        LSFT(KC_0)
+#define BP_DEGREE   LSFT(BP_EQUAL)      // °
+#define BP_DEGR     BP_DEGREE
+#define BP_GRAVE    LSFT(BP_PERCENT)    // `
+#define BP_GRV      BP_GRAVE
+
+// Second row
+#define BP_EXCLAIM  LSFT(BP_DEAD_CIRCUMFLEX)    // !
+#define BP_EXLM     BP_EXCLAIM
+
+// Third row
+#define BP_SCOLON   LSFT(BP_COMMA)  // ;
+#define BP_SCLN     BP_SCOLON
+
+// Fourth row
+#define BP_COLON    LSFT(BP_DOT)    // :
+#define BP_COLN     BP_COLON
+#define BP_QUESTION LSFT(BP_QUOTE)  // ?
+#define BP_QEST     BP_QUESTION
+
+// Space bar
+#define BP_NON_BREAKING_SPACE   LSFT(KC_SPACE)
+#define BP_NBSP                 BP_NON_BREAKING_SPACE
+
+// AltGr-ed characters
+// First row
+#define BP_EN_DASH          ALTGR(BP_DOLLAR)    // –
+#define BP_NDSH             BP_EN_DASH
+#define BP_EM_DASH          ALTGR(KC_1)         // —
+#define BP_MDSH             BP_EM_DASH
+#define BP_LESS             ALTGR(KC_2)         // <
+#define BP_GREATER          ALTGR(KC_3)         // >
+#define BP_GRTR             BP_GREATER
+#define BP_LBRACKET         ALTGR(KC_4)         // [
+#define BP_LBRC             BP_LBRACKET
+#define BP_RBRACKET         ALTGR(KC_5)         // ]
+#define BP_RBRC             BP_RBRACKET
+#define BP_CIRCUMFLEX       ALTGR(KC_6)         // ^
+#define BP_CIRC             BP_CIRCUMFLEX
+#define BP_PLUS_MINUS       ALTGR(KC_7)         // ±
+#define BP_PSMS             BP_PLUS_MINUS
+#define BP_MATH_MINUS       ALTGR(KC_8)         // −
+#define BP_MMNS             BP_MATH_MINUS
+#define BP_OBELUS           ALTGR(KC_9)         // ÷
+#define BP_OBEL             BP_OBELUS
+// more conventional name of the symbol
+#define BP_DIVISION_SIGN    BP_OBELUS
+#define BP_DVSN             BP_DIVISION_SIGN
+#define BP_TIMES            ALTGR(KC_0)         // ×
+#define BP_TIMS             BP_TIMES
+#define BP_DIFFERENT        ALTGR(BP_EQUAL)     // ≠
+#define BP_DIFF             BP_DIFFERENT
+#define BP_PERMILLE         ALTGR(BP_PERCENT)   // ‰
+#define BP_PMIL             BP_PERMILLE
+
+// Second row
+#define BP_PIPE                 ALTGR(BP_B)         // |
+#define BP_DEAD_ACUTE           ALTGR(BP_E_ACUTE)   // dead ´
+#define BP_DACT                 BP_DEAD_ACUTE
+#define BP_AMPERSAND            ALTGR(BP_P)         // &
+#define BP_AMPR                 BP_AMPERSAND
+#define BP_OE_LIGATURE          ALTGR(BP_O)         // œ
+#define BP_OE                   BP_OE_LIGATURE
+#define BP_DEAD_GRAVE           ALTGR(BP_E_GRAVE)   // `
+#define BP_DGRV                 BP_DEAD_GRAVE
+#define BP_INVERTED_EXCLAIM     ALTGR(BP_DEAD_CIRCUMFLEX)   // ¡
+#define BP_IXLM                 BP_INVERTED_EXCLAIM
+#define BP_DEAD_CARON           ALTGR(BP_V)         // dead ˇ
+#define BP_DCAR                 BP_DEAD_CARON
+#define BP_ETH                  ALTGR(BP_D)         // ð
+#define BP_DEAD_SLASH           ALTGR(BP_L)         // dead /
+#define BP_DSLH                 BP_DEAD_SLASH
+#define BP_IJ_LIGATURE          ALTGR(BP_J)         // ij
+#define BP_IJ                   BP_IJ_LIGATURE
+#define BP_SCHWA                ALTGR(BP_Z)         // ə
+#define BP_SCWA                 BP_SCHWA
+#define BP_DEAD_BREVE           ALTGR(BP_W)         // dead ˘
+#define BP_DBRV                 BP_DEAD_BREVE
+
+// Third row
+#define BP_AE_LIGATURE              ALTGR(BP_A)         // æ
+#define BP_AE                       BP_AE_LIGATURE
+#define BP_U_GRAVE                  AGR(BP_U)           // ù
+#define BP_UGRV                     BP_U_GRAVE
+#define BP_DEAD_TREMA               ALTGR(BP_I)         // dead ¨ (trema/umlaut/diaresis)
+#define BP_DTRM                     BP_DEAD_TREMA
+#define BP_EURO                     ALTGR(BP_E)         // €
+#define BP_TYPOGRAPHICAL_APOSTROPHE ALTGR(BP_COMMMA)    // ’
+#define BP_TAPO                     BP_TYPOGRAPHICAL_APOSTROPHE
+#define BP_COPYRIGHT                ALTGR(BP_C)         // ©
+#define BP_CPRT                     BP_COPYRIGHT
+#define BP_THORN                    ALTGR(BP_T)         // þ
+#define BP_THRN                     BP_THORN
+#define BP_SHARP_S                  ALTGR(BP_S)         // ß
+#define BP_SRPS                     BP_SHARP_S
+#define BP_REGISTERED_TRADEMARK     ALTGR(BP_R)         // ®
+#define BP_RTM                      BP_REGISTERED_TRADEMARK
+#define BP_DEAD_TILDE               ALTGR(BP_N)         // dead ~
+#define BP_DTLD                     BP_DEAD_TILDE
+#define BP_DEAD_MACRON              ALTGR(BP_M)         // dead ¯
+#define BP_DMCR                     BP_DEAD_MACRON
+#define BP_DEAD_CEDILLA             ALTGR(BP_C_CEDILLA) // dead ¸
+#define BP_DCED                     BP_DEAD_CEDILLA
+
+// Fourth row
+#define BP_NONUS_SLASH          ALTGR(BP_E_CIRCUMFLEX)  // / on non-us backslash key (102nd key, ê in bépo)
+#define BP_NUSL                 BP_NONUS_SLASH
+#define BP_BACKSLASH            ALTGR(BP_A_GRAVE)       /* \ */
+#define BP_BSLS                 BP_BACKSLASH
+#define BP_LEFT_CURLY_BRACE     ALTGR(BP_Y)             // {
+#define BP_LCBR                 BP_LEFT_CURLY_BRACE
+#define BP_RIGHT_CURLY_BRACE    ALTGR(BP_X)             // }
+#define BP_RCBR                 BP_RIGHT_CURLY_BRACE
+#define BP_ELLIPSIS             ALTGR(BP_DOT)           // …
+#define BP_ELPS                 BP_ELLIPSIS
+#define BP_TILDE                ALTGR(BP_K)             // ~
+#define BP_TILD                 BP_TILDE
+#define BP_INVERTED_QUESTION    ALTGR(BP_QUESTION)      // ¿
+#define BP_IQST                 BP_INVERTED_QUESTION
+#define BP_DEAD_RING            ALTGR(BP_Q)             // dead °
+#define BP_DRNG                 BP_DEAD_RING
+#define BP_DEAD_GREEK           ALTGR(BP_G)             // dead Greek key (following key will make a Greek letter)
+#define BP_DGRK                 BP_DEAD_GREEK
+#define BP_DAGGER               ALTGR(BP_H)             // †
+#define BP_DAGR                 BP_DAGGER
+#define BP_DEAD_OGONEK          ALTGR(BP_F)             // dead ˛
+#define BP_DOGO                 BP_DEAD_OGONEK
+
+// Space bar
+#define BP_UNDERSCORE   ALTGR(KC_SPACE)     // _
+#define BP_UNDS         BP_UNDERSCORE
+
+// AltGr-Shifted characters (different from capitalised AltGr-ed characters)
+// First row
+#define BP_PARAGRAPH            ALTGR(BP_HASH)      // ¶
+#define BP_PARG                 BP_PARAGRAPH
+#define BP_LOW_DOUBLE_QUOTE     ALTGR(BP_1)         // „
+#define BP_LWQT                 BP_LOW_DOUBLE_QUOTE
+#define BP_LEFT_DOUBLE_QUOTE    ALTGR(BP_2)         // “
+#define BP_LDQT                 BP_LEFT_DOUBLE_QUOTE
+#define BP_RIGHT_DOUBLE_QUOTE   ALTGR(BP_3)         // ”
+#define BP_RDQT                 BP_RIGHT_DOUBLE_QUOTE
+#define BP_LESS_OR_EQUAL        ALTGR(BP_4)         // ≤
+#define BP_LEQL                 BP_LESS_OR_EQUAL
+#define BP_GREATER_OR_EQUAL     ALTGR(BP_5)         // ≥
+#define BP_GEQL                 BP_GREATER_OR_EQUAL
+// nothing on ALTGR(BP_6)
+#define BP_NEGATION             ALTGR(BP_7)         // ¬
+#define BP_NEGT                 BP_NEGATION
+#define BP_ONE_QUARTER          ALTGR(BP_8)         // ¼
+#define BP_1QRT                 BP_ONE_QUARTER
+#define BP_ONE_HALF             ALTGR(BP_9)         // ½
+#define BP_1HLF                 BP_ONE_HALF
+#define BP_THREE_QUARTERS       ALTGR(BP_0)         // ¾
+#define BP_3QRT                 BP_THREE_QUARTERS
+#define BP_MINUTES              ALTGR(BP_DEGREE)    // ′
+#define BP_MNUT                 BP_MINUTES
+#define BP_SECONDS              ALTGR(BP_GRAVE)     // ″
+#define BP_SCND                 BP_SECONDS
+
+// Second row
+#define BP_BROKEN_PIPE          LSFT(BP_PIPE)           // ¦
+#define BP_BPIP                 BP_BROKEN_PIPE
+#define BP_DEAD_DOUBLE_ACUTE    LSFT(BP_DEAD_ACUTE)     // ˝
+#define BP_DDCT                 BP_DEAD_DOUBLE_ACUTE
+#define BP_SECTION              ALTGR(LSFT(BP_P))       // §
+#define BP_SECT                 BP_SECTION
+// LSFT(BP_DEAD_GRAVE) is actually the same character as LSFT(BP_PERCENT)
+#define BP_GRAVE_BIS            LSFT(BP_DEAD_GRAVE)     // `
+#define BP_GRVB                 BP_GRAVE_BIS
+
+// Third row
+#define BP_DEAD_DOT_ABOVE       LSFT(BP_DEAD_TREMA)     // dead ˙
+#define BP_DDTA                 BP_DEAD_DOT_ABOVE
+#define BP_DEAD_CURRENCY        LSFT(BP_EURO)           // dead ¤ (next key will generate a currency code like ¥ or £)
+#define BP_DCUR                 BP_DEAD_CURRENCY
+#define BP_DEAD_HORN            LSFT(ALTGR(BP_COMMA))   // dead ̛
+#define BP_DHRN                 BP_DEAD_HORN
+#define BP_LONG_S               LSFT(ALTGR(BP_C))       // ſ
+#define BP_LNGS                 BP_LONG_S
+#define BP_TRADEMARK            LSFT(BP_REGISTERED_TRADEMARK)   // ™
+#define BP_TM                   BP_TRADEMARK
+#define BP_ORDINAL_INDICATOR_O  LSFT(ALTGR(BP_M))               // º
+#define BP_ORDO                 BP_ORDINAL_INDICATOR_O
+#define BP_DEAD_COMMA           LSFT(BP_DEAD_CEDILLA)   // dead ˛
+#define BP_DCOM                 BP_DEAD_COMMA
+
+// Fourth row
+#define BP_LEFT_QUOTE           LSFT(ALTGR(BP_Y))       // ‘
+#define BP_LQOT                 BP_LEFT_QUOTE
+#define BP_RIGHT_QUOTE          LSFT(ALTGR(BP_X))       // ’
+#define BP_RQOT                 BP_RIGHT_QUOTE
+#define BP_INTERPUNCT           LSFT(ALTGR(BP_DOT))     // ·
+#define BP_IPCT                 BP_INTERPUNCT
+#define BP_DEAD_HOOK_ABOVE      LSFT(ALTGR(BP_QUESTION))    // dead ̉
+#define BP_DHKA                 BP_DEAD_HOOK_ABOVE
+#define BP_DEAD_UNDERDOT        LSFT(BP_DEAD_RING)      // dead ̣
+#define BP_DUDT                 BP_DEAD_UNDERDOT
+#define BP_DOUBLE_DAGGER        LSFT(BP_DAGGER)         // ‡
+#define BP_DDGR                 BP_DOUBLE_DAGGER
+#define BP_ORDINAL_INDICATOR_A  LSFT(ALTGR(BP_F))       // ª
+#define BP_ORDA                 BP_ORDINAL_INDICATOR_A
+
+// Space bar
+#define BP_NARROW_NON_BREAKING_SPACE    ALTGR(BP_NON_BREAKING_SPACE)
+#define BP_NNBS                         BP_NARROW_NON_BREAKING_SPACE
+
+#endif

+ 2 - 2
quantum/keymap_extras/keymap_german_osx.h

@@ -12,7 +12,7 @@
 #define DE_Z KC_Y
 #define DE_Y KC_Z
 
-#define DE_A KC_A 
+#define DE_A KC_A
 #define DE_B KC_B
 #define DE_C KC_C
 #define DE_D KC_D
@@ -87,7 +87,7 @@
 // Alt-ed characters
 #define DE_SQ2 LALT(KC_2) // ²
 #define DE_SQ3 LALT(KC_3) // ³
-#define DE_LCBR LALT(KC_7) // {
+#define DE_LCBR LALT(KC_8) // {
 #define DE_LBRC LALT(KC_5) // [
 #define DE_RBRC LALT(KC_6) // ]
 #define DE_RCBR LALT(KC_9) // }