Added support for per-layer FN-translations
This commit is contained in:
parent
2405c989b0
commit
7cd04d97b5
4 changed files with 87 additions and 4 deletions
1
keyboard/ergodox/.gitignore
vendored
Normal file
1
keyboard/ergodox/.gitignore
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
keymap_passwords.h
|
||||
|
|
@ -218,6 +218,11 @@ uint8_t keymap_key_to_keycode(uint8_t layer, key_t key)
|
|||
}
|
||||
}
|
||||
|
||||
#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)
|
||||
{
|
||||
|
|
@ -229,4 +234,5 @@ action_t keymap_fn_to_action(uint8_t keycode)
|
|||
}
|
||||
return action;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -251,8 +251,8 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||
|
||||
KEYMAP( // Layer7: F-keys only, leftled:top/white
|
||||
// left hand
|
||||
TRNS,NO, NO, NO, NO, NO, NO,
|
||||
TRNS,F13, F14, F15, F16, NO, TRNS,
|
||||
FN0, NO, NO, NO, NO, NO, NO,
|
||||
FN1, F13, F14, F15, F16, NO, FN23,
|
||||
TRNS,F17, F18, F19, F20, NO,
|
||||
TRNS,F21, F22, F23, F24, NO, TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
|
|
@ -261,7 +261,7 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||
TRNS,TRNS,TRNS,
|
||||
// right hand
|
||||
NO, NO, NO, NO, NO, NO, TRNS,
|
||||
TRNS,NO, F1, F2, F3, F4, TRNS,
|
||||
FN23,NO, F1, F2, F3, F4, TRNS,
|
||||
NO, F5, F6, F7, F8, TRNS,
|
||||
TRNS,NO, F9, F10, F11, F12, TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
|
|
@ -339,7 +339,7 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||
|
||||
};
|
||||
|
||||
/* id for user defined functions */
|
||||
/* id for user defined functions & macros */
|
||||
enum function_id {
|
||||
TEENSY_KEY,
|
||||
CUSTOM_KEY,
|
||||
|
|
@ -347,6 +347,13 @@ enum function_id {
|
|||
R_CTRL_ALT_ENT,
|
||||
};
|
||||
|
||||
enum macro_id {
|
||||
XMONAD_RESET,
|
||||
PASSWORD1,
|
||||
PASSWORD2,
|
||||
PASSWORD3,
|
||||
};
|
||||
|
||||
/*
|
||||
* Fn action definition
|
||||
*/
|
||||
|
|
@ -397,6 +404,13 @@ static const uint16_t PROGMEM fn_actions[] = {
|
|||
[27] = ACTION_LAYER_TAP_KEY(2, KC_V), // FN27 = momentary Layer2 on V key, to use with Numpad keys
|
||||
};
|
||||
|
||||
static const uint16_t PROGMEM fn_actions_7[] = {
|
||||
[0] = ACTION_MACRO(XMONAD_RESET), // FN0 = xmonad-reanimator
|
||||
[1] = ACTION_MACRO(PASSWORD1), // FN1 = default password
|
||||
[2] = ACTION_MACRO(PASSWORD1), // FN2 = other password
|
||||
[3] = ACTION_MACRO(PASSWORD1), // FN3 = mega password
|
||||
};
|
||||
|
||||
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||
{
|
||||
// print("action_function called\n");
|
||||
|
|
@ -482,3 +496,42 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
|
|||
|
||||
}
|
||||
|
||||
#include "keymap_passwords.h"
|
||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||
if (record->event.pressed) {
|
||||
switch (id) {
|
||||
case XMONAD_RESET: return MACRO_XMONAD_RESET;
|
||||
case PASSWORD1: return MACRO_PASSWORD1;
|
||||
}
|
||||
}
|
||||
return MACRO_NONE;
|
||||
}
|
||||
|
||||
#define FN_ACTIONS_SIZE (sizeof(fn_actions) / sizeof(fn_actions[0]))
|
||||
#define FN_ACTIONS_7_SIZE (sizeof(fn_actions_7) / sizeof(fn_actions_7[0]))
|
||||
|
||||
/*
|
||||
* translates Fn keycode to action
|
||||
* for some layers, use different translation table
|
||||
*/
|
||||
action_t keymap_fn_to_action(uint8_t keycode)
|
||||
{
|
||||
uint8_t layer = biton32(layer_state);
|
||||
|
||||
action_t action;
|
||||
action.code = ACTION_NO;
|
||||
|
||||
if (layer == 7 && FN_INDEX(keycode) < FN_ACTIONS_7_SIZE) {
|
||||
action.code = pgm_read_word(&fn_actions_7[FN_INDEX(keycode)]);
|
||||
}
|
||||
|
||||
// by default, use fn_actions from default layer 0
|
||||
// this is needed to get mapping for same key, that was used switch to some layer,
|
||||
// to have possibility to switch layers back
|
||||
if (action.code == ACTION_NO && FN_INDEX(keycode) < FN_ACTIONS_SIZE) {
|
||||
action.code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]);
|
||||
}
|
||||
|
||||
return action;
|
||||
}
|
||||
|
||||
|
|
|
|||
23
keyboard/ergodox/keymap_passwords_example.h
Normal file
23
keyboard/ergodox/keymap_passwords_example.h
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
#define MACRO_XMONAD_RESET MACRO( \
|
||||
I(15), \
|
||||
D(LCTL), D(LALT), T(F2), W(255), U(LALT), U(LCTL), W(255), \
|
||||
T(X), T(M), T(O), T(N), T(UP), T(ENT), W(255), \
|
||||
D(LCTL), D(LALT), T(F5), W(255), U(LALT), U(LCTL), W(255), \
|
||||
END) \
|
||||
|
||||
#define MACRO_PASSWORD1 MACRO( \
|
||||
I(15), \
|
||||
T(E), T(X), T(A), T(M), T(P), T(L), T(E), \
|
||||
END) \
|
||||
|
||||
#define MACRO_PASSWORD2 MACRO( \
|
||||
I(15), \
|
||||
T(E), T(X), T(A), T(M), T(P), T(L), T(E), \
|
||||
END) \
|
||||
|
||||
#define MACRO_PASSWORD2 MACRO( \
|
||||
I(15), \
|
||||
T(E), T(X), T(A), T(M), T(P), T(L), T(E), \
|
||||
END) \
|
||||
|
||||
|
||||
Loading…
Add table
Reference in a new issue