У меня есть настройки XKB, так что если я удерживаю caps lock, мои HTNS-ключи (эквивалент qwerty будет JKL;) работают для перемещения мыши.

Теперь я хочу, чтобы мышь перемещалась на меньшее расстояние, если я также удерживаю клавишу Shift. Но я не могу понять это.

Это дает мне основные движения:

interpret Pointer_Left {
    repeat= True;
    action= MovePtr(x=-100,y=+0);
};

и он перемещается на 100 пикселей независимо от того, удержал ли меня нажатие Shift

Чтобы получить сменное поведение, я пробовал разные вещи. Кажется, это работает точно так же, как и выше:

interpret Pointer_Left {
    repeat= True;
    action= MovePtr(x=-100,y=+0);
};
interpret Pointer_Left+AnyOf(Shift) {
    repeat= True;
    action= MovePtr(x=-10,y=+0);
};

Между тем, это полностью отключает поведение, я не могу переместить мышь влево с клавиатурой:

interpret Pointer_Left+NoneOf(Shift) {
    repeat= True;
    action= MovePtr(x=-100,y=+0);
};
interpret Pointer_Left+AnyOf(Shift) {
    repeat= True;
    action= MovePtr(x=-10,y=+0);
};

и так (где я полностью удаляю действие -100):

interpret Pointer_Left+AnyOf(Shift) {
    repeat= True;
    action= MovePtr(x=-10,y=+0);
};

Я также попробовал два определения для привязанного к нему ключа, не замечая никаких изменений в поведении:

key <AC07> {
    type= "FOUR_LEVEL_SEMIALPHABETIC",
    symbols[Group1]= [ h, H, Pointer_Left, Pointer_Left ]
};

а также

key <AC07> {
    type= "THREE_LEVEL",
    symbols[Group1]= [ h, H, Pointer_Left ]
};

где эти типы определены как

type "THREE_LEVEL" {
    modifiers= Shift+LevelThree;
    map[Shift]= Level2;
    map[LevelThree]= Level3;
    map[Shift+LevelThree]= Level3;
    level_name[Level1]= "Base";
    level_name[Level2]= "Shift";
    level_name[Level3]= "Level3";
};

type "FOUR_LEVEL_SEMIALPHABETIC" {
    modifiers= Shift+Lock+LevelThree;
    map[Shift]= Level2;
    map[Lock]= Level2;
    map[LevelThree]= Level3;
    map[Shift+LevelThree]= Level4;
    map[Lock+LevelThree]= Level3;
    preserve[Lock+LevelThree]= Lock;
    map[Shift+Lock+LevelThree]= Level4;
    preserve[Shift+Lock+LevelThree]= Lock;
    level_name[Level1]= "Base";
    level_name[Level2]= "Shift";
    level_name[Level3]= "Alt Base";
    level_name[Level4]= "Shift Alt";
};

0