Skip to content

Instantly share code, notes, and snippets.

@stephenwithav
Last active February 9, 2024 15:35
Show Gist options
  • Save stephenwithav/defea061554b540e8567059797fd5bcf to your computer and use it in GitHub Desktop.
Save stephenwithav/defea061554b540e8567059797fd5bcf to your computer and use it in GitHub Desktop.
mousekeys
keysym F7 = MouseKeys_Enable
keysym Caps_Lock = MouseKeys_Enable
// Add additional MouseKey keybindings for Xorg.
// /usr/share/X11/xkb/compat/mousekeys
// Specifically:
// u i o -> 7 8 9
// j l -> 4 6
// m , . -> 1 2 3
// b -> Left Click
// n -> Right Click
// g -> Hold/Release Left mouse button
// h -> Hold/Release Right mouse button
// t -> Scroll up with mouse wheel
// y -> Scroll down with mouse wheel
// Interpretations for arrow keys and a bunch of other
// common keysyms which make it possible to bind "mouse"
// keys using xmodmap and activate or deactivate them
// from the keyboard.
default partial xkb_compatibility "mousekeys" {
// Keypad actions.
//
interpret.repeat= True;
interpret KP_1 {
action = MovePtr(x=-1,y= +1);
};
interpret KP_End {
action = MovePtr(x=-1,y= +1);
};
interpret m {
action = MovePtr(x=-10,y= +10);
};
interpret KP_2 {
action = MovePtr(x=+0,y= +1);
};
interpret KP_Down {
action = MovePtr(x=+0,y= +1);
};
interpret comma {
action = MovePtr(x=+0,y= +10);
};
interpret KP_3 {
action = MovePtr(x=+1,y=+1);
};
interpret KP_Next {
action = MovePtr(x=+1,y=+1);
};
interpret period {
action = MovePtr(x=+10,y=+10);
};
interpret KP_4 {
action = MovePtr(x=-1,y=+0);
};
interpret KP_Left {
action = MovePtr(x=-1,y=+0);
};
interpret j {
action = MovePtr(x=-10,y=+0);
};
interpret KP_6 {
action = MovePtr(x=+1,y=+0);
};
interpret KP_Right {
action = MovePtr(x=+1,y=+0);
};
interpret l {
action = MovePtr(x=+10,y=+0);
};
interpret KP_7 {
action = MovePtr(x=-1,y=-1);
};
interpret KP_Home {
action = MovePtr(x=-1,y=-1);
};
interpret u {
action = MovePtr(x=-10,y=-10);
};
interpret KP_8 {
action = MovePtr(x=+0,y=-1);
};
interpret KP_Up {
action = MovePtr(x=+0,y=-1);
};
interpret i {
action = MovePtr(x=+0,y=-10);
};
interpret KP_9 {
action = MovePtr(x=+1,y=-1);
};
interpret KP_Prior {
action = MovePtr(x=+1,y=-1);
};
interpret o {
action = MovePtr(x=+10,y=-10);
};
// Button clicks/actions
interpret b {
action = PointerButton(button=1);
};
interpret n {
action = PointerButton(button=3);
};
interpret B {
action = PointerButton(button=1);
};
interpret N {
action = PointerButton(button=3);
};
interpret g {
action = LockPointerButton(button=1);
};
interpret h {
action = LockPointerButton(button=3);
};
interpret G {
action = LockPointerButton(button=1);
};
interpret H {
action = LockPointerButton(button=3);
};
interpret t {
action = PointerButton(button=4);
};
interpret y {
action = PointerButton(button=5);
};
interpret T {
action = PointerButton(button=4);
};
interpret Y {
action = PointerButton(button=5);
};
// End clicks/actions
interpret KP_5 {
action = PointerButton(button=default);
};
interpret KP_Begin {
action = PointerButton(button=default);
};
interpret KP_F2 {
action = SetPtrDflt(affect=defaultButton,button=1);
};
interpret KP_Divide {
action = SetPtrDflt(affect=defaultButton,button=1);
};
interpret KP_F3 {
action = SetPtrDflt(affect=defaultButton,button=2);
};
interpret KP_Multiply {
action = SetPtrDflt(affect=defaultButton,button=2);
};
interpret KP_F4 {
action = SetPtrDflt(affect=defaultButton,button=3);
};
interpret KP_Subtract {
action = SetPtrDflt(affect=defaultButton,button=3);
};
interpret KP_Separator {
action = PointerButton(button=default,count=2);
};
interpret KP_Add {
action = PointerButton(button=default,count=2);
};
interpret KP_0 {
action = LockPointerButton(button=default,affect=lock);
};
interpret KP_Insert {
action = LockPointerButton(button=default,affect=lock);
};
interpret KP_Decimal {
action = LockPointerButton(button=default,affect=unlock);
};
interpret KP_Delete {
action = LockPointerButton(button=default,affect=unlock);
};
// Additional mappings for Solaris keypad compatibility
interpret F25 { // aka KP_Divide
action = SetPtrDflt(affect=defaultButton,button=1);
};
interpret F26 { // aka KP_Multiply
action = SetPtrDflt(affect=defaultButton,button=2);
};
interpret F27 { // aka KP_Home
action = MovePtr(x=-1,y=-1);
};
interpret F29 { // aka KP_Prior
action = MovePtr(x=+1,y=-1);
};
interpret F31 { // aka KP_Begin
action = PointerButton(button=default);
};
interpret F33 { // aka KP_End
action = MovePtr(x=-1,y= +1);
};
interpret F35 { // aka KP_Next
action = MovePtr(x=+1,y=+1);
};
interpret.repeat= False;
// New Keysym Actions.
//
interpret Pointer_Button_Dflt {
action= PointerButton(button=default);
};
interpret Pointer_Button1 {
action= PointerButton(button=1);
};
interpret Pointer_Button2 {
action= PointerButton(button=2);
};
interpret Pointer_Button3 {
action= PointerButton(button=3);
};
interpret Pointer_DblClick_Dflt {
action= PointerButton(button=default,count=2);
};
interpret Pointer_DblClick1 {
action= PointerButton(button=1,count=2);
};
interpret Pointer_DblClick2 {
action= PointerButton(button=2,count=2);
};
interpret Pointer_DblClick3 {
action= PointerButton(button=3,count=2);
};
interpret Pointer_Drag_Dflt {
action= LockPointerButton(button=default);
};
interpret Pointer_Drag1 {
action= LockPointerButton(button=1);
};
interpret Pointer_Drag2 {
action= LockPointerButton(button=2);
};
interpret Pointer_Drag3 {
action= LockPointerButton(button=3);
};
interpret Pointer_EnableKeys {
action= LockControls(controls=MouseKeys);
};
interpret Pointer_Accelerate {
action= LockControls(controls=MouseKeysAccel);
};
interpret Pointer_DfltBtnNext {
action= SetPtrDflt(affect=defaultButton,button= +1);
};
interpret Pointer_DfltBtnPrev {
action= SetPtrDflt(affect=defaultButton,button= -1);
};
// Allow an indicator for MouseKeys.
indicator "Mouse Keys" {
// !allowExplicit;
indicatorDrivesKeyboard;
controls= MouseKeys;
};
};
#/bin/sh
xkbset sticky -twokey latchlock
xkbset exp =sticky =latchlock
xmodmap .Xmodmap
xset s off
xset -dpms
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment