Post a picture of your ideal keyboard layout!

Nappy

22 Sep 2015, 02:29

Something like this is on my mind for a while now, I think It would come close to my ideal layout:
layout.png
layout.png (44.1 KiB) Viewed 3269 times

kunlun

22 Sep 2015, 03:14

Not totally ideal because I'm working around my keycap set. But this is what I'll be basing my build on. It changes a little every day.
Capture.PNG
Capture.PNG (31.08 KiB) Viewed 3266 times

Nappy

22 Sep 2015, 13:38

I put some more thoughts into this, and with a little inspiration from truly ergonomic, I came up with this:
image.jpg
image.jpg (75.68 KiB) Viewed 3225 times
Im kind of in love with this layout. ;)

User avatar
Hypersphere

22 Sep 2015, 20:05

I usually use a HHKB Pro 2. Otherwise, I map a standard layout to something close.
HH_Hyper1.jpg
HH_Hyper1.jpg (69.04 KiB) Viewed 3193 times
For a standard layout 60%, I like the color symmetry to be like so:
Hyper2layout.PNG
Hyper2layout.PNG (25.73 KiB) Viewed 3190 times

kunlun

22 Sep 2015, 20:23

t8c wrote: Edit: Quick question: What would be the ideal controller for programming this with the TMK firmware? Is teensy 2.0 big enough or do I need the plus plus version?
You have 6 rows there, and 19 columns. I think 98 keys. You definitely can't do one pin for each column and row. Even if you do two columns per pin and two pins per row, 12*10, that gives you 22. The matrix with the least number of pins is the one that's most square, 10x10, or 20 pins. But that would be a pain, and still leaves you no room for LEDs or anything else. You probably need something bigger than a regular Teensy.

Atmel has a number of cheap AtMEGA microcontrollers with plenty of pins in a DIP package, for example the 1284. I don't think any of them have USB but you can use V-USB. And if you're okay with SMD (there are cheap breakouts available that make these a lot easier to work with), you gain a whole new world of options.

User avatar
Muirium
µ

22 Sep 2015, 20:39

Translation: Teensy 2++.

The easiest matrix to wire up needs: rows + columns = pins. A regular Teensy 2 would almost do it, but not quite. I think they have 24 usable pins. The Teensy 2++ has many more.

kunlun

22 Sep 2015, 21:02

Teensy is just an expensive breakout with a few little conveniences. Do it yourself and gain skills.

I think Teensy 2 has just 21 I/O pins, or else it could probably work for 12x10.

Edit: oh, it looks like it does have 24.

User avatar
Muirium
µ

22 Sep 2015, 21:05

Do what: surface mount?

I was wrong about the Teensy 2. It has 25 useful pins. Perfect!

http://www.pjrc.com/teensy/index.html

kunlun

22 Sep 2015, 21:23

I have no choice because my little USB 3 chip is only available in .5mm QFP, but I advise everyone to do it even if only for the challenge and experience. Not to mention the wide range of flexibility that's impossible to get with premade development boards like Teensy and Arduino, and economics (not really if you have to order tools and supplies, and will only ever do this once or twice).

If you aren't doing a PCB, or your PCB can't do a package that small, theseare very cheap.

User avatar
darkspider

23 Sep 2015, 15:26

I once had thought I'd exchange vertical bar and BackSpace like HHKB layout, but I thought better of it.
Then I'm now considering to map BS to Fn-N since it can save distance my index finger traveling.
But what I'm afraid of is that I've never seen a man who maps BS to this position.
Attachments
keyboard-layout(4).png
keyboard-layout(4).png (53.11 KiB) Viewed 3119 times

User avatar
HzFaq

23 Sep 2015, 16:33

Ever since I mapped backspace to FN+space I almost never use the dedicated backspace key.

User avatar
darkspider

23 Sep 2015, 17:08

HzFaq wrote: Ever since I mapped backspace to FN+space I almost never use the dedicated backspace key.
I've thought it's not reasonable at all to move my finger to the dedicated BS key on the distant place.
So I'm relieved to hear there is a man who think like me.

User avatar
HzFaq

23 Sep 2015, 17:15

I borrowed the idea from CeeSA and there are a few boards with split spacebars with one half being backspace, so we aren't alone in our thinking :D.

I'll post my keymap here when I'm back at home. I can't say I have a favourite physical layout just yet, but I've had a FN layer set up that I've used for about 2/3 years now that I'm pretty comfortable with.

User avatar
darkspider

23 Sep 2015, 17:29

HzFaq wrote: I borrowed the idea from CeeSA and there are a few boards with split spacebars with one half being backspace, so we aren't alone in our thinking :D.

I'll post my keymap here when I'm back at home. I can't say I have a favourite physical layout just yet, but I've had a FN layer set up that I've used for about 2/3 years now that I'm pretty comfortable with.
Thanks, I'm looking forward it :)

User avatar
HzFaq

23 Sep 2015, 21:09

I think this is pretty much up to date.
Spoiler:

Code: Select all

Main Layer
  ----------
  ,-----------------------------------------------------------.
  |Fn8|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Bsp|`  | 
  |-----------------------------------------------------------| 
  |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|     | 
  |------------------------------------------------------|Ent | 
  |Lctrl |  A|  S|  D|  F|  G|  H|  J|  K|  L|Fn3|  '|  #|    |              
  |-----------------------------------------------------------|     
  |Shft|Fn2|  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /|Shift |FLc|   
  |-----------------------------------------------------------| 
  |Fn1 |Gui|Alt |        Space                  |Alt |Fn1|Ctl | 
  `-----------------------------------------------------------' 
  FLc = Fn1 Lock
 
  1 - Arrows (FN1)
  ----------
  ,-----------------------------------------------------------.
  |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Del|Cap| 
  |-----------------------------------------------------------| 
  |Tab  |Del|  W| Up|PSc|Brk|PSc|  U| Up|  O|Del|  [|  ]|     | 
  |------------------------------------------------------|Ent | 
  |Lctrl |  A|Lft|Dwn|Rgt|  G|  H|Lft|Dwn|Rgt|Fn3|Ins|SLk|    |              
  |-----------------------------------------------------------|     
  |Shft|Fn2|Hme|PUp|PDn|End|  B|  N|Hme|PUp|PDn|End|Shift |FLc|     
  |-----------------------------------------------------------| 
  |Fn1 |Gui|Alt |         BSpace                |Alt |Fn1|Ctl | 
  `-----------------------------------------------------------' 
  FLc = Fn1 lock
  Cap = Capslock
  PSc = Print Screen
  Brk = Break/Pause
  SLk = Scroll lock
  
  
  2 - Numpad (FN2)
  ----------------
  ,-----------------------------------------------------------.
  |Fn8|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Del|Num|
  |-----------------------------------------------------------| 
  |Tab  |Del|  -|  +|  *|  /|  Y|  7|  8|  9|  /|  [|  ]|     | 
  |------------------------------------------------------|Ent | 
  |Lctrl |  =|Del|Ent|Tab|  :|  H|  4|  5|  6|Fn3|'  |  #|    |              
  |-----------------------------------------------------------|     
  |Shft|Fn2|  Z|  X|  C|BTb|  .|  0|  1|  2|  3|  .|Shift |FLc|     
  |-----------------------------------------------------------| 
  |Fn1 |Gui|Alt |        Space                  |Alt |Fn1|Ctl | 
  `-----------------------------------------------------------' 
  FLc = Fn1 Lock
  Num = Numlock
  Access via holding Fn2, tap Fn2 for \|
  All symbols and numbers send numpad scancodes, make sure numlock is enabled!
  BTb = Backtab
  
  3 - Mouse (FN3/;)
  -----------------
  ,-----------------------------------------------------------.
  |Fn8|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Bsp|`  | 
  |-----------------------------------------------------------| 
  |Tab  |  Q|MB4|WUp|MB5|  T|  Y|  U|MUp|  O|  P|  [|  ]|     | 
  |------------------------------------------------------|Ent | 
  |Lctrl |  A|MB2|MB3|MB1|  G|  H|MLf|MDn|MRt|Fn3|  '|  #|    |              
  |-----------------------------------------------------------|     
  |Shft|Fn2|  Z|  X|WDn|  V|  B|  N|  M|  ,|  .|  /|Shift |FLc|     
  |-----------------------------------------------------------| 
  |Fn1 |Gui|Alt |        Space                  |Alt |Fn1|Ctl | 
  `-----------------------------------------------------------' 
  Access via holding Fn3, tap Fn3 for ;:
  MB1 = Mouse button 1 (left click)
  MB2 = Mouse button 2 (right click)
  MB3 = Mouse button 3 (middle click)
  MB4 = Mouse button 4 (default behaviour is "back", depends on current active program)
  MB5 = Mouse button 5 (Default behaviour is "forward", depends on current active program)
  WUp = Mouse wheel up
  WDn = Mouse wheel down
  MUp = Mouse cursor up
  MDn = Mouse cursor down
  MLf = Mouse cursor left
  MRt = Mouse cursor right
  
  4 - Misc (FN8)
  --------------
  ,-----------------------------------------------------------.
  |Fn8|   |   |   |   |   |   |   |   |   |   |   |   |   |Pwr| 
  |-----------------------------------------------------------| 
  |     |   |   |   |   |   |   |   |   |   |   |   |   |     | 
  |------------------------------------------------------|    | 
  |      |   |   |   |   |   |   |   |   |   |   |   |   |    |              
  |-----------------------------------------------------------|     
  |    |   |   |   |   |   |   |   |   |   |   |   |      |   |     
  |-----------------------------------------------------------| 
  |    |   |    |                               |    |   |    | 
  `-----------------------------------------------------------' 
  Access via holding Fn8, tap for Esc
  Power = Power/shutdown
    

User avatar
vvp

23 Sep 2015, 22:14

darkspider wrote: I've thought it's not reasonable at all to move my finger to the dedicated BS key on the distant place.
So I'm relieved to hear there is a man who think like me.
Kinesis Advantage has BackSpace at the left thumb home position. And most of the ErgoDox users probably too. I would say it is common to have BackSpace at home position or very near to it. You are definitely not alone wanting to have BackSpace near the home position :)

User avatar
darkspider

24 Sep 2015, 00:23

@HzFaq
Thank you:) I'll try to improve the layout considering yours.
@vvp
It seems so. The current standard layout is too much unusable and not ergonomic especially for editing.

User avatar
HzFaq

24 Sep 2015, 10:34

That's just what works for me, I do a lot of work in SAP/Excel but I understand that it might not work for someone that does a lot of coding or whatever.

User avatar
bentglasstube

25 Sep 2015, 05:48

This is what I have been using for some months since I was inspired by matt3o to build my own 60%:

Image

User avatar
richfiles

25 Sep 2015, 09:10

Well... First post for me! Total mechanical keyboard noob. I've been settling with membranes for decades. I've been working on a controller for the video game Kerbal Space Program, and that led me to consider integrating a small keyboard into it. I had an Apple IIc keyboard with Alps SKCM Amber switches. Love the feel of those mechanical switches. I had planned on using it, but upon digging around, decided it was time to just simply go with a proper mechanical keyboard. I've seen the 40% and 60% keyboards... And I don't like them. Layers are not my thing. I like clear and easy access functionality. I have always favored big keyboards, with full layouts. I liked the layout of my Apple Model A1048. I realize though, that if I want game controls and my keyboard to coexist, I really need to consider space efficiency. For that reason, I found the 75% layout to be my ideal layout, with a separate number pad that i can put off to the side when not in use.

I decided I wanted to play around with the 75% layout, and sorta personalize it. By adding a one more column to the right (making 2 columns right of the Return and right shift key), I get an 88 key keyboard that uses stock standard key sizes (makes ordering custom key cap set easy, as a basic set can cover all the keys), and is only 2u wider than the core key set of a standard block of keys. Basically, it's smaller than a TKL, 1u wider than a standard 75%, and has one more key than a standard 87 key TKL. It provides 11 keys above and right of the Backspace/Return/R-Shift keys that can be used for things like Home, End, Page Up/Down, Del, etc. It's not exactly the most compact layout out there, but it's pretty efficiently packed together for basically not sacrificing any key size or key count.

I made ONE modification from my original planned layout. It is possible to use only keys from a basic keycap kit to fill this keyboard. It will take 6 1.25u modifier keys, a 6.25u spacebar, a 2.25 Enter and L-Shift, and a 2.75u R-Shift... Standard key sizes. I modified this layout just a hair to let me take advantage of a 1.5u modifier key just left of the space bar. I absorbed a 0.25u gap between the right most modifier and the left arrow key to fit the wider modifier. As it is, installing a 1.25u modifier in that location would leave a 0.125u gap between it and the space bar and the adjacent modifier. Submitted an order request for a single plate from The LeandreN Prototyper page.

I also got in on the "Danger Zone" keycap kit Massdrop buy, cause I was digging the aviation themed key set, and figured it would work nicely to compliment my Kerbal controller.

••My 75% +1 layout with "Danger Zone" key caps••
Image

Danger Zone keycap set: https://www.massdrop.com/buy/danger-zone-sa-keycap-set
Plate source: http://leandren.bigcartel.com/prototyper-round-1
Last edited by richfiles on 30 Sep 2015, 08:37, edited 3 times in total.

User avatar
Chyros

25 Sep 2015, 09:46

Jeez, I really underestimated how popular 60% layouts were Oo . Am I the only one who likes >100% layouts then? xD

pcaro

25 Sep 2015, 09:50

Chyros wrote:Jeez, I really underestimated how popular 60% layouts were Oo . Am I the only one who likes >100% layouts then? xD
You and tiproman ;)

User avatar
richfiles

25 Sep 2015, 10:00

Chyros wrote: Jeez, I really underestimated how popular 60% layouts were Oo . Am I the only one who likes >100% layouts then? xD
I like to keep all my keys real, even if I like shrinking down the overall keyboard. Layers... not for me. When I do my number pad, I'll have more keys than a typical full layout, but since it'll be a side unit, I can slide it out of the way when I'm gaming, and don't need it. I would get annoyed with anything less than a 75%... and that's only if I get that separate number pad to give me the rest of it! :mrgreen:

User avatar
wcass

27 Sep 2015, 00:06

My ideal keyboard would have buckling spring switches, red caps, and a black case. It would be as narrow as a 60% but have all the keys of an SSK.
keyboard-layout.png
keyboard-layout.png (39.72 KiB) Viewed 2866 times

User avatar
ramnes
ПБТ НАВСЕГДА

27 Sep 2015, 00:11

I prefer much more this layout than your custom BS board's one! Why didn't you use that one on your project?

User avatar
Oobly

29 Sep 2015, 10:04

wcass wrote: My ideal keyboard would have buckling spring switches, red caps, and a black case. It would be as narrow as a 60% but have all the keys of an SSK.
The attachment keyboard-layout.png is no longer available
This is really nice! Compact and yet somehow also classic. I like it a lot. It has a dedicated upside down T arrow cluster, edits in a familiar layout, and full F keys. I'd probably cluster the F keys differently, something like this:
Top_section.png
Top_section.png (7.73 KiB) Viewed 2819 times

Miko

17 Oct 2015, 19:20

I needed quite a while to get this layout. I wanted a german layout for my ergox. I programm and use LaTeX quite a lot, so I want acess to ()[]{}. These are quite hard to reach on the german layout, so I added Extra keys for them. For the arrow keys i used the jkli layout from ErgoEmacs (I can highly recommend it BTW). Also, as a Thinkpad user I miss the pointingstick. Thankfully the TMK firmware supports mouse emulation and now i have a virtual mouse on wasd.

Another thing that is really awesome about the TMK firmware are tap-keys. The concept is IMO quite hard to explain, but I'll try anyway :). It's a way to map two functions to a key. My left shift key doubles as a tab key. If I release It without having pressed another key (to get a capital letter), it serves as tab key.

Both the enter and the space key are tap keys and do also shift to a different layer. As long as the enter key is pressed I can the left part as a mouse and as soon as i release it the keyboard is back to normal operation. When I press it and release it immediately (tap) it's Enter.

I used the tap keys to emulate a obscenly priced a Matias halfQWERTY functionality. It's quite awesome and alows everybody with touchtyping skills to operate the keyboard with only one hand without any training. It feels somewhat magical because one can do stuff one never learned.



Here is the TMK firmware for the ergodox: https://github.com/cub-uanic/tmk_keyboard .

And here is the sourcecode for my layout, in case anybody is interested.
Spoiler:
// Keymap.c
// make -f Makefile.lufa

/*
Based on:

Copyright 2013 Oleg Kostyuk <cub.uanic@gmail.com>

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 <http://www.gnu.org/licenses/>.
*/
#include <stdint.h>
#include <stdbool.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#include "keycode.h"
#include "action.h"
#include "action_util.h"
#include "action_code.h"
#include "action_macro.h"
#include "action_layer.h"
#include "bootloader.h"
#include "report.h"
#include "host.h"
#include "print.h"
#include "debug.h"
#include "keymap.h"
#include "ergodox.h"


/* ErgoDox keymap definition macro */
#define KEYMAP( \
\
/* left hand, spatial positions */ \
k00,k01,k02,k03,k04,k05,k06, \
k10,k11,k12,k13,k14,k15,k16, \
k20,k21,k22,k23,k24,k25, \
k30,k31,k32,k33,k34,k35,k36, \
k40,k41,k42,k43,k44, \
k55,k56, \
k54, \
k53,k52,k51, \
\
/* right hand, spatial positions */ \
k07,k08,k09,k0A,k0B,k0C,k0D, \
k17,k18,k19,k1A,k1B,k1C,k1D, \
k28,k29,k2A,k2B,k2C,k2D, \
k37,k38,k39,k3A,k3B,k3C,k3D, \
k49,k4A,k4B,k4C,k4D, \
k57,k58, \
k59, \
k5C,k5B,k5A ) \
\
/* matrix positions */ \
{ \
{ KC_##k00,KC_##k10,KC_##k20,KC_##k30,KC_##k40,KC_NO }, \
{ KC_##k01,KC_##k11,KC_##k21,KC_##k31,KC_##k41,KC_##k51}, \
{ KC_##k02,KC_##k12,KC_##k22,KC_##k32,KC_##k42,KC_##k52}, \
{ KC_##k03,KC_##k13,KC_##k23,KC_##k33,KC_##k43,KC_##k53}, \
{ KC_##k04,KC_##k14,KC_##k24,KC_##k34,KC_##k44,KC_##k54}, \
{ KC_##k05,KC_##k15,KC_##k25,KC_##k35,KC_NO, KC_##k55}, \
{ KC_##k06,KC_##k16,KC_NO, KC_##k36,KC_NO, KC_##k56}, \
\
{ KC_##k07,KC_##k17,KC_NO, KC_##k37,KC_NO, KC_##k57}, \
{ KC_##k08,KC_##k18,KC_##k28,KC_##k38,KC_NO, KC_##k58}, \
{ KC_##k09,KC_##k19,KC_##k29,KC_##k39,KC_##k49,KC_##k59}, \
{ KC_##k0A,KC_##k1A,KC_##k2A,KC_##k3A,KC_##k4A,KC_##k5A}, \
{ KC_##k0B,KC_##k1B,KC_##k2B,KC_##k3B,KC_##k4B,KC_##k5B}, \
{ KC_##k0C,KC_##k1C,KC_##k2C,KC_##k3C,KC_##k4C,KC_##k5C}, \
{ KC_##k0D,KC_##k1D,KC_##k2D,KC_##k3D,KC_##k4D,KC_NO } \
}

#if defined(KEYMAP_DVORAK)
#include "keymap_dvorak.h"
#elif defined(KEYMAP_COLEMAK)
#include "keymap_colemak.h"
#elif defined(KEYMAP_WORKMAN)
#include "keymap_workman.h"
#elif defined(KEYMAP_MICRO)
#include "keymap_micro.h"
#elif defined(KEYMAP_CUB)
#include "keymap_cub.h"
#else



/*
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | Del | 1 | 2 | 3 | 4 | 5 | Esc | | Ins | 6 | 7 | 8 | 9 | 0 | ß |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | LGui | Q | W | E | R | T | F15 | | PgUp | Z | U | I | O | P | Ü |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | BS | A | S | D | F | G |------| |------| H | J | K | L | Ö | Ä |
* |--------+------+------+------+------+------| F16 | | PgDn |------+------+------+------+------+--------|
* | Tab/Shf| Y | X | C | V | B | | | | N | M | , | . | - | SHIFT |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | Hyper| ´ | # | * | ° | | > | ) | ] | } | |
* | | ` | ' | + ~ | ^ | | < | | ( | [ | { | COMP |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | AltGr| Menü | | Pos1 | Ende |
* ,------|------|------| |------+------+------.
* | | | Pause| | Druck| | |
* | Space| Alt |------| |------| Cnrl | Enter|
* | | | F13 | | F14 | | |
* | Flip | | Greek| | Symbl| | Mouse|
* `--------------------' `--------------------'
*
*/
static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KEYMAP( // layer 0 : default
// left hand
DEL , 1, 2, 3, 4, 5, ESC,
LGUI, Q, W, E, R, T, F17,
BSPC, A, S, D, F, G,
FN2 , Z, X, C, V, B, F18,
F19 , EQUAL, NUHS,RBRC, GRV,
RALT,MENU,
PAUSE,
FN1,LALT, F13,
// right hand
INS,6, 7, 8, 9, 0, MINS,
PGUP,Y, U, I, O, P, LBRC,
H, J, K, L, SCLN,QUOT,
PGDN,N, M, COMM,DOT, SLSH,RSFT,
NUBS,F14 ,F15 ,F16 ,PAUSE, // (Compose)
HOME,END,
PSCREEN,
F20,LCTRL, FN3
),

KEYMAP( // layer 1 : function and symbol keys
// left hand
MINS,F1, F2, F3, F4, F5, F11,
LBRC, P, O, I, U, Y, PGUP,
QUOT,SCLN, L, K, J, H,
RSFT,SLSH,DOT,COMM, M, N, PGDN,
TRNS,TRNS,TRNS,TRNS,TRNS,
TRNS,TRNS,
TRNS,
TRNS,TRNS,TRNS,
// right hand
F12, F6, F7, F8, F9, F10, F21,
TRNS,MPRV,PGDN, UP ,PGUP,MNXT,TRNS,
WBAK,LEFT,DOWN,RGHT,WFWD,TRNS,
TRNS,TRNS,MPLY,MAIL,WFAV,TRNS,CAPS,
VOLU,VOLD,MUTE,TRNS,TRNS,
POWER,TRNS,
TRNS,
TRNS,TRNS,TRNS
),

KEYMAP( // layer 2 : keyboard functions
// left hand
FN0, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
TRNS,TRNS,TRNS,TRNS,TRNS,
TRNS,TRNS,
TRNS,
TRNS,TRNS,TRNS,
// right hand
FN4, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
TRNS,TRNS,TRNS,TRNS,TRNS,
TRNS,TRNS,
TRNS,
TRNS,TRNS,TRNS
),

KEYMAP( // layer 3: numpad
// left hand
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
TRNS,TRNS,WH_U,MS_U,WH_D,TRNS,TRNS,
TRNS,TRNS,MS_L,MS_D,MS_R,TRNS,
TRNS,BTN3,BTN2,BTN1,TRNS,TRNS,TRNS,
TRNS,TRNS,TRNS,TRNS,TRNS,
TRNS,TRNS,
TRNS,
TRNS,BTN1,BTN2,
// right hand
TRNS,NLCK,PSLS,PAST,PAST,PMNS,BSPC,
TRNS,NO, P7, P8, P9, PMNS,BSPC,
NO, P4, P5, P6, PPLS,PENT,
TRNS,NO, P1, P2, P3, PPLS,CAPS,
P0, PDOT,SLSH,PENT,PENT,
TRNS,TRNS,
TRNS,
TRNS,TRNS,TRNS
),

};

/* id for user defined functions */
enum function_id {
TEENSY_KEY,
};

/*
* Fn action definition
*/
static const uint16_t PROGMEM fn_actions[] = {
ACTION_FUNCTION(TEENSY_KEY), // FN0 - Teensy key
ACTION_LAYER_TAP_KEY(1,KC_SPACE), // FN1 - Tab Layer Space // Layer 1
//ACTION_MODS_TAP_KEY(MOD_LCTL, KC_BSPC), // FN2 - Control / BS
ACTION_MODS_TAP_KEY(MOD_LSFT, KC_TAB), // FN2 - Shift / TAB
ACTION_LAYER_TAP(3,KC_ENTER), // FN3 - Tab Layer Enter // Layer 3
};

void action_function(keyrecord_t *event, uint8_t id, uint8_t opt)
{
if (id == TEENSY_KEY) {
clear_keyboard();
print("\n\nJump to bootloader... ");
_delay_ms(250);
bootloader_jump(); // should not return
print("not supported.\n");
}
}

#endif


#define KEYMAPS_SIZE (sizeof(keymaps) / sizeof(keymaps[0]))
#define FN_ACTIONS_SIZE (sizeof(fn_actions) / sizeof(fn_actions[0]))

/* translates key to keycode */
uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
{
if (layer < KEYMAPS_SIZE) {
return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]);
} else {
// fall back to layer 0
return pgm_read_byte(&keymaps[0][(key.row)][(key.col)]);
}
}

#if defined(KEYMAP_CUB)

// function keymap_fn_to_action will be defined in keymap_cub.h

#else
/* translates Fn keycode to action */
action_t keymap_fn_to_action(uint8_t keycode)
{
action_t action;
if (FN_INDEX(keycode) < FN_ACTIONS_SIZE) {
action.code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]);
} else {
action.code = ACTION_NO;
}
return action;
}
#endif
Normal operation:
Layer1.png
Layer1.png (79.41 KiB) Viewed 2705 times
While pressing FN1
Layer2.png
Layer2.png (64.06 KiB) Viewed 2705 times
While pressing FN2
Layer3.png
Layer3.png (66.25 KiB) Viewed 2705 times
Last edited by Miko on 18 Oct 2015, 01:42, edited 1 time in total.

User avatar
vvp

17 Oct 2015, 21:58

Miko wrote: Another thing that is really awesome about the TMK firmware are tap-keys. The concept is IMO quite hard to explain, but I'll try anyway :). It's a way to map two functions to a key. My left shift key doubles as a tab key. If I release It without having pressed another key (to get a capital letter), it serves as tab key.

Both the enter and the space key are tap keys and do also shift to a different layer. As long as the enter key is pressed I can the left part as a mouse and as soon as i release it the keyboard is back to normal operation. When I press it and release it immediately (tap) it's Enter.
That means that key press event of Enter key is sent only after it is released (because only at that time the firmware knows that Enter is not used as a tap key). People who play games occasionally definitely would not like it. Also what happens when somebody does this: press-Enter, press-F, release-Enter, release-F. This can easily happen when you touch type with two hands. If the F key is assigned to some mouse action then either tap keys postpone sending events even more or ... when typing quick you can get spurious mouse movements occasionally (if F is assigned to a mouse move).

I considered tap keys (I guess the "space-fn" is implemented as a tap key too), but these things are serious disadvantages of the "tap" paradigm.

Miko

18 Oct 2015, 01:39

Well, It works great for me, and I do obviously touchtype. Without that neither that layout, nor the ergodox makes much sense. And I'm not slow either. Give it a try, IMHO it's fantastic. It allows more functions on these precocious easy to reach keys. And yes, Space is tap-action, too.

User avatar
webwit
Wild Duck

18 Oct 2015, 01:52

HAS IT SHIPPED YET?! :evil:

Image

With Colemak layout. It should be programmable, so you can use whatever main layout (QWERTY, etc.) and layout for the modifiers you want.

Post Reply

Return to “Keyboards”