Go to file
2020-04-18 03:58:15 +08:00
comfortable_swipe Add mouse hold gestures (#79) 2020-04-18 03:55:13 +08:00
tests Add mouse hold gestures (#79) 2020-04-18 03:55:13 +08:00
.gitignore Add status service command (#54) 2019-02-13 09:27:41 +08:00
CHANGELOG Add mouse hold gestures (#79) 2020-04-18 03:55:13 +08:00
command_line.cpp Add mouse hold gestures (#79) 2020-04-18 03:55:13 +08:00
cpp.compile.sh Add mouse hold gestures (#79) 2020-04-18 03:55:13 +08:00
defaults.conf Add mouse hold gestures (#79) 2020-04-18 03:55:13 +08:00
install Add mouse hold gestures (#79) 2020-04-18 03:55:13 +08:00
LICENSE Initial commit 2017-09-25 22:37:54 +08:00
README.md Update README.md 2020-04-18 03:58:15 +08:00
uninstall Add mouse hold gestures (#79) 2020-04-18 03:55:13 +08:00
VERSION Add mouse hold gestures (#79) 2020-04-18 03:55:13 +08:00

Comfortable Swipe (Ubuntu)

comfortable-swipe version License: GPL v3

New in Version 1.1.0! Added mouse move gestures (eg. hold3 = button1)

Comfortable, seamless, and fast 3-finger (and 4-finger) touchpad swipe gestures for Ubuntu 14.04 LTS and beyond. May work for other Linux distros that support libinput.

Installation

  1. Install git, libinput, and g++

    sudo apt-get install git libinput-tools libxdo-dev g++
    
  2. Clone this repository

    git clone https://github.com/Hikari9/comfortable-swipe.git --depth 1
    cd comfortable-swipe
    
  3. Install

    bash install
    
  4. You may delete the downloaded comfortable-swipe folder after installation.

How to Run

  1. You'll need some group permissions to read touchpad input data. Run
    sudo gpasswd -a $USER $(ls -l /dev/input/event* | awk '{print $4}' | head --line=1)
    
  2. Important: After inputing your sudo password, log out then log back in
  3. Run
    comfortable-swipe start
    
  4. Optional: Automatically run on startup
    comfortable-swipe autostart
    
  5. Check the status of your application by running
    comfortable-swipe status
    

Swipe Configurations

Comfortable swipe makes use of keyboard shortcuts for configurations.

  1. Edit by running

    gedit $(comfortable-swipe config)
    
  2. List of possible configurations:

    Property Description Default Value Default Behavior
    left3 3-finger swipe left ctrl+alt+Right switch to right workspace
    left4 4-finger swipe left ctrl+alt+shift+Right move window to right workspace
    right3 3-finger swipe right ctrl+alt+Left switch to left workspace
    right4 4-finger swipe right ctrl+alt+shift+Left move window to left workspace
    up3 3-finger swipe up ctrl+alt+Down switch to bottom workspace
    up4 4-finger swipe up ctrl+alt+shift+Down move window to bottom workspace
    down3 3-finger swipe down ctrl+alt+Down switch to above workspace
    down4 4-finger swipe down ctrl+alt+shift+Up move window to above workpace
    threshold mouse pixels to activate swipe 0.0 tweak this if you're having troubles with touchpad sensitivity (higher = less sensitive, values can be as large as 1000.0)
    hold3 holds a mouse button when 3 fingers are down (none) See Mouse Gestures
    hold4 holds a mouse button when 4 fingers are down (none) See Mouse Gestures
  3. After making changes, make sure to restart the program:

    comfortable-swipe restart
    

Taken from man xdotool:

Type a given keystroke. Examples being "alt+r", "Control_L+J", "ctrl+alt+n", "BackSpace".

Generally, any valid X Keysym string will work. Multiple keys are separated by '+'. Aliases exist for "alt", "ctrl", "shift", "super", and "meta" which all map to Foo_L, such as Alt_L and Control_L, etc.

In cases where your keyboard doesn't actually have the key you want to type, xdotool will automatically find an unused keycode and use that to type the key.

Refer to https://www.linux.org/threads/xdotool-keyboard.10528/ for a complete list of keycodes you can use.

Mouse Gestures

Note

: Setting hold3 or hold4 will ignore its corresponding up/right/down/left command.

We have included simple mouse gestures on swipe by setting hold3 and hold4.

Possible Values:

  • move - just move the mouse cursor (no mousedown)
  • button1 - hold left click on finger swipe
  • button2 - hold middle click on finger swipe
  • button3 - hold right click on finger swipe
  • button4 - wheel up on finger swipe (experimental)
  • button5 - wheel down on finger swipe (experimental)
  • scroll - naive 3/4 finger natural scroll (no acceleration, very experimental)
  • scroll_reverse - naive 3/4 finger reverse scroll (no acceleration, very experimental)

Any value not mentioned above disables the mouse-hold.

Note: Applying any mouse-hold configuration will disable up/left/right/down behavior to avoid gesture conflicts. The logic of this will be improved in the future.

Example Usage

3-finger drag

hold3 = button1

4-finger drag (with middle click)

hold4 = button2

3-finger natural scroll

hold3 = scroll

4-finger reverse scroll

hold4 = scroll_reverse

Just move the cursor

hold3 = move
hold4 = move

Any other command will disable the mouse hold

hold3 = disabled
hold4 = nothing

Example Configuration

Edit with gedit $(comfortable-swipe config):

# File: comfortable-swipe.conf

# four-finger drag
hold4 = button1

# show desktop and switch workspaces
down3 = super+d
up3 = super+s
left3 = ctrl+alt+Right
right3 = ctrl+alt+Left

Debugging

You can check your touchpad driver by running

comfortable-swipe debug

This is an alias of libinput debug-events. This logs all gestures you make on your touchpad, along with other input-based events that can be captured by libinput.

A working swipe gesture will show the following:

$ comfortable-swipe debug
...
-event9   DEVICE_ADDED     TouchPad                     seat0 default group7  cap:pg  size 70x50mm tap(dl off) left scroll-nat scroll-2fg-edge click-buttonareas-clickfinger dwt-on
...
event9   GESTURE_SWIPE_BEGIN  +2.03s   3
 event9   GESTURE_SWIPE_UPDATE  +2.03s  3 -9.95/ 2.64 (-26.90/ 7.12 unaccelerated)
 event9   GESTURE_SWIPE_UPDATE  +2.03s  3 -10.44/ 3.19 (-28.22/ 8.62 unaccelerated)
 event9   GESTURE_SWIPE_UPDATE  +2.04s  3 -9.71/ 2.64 (-26.25/ 7.12 unaccelerated)
 event9   GESTURE_SWIPE_UPDATE  +2.05s  3 -8.98/ 2.64 (-24.28/ 7.12 unaccelerated)
 event9   GESTURE_SWIPE_UPDATE  +2.06s  3 -7.40/ 2.36 (-20.01/ 6.37 unaccelerated)
 event9   GESTURE_SWIPE_UPDATE  +2.06s  3 -6.31/ 2.50 (-17.06/ 6.75 unaccelerated)
 event9   GESTURE_SWIPE_UPDATE  +2.07s  3 -5.34/ 1.80 (-14.44/ 4.87 unaccelerated)
 event9   GESTURE_SWIPE_UPDATE  +2.08s  3 -4.61/ 2.08 (-12.47/ 5.62 unaccelerated)
 event9   GESTURE_SWIPE_UPDATE  +2.09s  3 -4.49/ 1.53 (-12.14/ 4.12 unaccelerated)
 event9   GESTURE_SWIPE_UPDATE  +2.09s  3 -4.01/ 1.25 (-10.83/ 3.37 unaccelerated)
 event9   GESTURE_SWIPE_UPDATE  +2.10s  3 -4.13/ 0.42 (-11.15/ 1.12 unaccelerated)
 event9   GESTURE_SWIPE_END  +2.11s     3
 ...

If you can see GESTURE_SWIPE_XXX in your output, that means your touchpad supports multi-touch swipe gestures.

Uninstall

Download the uninstall script then run bash uninstall

Bug Reports

Search in Issues if the problem has already been solved.

Otherwise, create a new issue to report your bug.

Please include the output of the following:

  1. lsb_release -a
  2. g++ --version
  3. ls -l /dev/input/event*
  4. xinput list | grep touchpad -i
  5. lsmod | grep hid
  6. comfortable-swipe status
  7. comfortable-swipe start (if you can run it)
  8. comfortable-swipe debug (try swiping if you can see GESTURE_SWIPE_XXX)
  9. cat $(comfortable-swipe config)