qmk/qmk_firmware

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

Open

#26.110 aberto em 27 de mar. de 2026

Ver no GitHub
 (5 comments) (2 reactions) (0 assignees)C (43.867 forks)batch import
enhancementhelp wanted

Métricas do repositório

Stars
 (20.368 stars)
Métricas de merge de PR
 (Mesclagem média 20d 9h) (27 fundiu PRs em 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

Guia do colaborador