qmk/qmk_firmware

[Feature Request] Different mouse sensitivity for each axis (for mousekeys feature)

Open

#26,110 opened on Mar 27, 2026

View on GitHub
 (5 comments) (2 reactions) (0 assignees)C (43,867 forks)batch import
enhancementhelp wanted

Repository metrics

Stars
 (20,368 stars)
PR merge metrics
 (Avg merge 20d 9h) (27 merged PRs in 30d)

Description

Feature Request Type

  • Core functionality
  • Add-on hardware support (eg. audio, RGB, OLED screen, etc.)
  • Alteration (enhancement/optimization) of existing feature(s)
  • New behavior

Description

I am facing issue where the sensitivity of the y axis (up/down motion) is too sensitive, whereas the x axis movement is on the perfect speed.

The proposed solution is to add the MOUSEKEY_SENS_X and MOUSEKEY_SENS_Y to configure each axis sensitivity. It is done by multiplying the movement result, for example on the quantum/mousekey.c on mousekey_task() function with the default acceleration,

    if ((tmpmr.x || tmpmr.y) && timer_elapsed(last_timer_c) > (mousekey_repeat ? mk_interval : mk_delay * 10)) {
        if (mousekey_repeat != UINT8_MAX) mousekey_repeat++;
        if (tmpmr.x != 0) mouse_report.x = move_unit() * ((tmpmr.x > 0) ? 1 : -1) * MOUSEKEY_SENS_X;
        if (tmpmr.y != 0) mouse_report.y = move_unit() * ((tmpmr.y > 0) ? 1 : -1) * MOUSEKEY_SENS_Y;

        /* diagonal move [1/sqrt(2)] */
        if (mouse_report.x && mouse_report.y) {
            mouse_report.x = times_inv_sqrt2(mouse_report.x) * MOUSEKEY_SENS_X;
            if (mouse_report.x == 0) {
                mouse_report.x = 1;
            }
            mouse_report.y = times_inv_sqrt2(mouse_report.y * MOUSEKEY_SENS_Y);
            if (mouse_report.y == 0) {
                mouse_report.y = 1;
            }
        }
    }

So, for the example above, we let the MOUSEKEY_SENS_X be default 1.0 (because it is perfect already), and the MOUSEKEY_SENS_Y be 0.9 (because i need it a little less sensitive).

I already having the working code on my repo.. is it okay if i open a PR? thanks

Contributor guide