From d3f3da5112c241e1203bd91ae16cc7b0aa075c0c Mon Sep 17 00:00:00 2001 From: Torben Hoffmann Date: Fri, 10 May 2019 07:12:11 +0200 Subject: [PATCH] Norman layout for the minidox keyboard (#5747) * Norman layout with Lower and Raise layers working * Add keymap_extra def for Norman layout * Re-org'ed the modifiers as explained in the Readme * Corrected colour legend for KLE that the Readme links to * Use #pragma once in header file * Use pragma once and move user config to config.h * Move definitions to the right file and correct link in Readme * Move def of NM_COLN to the logical place in header file * Add sendstring_norman.h for when the laptop layout is not QWERTY * Update quantum/keymap_extras/sendstring_norman.h Co-Authored-By: lehoff --- keyboards/minidox/keymaps/norman/config.h | 5 ++ keyboards/minidox/keymaps/norman/keymap.c | 69 ++++++++++++++++++++++ keyboards/minidox/keymaps/norman/readme.md | 56 ++++++++++++++++++ quantum/keymap_extras/keymap_norman.h | 54 +++++++++++++++++ quantum/keymap_extras/sendstring_norman.h | 39 ++++++++++++ 5 files changed, 223 insertions(+) create mode 100644 keyboards/minidox/keymaps/norman/config.h create mode 100644 keyboards/minidox/keymaps/norman/keymap.c create mode 100644 keyboards/minidox/keymaps/norman/readme.md create mode 100644 quantum/keymap_extras/keymap_norman.h create mode 100644 quantum/keymap_extras/sendstring_norman.h diff --git a/keyboards/minidox/keymaps/norman/config.h b/keyboards/minidox/keymaps/norman/config.h new file mode 100644 index 000000000..0d3542a03 --- /dev/null +++ b/keyboards/minidox/keymaps/norman/config.h @@ -0,0 +1,5 @@ +#pragma once + +#define PERMISSIVE_HOLD +#define QMK_KEYS_PER_SCAN 4 +#define TAPPING_TERM 160 diff --git a/keyboards/minidox/keymaps/norman/keymap.c b/keyboards/minidox/keymaps/norman/keymap.c new file mode 100644 index 000000000..2786b7dd9 --- /dev/null +++ b/keyboards/minidox/keymaps/norman/keymap.c @@ -0,0 +1,69 @@ +#include QMK_KEYBOARD_H + +#include + + +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. +enum layers { + _NORMAN, + _LOWER, + _RAISE, + _ADJUST +}; + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + LOWER, + RAISE, + ADJUST +}; + +// Defines for task manager and such +#define CALTDEL LCTL(LALT(KC_DEL)) +#define TSKMGR LCTL(LSFT(KC_ESC)) +#define DSK_LFT LGUI(LCTL(KC_LEFT)) +#define DSK_RT LGUI(LCTL(KC_RIGHT)) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + +[_NORMAN] = LAYOUT( \ + NM_Q, NM_W, NM_D, NM_F, NM_K, NM_J, NM_U, NM_R, NM_L, NM_SCLN, \ + NM_A, NM_S, NM_E, NM_T, NM_G, NM_Y, NM_N, NM_I, NM_O, NM_H, \ + NM_Z, NM_X, NM_C, NM_V, NM_B, NM_P, NM_M, NM_COMM, NM_DOT, NM_SLSH, \ + LGUI_T(KC_ENT), LT(_RAISE, KC_ESC), SFT_T(KC_BSPC), CTL_T(KC_SPC), LT(_LOWER, KC_TAB), ALT_T(KC_ENT) \ +), + +[_RAISE] = LAYOUT( \ + KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_PLUS, KC_7, KC_8, KC_9, KC_0, \ + KC_CIRC, KC_AMPR, KC_TILD, KC_PIPE, KC_BSLS, KC_MINUS, KC_4, KC_5, KC_6, KC_EQL, \ + KC_DQT, KC_QUOT, KC_UNDS, KC_GRV, _______, KC_ASTR, KC_1, KC_2, KC_3, _______, \ + _______, _______, _______, _______, MO(_ADJUST), _______ \ +), + + +[_LOWER] = LAYOUT( \ + KC_ESC, KC_HOME, KC_UP, KC_END, _______, _______, KC_LPRN, KC_RPRN, _______, _______, + KC_VOLU, KC_LEFT, KC_DOWN, KC_RIGHT, KC_PGUP, _______, KC_LBRC, KC_RBRC, _______, _______, \ + KC_VOLD, KC_MPRV, KC_MPLY, KC_MNXT, KC_PGDN, _______, KC_LCBR, KC_RCBR, _______, _______, \ + _______, MO(_ADJUST), _______, _______, _______, _______ \ +), + +[_ADJUST] = LAYOUT( \ + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, \ + _______, DSK_LFT, _______, DSK_RT, _______, TSKMGR, CALTDEL, _______, KC_F11, KC_F12, \ + RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______ \ +) + +}; + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} diff --git a/keyboards/minidox/keymaps/norman/readme.md b/keyboards/minidox/keymaps/norman/readme.md new file mode 100644 index 000000000..018e43632 --- /dev/null +++ b/keyboards/minidox/keymaps/norman/readme.md @@ -0,0 +1,56 @@ +# Minidox Norman Layout by LeHoff +Based on the QWERTY layout created by Khitsule. +![lehoff](https://i.imgur.com/rKTdymp.png) + +[KLE link](http://www.keyboard-layout-editor.com/#/gists/86ec49f9f820a8b9b36f6e0d2ef8fff7) + +## Layers +| Layer | Legend | +| ----- | ------ | +| Base | Top left (black) | +| Lower | Bottom right (red) | +| Raise | Top right (orange) | +| Adjust | Front print | + +## Features +* Raise/lower layers focus first on one-handed use +* Numpad on right hand with raise layer +* Navigation on left hand with lower layer (ESDF) + * D refers to desktop left/right on Win 10 (win+ctrl+left/right) +* Heavy use of hold/tap dual function keys - from left to right: + * Cmd/Enter + * Raise/Esc + * Shift/Backspace + * Ctrl/Space + * Lower/Tab + * Alt/Enter + + +## Modifier Placement Rationale + +There are several major driving forces at play: + +* I use MacOS. +* I'm Danish so the Alt and Shift-Alt layers in MacOS simply have to work. +* I use Vim for coding. +* I use org-mode in Emacs to keep track of my time. + +* Space is on the right hand side because I almost exclusively use my right hand thumb for + space. +* Cmd is on the left since I often use Cmd+click to open a link in a new tab in Safari. +* Due to my usage of Vim Esc got a spot on the modifier row. +* Tab is on the right to enable easy navigation between winows with Cmd+Tab. +* Shift is on the left since org-mode uses Ctrl+arrows to manipulate task state quickly, + and since the arrow keys are activated using Lower (which has been moved to the right) and S, E, T, + and D, it works well that way. +* Ctrl is on the right since Ctrl+<0-9> is used in MacOS to switch between spaces. +* Enter is on both sides since Enter is often used together with all of the modifiers. E.g., + Cmd+Enter to send mails in most situations, but Ctrl+Enter is used in Emacs to create a + new task in org-mode. + +This means that arrows and digits are being modified from the other hand, which could be +bad for gaming, so if you're into that you might want to re-think a few things, but in +that case you are probably using a Windows machine and then there are other constraints +you have to deal with. + + diff --git a/quantum/keymap_extras/keymap_norman.h b/quantum/keymap_extras/keymap_norman.h new file mode 100644 index 000000000..995b1b8a0 --- /dev/null +++ b/quantum/keymap_extras/keymap_norman.h @@ -0,0 +1,54 @@ + +/* Copyright 2019 Torben Hoffmann + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#pragma once + +#include "keymap.h" +// For software implementation of norman +#define NM_Q KC_Q +#define NM_W KC_W +#define NM_D KC_E +#define NM_F KC_R +#define NM_K KC_T +#define NM_J KC_Y +#define NM_U KC_U +#define NM_R KC_I +#define NM_L KC_O +#define NM_SCLN KC_P +#define NM_COLN LSFT(NM_SCLN) + +#define NM_A KC_A +#define NM_S KC_S +#define NM_E KC_D +#define NM_T KC_F +#define NM_G KC_G +#define NM_Y KC_H +#define NM_N KC_J +#define NM_I KC_K +#define NM_O KC_L +#define NM_H KC_SCLN + +#define NM_Z KC_Z +#define NM_X KC_X +#define NM_C KC_C +#define NM_V KC_V +#define NM_B KC_B +#define NM_P KC_N +#define NM_M KC_M +#define NM_COMM KC_COMM +#define NM_DOT KC_DOT +#define NM_SLSH KC_SLSH + diff --git a/quantum/keymap_extras/sendstring_norman.h b/quantum/keymap_extras/sendstring_norman.h new file mode 100644 index 000000000..57d450ca8 --- /dev/null +++ b/quantum/keymap_extras/sendstring_norman.h @@ -0,0 +1,39 @@ +/* Copyright 2019 Torben Hoffmann + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +/* Sendstring definitions for the Colemak layout */ +#pragma once + +#include "keymap_norman.h" + +const uint8_t ascii_to_keycode_lut[0x80] PROGMEM = { + 0, 0, 0, 0, 0, 0, 0, 0, + KC_BSPC, KC_TAB, KC_ENT, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, KC_ESC, 0, 0, 0, 0, + KC_SPC, KC_1, KC_QUOT, KC_3, KC_4, KC_5, KC_7, KC_QUOT, + KC_9, KC_0, KC_8, KC_EQL, KC_COMM, KC_MINS, KC_DOT, KC_SLSH, + KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, + KC_8, KC_9, NM_SCLN, NM_SCLN, KC_COMM, KC_EQL, KC_DOT, KC_SLSH, + KC_2, NM_A, NM_B, NM_C, NM_D, NM_E, NM_F, NM_G, + NM_H, NM_I, NM_J, NM_K, NM_L, NM_M, NM_N, NM_O, + NM_P, NM_Q, NM_R, NM_S, NM_T, NM_U, NM_V, NM_W, + NM_X, NM_Y, NM_Z, KC_LBRC, KC_BSLS, KC_RBRC, KC_6, KC_MINS, + KC_GRV, NM_A, NM_B, NM_C, NM_D, NM_E, NM_F, NM_G, + NM_H, NM_I, NM_J, NM_K, NM_L, NM_M, NM_N, NM_O, + NM_P, NM_Q, NM_R, NM_S, NM_T, NM_U, NM_V, NM_W, + NM_X, NM_Y, NM_Z, KC_LBRC, KC_BSLS, KC_RBRC, KC_GRV, KC_DEL +}; +