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”을 통해서 마우스 레이어를 자동으로 활성화 해 두었을 경우, 레이어가 자동으로 변경되어서 사용하기 의외로 불편했습니다.

기능은 구현 해 두었으니 누군가는 유용하게 사용 하시면 될 것 같습니다.