~ruther/qmk_firmware

c20540984ed0e9d9f445a8e6cb82d97f52e7a352 — IBNobody 9 years ago 6da0eb2 + e28d151
Merge remote-tracking branch 'refs/remotes/jackhumbert/master'
M build_keyboard.mk => build_keyboard.mk +5 -0
@@ 148,6 148,11 @@ ifeq ($(strip $(AUDIO_ENABLE)), yes)
	SRC += $(QUANTUM_DIR)/audio/luts.c
endif

ifeq ($(strip $(UCIS_ENABLE)), yes)
	OPT_DEFS += -DUCIS_ENABLE
	UNICODE_ENABLE = yes
endif

ifeq ($(strip $(UNICODE_ENABLE)), yes)
    OPT_DEFS += -DUNICODE_ENABLE
	SRC += $(QUANTUM_DIR)/process_keycode/process_unicode.c

A keyboards/planck/keymaps/bone2planck/config.h => keyboards/planck/keymaps/bone2planck/config.h +7 -0
@@ 0,0 1,7 @@
#ifndef CONFIG_USER_H
#define CONFIG_USER_H
#endif

#include "../../config.h"

#define PREVENT_STUCK_MODIFIERS
\ No newline at end of file

M keyboards/planck/keymaps/bone2planck/keymap.c => keyboards/planck/keymaps/bone2planck/keymap.c +29 -22
@@ 4,6 4,13 @@
#endif
#include "keymap_german.h"

// for intellisense, has to be commented for building
/*
#include "..\..\..\..\quantum\keymap_extras\keymap_german.h"
#include "..\..\..\..\quantum\keymap_common.h"
#include "..\..\..\..\tmk_core\common\keycode.h"
*/

#define _______ KC_TRNS

/* This Layout tries to emulate the Bone2 Variant of Neo2, and is intended to be used with a German QWERTZ Softwarelayout.


@@ 24,14 31,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift|   F  |   V  |   Ü  |   Ä  |   Ö  |   Y  |   Z  |   ,  |   .  |   K  |Shift |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | GUI  | Ctrl | Alt  |  M4  |  M2  |    Space    |  M2  |  M4  |      | Ctrl | Esc  |
* | Ctrl | GUI  | Alt  |  M4  |  M2  |    Space    |  M2  |  M4  | Alt  | Esc  | Ctrl |
* `-----------------------------------------------------------------------------------'
*/
[0] = {
	{ DE_Q,         DE_J,    DE_D,    DE_U,  DE_A,  DE_X,   DE_P,   DE_H,  DE_L,    DE_M,   DE_W,    DE_SS        },
	{ LT(1,KC_TAB), DE_C,    DE_T,    DE_I,  DE_E,  DE_O,   DE_B,   DE_N,  DE_R,    DE_S,   DE_G,    LT(1,KC_ENT) },
	{ KC_LSFT,      DE_F,    DE_V,    DE_UE, DE_AE, DE_OE,  DE_Y,   DE_Z,  DE_COMM, DE_DOT, DE_K,    KC_LSFT      },
	{ KC_LGUI,      KC_LCTL, KC_LALT, MO(4), MO(2), KC_SPC, KC_SPC, MO(2), MO(4),   KC_NO,  KC_RCTL, KC_ESC       }
	{ DE_Q,         DE_J,    DE_D,    DE_U,  DE_A,  DE_X,   DE_P,   DE_H,  DE_L,    DE_M,    DE_W,    DE_SS        },
	{ LT(1,KC_TAB), DE_C,    DE_T,    DE_I,  DE_E,  DE_O,   DE_B,   DE_N,  DE_R,    DE_S,    DE_G,    LT(1,KC_ENT) },
	{ KC_LSFT,      DE_F,    DE_V,    DE_UE, DE_AE, DE_OE,  DE_Y,   DE_Z,  DE_COMM, DE_DOT,  DE_K,    KC_LSFT      },
	{ KC_LCTL,      KC_RGUI, KC_LALT, MO(4), MO(2), KC_SPC, KC_SPC, MO(2), MO(4),   KC_RALT, KC_ESC,  KC_RCTL      }
},

/* M1 Special Characters


@@ 43,7 50,7 @@ very ergonomic placement for coding
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift|   #  |   $  |   |  |   ~  |   €  |   +  |   %  |   "  |   '  |   ;  |Shift |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | GUI  | Ctrl | Alt  |  M4  |  M2  |    Space    |  M2  |  M4  |      | Ctrl | Esc  |
* | Ctrl | GUI  | Alt  |  M4  |  M2  |    Space    |  M2  |  M4  | Alt  | Esc  | Ctrl |
* `-----------------------------------------------------------------------------------'
*/
[1] = {


@@ 56,37 63,37 @@ very ergonomic placement for coding
/* Navigation & Number Blocks
very easy to get used to & intuituve placement
* ,-----------------------------------------------------------------------------------.
* |      | PgUp | Bksp |  Up  |  DEL | PgDn |      |   7  |   8  |   9  |      |      |
* |      | PgUp | Bksp |  Up  |  DEL | PgDn |      |   7  |   8  |   9  |      | Ins  |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* |  Tab | Home |  Lft | Down | Right| End  |   .  |   4  |   5  |   6  |   ,  | Enter|
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift|      |  Tab | Ins  | Enter|      |   0  |   1  |   2  |   3  |   ;  |Shift |
* | Shift|      |  Tab |      | Enter|      |   0  |   1  |   2  |   3  |   ;  |Shift |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | GUI  | Ctrl | Alt  |  M3  |  M2  |    Space    |  M2  |  M3  |      | Ctrl | Esc  |
* | Ctrl | GUI  | Alt  |  M3  |  M2  |    Space    |  M2  |  M3  | Alt  | Esc  | Ctrl |
* `-----------------------------------------------------------------------------------'
*/
[2] = {
	{ KC_NO,   KC_PGUP, KC_BSPC, KC_UP,   KC_DEL,  KC_PGDN, KC_NO,   DE_7,    DE_8,  DE_9,    KC_NO,   KC_NO   },
	{ KC_NO,   KC_PGUP, KC_BSPC, KC_UP,   KC_DEL,  KC_PGDN, KC_NO,   DE_7,    DE_8,  DE_9,    KC_NO,   KC_INS  },
	{ KC_TAB,  KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END,  DE_DOT,  DE_4,    DE_5,  DE_6,    DE_COMM, KC_ENT  },
	{ _______, KC_NO,   KC_TAB,  KC_INS,  KC_ENT,  KC_NO,   DE_0,    DE_1,    DE_2,  DE_3,    DE_SCLN, _______ },
	{ _______, KC_NO,   KC_TAB,  KC_NO,   KC_ENT,  KC_NO,   DE_0,    DE_1,    DE_2,  DE_3,    DE_SCLN, _______ },
	{ _______, _______, _______, MO(3),   _______, _______, _______, _______, MO(3), _______, _______, _______ }
},

/* Flipped Navigation & Number Blocks for one handed use
accessed by sliding from M2 to M3 with thumb
* ,-----------------------------------------------------------------------------------.
* |      |      |  7   |  8   |  9   |      | PgUp | Bksp |  Up  |  DEL | PgDn |      |
* | Ins  |      |  7   |  8   |  9   |      | PgUp | Bksp |  Up  |  DEL | PgDn |      |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* |  Tab |  .   |  4   |  5   |  6   |   ,  | Home | Left | Down | Right| End  | Enter|
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift|  0   |  1   |  2   |  3   |   ;  |      | Tab  |  Ins | Enter|      |Shift |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | GUI  | Ctrl | Alt  |  M3  |      |    Space    |      |  M3  |      | Ctrl | Esc  |
* | Ctrl | GUI  | Alt  |  M3  |      |    Space    |      |  M3  | Alt  | Esc  | Ctrl |
* `-----------------------------------------------------------------------------------'
*/

[3] = {
	{ KC_NO,   KC_NO,   DE_7,    DE_8,    DE_9,  KC_NO,   KC_PGUP, KC_BSPC, KC_UP,   KC_DEL,  KC_PGDN, KC_NO   },
	{ KC_INS,   KC_NO,   DE_7,    DE_8,    DE_9,  KC_NO,   KC_PGUP, KC_BSPC, KC_UP,   KC_DEL,  KC_PGDN, KC_NO   },
	{ _______, DE_DOT,  DE_4,    DE_5,    DE_6,  DE_COMM, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END,  _______ },
	{ _______, DE_0,    DE_1,    DE_2,    DE_3,  DE_SCLN, KC_NO,   KC_TAB,  KC_INS,  KC_ENT,  KC_NO,   _______ },
	{ _______, _______, _______, _______, KC_NO, _______, _______, KC_NO,   _______, _______, _______, _______ }


@@ 102,7 109,7 @@ slide from m4 to m5 to access flipped version
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift|      | Prev | Play | Next |      |   ²  |  F1  |  F2  |  F3  |  F10 |Shift |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | GUI  | Ctrl | Alt  |  M4  |  M5  |    Space    |  M5  |  M4  |      | Ctrl | Esc  |
* | Ctrl | GUI  | Alt  |  M4  |  M5  |    Space    |  M5  |  M4  | Alt  | Esc  | Ctrl |
* `-----------------------------------------------------------------------------------'
*/
[4] = {


@@ 115,19 122,19 @@ slide from m4 to m5 to access flipped version

/* flipped Function & Media Keys
* ,-----------------------------------------------------------------------------------.
* |      |      |  F7  |  F8  |  F9  |      |      | Print|Scroll| Pause|      |      |
* |      |      |  F7  |  F8  |  F9  |  F12 |      | Print|Scroll| Pause|      |      |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* |      |  ³   |  F4  |  F5  |  F6  |      |      | Mute | Vol- | Vol+ |      |      |
* |      |  ³   |  F4  |  F5  |  F6  |  F11 |      | Mute | Vol- | Vol+ |      |      |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift|  ²   |  F1  |  F2  |  F3  |      |      | Prev | Play | Next |      |Shift |
* | Shift|  ²   |  F1  |  F2  |  F3  |  F10 |      | Prev | Play | Next |      |Shift |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | GUI  | Ctrl | Alt  |      |  M5  |    Space    |  M5  |      |      | Ctrl | Esc  |
* | Ctrl | GUI  | Alt  |      |  M5  |    Space    |  M5  |      | Alt  | Esc  | Ctrl |
* `-----------------------------------------------------------------------------------'
*/
[5] = {
	{ KC_NO,   KC_NO,   KC_F7,   KC_F8, KC_F9,   KC_NO,   KC_NO,   KC_PSCR, KC_SLCK, KC_PAUS, KC_NO,   KC_NO   },
	{ KC_NO,   DE_SQ3,  KC_F4,   KC_F5, KC_F6,   KC_NO,   KC_NO,   KC_MUTE, KC_VOLD, KC_VOLU, KC_NO,   KC_NO   },
	{ _______, DE_SQ2,  KC_F1,   KC_F2, KC_F3,   KC_NO,   KC_NO,   KC_MPRV, KC_MPLY, KC_MNXT, KC_NO,   _______ },
	{ KC_NO,   KC_NO,   KC_F7,   KC_F8, KC_F9,   KC_F12,  KC_NO,   KC_PSCR, KC_SLCK, KC_PAUS, KC_NO,   KC_NO   },
	{ KC_NO,   DE_SQ3,  KC_F4,   KC_F5, KC_F6,   KC_F11,  KC_NO,   KC_MUTE, KC_VOLD, KC_VOLU, KC_NO,   KC_NO   },
	{ _______, DE_SQ2,  KC_F1,   KC_F2, KC_F3,   KC_F10,  KC_NO,   KC_MPRV, KC_MPLY, KC_MNXT, KC_NO,   _______ },
	{ _______, _______, _______, KC_NO, _______, _______, _______, _______, KC_NO,   _______, _______, _______ }
}
};

A keyboards/planck/keymaps/bone2planck/readme.md => keyboards/planck/keymaps/bone2planck/readme.md +8 -0
@@ 0,0 1,8 @@
check keymap.c to the layers

This Layout tries to emulate the Bone2 Variant of Neo2, and is intended to be used with a German QWERTZ Softwarelayout.
It has "üäöß" as it is optimized for a mix of German & English.
My favourite features are the placement of the special characters often used for programming right on the home row
and the number & navigation block combo, so you never have to move your hands from their home position.

Bone2 wiki page: http://wiki.neo-layout.org/wiki/Bone
\ No newline at end of file

A keyboards/planck/keymaps/jhenahan/Makefile => keyboards/planck/keymaps/jhenahan/Makefile +25 -0
@@ 0,0 1,25 @@


# Build Options
#   change to "no" to disable the options, or define them in the Makefile in 
#   the appropriate keymap folder that will get included automatically
#
BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
CONSOLE_ENABLE = no         # Console for debug(+400)
COMMAND_ENABLE = yes        # Commands for debug and configuration
NKRO_ENABLE = yes            # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
BACKLIGHT_ENABLE = no      # Enable keyboard backlight functionality
MIDI_ENABLE = no            # MIDI controls
AUDIO_ENABLE = yes           # Audio output on port C6
UNICODE_ENABLE = no         # Unicode
BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.

# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no    # Breathing sleep LED during USB suspend

ifndef QUANTUM_DIR
	include ../../../../Makefile
endif

A keyboards/planck/keymaps/jhenahan/config.h => keyboards/planck/keymaps/jhenahan/config.h +9 -0
@@ 0,0 1,9 @@
#ifndef CONFIG_USER_H
#define CONFIG_USER_H

#include "../../config.h"

#define FORCE_NKRO
#define WORKMAN_SOUND COLEMAK_SOUND

#endif

A keyboards/planck/keymaps/jhenahan/keymap.c => keyboards/planck/keymaps/jhenahan/keymap.c +314 -0
@@ 0,0 1,314 @@
// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
// this is the style you want to emulate.

#include "planck.h"
#include "action_layer.h"
#ifdef AUDIO_ENABLE
  #include "audio.h"
#endif
#include "eeconfig.h"

extern keymap_config_t keymap_config;

// 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 _WORKMAN 0
#define _DEAD 1
#define _QWERTY 2
#define _LOWER 3
#define _RAISE 4
#define _PLOVER 5
#define _ADJUST 16

enum planck_keycodes {
  WORKMAN = SAFE_RANGE,
  DEAD,
  QWERTY,
  LOWER,
  RAISE,
  PLOVER,
  EXT_PLV,
  TOG_PLV
};

// Fillers to make layering more clear
#define _______ KC_TRNS
#define XXXXXXX KC_NO

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {


/* Workman
 * ,-----------------------------------------------------------------------------------.
 * | Tab  |   Q  |   D  |   R  |   W  |   B  |   J  |   F  |   U  |   P  |   ;  | Bksp |
 * |------+------+------+------+------+-------------+------+------+------+------+------|
 * | Esc  |   A  |   S  |   H  |   T  |   G  |   Y  |   N  |   E  |   O  |   I  |  "   |
 * |------+------+------+------+------+------|------+------+------+------+------+------|
 * | Shift|   Z  |   X  |   M  |   C  |   V  |   K  |   L  | Dead |   .  |   /  |Enter |
 * |------+------+------+------+------+------+------+------+------+------+------+------|
 * | Ctrl | RAlt | Alt  | GUI  |Lower |    Space    |Raise | Left | Down |  Up  |Right |
 * `-----------------------------------------------------------------------------------'
 */
[_WORKMAN] = {
  {KC_TAB,              KC_Q,    KC_D,    KC_R,    KC_W,    KC_B,    KC_J,    KC_F,    KC_U,    KC_P,    KC_SCLN, KC_BSPC},
  {MT(MOD_LCTL,KC_ESC), KC_A,    KC_S,    KC_H,    KC_T,    KC_G,    KC_Y,    KC_N,    KC_E,    KC_O,    KC_I,    KC_QUOT},
  {KC_LSFT,             KC_Z,    KC_X,    KC_M,    KC_C,    KC_V,    KC_K,    KC_L,    DEAD,    KC_DOT,  KC_SLSH, KC_ENT},
  {KC_LCTL,             KC_RALT, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT}
},

/* Workman Dead Layer
 * ,-----------------------------------------------------------------------------------.
 * |      |   %  |   &  |   ?  |   +  |   @  |   $  |   _  |   [  |   ]  |   !  |      |
 * |------+------+------+------+------+-------------+------+------+------+------+------|
 * |      |   /  |   (  |   =  |   0  |   {  |   }  |   1  |   *  |   )  |   -  |  "   |
 * |------+------+------+------+------+------|------+------+------+------+------+------|
 * |      |   6  |   7  |   8  |   9  |   |  |   \  |   2  |   3  |   4  |   5  |      |
 * |------+------+------+------+------+------+------+------+------+------+------+------|
 * |      |      |   <  |   ~  |   `  |      ,      |   #  |   ^  |   >  |      |      |
 * `-----------------------------------------------------------------------------------'
 */
[_DEAD] = {
  {XXXXXXX,  KC_PERC, KC_AMPR, KC_QUES, KC_PLUS, KC_AT,   KC_DLR,  KC_UNDS, KC_LBRC, KC_RBRC,  KC_EXLM, XXXXXXX},
  {XXXXXXX,  KC_SLSH, KC_LPRN, KC_EQL,  KC_0,    KC_LCBR, KC_RCBR, KC_1,    KC_ASTR, KC_RPRN,  KC_MINS, XXXXXXX},
  {XXXXXXX,  KC_6,    KC_7,    KC_8,    KC_9,    KC_PIPE, KC_BSLS, KC_2,    KC_3,    KC_4,     KC_5,    XXXXXXX},
  {XXXXXXX,  XXXXXXX, KC_LT,   KC_TILD, KC_GRV,  KC_COMM, KC_COMM, KC_HASH, KC_CIRC, KC_GT,    XXXXXXX, XXXXXXX}
},

/* Qwerty
 * ,-----------------------------------------------------------------------------------.
 * | Tab  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | Bksp |
 * |------+------+------+------+------+-------------+------+------+------+------+------|
 * | Esc  |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  |  "   |
 * |------+------+------+------+------+------|------+------+------+------+------+------|
 * | Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |Enter |
 * |------+------+------+------+------+------+------+------+------+------+------+------|
 * | Ctrl | RAlt | Alt  | GUI  |Lower |    Space    |Raise | Left | Down |  Up  |Right |
 * `-----------------------------------------------------------------------------------'
 */
[_QWERTY] = {
  {KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC},
  {KC_ESC,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT},
  {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT },
  {KC_LCTL, KC_RALT, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT}
},

/* Lower
 * ,-----------------------------------------------------------------------------------.
 * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Bksp |
 * |------+------+------+------+------+-------------+------+------+------+------+------|
 * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |   {  |   }  |  |   |
 * |------+------+------+------+------+------|------+------+------+------+------+------|
 * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |ISO ~ |ISO | |      | Vol+ |Enter |
 * |------+------+------+------+------+------+------+------+------+------+------+------|
 * |      |      |      |      |      |             |      | Prev | Next | Vol- | Play |
 * `-----------------------------------------------------------------------------------'
 */
[_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_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS, KC_PLUS,    KC_LCBR, KC_RCBR, KC_PIPE},
  {_______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,S(KC_NUHS),S(KC_NUBS), _______, KC_VOLU, _______},
  {_______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV,    KC_MNXT, KC_VOLD, KC_MPLY}
},

/* Raise - KWM Interaction
 * ,-----------------------------------------------------------------------------------.
 * |Restrt|      |TgSplt|Flotng|Parent|FlScrn|InsMrk| InsW | InsS | InsN | InsE |      |
 * |------+------+------+------+------+-------------+------+------+------+------+------|
 * |      | Mark |Rotate|Prefix| Term | BSP  |SwpMrk|SwapW |SwapS |SwapN |SwapE |      |
 * |------+------+------+------+------+------|------+------+------+------+------+------|
 * |      |MarkW |MarkS |MarkN |MarkE |Monocl|Float |FocusW|FocusS|FocusN|FocusE|      |
 * |------+------+------+------+------+------+------+------+------+------+------+------|
 * |      |      |      |      |      |             |      |      |      |      |      |
 * `-----------------------------------------------------------------------------------'
 */
[_RAISE] = {
  {LCAG(KC_Q), XXXXXXX,    LCAG(KC_S),       LCAG(KC_W),   LCAG(KC_D), LCAG(KC_F),        LCTL(S(KC_X)),    LCTL(S(KC_H)),    LCTL(S(KC_J)),     LCTL(S(KC_K)),    LCTL(S(KC_L)),    XXXXXXX},
  {XXXXXXX,    LCAG(KC_M), LGUI(LCTL(KC_R)), LCAG(KC_DOT), LCAG(KC_T), LGUI(LCTL(KC_A)),  LCTL(LALT(KC_M)), LCTL(LALT(KC_H)), LCTL(LALT(KC_J)),  LCTL(LALT(KC_K)), LCTL(LALT(KC_L)), XXXXXXX},
  {_______,    LCAG(KC_H), LCAG(KC_J),       LCAG(KC_K),   LCAG(KC_L), LGUI(LCTL(KC_S)),  LGUI(LCTL(KC_D)), LGUI(LALT(KC_H)), LGUI(LALT(KC_J)),  LGUI(LALT(KC_K)), LGUI(LALT(KC_L)), _______},
  {_______,    _______,    _______,          _______,      _______,    _______,           _______,          _______,          _______,           _______,          _______,          _______}
},

/* Plover layer (http://opensteno.org)
 * ,-----------------------------------------------------------------------------------.
 * |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |
 * |------+------+------+------+------+-------------+------+------+------+------+------|
 * |      |   S  |   T  |   P  |   H  |   *  |   *  |   F  |   P  |   L  |   T  |   D  |
 * |------+------+------+------+------+------|------+------+------+------+------+------|
 * |TogOut|   S  |   K  |   W  |   R  |   *  |   *  |   R  |   B  |   G  |   S  |   Z  |
 * |------+------+------+------+------+------+------+------+------+------+------+------|
 * | Exit |      |      |   A  |   O  |             |   E  |   U  |      |      |      |
 * `-----------------------------------------------------------------------------------'
 */

[_PLOVER] = {
  {KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1   },
  {XXXXXXX, KC_Q,    KC_D,    KC_R,    KC_W,    KC_B,    KC_J,    KC_F,    KC_U,    KC_P,    KC_SCLN, KC_BSPC},
  {TOG_PLV, KC_A,    KC_S,    KC_H,    KC_T,    KC_G,    KC_Y,    KC_N,    KC_E,    KC_O,    KC_I,    KC_QUOT},
  {EXT_PLV, XXXXXXX, XXXXXXX, KC_M,    KC_C,    XXXXXXX, XXXXXXX, KC_L,    KC_COMM, XXXXXXX, XXXXXXX, XXXXXXX}
},

/* Adjust (Lower + Raise)
 * ,-----------------------------------------------------------------------------------.
 * |      | Reset|      |      |      |      |      |      |      |      |      |  Del |
 * |------+------+------+------+------+-------------+------+------+------+------+------|
 * |      |      |      |Aud on|Audoff|AGnorm|AGswap|Qwerty|Workmn|Plover|      |      |
 * |------+------+------+------+------+------|------+------+------+------+------+------|
 * |      |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof|      |      |      |      |      |
 * |------+------+------+------+------+------+------+------+------+------+------+------|
 * |      |      |      |      |      |             |      |      |      |      |      |
 * `-----------------------------------------------------------------------------------'
 */
[_ADJUST] = {
  {_______, RESET,   _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL},
  {_______, _______, _______, AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, QWERTY,  WORKMAN, PLOVER,  _______, _______},
  {_______, MUV_DE,  MUV_IN,  MU_ON,   MU_OFF,  MI_ON,   MI_OFF,  _______, _______, _______, _______, _______},
  {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
}


};

#ifdef AUDIO_ENABLE

float tone_startup[][2]    = SONG(STARTUP_SOUND);
float tone_qwerty[][2]     = SONG(QWERTY_SOUND);
float tone_workman[][2]    = SONG(WORKMAN_SOUND);
float tone_plover[][2]     = SONG(PLOVER_SOUND);
float tone_plover_gb[][2]  = SONG(PLOVER_GOODBYE_SOUND);
float music_scale[][2]     = SONG(MUSIC_SCALE_SOUND);

float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
#endif


void persistant_default_layer_set(uint16_t default_layer) {
  eeconfig_update_default_layer(default_layer);
  default_layer_set(default_layer);
}

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  switch (keycode) {
    case WORKMAN:
      if (record->event.pressed) {
        #ifdef AUDIO_ENABLE
          PLAY_NOTE_ARRAY(tone_workman, false, 0);
        #endif
        persistant_default_layer_set(1UL<<_WORKMAN);
      }
      return false;
      break;
    case DEAD:
      if (record->event.pressed) {
        layer_on(_DEAD);
        set_oneshot_layer(_DEAD, ONESHOT_START);
        clear_oneshot_layer_state(ONESHOT_PRESSED);
      }
      return false;
      break;
    case QWERTY:
      if (record->event.pressed) {
        #ifdef AUDIO_ENABLE
          PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
        #endif
        persistant_default_layer_set(1UL<<_QWERTY);
      }
      return false;
      break;
    case LOWER:
      if (record->event.pressed) {
        layer_on(_LOWER);
        update_tri_layer(_LOWER, _RAISE, _ADJUST);
      } else {
        layer_off(_LOWER);
        update_tri_layer(_LOWER, _RAISE, _ADJUST);
      }
      return false;
      break;
    case RAISE:
      if (record->event.pressed) {
        layer_on(_RAISE);
        update_tri_layer(_LOWER, _RAISE, _ADJUST);
      } else {
        layer_off(_RAISE);
        update_tri_layer(_LOWER, _RAISE, _ADJUST);
      }
      return false;
      break;
    case PLOVER:
      if (record->event.pressed) {
        #ifdef AUDIO_ENABLE
          stop_all_notes();
          PLAY_NOTE_ARRAY(tone_plover, false, 0);
        #endif
        layer_off(_RAISE);
        layer_off(_LOWER);
        layer_off(_ADJUST);
        layer_on(_PLOVER);
        if (!eeconfig_is_enabled()) {
            eeconfig_init();
        }
        keymap_config.raw = eeconfig_read_keymap();
        keymap_config.nkro = 1;
        eeconfig_update_keymap(keymap_config.raw);
      }
      return false;
      break;
    case EXT_PLV:
      if (record->event.pressed) {
        #ifdef AUDIO_ENABLE
          PLAY_NOTE_ARRAY(tone_plover_gb, false, 0);
        #endif
        layer_off(_PLOVER);
      }
      return false;
      break;
  case TOG_PLV:
    if (record->event.pressed) {
      register_code(KC_R);
      register_code(KC_W);
      register_code(KC_T);
      register_code(KC_C);
      register_code(KC_P);
      register_code(KC_O);
      clear_keyboard();
    }
    return false;
    break;
  }
  return true;
}

void matrix_init_user(void) {
    #ifdef AUDIO_ENABLE
        startup_user();
    #endif
}

#ifdef AUDIO_ENABLE

void startup_user()
{
    _delay_ms(20); // gets rid of tick
    PLAY_NOTE_ARRAY(tone_startup, false, 0);
}

void shutdown_user()
{
    PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
    _delay_ms(150);
    stop_all_notes();
}

void music_on_user(void)
{
    music_scale_user();
}

void music_scale_user(void)
{
    PLAY_NOTE_ARRAY(music_scale, false, 0);
}

#endif

A keyboards/planck/keymaps/jhenahan/readme.md => keyboards/planck/keymaps/jhenahan/readme.md +41 -0
@@ 0,0 1,41 @@
# jhenahan's layout

## Layout

The base layer is based on the
[Workman Dead](https://github.com/ojbucao/Workman/tree/master/mac) layout. The
primary interaction layer is a slightly modified Workman layout with a 'dead'
key on the third row under the middle finger. The dead key activates a layer of
special characters.

## [Layers](http://www.keyboard-layout-editor.com/#/gists/2b875f7d5d76fe4408c0a5b3bd76ddae)
### Function Layer

This is very slightly modified from the default, mainly just to rearrange the media keys.

### [KWM](https://github.com/koekeishiya/kwm) Interaction Layer

`kwm` is a tiling window manager for OS X. The keys defined in my keymap
correspond to the settings I use in
[my `kwmrc` file](https://github.com/jhenahan/dotfiles/blob/master/kwm/kwmrc).

### QWERTY

Just in case.

### [Plover](http://www.openstenoproject.org/plover/)

This layout functions exactly as a Workman layout unless you're running the Plover
application. Includes a key for toggling Plover while it's running.

Add this in the appropriate section of your `plover.cfg` to allow this altered layout:

``` ini
[System: English Stenotype]
keymap[keyboard] = [["#", ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "="]], ["S-", ["q", "a"]], ["T-", ["d"]], ["K-", ["s"]], ["P-", ["r"]], ["W-", ["h"]], ["H-", ["w"]], ["R-", ["t"]], ["A-", ["m"]], ["O-", ["c"]], ["*", ["y", "g", "j", "b"]], ["-E", ["l"]], ["-U", [","]], ["-F", ["f"]], ["-R", ["n"]], ["-P", ["u"]], ["-B", ["e"]], ["-L", ["p"]], ["-G", ["o"]], ["-T", [";"]], ["-S", ["i"]], ["-D", ["BackSpace"]], ["-Z", ["'"]], ["no-op", ["\\", "]", "x", ".", "/"]], ["arpeggiate", ["space"]]]
```

### Adjust Layer

This layer is only slightly modified from the default to remove Dvorak and
Colemak and replace them with Workman.

M quantum/process_keycode/process_unicode.c => quantum/process_keycode/process_unicode.c +4 -0
@@ 18,6 18,10 @@ void set_unicode_input_mode(uint8_t os_target)
  input_mode = os_target;
}

uint8_t get_unicode_input_mode(void) {
  return input_mode;
}

__attribute__((weak))
void unicode_input_start (void) {
  switch(input_mode) {

M quantum/process_keycode/process_unicode.h => quantum/process_keycode/process_unicode.h +1 -0
@@ 13,6 13,7 @@
#endif

void set_unicode_input_mode(uint8_t os_target);
uint8_t get_unicode_input_mode(void);
void unicode_input_start(void);
void unicode_input_finish(void);
void register_hex(uint16_t hex);