|
|
||
|---|---|---|
| config | ||
| tests | ||
| .gitignore | ||
| CHANGELOG | ||
| comfortable-swipe | ||
| comfortable-swipe-defines.cpp | ||
| comfortable-swipe-gesture-swipe-xdokey.cpp | ||
| comfortable-swipe-gesture-swipe-xdomouse.cpp | ||
| comfortable-swipe-gesture-swipe.cpp | ||
| comfortable-swipe-main.cpp | ||
| compile | ||
| install | ||
| LICENSE | ||
| README.md | ||
| uninstall | ||
| VERSION | ||
Comfortable Swipe (Ubuntu)
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.
New in Version 1.1.0: Added mouse gestures, see #mouse-gestures-experimental
New in Version 1.2.0: Autostart now switched ON by default
Installation
-
Install git and g++ ≥ 7.5
sudo apt install git g++ -
Install libinput-tools and C libraries
sudo apt install libinput-tools libinih-dev libxdo-dev -
Clone this repository
git clone https://github.com/Hikari9/comfortable-swipe.git --depth 1 cd comfortable-swipe -
Install
bash install -
You may delete the downloaded
comfortable-swipefolder after installation.
How to Run
-
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)" -
Important: After inputing your
sudopassword, log out then log back in -
Start the Program
comfortable-swipe startYou will see this output:
$ comfortable-swipe start Comfortable swipe is RUNNING in the background -
(Optional) Stop the Program
comfortable-swipe stop -
(Optional) Toggle autostart
comfortable-swipe autostart -
(Optional) See program status
comfortable-swipe statusExample:
$ comfortable-swipe status Autostart is ON Program is RUNNING -------------------- Configuration: /home/user/.config/comfortable-swipe.conf left3 is VALID (ctrl+super+Right) left4 is VALID (ctrl+super+shift+Right) right3 is VALID (ctrl+super+Left) right4 is VALID (ctrl+super+shift+Left) up3 is VALID (ctrl+F12) up4 is VALID (super+d) down3 is VALID (ctrl+F12) down4 is VALID (super+d) threshold is VALID (1.0) mouse3 is NOTSET mouse4 is NOTSET -
(Optional) Get config
comfortable-swipe <PROPERTY>comfortable-swipe left3 comfortable-swipe left4 comfortable-swipe right3 comfortable-swipe right4 comfortable-swipe up3 comfortable-swipe up4 comfortable-swipe down3 comfortable-swipe down4 comfortable-swipe threshold comfortable-swipe mouse3 comfortable-swipe mouse4 -
(Optional) Set config
comfortable-swipe <PROPERTY> [=] <VALUES>comfortable-swipe left3 = super+Right comfortable-swipe right3 = super+Left comfortable-swipe right4 = ctrl+alt+Left comfortable-swipe down4 = super+d comfortable-swipe up3 = ctrl+shift+Up
Other Commands
-
All Configuration commands
comfortable-swipe config list comfortable-swipe config get <PROPERTY> comfortable-swipe config set <PROPERTY> [=] <VALUE> comfortable-swipe config path comfortable-swipe config keys -
Help and Version
comfortable-swipe --version comfortable-swipe --help -
Autostart commands
comfortable-swipe autostart on comfortable-swipe autostart off comfortable-swipe autostart toggle comfortable-swipe autostart status comfortable-swipe autostart path -
Show output with
--attachExample output of 3-finger left, 4-finger left, 3-finger right, 3-finger up:
$ comfortable-swipe start --attach SWIPE left3 SWIPE left4 SWIPE right3 SWIPE up3 ... -
Test output with
--bareto attach without actually swiping$ comfortable-swipe start --bare SWIPE left3 SWIPE left4 SWIPE right3 SWIPE up3 ... -
Debug
$ 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 ...
Gesture Configurations
The default configuration file is located at ~/.config/comfortable-swipe.conf.
Comfortable swipe makes use of keyboard shortcuts to perform swipes, through xdotool.
Set a property directly with:
comfortable-swipe <PROPERTY> [=] <VALUE>
Or edit the configuration file manually:
gedit ~/.config/comfortable-swipe.conf
After editing, make sure to restart with comfortable-swipe start.
Warning
: For v1.1.0 below, the configuration file is located at
/usr/local/share/comfortable-swipe/comfortable-swipe.conf
Note
: You can locate the absolute path to your configuration by running:
comfortable-swipe config path
Configuration Reference
| Property | Value | Examples |
|---|---|---|
| left3 | 3-finger swipe left | ctrl+alt+Right |
| left4 | 4-finger swipe left | ctrl+alt+shift+Right |
| right3 | 3-finger swipe right | ctrl+alt+Left |
| right4 | 4-finger swipe right | ctrl+alt+shift+Left |
| up3 | 3-finger swipe up | ctrl+alt+Down |
| up4 | 4-finger swipe up | ctrl+alt+shift+Down |
| down3 | 3-finger swipe down | ctrl+alt+Up |
| down4 | 4-finger swipe down | ctrl+alt+shift+Up |
| threshold | mouse movement pixels that trigger a swipe (can be as large as 1000.0) | 0.0 / 240.0 / 1000.0 |
| mouse3 | mouses a mouse button when 3 fingers are down | button1 / move / scroll (see Mouse Gestures) |
| mouse4 | mouses a mouse button when 4 fingers are down | button1 / move / scroll (see Mouse Gestures |
Keystrokes
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.
- DEFKEY - All Linux keyboard shortcuts
- Unity Keyboard Shortcuts
- GNOME Keyboard Shortcuts
- KDE Keyboard Shortcuts
- PopOS Keyboard Shortcuts
Example Configurations
This section includes some example configurations which you can use for your swipe experience.
-
Switch workspace (horizontal)
# Ubuntu flavors + GNOME comfortable-swipe left3 = ctrl+alt+Right comfortable-swipe right3 = ctrl+alt+Left -
Switch workspace (vertical)
# Ubuntu flavors + GNOME comfortable-swipe up3 = ctrl+alt+Down comfortable-swipe down3 = ctrl+alt+Up# GNOME alt. comfortable-swipe up3 = super+PgDown comfortable-swipe down3 = super+PgUp# Pop OS comfortable-swipe up3 = ctrl+super+Down comfortable-swipe down3 = ctrl+super+Up -
Move window to workspace (horizontal)
# Ubuntu flavors + GNOME + Kali comfortable-swipe left4 = ctrl+alt+shift+Right comfortable-swipe right4 = ctrl+alt+shift+Left# Elementary OS comfortable-swipe left4 = super+alt+Right comfortable-swipe right4 = super+alt+Left -
Move window to workspace (vertical)
# Ubuntu flavors + GNOME + Kali comfortable-swipe up4 = ctrl+alt+shift+Down comfortable-swipe down4 = ctrl+alt+shift+Up# GNOME alt. comfortable-swipe up4 = super+shift+PgDown comfortable-swipe down4 = super+shift+PgUp -
Move window to other monitor
# Ubuntu flavors + GNOME comfortable-swipe left4 = super+shift+Right comfortable-swipe right4 = super+shift+Left -
Toggle workspace overview
# Ubuntu flavors + Elementary OS comfortable-swipe up3 = super+s# Elementary OS (all workspaces) comfortable-swipe up4 = super+a -
Show desktop
# Ubuntu flavors comfortable-swipe down3 = ctrl+super+d# Linux Mint comfortable-swipe down3 = super+d# Kali comfortable-swipe down3 = ctrl+alt+d# KDE comfortable-swipe down3 = ctrl+F12 -
Snap windows to the left/right
comfortable-swipe left3 = super+Left comfortable-swipe right3 = super+Right -
Toggle maximize
comfortable-swipe up3 = super+Up -
Toggle minimize
comfortable-swipe down3 = super+Down
Mouse Gestures (Experimental)
You can also play around with mouse gestures during swipe. This enables certain mouse behaviour to trigger along with a 3/4-finger swipe.
Keys:
- mouse3 - for 3-finger mouse gestures
- mouse4 - for 4-finger mosue gestures
- hold3 (deprecated) - old equivalent of mouse3
- hold4 (deprecated) - old equivalent of mouse4
Possible Values:
- button1 - left click
- button2 - middle click
- button3 - right click
- button4 - wheel up (experimental)
- button5 - wheel down (experimental)
- move - just move the mouse cursor while fingers are down
- scroll - 3/4 finger natural scroll (no acceleration, very experimental)
- scroll_reverse - 3/4 finger reverse scroll (no acceleration, very experimental)
Tip
: You can clear mouse gestures by setting them blank
comfortable-swipe mouse3 = comfortable-swipe mouse4 =
Examples:
✔️ swipes OK ⭕ swipes DISABLED
-
3/4-finger drag ⭕
comfortable-swipe mouse3 = button1 comfortable-swipe mouse4 = button1You can also use
button2for middle click andbutton3for right click. -
3/4-finger natural scroll ⭕
comfortable-swipe mouse3 = scroll comfortable-swipe mouse4 = scroll -
3/4-finger reverse scroll ⭕
comfortable-swipe mouse3 = scroll_reverse comfortable-swipe mouse4 = scroll_reverse -
Move 3/4-fingers with the cursor ✔️
comfortable-swipe mouse3 = move comfortable-swipe mouse4 = move
Warning
: Some mouse configuration will disable up/left/right/down behavior to avoid gesture conflicts. The logic of this will be improved in the future.
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.
FAQ: Can I run a shell command instead of a keystroke?
Answer 1: Unfortunately NO...
For the following reasons:
- We want prioritize "comfort" over functionality, which we deliver through performance in our negligible-overhead implementation (that's why C++)
- There are other gesture libraries that already do this properly (eg. libinput gestures, Fusuma), we don't want to be a clone of them
- Running a new shell command with unpredictable process time will break our unthreaded optimizations (unlike native keystrokes)
That's why it's not possible... or not?
Answer 2: ... but actually IT'S POSSIBLE!
Although we don't provide this out of the box in our config, this can definitely be done with the default bash tools.
Hack: Shell command on swipe
Running shell commands our NOT part of the core features of comfortable-swipe, but through the default bash tools you can mimic this functionality via our program output.
Use Case: "I want to run gnome-terminal if I swipe up with 3 fingers."
-
Attach the program to the shell:
comfortable-swipe start --attachVerify it outputs when you swipe left, left, up, right, up with 3 fingers:
$ comfortable-swipe start --attach SWIPE left3 SWIPE left3 SWIPE up3 SWIPE right3 SWIPE up3 ... -
Filter out the wanted gesture with
grep.In our case, we want 3-finger swipe up which is "SWIPE up3":
$ comfortable-swipe start --attach | grep --line-buffered "SWIPE up3" SWIPE up3 SWIPE up3 ...Note
: The flag
--line-bufferedensures the output prints line-by-line. -
Now we can execute our shell command with
xargs.So if we want "SWIPE up3" to open the terminal,
comfortable-swipe start --attach | grep "SWIPE up3" --line-buffered | xargs -I@ gnome-terminalNote
: The flag
-I@in xargs substitutes the line "SWIPE xxx" to the charatcter "@", which you can use for your program. -
Bonus: Add to autostart
Open our autostart file:
gedit "$(comfortable-swipe autostart path)"Tweak the
Execsection:[Desktop Entry] Type=Application Exec=comfortable-swipe start Name=Comfortable Swipe Comment=Comfortable 3/4-finger touchpad gestures Hidden=false NoDisplay=false X-GNOME-Autostart-enabled=trueTo:
[Desktop Entry] Type=Application Exec=comfortable-swipe start --attach | grep "SWIPE up3" --line-buffered | xargs -I@ gnome-terminal Name=Comfortable Swipe Comment=Comfortable 3/4-finger touchpad gestures Hidden=false NoDisplay=false X-GNOME-Autostart-enabled=true -
Log out and log back in. You should now be able to run your custom shell commands on startup.
-
Bonus: Use
--bareinstead of--attachto NOT run keystrokes while swipingcomfortable-swipe start --bare | grep "SWIPE up3" --line-buffered | xargs -I@ gnome-terminal -
Bonus: You can pipe multiple gestures with
tee:comfortable-swipe start --attach | \ tee >(grep "SWIPE left3" --line-buffered | xargs -I@ <COMMAND>) | \ tee >(grep "SWIPE left4" --line-buffered | xargs -I@ <COMMAND>) | \ tee >(grep "SWIPE right3" --line-buffered | xargs -I@ <COMMAND>) | \ tee >(grep "SWIPE right4" --line-buffered | xargs -I@ <COMMAND>) | \ tee >(grep "SWIPE up3" --line-buffered | xargs -I@ <COMMAND>) | \ tee >(grep "SWIPE up4" --line-buffered | xargs -I@ <COMMAND>) | \ tee >(grep "SWIPE down3" --line-buffered | xargs -I@ <COMMAND>) | \ tee >(grep "SWIPE down4" --line-buffered | xargs -I@ <COMMAND>)Substitute
<COMMAND>with the shell command of your choice.
Uninstall
Run the following script:
wget -qO - https://raw.githubusercontent.com/Hikari9/comfortable-swipe/master/uninstall | bash
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:
lsb_release -ag++ --versionls -l /dev/input/event*xinput list | grep touchpad -ilsmod | grep hidcomfortable-swipe statuscomfortable-swipe start(if you can run it)comfortable-swipe debug(try swiping if you can seeGESTURE_SWIPE_XXX)cat $(comfortable-swipe config)