Add sticky fn/pine mode (press fn+esc or pine+esc to enter, esc to exit it)
In sticky mode, fn or pine key acts as stuck.
This commit is contained in:
parent
ff7e733636
commit
dba6fb37c1
@ -333,6 +333,8 @@ int compact(int* keys, int len)
|
|||||||
static int uinput_fd = -1;
|
static int uinput_fd = -1;
|
||||||
static int pressed_keys[128]; // contains currently pressed phys_idxs in press order
|
static int pressed_keys[128]; // contains currently pressed phys_idxs in press order
|
||||||
static int pressed_count;
|
static int pressed_count;
|
||||||
|
static int fn_mode = 0;
|
||||||
|
static int pine_mode = 0;
|
||||||
|
|
||||||
void on_press(uint8_t phys_idx)
|
void on_press(uint8_t phys_idx)
|
||||||
{
|
{
|
||||||
@ -347,13 +349,31 @@ void on_press(uint8_t phys_idx)
|
|||||||
int fn_idx = get_index(pressed_keys, pressed_count, 0x52);
|
int fn_idx = get_index(pressed_keys, pressed_count, 0x52);
|
||||||
int pine_idx = get_index(pressed_keys, pressed_count, 0x31);
|
int pine_idx = get_index(pressed_keys, pressed_count, 0x31);
|
||||||
|
|
||||||
|
if (key == KEY_ESC && (fn_mode || pine_mode)) {
|
||||||
|
fn_mode = pine_mode = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const int* keys = keymap_base[phys_idx];
|
const int* keys = keymap_base[phys_idx];
|
||||||
if (fn_idx >= 0) {
|
if (fn_idx >= 0 || fn_mode) {
|
||||||
|
if (key == KEY_ESC) {
|
||||||
|
fn_mode = 1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
keys = keymap_fn[phys_idx];
|
keys = keymap_fn[phys_idx];
|
||||||
} else if (pine_idx >= 0) {
|
} else if (pine_idx >= 0 || pine_mode) {
|
||||||
|
if (key == KEY_ESC) {
|
||||||
|
pine_mode = 1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
keys = keymap_pine[phys_idx];
|
keys = keymap_pine[phys_idx];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!keys[0])
|
||||||
|
keys = keymap_base[phys_idx];
|
||||||
|
|
||||||
if (keys[0]) {
|
if (keys[0]) {
|
||||||
emit_ev(uinput_fd, EV_KEY, keys[0], 1);
|
emit_ev(uinput_fd, EV_KEY, keys[0], 1);
|
||||||
emit_ev(uinput_fd, EV_SYN, SYN_REPORT, 0);
|
emit_ev(uinput_fd, EV_SYN, SYN_REPORT, 0);
|
||||||
@ -378,12 +398,15 @@ void on_release(uint8_t phys_idx)
|
|||||||
int pine_idx = get_index(pressed_keys, pressed_count, 0x31);
|
int pine_idx = get_index(pressed_keys, pressed_count, 0x31);
|
||||||
|
|
||||||
const int* keys = keymap_base[phys_idx];
|
const int* keys = keymap_base[phys_idx];
|
||||||
if (fn_idx >= 0) {
|
if (fn_idx >= 0 || fn_mode) {
|
||||||
keys = keymap_fn[phys_idx];
|
keys = keymap_fn[phys_idx];
|
||||||
} else if (pine_idx >= 0) {
|
} else if (pine_idx >= 0 || pine_mode) {
|
||||||
keys = keymap_pine[phys_idx];
|
keys = keymap_pine[phys_idx];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!keys[0])
|
||||||
|
keys = keymap_base[phys_idx];
|
||||||
|
|
||||||
if (keys[0]) {
|
if (keys[0]) {
|
||||||
emit_ev(uinput_fd, EV_KEY, keys[0], 0);
|
emit_ev(uinput_fd, EV_KEY, keys[0], 0);
|
||||||
emit_ev(uinput_fd, EV_SYN, SYN_REPORT, 0);
|
emit_ev(uinput_fd, EV_SYN, SYN_REPORT, 0);
|
||||||
|
Loading…
Reference in New Issue
Block a user