Поделюсь своей конфигурацией энкодера для qmk:
switch (keycode)
{
case EM_ALT:
is_em_alt_activate=record->event.pressed;
if (record->event.pressed){
register_code(KC_RALT);
} else {
unregister_code(KC_RALT);
}
break;
case EM_CTRL:
is_em_ctrl_activate=record->event.pressed;
if (record->event.pressed){
register_code(KC_RCTL);
} else {
unregister_code(KC_RCTL);
}
break;
case EM_WIN:
is_em_win_activate=record->event.pressed;
break;
case EM_SHIFT:
is_em_shift_activate=record->event.pressed;
}
return true;
};
Соответственно, EM_ALT,EM_CTRL,EM_WIN и EM_SHIFT повесил на FN-слой вместо соответствующих KC_ , ибо под это дело вешать по слою слишком жирно. Таким образом, крутилка выполняет шесть функций: в дефолтном режиме двигает курсор влево-вправо (а также видео в ютубе, музыку и многое другое), в fn без модификаторов — регулирует громкость, а с модификаторами соответственно переключает окна, отменяет действия, переключает вкладки и осуществляет поиск там где он работает через F3. Можно навешать и больше функций, комбинируя несколько модификаторов, но ими будет сложно пользоваться, как мне кажется.