Reimplement FN21/FN22 - same Layer5/Layer6 but with permanent CTRL+ALT

This commit is contained in:
Oleg Kostyuk 2014-04-16 03:54:43 +03:00
parent 4bc8e4018d
commit 139ab7a418
2 changed files with 46 additions and 11 deletions

View file

@ -20,8 +20,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#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"

View file

@ -224,21 +224,21 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
TRNS,TRNS,TRNS
),
KEYMAP( // Layer6: F-keys, cursor, Workman-layer switch, Teensy, leftled:top/white+onboard
KEYMAP( // Layer6: F-keys, Teensy, Workman-layer switch, leftled:top/white+onboard
// left hand
TRNS,F1, F2, F3, F4, F5, F6,
FN0, NO, PGUP,UP, PGDN,PGUP,TRNS,
TRNS,NO, LEFT,DOWN,RGHT,PGDN,
TRNS,INS, DEL, END, HOME,NO, TRNS,
FN0, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
FN18,TRNS,TRNS,TRNS,TRNS,
TRNS,TRNS,
TRNS,
TRNS,TRNS,TRNS,
// right hand
F7, F8, F9, F10, F11, F12, MINS,
TRNS,PGUP,PGUP,UP, PGDN,NO, FN0,
PGDN,LEFT,DOWN,RGHT,NO, TRNS,
TRNS,NO, HOME,END, DEL, INS, TRNS,
F7, F8, F9, F10, F11, F12, TRNS,
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,FN0,
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
TRNS,TRNS,TRNS,TRNS,TRNS,
TRNS,TRNS,
TRNS,
@ -342,6 +342,8 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* id for user defined functions */
enum function_id {
TEENSY_KEY,
L_CTRL_ALT_ENT,
R_CTRL_ALT_ENT,
};
/*
@ -374,8 +376,8 @@ static const uint16_t PROGMEM fn_actions[] = {
[19] = ACTION_LAYER_SET(2, ON_BOTH), // FN19 - set Layer2, to use with Numpad keys
[20] = ACTION_LAYER_MOMENTARY(2), // FN20 - momentary Layer2, to use with Numpad keys
[21] = ACTION_LAYER_TAP_KEY(5, KC_ENT), // FN21 - momentary Layer5 on Enter, to use with F* keys on top row
[22] = ACTION_LAYER_TAP_KEY(6, KC_ENT), // FN22 - momentary Layer6 on Enter, to use with F* keys on top row, cursor, Teensy, Workman-layer switch
[21] = ACTION_FUNCTION_TAP(L_CTRL_ALT_ENT), // FN21 - momentary Layer5+CTRL+ALT on Enter, to use with F* keys on top row
[22] = ACTION_FUNCTION_TAP(R_CTRL_ALT_ENT), // FN22 - momentary Layer6+CTRL+ALT on Enter, to use with F* keys on top row, Teensy, Workman-layer switch
[23] = ACTION_LAYER_TAP_KEY(7, KC_BSLS), // FN23 - momentary Layer7 on ' , to use with F* keys (F1-F24)
[24] = ACTION_LAYER_TAP_KEY(4, KC_Z), // FN24 = momentary Layer4 on Z key, to use with unconvenient keys
@ -390,7 +392,7 @@ static const uint16_t PROGMEM fn_actions[] = {
[31] = ACTION_LAYER_TAP_KEY(2, KC_F), // FN31 = momentary Layer2 on F key, to use with Numpad keys
};
void action_function(keyrecord_t *event, uint8_t id, uint8_t opt)
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// print("action_function called\n");
// print("id = "); phex(id); print("\n");
@ -403,5 +405,36 @@ void action_function(keyrecord_t *event, uint8_t id, uint8_t opt)
bootloader_jump(); // should not return
print("not supported.\n");
}
if (id == L_CTRL_ALT_ENT || id == R_CTRL_ALT_ENT) {
if (record->tap.count == 0 || record->tap.interrupted) {
uint8_t weak_mods;
uint8_t layer;
if (id == L_CTRL_ALT_ENT) {
weak_mods = MOD_BIT(KC_LCTL) | MOD_BIT(KC_LALT);
layer = 5;
} else {
weak_mods = MOD_BIT(KC_RCTL) | MOD_BIT(KC_RALT);
layer = 6;
}
if (record->event.pressed) {
layer_on(layer);
add_weak_mods(weak_mods);
} else {
del_weak_mods(weak_mods);
layer_off(layer);
}
} else {
if (record->event.pressed) {
add_key(KC_ENT);
send_keyboard_report();
} else {
del_key(KC_ENT);
send_keyboard_report();
}
}
}
}