QMK는 트랙볼과 같은 Pointing Device는 “Automatic Mouse Layer“를 지원 합니다. 하지만 TrackPoint와 같은 PS/2 마우스에서는 해당 기능을 지원 하지 않습니다. 다만, PS/2 마우스에서는 “Movement Hook“을 통해서 사용자가 유사한 기능을 직접 구현할 수 있습니다.
keymap.c
#if MOUSE_LAYER_AUTO_ENABLE
// 마우스 레이어를 지정 합니다.
#define _MOUSE_LAYER 6
// 마우스 레이어 비활성 타이머 (1000 = 1s, 사용하면서 조정이 필요 합니다.)
#define MOUSE_TIMEOUT 1000
static uint16_t mouse_timer = 0;
static bool mouse_layer_active = false;
void ps2_mouse_moved_user(report_mouse_t *mouse_report) {
// 마우스 움직임 감지 시 레이어 활성화
if (!mouse_layer_active) {
layer_on(_MOUSE_LAYER);
mouse_layer_active = true;
}
// 타이머 리셋
mouse_timer = timer_read();
}
#endif
void matrix_scan_user(void) { // The very important timer.
#if MOUSE_LAYER_AUTO_ENABLE
// 마우스 비활성 시간 체크
if (mouse_layer_active && timer_elapsed(mouse_timer) > MOUSE_TIMEOUT) {
layer_off(_MOUSE_LAYER);
mouse_layer_active = false;
}
#endif
}
config.h
// 활성 TRUE 비활성 FALSE
#define MOUSE_LAYER_AUTO_ENABLE TRUE
사용 소감
트랙포인트 특성 상 타이핑을 하면서 건드릴 확률이 높습니다. 그래서 “Movement Hook”을 통해서 마우스 레이어를 자동으로 활성화 해 두었을 경우, 레이어가 자동으로 변경되어서 사용하기 의외로 불편했습니다.
기능은 구현 해 두었으니 누군가는 유용하게 사용 하시면 될 것 같습니다.