From 262930c8d5e57beec044d932ef554a09e846f9ca Mon Sep 17 00:00:00 2001 From: Nathan Sharfi Date: Sat, 30 Apr 2016 22:12:13 -0700 Subject: [PATCH 1/4] ergodox-zweihander: initial commit --- .../keymaps/zweihander-osx/keymap.c | 184 ++++++++++++++++++ .../keymaps/zweihander-osx/readme.markdown | 40 ++++ 2 files changed, 224 insertions(+) create mode 100644 keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c create mode 100644 keyboard/ergodox_ez/keymaps/zweihander-osx/readme.markdown diff --git a/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c b/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c new file mode 100644 index 0000000000..cc94e13337 --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c @@ -0,0 +1,184 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" + +#define BASE 0 // default layer +#define SYMB 1 // symbols +#define MDIA 2 // media keys + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | = | 1 | 2 | 3 | 4 | 5 | ← | | → | 6 | 7 | 8 | 9 | 0 | - | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | ⌦ | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | ⌫ | A | S | D | F | G |------| |------| H | J | K | L |; / L2| ' / L⌘ | + * |--------+------+------+------+------+------| L⌘ | | L⌘ |------+------+------+------+------+--------| + * | L⇧ | Z | X | C | V | B | | | | N | M | , | . | / / ⌃| R⇧ | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | L⌃ | L⌥ | L⌘ | ← | → | | ↑ | ↓ | [ | ] | ~L1 | + * `----------------------------------' `----------------------------------' + * ,-------------. ,---------------. + * | `~ | '" | | ⎋ | ⌫ | + * ,------|------|------| |------+--------+------. + * | | | PgUp | | PgDn | | | + * | | ⌫ |------| |------| ⇥ |Enter | + * | | | L⌥ | | L⌃ | | | + * `--------------------' `----------------------' + */ +// If it accepts an argument (i.e, is a function), it doesn't need KC_. +// Otherwise, it needs KC_* +[BASE] = KEYMAP( // layer 0 : default + // left hand + KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, + KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), + KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LGUI, + KC_LCTL, KC_LALT, KC_LGUI,KC_LEFT,KC_RGHT, + KC_GRV, KC_QUOT, + KC_PGUP, + KC_SPC,KC_BSPC,KC_LALT, + // right hand + KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT), + KC_LGUI, KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, + KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1, + KC_ESC, KC_BSPC, + KC_PGDN, + KC_LCTL, KC_TAB, KC_ENT + ), +/* Keymap 1: Symbol Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | ! | @ | { | } | | | | | | / | 7 | 8 | 9 | * | F12 | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | # | $ | ( | ) | ` |------| |------| - | 4 | 5 | 6 | + | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | = | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | 0 | . | ← | → | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | Home | | | + * | | |------| |------| | | + * | | | | | End | | | + * `--------------------' `--------------------' + */ +// SYMBOLS +[SYMB] = KEYMAP( + // left hand + KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, + KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS, + KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV, + KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_TRNS,KC_TRNS, + KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS, + // right hand + KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + KC_TRNS, KC_SLSH, KC_7, KC_8, KC_9, KC_ASTR, KC_F12, + KC_MINS, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS, + KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_EQL, KC_TRNS, + KC_0, KC_DOT, KC_LEFT, KC_RGHT, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_HOME, + KC_END , KC_TRNS, KC_TRNS +), +/* Keymap 2: Media keys + * dim brighten + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | F14 | | F15 | | | | | | Power | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | PgUp | | | | | | ⌘] | ⌥⌘↑ | ↑ | ⌥⌘↓ | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | Home | PgDn | End | |------| |------| ⌘[ | ← | ↓ | → | | ⏯ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | |L⇧+Spc| Spc | ⏮ | ⏭ | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | |VolUp |VolDn | Mute | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// MEDIA AND MOUSE +[MDIA] = KEYMAP( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F14, /* F14 dims screen, F15 brightens */ + KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END , KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + // right hand + KC_F15 , KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PWR, + KC_TRNS, LGUI(KC_RBRC), LGUI(LALT(KC_UP)), KC_UP , LGUI(LALT(KC_DOWN)), KC_TRNS, KC_TRNS, + LGUI(KC_LBRC), KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_MPLY, + KC_TRNS, LSFT(KC_SPC), KC_SPC , KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, + KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols) +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + if (record->event.pressed) { + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; + +// Runs just one time when the keyboard initializes. +void matrix_init_user(void) { + +}; + +// Runs constantly in the background, in a loop. +void matrix_scan_user(void) { + + uint8_t layer = biton32(layer_state); + + ergodox_board_led_off(); + ergodox_right_led_1_off(); + ergodox_right_led_2_off(); + ergodox_right_led_3_off(); + switch (layer) { + // TODO: Make this relevant to the ErgoDox EZ. + case 1: + ergodox_right_led_1_on(); + break; + case 2: + ergodox_right_led_2_on(); + break; + default: + // none + break; + } + +}; diff --git a/keyboard/ergodox_ez/keymaps/zweihander-osx/readme.markdown b/keyboard/ergodox_ez/keymaps/zweihander-osx/readme.markdown new file mode 100644 index 0000000000..8103c6b327 --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/zweihander-osx/readme.markdown @@ -0,0 +1,40 @@ +# The Zweihander Layout + +This layout is tuned for people who… + + +## use OS X + +This layout doesn’t make any concessions for Windows use. While it should work fine in Windows, I’m not about to devote precious keyboard space to Windows-specific shortcuts. + + +## mouse left-handed while doing other things with the right hand + +I tend to have my mouse in my left hand, but I like to use my other hand to make things go faster. I’ve added a bunch of buttons to the media layer to speed up browsing in Safari and Finder: + +- Back (⌘[) +- Forward (⌘]) +- Open and Close Parent Folder (⌥⌘↓) +- Go Up and Close Just-Left Folder (⌥⌘↑) +- Space (page down in browsers; Quick Look in the Finder) +- Shift-Space (page up in web browsers) + +Because moving letter-by-letter is way slower than moving word-by-word, I added Option (⌥) to the bottommost button on the left side. This key can be held easily while holding ; (activate media layer) and pressing J and L to move left and right by word. + + +## use lots of modifier keys in OS X menu-item shortcuts + +I wanted to preserve the feel of a number of shortcuts that involve pressing lots of modifier keys at once; this is why the bottom left of the keyboard has shift, control, option, and command in the usual spaces. Further, some common shortcuts I press have a key on the right side of the keyboard. These shortcuts include: + +- Empty Trash Without Asking for Confirmation (⇧⌥⌘⌫) +- Shut Down Without Asking for Confirmation (⇧⌥⌘ power) + + +## use Emacs-style shortcuts + +I press C-a, C-e, and C-k all the time. It’s difficult to press these key combinations with the control key on the bottom left and I’m too quick on the draw for the control function on the / key to work reliably, so the bottommost thumb button on the right side is another control key. + + +## use spreadsheets + +All the common spreadsheet operations (+-*/=) are now on the right side of the symbol layer. From 8ec1d41a28d5223a147218bfb7fefd933b906d22 Mon Sep 17 00:00:00 2001 From: Nathan Sharfi Date: Sat, 30 Apr 2016 22:36:09 -0700 Subject: [PATCH 2/4] Ergodox EZ: add zweihander-osx.hex --- .../keymaps/zweihander-osx/zweihander-osx.hex | Bin 0 -> 51772 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 keyboard/ergodox_ez/keymaps/zweihander-osx/zweihander-osx.hex diff --git a/keyboard/ergodox_ez/keymaps/zweihander-osx/zweihander-osx.hex b/keyboard/ergodox_ez/keymaps/zweihander-osx/zweihander-osx.hex new file mode 100644 index 0000000000000000000000000000000000000000..9b783c957c89c80b8caae9e9f5d35946b5556f38 GIT binary patch literal 51772 zcma)_S(fWKjBWpGt(uD^xsl(W+xZXa?R^L+WM@QXIWw*sQ6vbW2T1+D=}@o7^>{uV z<^%7y>o4!?|NhVavvF?tt5N-aKUU+}&VOlqVH|%y9uLp?UX7PO8t=imcF)JJ#)sGZ z57^)D>iP85`1+jg-(a0D)%g6?ct3pKbZ#&%|A)q>ZoK{<8Xvpy_5aX#>BhHzX?&j! z&*#G5R1>_@_%R(`{^`H<8zwN=jrI* zW3I+e8uP=raG91ff6Hw&vf*i(j@P9czl53B`*53Pz8o29W+E>rtglVCYW$|*#IKX< z&fmmPFR07EiHj3A-VdX3D0E^OS!8B1dJQGI0InFM|wWe z$)!*?*$Z@bnCwNQhq4Zbh4*}%PRHA`dJa9)Mi6{0z-^BV5$X+S-E)57+RU&sH%ua) zp{LA--yE$QJJc)|oDi7E902PGhGs8v^QBf$L;wTB^Wj9xnVV*@<75D5VJ=Ognb*vZ zGegf@m;hy2)_GZ3%F)l^(i3#_nc)|DU5=Oa#n2GZc=^uXy&E&H0cc(D>%yd1RWUmA z&wTGiak7~ejUi2!cxG{CFf;e>w_;dV`LMWpHahbc9FGnb!Q;}Q2q|b~VxstG1hGT! zt|EW)yL;y5@oJcT_qBU(5|ui)9{sp)w1{WW)#6K%4eD4$mm!TM0arCtXm2HQ)4;_z zf|esgyTqYFdzBLT?fM#2=go(s2xW<#rFTmbHahy930}HqFT#6s_>bO>%ov$`IC_UY zdDFFe-cZKxeevU+pYPqXlliz?Y=FRtBl&0qsI?Bl^ zY|twkX#9S-^aQ168TDqP9-i;~_E3J@Xs~q8v^m@ayukSF{n8T@OSf9uTj4b~c>ft5 z=GwVY=XLb-;S3JX(gsWF`-Rb*p^cY@ncokm%<`wF@0;({bLi;1r@k5Cz94>&OQ{KE zi}H9r3;a=NZ-@8ICSKtCf}AfsxCHawah)e5XK;eh5W36ZwAy&R7R*cFusi!oQ~S!? zw%gC8+LYZ4Hlz2dui3u%JZ^X3Y3&J$VlI!@)|a;{gagXb%bj07`tn90-Q7MH4~E;f zX-Pm%3zP{yx&q-i9Zuai^qebPTwl-k3r*$}?LQD7PNz~6OXzt57w4OZJJIxtWVpUA zYDA>QbUi&9by?~4!jIr|rtylpoZyMm^>jG-`*k{XW9gZW_>l|Cb?e<9FV*|CB)@VT z=&q;B);qs&>*2a$Comr3>sG|CaF=eG(0sl_rdR=fzWMnAyEx|5D;SB&<@EPpqEq#^ zbQjmh*0U6YAg=zd@O1abghv-sOQb=FkZ2G$`W5DD<0J^IMNxhiHV2|aVB?0*Vt!gn zX)4E|Wk}(=OcV4wpDu421I%Hi@tNP(V{wYY9n)fKB(_JR69C^(Kl60D6zXJV7Onc* znqrg}wk3mm>A`4&K=unw9BQGq#*xoGB>`|sU-WS;OXfJ_Gc?gRe9_1IJ)K@fNXO7K z$a{-}b4^c(cdu8;y5lCF$3@BX2*MB^6M|`eEVtwB*o~#<)AKT|m+SMsJTA}M>-s*u zAMZDRr`Pp)dtB~CNGheneYrkYiT8QDEw}jr<6X3589|M{i2{wse_csaW^>f{u(Rz?z>!ai4eU{B^YCN z-Y!Qh%H#cheM5!U+1~O_2fp7*cSm}`0Qu40rsMs!9`CT^<<0whU0+jMUn(jz=>7a& zuPo3t;>_Mc22AjU?YVZ(()0U`;d{N}3%tPB>u~4&b$i|3mlvpe9G=}c67a-2K7kE| zfFpBxUf-A8c*JGl#;I0tSkzc|lZ{`?%f_$ieZi#>iB~
vo2_*}4#_)+lBDvSH$ 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 literal 0 HcmV?d00001 From 9b163d2feb332107794a0f6e3573afe92c40b7fe Mon Sep 17 00:00:00 2001 From: Nathan Sharfi Date: Sun, 1 May 2016 13:55:00 -0700 Subject: [PATCH 3/4] =?UTF-8?q?zweihander:=20Add=20=E2=8C=98`,=20=E2=8C=98?= =?UTF-8?q?=E2=87=A7`,=20=E2=8C=A5=E2=87=A5,=20=E2=8C=A5=E2=87=A7=E2=87=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../keymaps/zweihander-osx/keymap.c | 14 +++++++------- .../keymaps/zweihander-osx/readme.markdown | 5 +++++ .../keymaps/zweihander-osx/zweihander-osx.hex | Bin 51772 -> 51772 bytes 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c b/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c index cc94e13337..f53232c3cd 100644 --- a/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c +++ b/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c @@ -95,9 +95,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 2: Media keys * dim brighten * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | F14 | | F15 | | | | | | Power | + * | | | | | | | F14 | | F15 | ⌘W | ⌘⇧` | ⌘` | ⌥⇧⇥ | ⌥⇥ | Power | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | PgUp | | | | | | ⌘] | ⌥⌘↑ | ↑ | ⌥⌘↓ | | | + * | | | | PgUp | | | | | | ⌘] | ⌥⌘↑ | ↑ | ⌥⌘↓ | | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | | | Home | PgDn | End | |------| |------| ⌘[ | ← | ↓ | → | | ⏯ | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| @@ -124,11 +124,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, // right hand - KC_F15 , KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PWR, - KC_TRNS, LGUI(KC_RBRC), LGUI(LALT(KC_UP)), KC_UP , LGUI(LALT(KC_DOWN)), KC_TRNS, KC_TRNS, - LGUI(KC_LBRC), KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_MPLY, - KC_TRNS, LSFT(KC_SPC), KC_SPC , KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, - KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, + KC_F15 , LGUI(KC_W), LGUI(LSFT(KC_GRV)), LGUI(KC_GRV), LALT(LSFT(KC_TAB)), LALT(KC_TAB), KC_PWR, + KC_TRNS, LGUI(KC_RBRC), LGUI(LALT(KC_UP)), KC_UP , LGUI(LALT(KC_DOWN)), KC_TRNS, KC_TRNS, + LGUI(KC_LBRC), KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_MPLY, + KC_TRNS, LSFT(KC_SPC), KC_SPC , KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, + KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS diff --git a/keyboard/ergodox_ez/keymaps/zweihander-osx/readme.markdown b/keyboard/ergodox_ez/keymaps/zweihander-osx/readme.markdown index 8103c6b327..7bce7c6909 100644 --- a/keyboard/ergodox_ez/keymaps/zweihander-osx/readme.markdown +++ b/keyboard/ergodox_ez/keymaps/zweihander-osx/readme.markdown @@ -1,5 +1,7 @@ # The Zweihander Layout +NB: the backtick (\`) is special in Markdown. If I write ⌘\` in this readme, I mean “command-backtick”, not “command-backslash-backtick”. + This layout is tuned for people who… @@ -12,10 +14,13 @@ This layout doesn’t make any concessions for Windows use. While it should work I tend to have my mouse in my left hand, but I like to use my other hand to make things go faster. I’ve added a bunch of buttons to the media layer to speed up browsing in Safari and Finder: +- Close Window (⌘W) - Back (⌘[) - Forward (⌘]) - Open and Close Parent Folder (⌥⌘↓) - Go Up and Close Just-Left Folder (⌥⌘↑) +- Cycle through open windows in current application (⌘\` and ⌘⇧\`) +- Cycle through tabs in current window (⌥⇥ and ⌥⇧⇥) - Space (page down in browsers; Quick Look in the Finder) - Shift-Space (page up in web browsers) diff --git a/keyboard/ergodox_ez/keymaps/zweihander-osx/zweihander-osx.hex b/keyboard/ergodox_ez/keymaps/zweihander-osx/zweihander-osx.hex index 9b783c957c89c80b8caae9e9f5d35946b5556f38..3e313c3724e7b5d37fb688cd68a2a680af8ba60f 100644 GIT binary patch delta 139 zcmdlpg?Y~u<_&J_?uL#A7RCk!7DjGB>}+6U00M>v29_?oTvkBZ$PvglHZ^cGH8OBE z1+syP3>+;Xih$x4Kyd>%=gGb7(wat224<#)2F@mKKqXE$DJSv delta 129 zcmdlpg?Y~u<_&J_?goYi2F3;k7DjGB>}+6U00KZUCs$rBDW z94#S=Knj842Igjyd)cMs!CXTFXA?J|5+|U!Ff)K!3>+;c$Fs>XnY(R%&K`OQ0EONi Ay#N3J From fe022a508fdd39696e3b2b188df27d60b32f0d63 Mon Sep 17 00:00:00 2001 From: Nathan Sharfi Date: Sun, 1 May 2016 15:12:38 -0700 Subject: [PATCH 4/4] =?UTF-8?q?zweihander:=20move=20dim/brighten=20to=201/?= =?UTF-8?q?2,=20add=20=E2=8C=98Q?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../keymaps/zweihander-osx/keymap.c | 16 ++++++++-------- .../keymaps/zweihander-osx/zweihander-osx.hex | Bin 51772 -> 51772 bytes 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c b/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c index f53232c3cd..d019b731f2 100644 --- a/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c +++ b/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c @@ -93,9 +93,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_END , KC_TRNS, KC_TRNS ), /* Keymap 2: Media keys - * dim brighten + * * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | F14 | | F15 | ⌘W | ⌘⇧` | ⌘` | ⌥⇧⇥ | ⌥⇥ | Power | + * | | F14 | F15 | | | | | | ⌘Q | ⌘W | ⌘⇧` | ⌘` | ⌥⇧⇥ | ⌥⇥ | Power | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * | | | | PgUp | | | | | | ⌘] | ⌥⌘↑ | ↑ | ⌥⌘↓ | | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| @@ -115,7 +115,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ // MEDIA AND MOUSE [MDIA] = KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F14, /* F14 dims screen, F15 brightens */ + KC_TRNS, KC_F14 , KC_F15 , KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, /* F14 dims screen, F15 brightens */ KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END , KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, @@ -124,11 +124,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, // right hand - KC_F15 , LGUI(KC_W), LGUI(LSFT(KC_GRV)), LGUI(KC_GRV), LALT(LSFT(KC_TAB)), LALT(KC_TAB), KC_PWR, - KC_TRNS, LGUI(KC_RBRC), LGUI(LALT(KC_UP)), KC_UP , LGUI(LALT(KC_DOWN)), KC_TRNS, KC_TRNS, - LGUI(KC_LBRC), KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_MPLY, - KC_TRNS, LSFT(KC_SPC), KC_SPC , KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, - KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, + LGUI(KC_Q), LGUI(KC_W), LGUI(LSFT(KC_GRV)), LGUI(KC_GRV), LALT(LSFT(KC_TAB)), LALT(KC_TAB), KC_PWR, + KC_TRNS, LGUI(KC_RBRC), LGUI(LALT(KC_UP)), KC_UP , LGUI(LALT(KC_DOWN)), KC_TRNS, KC_TRNS, + LGUI(KC_LBRC), KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_MPLY, + KC_TRNS, LSFT(KC_SPC), KC_SPC , KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, + KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS diff --git a/keyboard/ergodox_ez/keymaps/zweihander-osx/zweihander-osx.hex b/keyboard/ergodox_ez/keymaps/zweihander-osx/zweihander-osx.hex index 3e313c3724e7b5d37fb688cd68a2a680af8ba60f..b76c3ec8e84d0c5b703c8753d0a88873afb7aeae 100644 GIT binary patch delta 88 zcmdlpg?Y~u<_)oIOlFpot