overload: Allow nested swap actions (#395)

master
Raheman Vaiya 3 years ago
parent 4a86057943
commit db4b0df5bd
  1. 8
      src/keyboard.c
  2. 2
      src/keyboard.h
  3. 27
      t/overload-swap.t
  4. 1
      t/test.conf

@ -582,6 +582,13 @@ static long process_descriptor(struct keyboard *kbd, uint8_t code,
if (pressed) {
kbd->overload_start_time = time;
/*
* Preserve the original last layer activation code in the event
* that the tap action is a swap.
*/
kbd->overload_last_layer_code = kbd->last_layer_code;
activate_layer(kbd, code, idx);
update_mods(kbd, -1, 0);
} else {
@ -591,6 +598,7 @@ static long process_descriptor(struct keyboard *kbd, uint8_t code,
if (kbd->last_pressed_code == code &&
(!kbd->config.overload_tap_timeout ||
((time - kbd->overload_start_time) < kbd->config.overload_tap_timeout))) {
kbd->last_layer_code = kbd->overload_last_layer_code;
clear_oneshot(kbd);
process_descriptor(kbd, code, action, dl, 1, time);

@ -48,6 +48,8 @@ struct keyboard {
struct macro *active_macro;
int active_macro_layer;
int overload_last_layer_code;
long macro_timeout;
long oneshot_timeout;

@ -0,0 +1,27 @@
6 down
x down
x up
a down
a up
6 up
6 down
x down
a down
a up
x up
6 up
control down
meta down
meta up
shift down
control up
a down
a up
shift up
control down
meta down
a down
a up
meta up
control up

@ -67,6 +67,7 @@ m = macro(mac)
e = macro(leftcontrol o+n leftcontrol+1)
b = macro(leftcontrol+n)
c = macro(leftcontrol n)
x = overload(meta, swap(shift))
[test]

Loading…
Cancel
Save