فهرست منبع

AB's practical planck keymap (#435)

Anand Babu (AB) Periasamy 9 سال پیش
والد
کامیت
bab6a8fde5

+ 63 - 0
keyboards/planck/keymaps/ab/Makefile

@@ -0,0 +1,63 @@
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device.
+#                Please customize your programmer settings(PROGRAM_CMD)
+#
+# make teensy = Download the hex file to the device, using teensy_loader_cli.
+#               (must have teensy_loader_cli installed).
+#
+# make dfu = Download the hex file to the device, using dfu-programmer (must
+#            have dfu-programmer installed).
+#
+# make flip = Download the hex file to the device, using Atmel FLIP (must
+#             have Atmel FLIP installed).
+#
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
+#               (must have dfu-programmer installed).
+#
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
+#                (must have Atmel FLIP installed).
+#
+# make debug = Start either simulavr or avarice as specified for debugging,
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+# Build Options
+#   change to "no" to disable the options, or define them in the makefile.mk 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 = yes      # Enable keyboard backlight functionality
+MIDI_ENABLE = no            # MIDI controls
+AUDIO_ENABLE = no           # 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

+ 18 - 0
keyboards/planck/keymaps/ab/README.md

@@ -0,0 +1,18 @@
+# Practical keymap for Planck Ortholinear 40% Mechanical Keyboard
+A practical keymap that emulates standard QWERTY keyboard for Planck. Once you get comfortable with this keymap, you may fork and customize it for your own needs. 
+
+![Layout](keyboard-layout.png "Practical Keymap")
+![Photo](keyboard-photo.jpg "Planck Keyboard")
+
+* Online keyboard layout editor: http://goo.gl/mlLAFZ
+
+# Programming Instructions:
+Enter into programming mode and run the following command.
+```
+$ sudo KEYMAP=ab make dfu
+```
+# Notes
+* Simultaneous RAISE+LOWER enters CUSTOM layer. You may add your own macros and custom keys here.
+* RAISE and LOWER also acts as PgUp and PgDn when tapped.
+* [CapsLock] also acts as [Ctrl] key when you press and hold. It is convenient for GNU Emacs users.
+* Bracket keys are placed in the center of the keyboard for programmer's convenience.

BIN
keyboards/planck/keymaps/ab/compiled.hex


+ 101 - 0
keyboards/planck/keymaps/ab/keyboard-layout.json

@@ -0,0 +1,101 @@
+[
+  {
+    "name": "AB's Practical Keymap for Planck",
+    "author": "Anand Babu Periasamy"
+  },
+  [
+    "1\nF1\n!\n\n\n\n\n\n\nTab",
+    "2\nF2\n@\n\n\n\n\n\n\nQ",
+    "3\nF3\n#\n\n\n\n\n\n\nW",
+    "4\nF4\n$\n\n\n\n\n\n\nE",
+    "5\nF5\n%\n\n\n\n\n\n\nR",
+    "6\nF6\n^\n\n\n\n\n\n\nT",
+    "7\nF7\n&\n\n\n\n\n\n\nY",
+    "8\nF8\n*\n\n\n\n\n\n\nU",
+    "9\nF9\n(\n\n\n\n\n\n\nI",
+    "0\nF10\n)\n\n\n\n\n\n\nO",
+    "-\nF11\n_\n\n\n\n\n\n\nP",
+    "=\nF12\n+\n\n\n\n\n\n\n<i class=\"fa fa-chevron-circle-left\" aria-hidden=\"true\"></i>"
+  ],
+  [
+    {
+      "a": 7
+    },
+    "Ctrl",
+    "A",
+    "S",
+    "D",
+    {
+      "a": 4
+    },
+    "(\n\n\n\n\n\n\n\n\nF",
+    ")\n\n\n\n\n\n\n\n\nG",
+    "{\n\n\n\n\n\n\n\n\nH",
+    "}\n\n\n\n\n\n\n\n\nJ",
+    {
+      "a": 7
+    },
+    "K",
+    "L",
+    {
+      "a": 6
+    },
+    ";\n\n:",
+    {
+      "a": 7
+    },
+    "Enter"
+  ],
+  [
+    "Shift",
+    "Z",
+    "X",
+    "C",
+    {
+      "a": 4
+    },
+    "[\n`\n\n\n\n\n\n\n\nV",
+    "]\n~\n\n\n\n\n\n\n\nB",
+    "'\n\\\n\n\n\n\n\n\n\nN",
+    "\"\n|\n\n\n\n\n\n\n\nM",
+    {
+      "a": 6
+    },
+    ",\n\n<",
+    ".\n\n>",
+    "/\n\n?",
+    {
+      "a": 7
+    },
+    "Shift\n\n\n\nEnter"
+  ],
+  [
+    {
+      "a": 4
+    },
+    "<i class='fa fa-lightbulb-o'></i>\n<i class='fa fa-download'></i>\n\n\n\n\n\n\n\nCtrl",
+    {
+      "a": 7
+    },
+    "Esc",
+    "<i class='fa fa-linux'></i>",
+    "Alt",
+    "<i class='fa fa-sort-up'></i>",
+    {
+      "a": 4,
+      "w": 2
+    },
+    "\nPgUP\n\nPgDn\n\n\n\n\n\nSpace",
+    {
+      "a": 7
+    },
+    "<i class='fa fa-sort-down'></i>",
+    "<i class=\"fa fa-long-arrow-left\" aria-hidden=\"true\"></i>",
+    {
+      "a": 4
+    },
+    "\n<i class='fa fa-volume-down'></i>\n\n\n\n\n\n\n\n<i class=\"fa fa-long-arrow-up\" aria-hidden=\"true\"></i>",
+    "\n<i class='fa fa-volume-up'></i>\n\n\n\n\n\n\n\n<i class=\"fa fa-long-arrow-down\" aria-hidden=\"true\"></i>",
+    "\n<i class='fa fa-volume-off'></i>\n\n\n\n\n\n\n\n<i class=\"fa fa-long-arrow-right\" aria-hidden=\"true\"></i>"
+  ]
+]

BIN
keyboards/planck/keymaps/ab/keyboard-layout.png


BIN
keyboards/planck/keymaps/ab/keyboard-photo.jpg


+ 122 - 0
keyboards/planck/keymaps/ab/keymap.c

@@ -0,0 +1,122 @@
+// 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"
+#include "eeconfig.h"
+#ifdef BACKLIGHT_ENABLE
+  #include "backlight.h"
+#endif
+
+extern keymap_config_t keymap_config;
+
+// Symbolic names for macro IDs.
+#define _QWERTY  0 // QUERTY layer
+#define _RAISE   1 // Raise layer
+#define _LOWER   2 // Lower layer
+#define _CUSTOM  3 // Custom layer
+#define _BL      4 // Backlight
+#define _MOBILE  5 // Mobile#
+#define _CUSTOM1 6 // Custom macro 1
+#define _CUSTOM2 7 // Custom macro 2
+
+// Macro shortcuts.
+#define RAISE   M(_RAISE)
+#define LOWER   M(_LOWER)
+#define CUSTOM  M(_CUSTOM) // RAISE + LOWER
+#define BL      M(_BL)
+#define MOBILE  M(_MOBILE)
+#define CUSTOM1 M(_CUSTOM1)
+#define CUSTOM2 M(_CUSTOM2)
+
+// This config can be found at Keyboard layout editor site: http://goo.gl/zjXL2l
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_QWERTY] = { /* 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_LCTL, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_ENT},
+    {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, FUNC(3)},
+    {KC_LCTL, KC_ESC,  KC_LGUI, KC_LALT, RAISE,   KC_SPC,  KC_SPC,  LOWER,   KC_LEFT, KC_UP,   KC_DOWN, KC_RGHT}
+},
+[_RAISE] = { /* RAISE */
+    {KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL},
+    {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LPRN, KC_RPRN, KC_LCBR, KC_RCBR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS},
+    {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, KC_QUOT, KC_DQT,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS},
+    {BL,      KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}
+},
+[_LOWER] = { /* LOWER */
+    {KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12},
+    {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LCBR, KC_LCBR, KC_BSLS, KC_TRNS},
+    {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_GRV,  KC_TILD, KC_BSLS, KC_PIPE, KC_LBRC, KC_LBRC, KC_TRNS, KC_TRNS},
+    {RESET,   KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_PGDN, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE}
+},
+[_CUSTOM] = { /* CUSTOM */
+    {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, MOBILE,  KC_TRNS, CUSTOM1, CUSTOM2, 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}
+}
+};
+
+// Enable these functions using FUNC(n) macro. They seem to be buggy mostly.
+const uint16_t PROGMEM fn_actions[] = {
+    [0] = ACTION_LAYER_TAP_KEY(_RAISE, KC_PGUP),   // Tap for PgUp, hold for RAISE
+    [1] = ACTION_LAYER_TAP_KEY(_LOWER, KC_PGDN),   // Tap for PgDn, hold for LOWER
+    [2] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_CAPS),  // Tap for Caps, hold for Ctrl
+    [3] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_ENT),   // Tap for Enter, hold for Shift
+};
+
+// Set a layer persistantly.
+void persistant_default_layer_set(uint16_t default_layer) {
+  eeconfig_update_default_layer(default_layer);
+  default_layer_set(default_layer);
+}
+
+// Macro actions for each corresponding ID.
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+    switch(id) {
+    case _QWERTY: // Default QWERTY layer. // This case not used for now.
+	if (record->event.pressed) {
+	    persistant_default_layer_set(1UL<<_QWERTY);
+	}
+	break;
+    case _RAISE: // Raised layer.
+	if (record->event.pressed) {
+	    layer_on(_RAISE);
+	    update_tri_layer(_LOWER, _RAISE, _CUSTOM);
+	} else {
+	    layer_off(_RAISE);
+	    update_tri_layer(_LOWER, _RAISE, _CUSTOM);
+	}
+	break;
+    case _LOWER: // Lowered layer.
+	if (record->event.pressed) {
+	    layer_on(_LOWER);
+	    update_tri_layer(_LOWER, _RAISE, _CUSTOM);
+	} else {
+	    layer_off(_LOWER);
+	    update_tri_layer(_LOWER, _RAISE, _CUSTOM);
+	}
+	break;
+    case _BL:// Backlight
+	if (record->event.pressed) {
+	    register_code(KC_RSFT);
+#ifdef BACKLIGHT_ENABLE
+	    backlight_step();
+#endif
+	} else {
+	    unregister_code(KC_RSFT);
+	}
+	break;
+    case _MOBILE:// Your mobile# here.
+	return MACRODOWN(T(1), T(2), T(3), T(MINS),
+			 T(1), T(2), T(3), T(MINS),
+			 T(1), T(2), T(3), T(4),
+			 END);
+    case _CUSTOM1:// Your custom macro 1
+	return MACRODOWN(T(E), T(M), T(A), T(C), T(S), T(SPC), END);
+    case _CUSTOM2:// Your custom macro 2
+	return MACRODOWN(T(L), T(S), T(SPC), T(MINS), T(L), T(ENT), END);
+    };
+    return MACRO_NONE;
+}