Compare commits

...

2 Commits

Author SHA1 Message Date
lif cec19cc09c custom keymap i wanna try that might be friendlier to my muscle-memory
- aligns Z... under W... like on staggered kb's
- vimlike arrow keys to make room for / beside ,.
- ; beside L
- \ beside P (and therefore ] on the hyper layer)
- - beside =
- ctrl in bottom left, hyper moved beside Z
  - hyper still easily chords with lshift and lmeta
- capslock restored, but on the hyper layer.
  - on base layer it's sysrq for alt+sysrq purposes
    (which shouldn't involve the hyper layer, since
    you wanna be sure what letters you're pressing)
- hyper-i is now insert (previously absent)
2024-07-05 01:58:23 -07:00
lif 40050f0314 Add a simple build-time test verifying that the keyboard layout defined in matrix.h is unlikely to result in an unfortunate situation 2024-07-05 01:57:42 -07:00
3 changed files with 113 additions and 21 deletions

View File

@ -1,8 +1,14 @@
#!/bin/bash
set -e
mkdir -p build
cc test/matrix-valid.c -o build/matrix-valid
build/matrix-valid
export PICO_SDK_PATH=$(pwd)/../../pico-sdk
mkdir -p build
cd build
cmake -DFAMILY=rp2040 ..

View File

@ -34,11 +34,11 @@
KEY_I,\
KEY_O,\
KEY_P,\
KEY_SEMICOLON
KEY_BACKSLASH
// Fourth row
#define MATRIX_DEFAULT_ROW_3 \
KEY_LEFTCTRL,\
KEY_SYSRQ,\
KEY_A,\
KEY_S,\
KEY_D,\
@ -48,12 +48,13 @@
KEY_J,\
KEY_K,\
KEY_L,\
KEY_APOSTROPHE,\
KEY_SEMICOLON,\
KEY_ENTER
// Fifth row
#define MATRIX_DEFAULT_ROW_4 \
KEY_LEFTSHIFT,\
KEY_COMPOSE,\
KEY_Z,\
KEY_X,\
KEY_C,\
@ -63,22 +64,21 @@
KEY_M,\
KEY_COMMA,\
KEY_DOT,\
KEY_UP,\
KEY_RIGHTALT
KEY_SLASH
// Sixth row
#define MATRIX_DEFAULT_ROW_5 \
KEY_COMPOSE,\
KEY_LEFTCTRL,\
KEY_LEFTMETA,\
KEY_LEFTALT,\
KEY_BACKSLASH,\
KEY_MINUS,\
KEY_EQUAL,\
KEY_SPACE,\
KEY_SPACE,\
KEY_MINUS,\
KEY_SLASH,\
KEY_APOSTROPHE,\
KEY_LEFT,\
KEY_DOWN,\
KEY_UP,\
KEY_RIGHT
// Every line of `matrix` is a row of the keyboard, starting from the top.
@ -115,12 +115,12 @@ uint8_t matrix_fn[KBD_MATRIX_SZ] = {
KEY_T,
KEY_Y,
KEY_U,
KEY_I,
KEY_INSERT,
KEY_LEFTBRACE,
KEY_RIGHTBRACE,
KEY_SEMICOLON,
KEY_BACKSLASH,
KEY_LEFTCTRL,
KEY_CAPSLOCK,
KEY_A,
KEY_S,
KEY_D,
@ -130,10 +130,11 @@ uint8_t matrix_fn[KBD_MATRIX_SZ] = {
KEY_J,
KEY_K,
KEY_L,
KEY_APOSTROPHE,
KEY_SEMICOLON,
KEY_ENTER,
KEY_LEFTSHIFT,
KEY_RIGHTSHIFT,
KEY_COMPOSE,
KEY_Z,
KEY_X,
KEY_C,
@ -143,19 +144,18 @@ uint8_t matrix_fn[KBD_MATRIX_SZ] = {
KEY_M,
KEY_COMMA,
KEY_DOT,
KEY_PAGEUP,
KEY_RIGHTSHIFT,
KEY_SLASH,
KEY_COMPOSE,
KEY_RIGHTCTRL,
KEY_RIGHTMETA,
KEY_RIGHTALT,
KEY_BACKSLASH,
KEY_MINUS,
KEY_EQUAL,
KEY_SPACE,
KEY_SPACE,
KEY_MINUS,
KEY_SLASH,
KEY_APOSTROPHE,
KEY_HOME,
KEY_PAGEDOWN,
KEY_PAGEUP,
KEY_END
};

View File

@ -0,0 +1,86 @@
#define KBD_COLS 12
#define KBD_ROWS 6
#define KBD_MATRIX_SZ KBD_COLS * KBD_ROWS + 4
#include <stdio.h>
#include <stdint.h>
#include "../src/matrix.h"
#define WHY_HYPER_RETURN \
"Hyper+Return is required both to power on and to enter the keyboard menu.\n"
#define WHY_X \
"Pressing X in the keyboard menu is required to enter bootloader mode.\n" \
"(Bootloader mode can be exited by toggling the standby power switch.)\n"
int main() {
int i;
int hyper_loc = -1;
int x_loc = -1;
int enter_loc_fn = -1;
// irrelevant because they're both defined with [KBD_MATRIX_SZ],
// but if they were changed not to:
if (sizeof(matrix) != sizeof(matrix_fn)) {
fprintf(
stderr,
"Layer size mismatch! %zu != %zu\n",
sizeof(matrix),
sizeof(matrix_fn)
);
return 1;
}
for (i = 0; i < sizeof(matrix); i++) {
if (matrix[i] == KEY_COMPOSE) {
hyper_loc = i;
} else if (matrix[i] == KEY_X) {
x_loc = i;
}
}
if (hyper_loc == -1) {
fprintf(
stderr,
"No hyper key (KEY_COMPOSE) found on base layer (matrix)!\n"
WHY_HYPER_RETURN
);
return 1;
}
if (x_loc == -1) {
fprintf(
stderr,
"No X key (KEY_X) found on base layer (matrix)!\n"
WHY_X
);
return 1;
}
if (matrix_fn[hyper_loc] != KEY_COMPOSE) {
for (i = 0; i < sizeof(matrix_fn); i++) {
if (matrix_fn[i] == KEY_COMPOSE) {
fprintf(
stderr,
"Hyper key (KEY_COMPOSE) in different position on layers! %d != %d\n",
hyper_loc,
i
);
return 1;
}
}
fprintf(stderr, "No hyper key (KEY_COMPOSE) found on hyper layer (matrix_fn)!\n");
return 1;
}
for (i = 0; i < sizeof(matrix_fn); i++) {
if (matrix_fn[i] == KEY_ENTER) {
enter_loc_fn = i;
}
}
if (enter_loc_fn == -1) {
fprintf(
stderr,
"No return key (KEY_ENTER) found on hyper layer (matrix_fn)!\n"
WHY_HYPER_RETURN
);
return 1;
}
return 0;
}