Compare commits
No commits in common. "master" and "v1.2.1" have entirely different histories.
350
README.md
350
README.md
@ -11,7 +11,7 @@ Comfortable, seamless, and fast 3-finger (and 4-finger) touchpad swipe gestures
|
|||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
1. Install git and g++ ≥ 7.5
|
1. Install git and g++
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo apt install git g++
|
sudo apt install git g++
|
||||||
@ -48,6 +48,8 @@ Comfortable, seamless, and fast 3-finger (and 4-finger) touchpad swipe gestures
|
|||||||
|
|
||||||
1. **_Important_**: After inputing your `sudo` password, log out then log back in
|
1. **_Important_**: After inputing your `sudo` password, log out then log back in
|
||||||
|
|
||||||
|
## List of Commands
|
||||||
|
|
||||||
1. Start the Program
|
1. Start the Program
|
||||||
|
|
||||||
```
|
```
|
||||||
@ -61,84 +63,89 @@ Comfortable, seamless, and fast 3-finger (and 4-finger) touchpad swipe gestures
|
|||||||
Comfortable swipe is RUNNING in the background
|
Comfortable swipe is RUNNING in the background
|
||||||
```
|
```
|
||||||
|
|
||||||
1. (Optional) Toggle autostart
|
1. List configurations
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
comfortable-swipe autostart on
|
comfortable-swipe config list
|
||||||
```
|
|
||||||
|
|
||||||
1. (Optional) Stop the Program
|
|
||||||
|
|
||||||
```
|
|
||||||
comfortable-swipe stop
|
|
||||||
```
|
|
||||||
|
|
||||||
1. (Optional) See program status
|
|
||||||
|
|
||||||
```bash
|
|
||||||
comfortable-swipe status
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
```
|
```bash
|
||||||
$ comfortable-swipe status
|
$ comfortable-swipe config list
|
||||||
|
threshold = 1.0
|
||||||
Autostart is ON
|
left4 = ctrl+super+shift+Right
|
||||||
Program is RUNNING
|
right3 = ctrl+super+Left
|
||||||
--------------------
|
right4 = ctrl+super+shift+Left
|
||||||
Configuration: /home/user/.config/comfortable-swipe.conf
|
up3 = ctrl+F12
|
||||||
left3 is VALID (ctrl+super+Right)
|
up4 = super+d
|
||||||
left4 is VALID (ctrl+super+shift+Right)
|
down3 = ctrl+F12
|
||||||
right3 is VALID (ctrl+super+Left)
|
down4 = super+d
|
||||||
right4 is VALID (ctrl+super+shift+Left)
|
mouse4 = button1
|
||||||
up3 is VALID (ctrl+F12)
|
left3 = ctrl+super+Right
|
||||||
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
|
|
||||||
```
|
```
|
||||||
|
|
||||||
1. (Optional) Get config
|
1) Get config
|
||||||
|
|
||||||
```
|
```
|
||||||
comfortable-swipe <PROPERTY>
|
comfortable-swipe <PROPERTY>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
comfortable-swipe left3
|
$ comfortable-swipe left3
|
||||||
comfortable-swipe left4
|
ctrl+alt+Right
|
||||||
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
|
|
||||||
```
|
```
|
||||||
|
|
||||||
1. (Optional) Set config
|
```bash
|
||||||
|
$ comfortable-swipe left4
|
||||||
|
ctrl+alt+shift+Right
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ comfortable-swipe threshold
|
||||||
|
1.0
|
||||||
|
```
|
||||||
|
|
||||||
|
1) Set config
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
comfortable-swipe <PROPERTY> [=] <VALUES>
|
comfortable-swipe <PROPERTY> [=] <VALUES>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
comfortable-swipe left3 = super+Right
|
comfortable-swipe left3 super+Right
|
||||||
comfortable-swipe right3 = super+Left
|
comfortable-swipe right3 super+Left
|
||||||
comfortable-swipe right4 = ctrl+alt+Left
|
comfortable-swipe right4 ctrl alt + Left
|
||||||
comfortable-swipe down4 = super+d
|
comfortable-swipe down4 super+d
|
||||||
comfortable-swipe up3 = ctrl+shift+Up
|
comfortable-swipe up3 = ctrl+shift+Up
|
||||||
```
|
```
|
||||||
|
|
||||||
<details>
|
1) Show path to config file:
|
||||||
<summary><b>Other Commands</b></summary>
|
|
||||||
|
|
||||||
1. All Configuration commands
|
```bash
|
||||||
|
$ comfortable-swipe config path
|
||||||
|
/home/hikari9/.config/comfortable-swipe.conf
|
||||||
|
```
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>Other Commands</summary>
|
||||||
|
|
||||||
|
1. Autostart
|
||||||
|
|
||||||
|
```bash
|
||||||
|
comfortable-swipe autostart
|
||||||
|
comfortable-swipe autostart on
|
||||||
|
comfortable-swipe autostart off
|
||||||
|
comfortable-swipe autostart toggle
|
||||||
|
comfortable-swipe autostart status
|
||||||
|
comfortable-swipe autostart path
|
||||||
|
```
|
||||||
|
|
||||||
|
1. Configurations
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
comfortable-swipe config list
|
comfortable-swipe config list
|
||||||
@ -155,16 +162,6 @@ Comfortable, seamless, and fast 3-finger (and 4-finger) touchpad swipe gestures
|
|||||||
comfortable-swipe --help
|
comfortable-swipe --help
|
||||||
```
|
```
|
||||||
|
|
||||||
1. Autostart commands
|
|
||||||
|
|
||||||
```bash
|
|
||||||
comfortable-swipe autostart on
|
|
||||||
comfortable-swipe autostart off
|
|
||||||
comfortable-swipe autostart toggle
|
|
||||||
comfortable-swipe autostart status
|
|
||||||
comfortable-swipe autostart path
|
|
||||||
```
|
|
||||||
|
|
||||||
1. Show output with `--attach`
|
1. Show output with `--attach`
|
||||||
|
|
||||||
Example output of 3-finger left, 4-finger left, 3-finger right, 3-finger up:
|
Example output of 3-finger left, 4-finger left, 3-finger right, 3-finger up:
|
||||||
@ -178,60 +175,26 @@ Comfortable, seamless, and fast 3-finger (and 4-finger) touchpad swipe gestures
|
|||||||
...
|
...
|
||||||
```
|
```
|
||||||
|
|
||||||
1. Test output with `--bare` to attach without actually swiping
|
You can also pass `--bare` to attach without actually swiping.
|
||||||
|
|
||||||
```bash
|
|
||||||
$ comfortable-swipe start --bare
|
|
||||||
SWIPE left3
|
|
||||||
SWIPE left4
|
|
||||||
SWIPE right3
|
|
||||||
SWIPE up3
|
|
||||||
...
|
|
||||||
```
|
|
||||||
|
|
||||||
1. Debug
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ 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
|
|
||||||
...
|
|
||||||
```
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## Gesture Configurations
|
## Swipe Gesture Configurations
|
||||||
|
|
||||||
The default configuration file is located at `~/.config/comfortable-swipe.conf`.
|
The default configuration file is located at `~/.config/comfortable-swipe.conf`.
|
||||||
Comfortable swipe makes use of **keyboard shortcuts** to perform swipes, through `xdotool`.
|
Comfortable swipe makes use of **keyboard shortcuts** to perform swipes, through `xdotool`.
|
||||||
|
|
||||||
Set a property directly with:
|
Edit the configuration file by running:
|
||||||
|
|
||||||
```
|
|
||||||
comfortable-swipe <PROPERTY> [=] <VALUE>
|
|
||||||
```
|
|
||||||
|
|
||||||
Or edit the configuration file manually:
|
|
||||||
|
|
||||||
```
|
```
|
||||||
gedit ~/.config/comfortable-swipe.conf
|
gedit ~/.config/comfortable-swipe.conf
|
||||||
```
|
```
|
||||||
|
|
||||||
After editing, make sure to restart with `comfortable-swipe start`.
|
After making changes, make sure to restart the program:
|
||||||
|
|
||||||
|
```
|
||||||
|
comfortable-swipe start
|
||||||
|
```
|
||||||
|
|
||||||
> **Warning**: For v1.1.0 below, the configuration file is located at
|
> **Warning**: For v1.1.0 below, the configuration file is located at
|
||||||
> `/usr/local/share/comfortable-swipe/comfortable-swipe.conf`
|
> `/usr/local/share/comfortable-swipe/comfortable-swipe.conf`
|
||||||
@ -240,8 +203,8 @@ After editing, make sure to restart with `comfortable-swipe start`.
|
|||||||
|
|
||||||
## Configuration Reference
|
## Configuration Reference
|
||||||
|
|
||||||
| Property | Value | Examples |
|
| Key | Value | Defaults |
|
||||||
| --------- | :--------------------------------------------------------------------: | ---------------------------------------------------------------------------------- |
|
| --------- | :--------------------------------------------------------------------: | ----------------------------------------------------------------- |
|
||||||
| left3 | 3-finger swipe left | ctrl+alt+Right |
|
| left3 | 3-finger swipe left | ctrl+alt+Right |
|
||||||
| left4 | 4-finger swipe left | ctrl+alt+shift+Right |
|
| left4 | 4-finger swipe left | ctrl+alt+shift+Right |
|
||||||
| right3 | 3-finger swipe right | ctrl+alt+Left |
|
| right3 | 3-finger swipe right | ctrl+alt+Left |
|
||||||
@ -250,9 +213,9 @@ After editing, make sure to restart with `comfortable-swipe start`.
|
|||||||
| up4 | 4-finger swipe up | ctrl+alt+shift+Down |
|
| up4 | 4-finger swipe up | ctrl+alt+shift+Down |
|
||||||
| down3 | 3-finger swipe down | ctrl+alt+Up |
|
| down3 | 3-finger swipe down | ctrl+alt+Up |
|
||||||
| down4 | 4-finger swipe down | ctrl+alt+shift+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 |
|
| 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<br> _(see [Mouse Gestures](#mouse-gestures-experimental))_ | |
|
| mouse3 | mouses a mouse button when 3 fingers are down | button1 <br> (see [Mouse Gestures](#mouse-gestures-experimental)) | |
|
||||||
| mouse4 | mouses a mouse button when 4 fingers are down | button1 / move / scroll <br> _(see [Mouse Gestures](#mouse-gestures-experimental)_ |
|
| mouse4 | mouses a mouse button when 4 fingers are down | button1 <br> (see [Mouse Gestures](#mouse-gestures-experimental) |
|
||||||
|
|
||||||
### Keystrokes
|
### Keystrokes
|
||||||
|
|
||||||
@ -272,21 +235,11 @@ Taken from `man xdotool`:
|
|||||||
|
|
||||||
Refer to https://www.linux.org/threads/xdotool-keyboard.10528/ for a complete list of keycodes you can use.
|
Refer to https://www.linux.org/threads/xdotool-keyboard.10528/ for a complete list of keycodes you can use.
|
||||||
|
|
||||||
- [DEFKEY - All Linux keyboard shortcuts](https://defkey.com/)
|
Keyboard shortcuts:
|
||||||
|
|
||||||
- [Unity Keyboard Shortcuts](https://cheatography.com/sapemeg/cheat-sheets/ubuntu-unity-16-04/)
|
- [Unity Keyboard Shortcuts](https://cheatography.com/sapemeg/cheat-sheets/ubuntu-unity-16-04/)
|
||||||
- [GNOME Keyboard Shortcuts](https://wiki.gnome.org/Design/OS/KeyboardShortcuts)
|
- [GNOME Keyboard Shortcuts](https://wiki.gnome.org/Design/OS/KeyboardShortcuts)
|
||||||
- [KDE Keyboard Shortcuts](https://community.linuxmint.com/tutorial/view/47)
|
- [KDE Keyboard Shortcuts](https://community.linuxmint.com/tutorial/view/47)
|
||||||
- [PopOS Keyboard Shortcuts](https://support.system76.com/articles/pop-keyboard-shortcuts/)
|
|
||||||
|
|
||||||
## Known Issues: Pop!_OS 20.04+
|
|
||||||
|
|
||||||
Pop!_OS 20.04+ may be sensitive to capitalization (#76, #82). Make sure to capitalize every first letter:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Pop!_OS
|
|
||||||
comfortable-swipe up3 = Super+Ctrl+Down
|
|
||||||
comfortable-swipe down3 = Super+Ctrl+Up
|
|
||||||
```
|
|
||||||
|
|
||||||
## Example Configurations
|
## Example Configurations
|
||||||
|
|
||||||
@ -295,118 +248,92 @@ This section includes some example configurations which you can use for your swi
|
|||||||
1. Switch workspace (horizontal)
|
1. Switch workspace (horizontal)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Ubuntu flavors + GNOME
|
comfortable-swipe config set left3 = ctrl+alt+Right
|
||||||
comfortable-swipe left3 = ctrl+alt+Right
|
comfortable-swipe config set right3 = ctrl+alt+Left
|
||||||
comfortable-swipe right3 = ctrl+alt+Left
|
|
||||||
```
|
```
|
||||||
|
|
||||||
1. Switch workspace (vertical)
|
1. Switch workspace (vertical)
|
||||||
|
|
||||||
```bash
|
```
|
||||||
# Ubuntu flavors + GNOME
|
up3 = ctrl+alt+Down
|
||||||
comfortable-swipe up3 = ctrl+alt+Down
|
down3 = ctrl+alt+Up
|
||||||
comfortable-swipe down3 = ctrl+alt+Up
|
|
||||||
```
|
```
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# GNOME alt.
|
up3 = super+PgDown
|
||||||
comfortable-swipe up3 = super+PgDown
|
down3 = super+PgUp
|
||||||
comfortable-swipe down3 = super+PgUp
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Pop OS
|
|
||||||
comfortable-swipe up3 = Super+Ctrl+Down
|
|
||||||
comfortable-swipe down3 = Super+Ctrl+Up
|
|
||||||
```
|
```
|
||||||
|
|
||||||
1. Move window to workspace (horizontal)
|
1. Move window to workspace (horizontal)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Ubuntu flavors + GNOME + Kali
|
left4 = ctrl+alt+shift+Right
|
||||||
comfortable-swipe left4 = ctrl+alt+shift+Right
|
right4 = ctrl+alt+shift+Left
|
||||||
comfortable-swipe right4 = ctrl+alt+shift+Left
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Elementary OS
|
|
||||||
comfortable-swipe left4 = super+alt+Right
|
|
||||||
comfortable-swipe right4 = super+alt+Left
|
|
||||||
```
|
```
|
||||||
|
|
||||||
1. Move window to workspace (vertical)
|
1. Move window to workspace (vertical)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Ubuntu flavors + GNOME + Kali
|
up4 = ctrl+alt+shift+Down
|
||||||
comfortable-swipe up4 = ctrl+alt+shift+Down
|
down4 = ctrl+alt+shift+Up
|
||||||
comfortable-swipe down4 = ctrl+alt+shift+Up
|
|
||||||
```
|
```
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# GNOME alt.
|
up4 = super+shift+PgDown
|
||||||
comfortable-swipe up4 = super+shift+PgDown
|
down4 = super+shift+PgUp
|
||||||
comfortable-swipe down4 = super+shift+PgUp
|
|
||||||
```
|
```
|
||||||
|
|
||||||
1. Move window to other monitor
|
1. Move window to other monitor
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Ubuntu flavors + GNOME
|
left4 = super+shift+Right
|
||||||
comfortable-swipe left4 = super+shift+Right
|
right4 = super+shift+Left
|
||||||
comfortable-swipe right4 = super+shift+Left
|
|
||||||
```
|
```
|
||||||
|
|
||||||
1. Toggle workspace overview
|
1. Toggle workspace overview
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Ubuntu flavors + Elementary OS
|
up3 = super+s
|
||||||
comfortable-swipe up3 = super+s
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Elementary OS (all workspaces)
|
|
||||||
comfortable-swipe up4 = super+a
|
|
||||||
```
|
```
|
||||||
|
|
||||||
1. Show desktop
|
1. Show desktop
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Ubuntu flavors
|
down3 = super+d
|
||||||
comfortable-swipe down3 = ctrl+super+d
|
|
||||||
```
|
```
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Linux Mint
|
down3 = ctrl+super+d
|
||||||
comfortable-swipe down3 = super+d
|
|
||||||
```
|
```
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Kali
|
down3 = ctrl+alt+d
|
||||||
comfortable-swipe down3 = ctrl+alt+d
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# KDE
|
|
||||||
comfortable-swipe down3 = ctrl+F12
|
|
||||||
```
|
```
|
||||||
|
|
||||||
1. Snap windows to the left/right
|
1. Snap windows to the left/right
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
comfortable-swipe left3 = super+Left
|
left3 = super+Left
|
||||||
comfortable-swipe right3 = super+Right
|
right3 = super+Right
|
||||||
```
|
```
|
||||||
|
|
||||||
1. Toggle maximize
|
1. Toggle maximize
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
comfortable-swipe up3 = super+Up
|
up3 = super+Up
|
||||||
```
|
```
|
||||||
|
|
||||||
1. Toggle minimize
|
1. Toggle minimize
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
comfortable-swipe down3 = super+Down
|
down3 = super+Down
|
||||||
|
```
|
||||||
|
|
||||||
|
1. Alt+Tab switch application (experimental)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
left3 = alt+Tab
|
||||||
|
right3 = alt+shift+Tab
|
||||||
```
|
```
|
||||||
|
|
||||||
## Mouse Gestures (Experimental)
|
## Mouse Gestures (Experimental)
|
||||||
@ -432,49 +359,46 @@ Possible Values:
|
|||||||
- scroll - 3/4 finger natural scroll (no acceleration, very experimental)
|
- scroll - 3/4 finger natural scroll (no acceleration, very experimental)
|
||||||
- scroll_reverse - 3/4 finger reverse 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:
|
Examples:
|
||||||
|
|
||||||
✔️ swipes OK
|
- 3/4-finger drag
|
||||||
⭕ swipes DISABLED
|
```bash
|
||||||
|
mouse3 = button1
|
||||||
- 3/4-finger drag ⭕
|
```
|
||||||
|
```bash
|
||||||
|
mouse4 = button1
|
||||||
|
```
|
||||||
|
- 3/4-finger natural scroll
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
comfortable-swipe mouse3 = button1
|
mouse3 = scroll
|
||||||
comfortable-swipe mouse4 = button1
|
|
||||||
```
|
```
|
||||||
|
|
||||||
You can also use `button2` for middle click and `button3` for right click.
|
|
||||||
|
|
||||||
- 3/4-finger natural scroll ⭕
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
comfortable-swipe mouse3 = scroll
|
mouse4 = scroll
|
||||||
comfortable-swipe mouse4 = scroll
|
|
||||||
```
|
```
|
||||||
|
|
||||||
- 3/4-finger reverse scroll ⭕
|
- 3/4-finger reverse scroll
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
comfortable-swipe mouse3 = scroll_reverse
|
mouse3 = scroll_reverse
|
||||||
comfortable-swipe mouse4 = scroll_reverse
|
|
||||||
```
|
```
|
||||||
|
|
||||||
- Move 3/4-fingers with the cursor ✔️
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
comfortable-swipe mouse3 = move
|
mouse4 = scroll_reverse
|
||||||
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.
|
- Move 3/4-fingers with the cursor
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mouse3 = move
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mouse4 = move
|
||||||
|
```
|
||||||
|
|
||||||
|
**Note**: Applying any mouse-mouse configuration may disable up/left/right/down behavior to avoid gesture conflicts. The logic of this will be improved in the future.
|
||||||
|
|
||||||
## Debugging
|
## Debugging
|
||||||
|
|
||||||
@ -517,13 +441,13 @@ If you can see `GESTURE_SWIPE_XXX` in your output, that means your touchpad supp
|
|||||||
|
|
||||||
For the following reasons:
|
For the following reasons:
|
||||||
|
|
||||||
1. We want prioritize "comfort" over functionality, which we deliver through performance in our negligible-overhead implementation (that's why C++)
|
1. We want prioritize "comfort" over functionality, which we deliver through performance in our near-zero-overhead implementation (that's why C++)
|
||||||
1. There are other gesture libraries that already do this properly (eg. [libinput gestures](https://github.com/bulletmark/libinput-gestures), [Fusuma](https://github.com/iberianpig/fusuma)), we don't want to be a clone of them
|
2. Running a new shell command with unpredictable process time will break our unthreaded optimizations (unlike native keystrokes)
|
||||||
1. Running a new shell command with unpredictable process time will break our unthreaded optimizations (unlike native keystrokes)
|
3. There are other gesture libraries that already do this properly (eg. [libinput gestures](https://github.com/bulletmark/libinput-gestures), [Fusuma](https://github.com/iberianpig/fusuma)), we don't want to be a clone of them
|
||||||
|
|
||||||
That's why it's not possible... or not?
|
That's why it's not possible...
|
||||||
|
|
||||||
**Answer 2**: _... but actually **IT'S POSSIBLE**!_
|
**Answer 2**: _... but actually **YES**!_
|
||||||
|
|
||||||
Although we don't provide this out of the box in our config, this can definitely be
|
Although we don't provide this out of the box in our config, this can definitely be
|
||||||
done with the default bash tools.
|
done with the default bash tools.
|
||||||
@ -533,9 +457,7 @@ done with the default bash tools.
|
|||||||
Running shell commands our **NOT** part of the core features of comfortable-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.
|
but through the default bash tools you can _mimic_ this functionality via our program output.
|
||||||
|
|
||||||
<details>
|
**Use Case**: _"I want to run `gnome-terminal` if I swipe up with 3 fingers."_
|
||||||
<summary> <b>Use Case</b>: <i>"I want to run <code>gnome-terminal</code> if I swipe up with 3 fingers."</i>
|
|
||||||
</summary>
|
|
||||||
|
|
||||||
1. Attach the program to the shell:
|
1. Attach the program to the shell:
|
||||||
|
|
||||||
@ -637,8 +559,6 @@ but through the default bash tools you can _mimic_ this functionality via our pr
|
|||||||
|
|
||||||
Substitute `<COMMAND>` with the shell command of your choice.
|
Substitute `<COMMAND>` with the shell command of your choice.
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
||||||
## Uninstall
|
## Uninstall
|
||||||
|
|
||||||
Run the following script:
|
Run the following script:
|
||||||
|
|||||||
@ -115,7 +115,7 @@ function start {
|
|||||||
debug | buffer $@
|
debug | buffer $@
|
||||||
else
|
else
|
||||||
# detach buffered output
|
# detach buffered output
|
||||||
nohup "$BASENAME" debug </dev/null 2>&1 | "$BASENAME" buffer $@ >/dev/null 2>&1 & disown
|
nohup "$BASENAME" debug </dev/null 2>&1 | "$BASENAME" buffer $@ >/dev/null 2>&1 &
|
||||||
echo "Comfortable swipe is RUNNING in the background"
|
echo "Comfortable swipe is RUNNING in the background"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@ -173,53 +173,15 @@ function buffer {
|
|||||||
##########
|
##########
|
||||||
|
|
||||||
|
|
||||||
function _program_running {
|
|
||||||
pgrep -f "$BASENAME" | fgrep -v $$ > /dev/null 2>&1
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# verbosely show comfortable-swipe status
|
# verbosely show comfortable-swipe status
|
||||||
function status {
|
function status {
|
||||||
# show autostart status
|
# TODO: show configuration status as well
|
||||||
echo "Autostart is $("$BASENAME" autostart status)"
|
echo "Autostart is $("$BASENAME" autostart status)"
|
||||||
# show program status
|
if pgrep -f "$BASENAME" | fgrep -v $$ > /dev/null 2>&1; then
|
||||||
if _program_running; then
|
|
||||||
echo "Program is RUNNING"
|
echo "Program is RUNNING"
|
||||||
else
|
else
|
||||||
echo "Program is STOPPED"
|
echo "Program is STOPPED"
|
||||||
fi
|
fi
|
||||||
# show configuration status
|
|
||||||
echo --------------------
|
|
||||||
echo "Configuration: $(config path)"
|
|
||||||
mouse3="$(config get mouse3)"
|
|
||||||
mouse4="$(config get mouse4)"
|
|
||||||
for key in $(config keys); do
|
|
||||||
value="$(config get "$key")"
|
|
||||||
if [[ -z "$value" ]]; then
|
|
||||||
vstatus="NOTSET"
|
|
||||||
else
|
|
||||||
vstatus="VALID"
|
|
||||||
if [[ "$key" != mouse* ]]; then
|
|
||||||
if [[ "$key" == *3 && -n "$mouse3" && "$mouse3" != move ]]; then
|
|
||||||
vstatus="DISABLED"
|
|
||||||
elif [[ "$key" == *4 && -n "$mouse4" && "$mouse4" != move ]]; then
|
|
||||||
vstatus="DISABLED"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if [[ "$key" == threshold ]]; then
|
|
||||||
if ! [[ "$value" =~ ^[+-]?[0-9]+\.?[0-9]*$ ]]; then
|
|
||||||
# not a float
|
|
||||||
vstatus="INVALID"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
echo "$key $vstatus" | awk '{printf "%9s is %7s", $1, $2}'
|
|
||||||
if [[ ! -z "$value" ]]; then
|
|
||||||
echo " ($value)"
|
|
||||||
else
|
|
||||||
echo
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -329,7 +291,8 @@ function config {
|
|||||||
local RESULT="$(egrep -v "^\\s*($(echo "$DELETE" | awk '{print $1}' | paste -s -d '|'))\\s*=" "$CONFIG")"
|
local RESULT="$(egrep -v "^\\s*($(echo "$DELETE" | awk '{print $1}' | paste -s -d '|'))\\s*=" "$CONFIG")"
|
||||||
echo "$RESULT" > "$CONFIG"
|
echo "$RESULT" > "$CONFIG"
|
||||||
# restart comfortable-swipe if it is running
|
# restart comfortable-swipe if it is running
|
||||||
if _program_running; then
|
if [[ "$(status)" == ON ]]; then
|
||||||
|
stop > /dev/null 2>&1
|
||||||
start > /dev/null
|
start > /dev/null
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@ -415,7 +378,8 @@ function config {
|
|||||||
# show newly set value
|
# show newly set value
|
||||||
echo "$KEY = $(get "$KEY")"
|
echo "$KEY = $(get "$KEY")"
|
||||||
# restart comfortable-swipe if it is running
|
# restart comfortable-swipe if it is running
|
||||||
if _program_running; then
|
if [[ "$(status)" == ON ]]; then
|
||||||
|
stop > /dev/null 2>&1
|
||||||
start > /dev/null
|
start > /dev/null
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@ -487,7 +451,7 @@ function autostart {
|
|||||||
#####################################
|
#####################################
|
||||||
# toggle to opposite autostart status
|
# toggle to opposite autostart status
|
||||||
function toggle {
|
function toggle {
|
||||||
[[ $(status) == ON ]] && off || on
|
[[ $(status) = ON ]] && off || on
|
||||||
}
|
}
|
||||||
|
|
||||||
######################
|
######################
|
||||||
@ -531,9 +495,9 @@ else
|
|||||||
# try to invoke config set / get depending on number of arguments
|
# try to invoke config set / get depending on number of arguments
|
||||||
if [[ $# -eq 1 ]]; then
|
if [[ $# -eq 1 ]]; then
|
||||||
# one argument, use shorthand get
|
# one argument, use shorthand get
|
||||||
config get "$1" || abort
|
"$BASENAME" config get "$1" || abort
|
||||||
else
|
else
|
||||||
# multiple arguments, use shorthand set
|
# multiple arguments, use shorthand set
|
||||||
config set "$@" 2> /dev/null || abort
|
"$BASENAME" config set "$@" 2> /dev/null || abort
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|||||||
@ -134,7 +134,7 @@ void gesture_swipe_xdokey::update() {
|
|||||||
gesture_swipe::update();
|
gesture_swipe::update();
|
||||||
// scale threshold to 1/10 when gesture is fresh
|
// scale threshold to 1/10 when gesture is fresh
|
||||||
// acts like our static friction coefficient
|
// acts like our static friction coefficient
|
||||||
const float scale = get_previous_gesture() == FRESH ? 0.01f : 1.0f;
|
float scale = get_previous_gesture() == FRESH ? 0.01f : 1.0f;
|
||||||
// we are working with floating points which are not exact
|
// we are working with floating points which are not exact
|
||||||
// make sure we compare with a very small value (1e-6f)
|
// make sure we compare with a very small value (1e-6f)
|
||||||
// if distance goes out of threshold, perform our swipe
|
// if distance goes out of threshold, perform our swipe
|
||||||
|
|||||||
@ -112,14 +112,10 @@ int main(int argc, char *argv[]) {
|
|||||||
// get input values
|
// get input values
|
||||||
string mouse3 = config.count("mouse3") ? config["mouse3"] : config["hold3"];
|
string mouse3 = config.count("mouse3") ? config["mouse3"] : config["hold3"];
|
||||||
string mouse4 = config.count("mouse4") ? config["mouse4"] : config["hold4"];
|
string mouse4 = config.count("mouse4") ? config["mouse4"] : config["hold4"];
|
||||||
bool nomouse = mouse3.empty() || mouse4.empty(); // TODO: check if mouse invalid
|
|
||||||
// create our mouse gesture holder
|
// create our mouse gesture holder
|
||||||
gesture_swipe_xdomouse mousehold(mouse3.data(), mouse4.data());
|
gesture_swipe_xdomouse mousehold(mouse3.data(), mouse4.data());
|
||||||
// start reading lines from input one by one
|
// start reading lines from input one by one
|
||||||
for (string line; getline(cin, line);) {
|
for (string line; getline(cin, line);) {
|
||||||
if (nomouse) {
|
|
||||||
keyswipe.run(line.data());
|
|
||||||
} else {
|
|
||||||
// optimization: if no mouse config is set, just run keyboard
|
// optimization: if no mouse config is set, just run keyboard
|
||||||
if (mousehold.is_swiping() && mousehold.button == MOUSE_NONE) {
|
if (mousehold.is_swiping() && mousehold.button == MOUSE_NONE) {
|
||||||
keyswipe.run(line.data());
|
keyswipe.run(line.data());
|
||||||
@ -130,7 +126,6 @@ int main(int argc, char *argv[]) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
58
install
58
install
@ -2,11 +2,6 @@
|
|||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
if [[ "$USER" == root ]]; then
|
|
||||||
echo "Please run 'bash install' as non-root user" 2>&1
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
DIR="$(dirname "$0")"
|
DIR="$(dirname "$0")"
|
||||||
VERSION="$(cat $DIR/VERSION | tr -d '[:space:]')"
|
VERSION="$(cat $DIR/VERSION | tr -d '[:space:]')"
|
||||||
|
|
||||||
@ -34,7 +29,7 @@ comfortable-swipe stop > /dev/null 2>&1 || true
|
|||||||
|
|
||||||
# shorthand to abort the installation
|
# shorthand to abort the installation
|
||||||
function abort {
|
function abort {
|
||||||
echo "Installation aborted" >&2
|
echo "Installation aborted"
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -67,23 +62,14 @@ function install_configuration_file {
|
|||||||
# ask user if we overwrite configuration
|
# ask user if we overwrite configuration
|
||||||
echo "Old conf file found in $CONF_TARGET" >&2
|
echo "Old conf file found in $CONF_TARGET" >&2
|
||||||
read -r -p "Keep the old conf file? (default: yes) [Y/n] " response >&2
|
read -r -p "Keep the old conf file? (default: yes) [Y/n] " response >&2
|
||||||
|
if ! [[ "${response,,}" =~ ^(yes|y)$ ]]; then
|
||||||
# If response is empty, consider it as 'yes' (default)
|
|
||||||
if [[ -z "$response" ]]; then
|
|
||||||
response="y"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "${response,,}" =~ ^(no|n)$ ]]; then
|
|
||||||
# MAKE SURE they really want to overwrite
|
# MAKE SURE they really want to overwrite
|
||||||
read -r -p "Conf file will be overwritten! Are you sure? [Y/n] " response >&2
|
read -r -p "Conf file will be overwritten! Are you sure? [Y/n] " response >&2
|
||||||
if [[ -z "$response" ]]; then
|
if [[ "${response,,}" =~ ^(yes|y)$ ]]; then
|
||||||
response="y"
|
|
||||||
fi
|
|
||||||
if [[ "${response,,}" =~ ^(no|n)$ ]]; then
|
|
||||||
abort
|
|
||||||
else
|
|
||||||
# They agreed... replace configuration
|
# They agreed... replace configuration
|
||||||
cat "$CONF_SOURCE" > "$CONF_TARGET"
|
cat "$CONF_SOURCE" > "$CONF_TARGET"
|
||||||
|
else
|
||||||
|
abort
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
@ -111,16 +97,14 @@ function install_configuration_file {
|
|||||||
#
|
#
|
||||||
function install_main_program {
|
function install_main_program {
|
||||||
# copy source to target with executable permissions
|
# copy source to target with executable permissions
|
||||||
# install to target, with hardcoded version
|
TRYSUDO=
|
||||||
if [[ -f "$TARGET" ]]; then
|
if ! touch "$TARGET" 2> /dev/null; then
|
||||||
trysudo rm "$TARGET"
|
TRYSUDO=sudo
|
||||||
fi
|
fi
|
||||||
trysudo cp "$SOURCE" "$TARGET"
|
# install to target, with hardcoded version
|
||||||
trysudo sed -E "s/^VERSION=.*/VERSION=$VERSION/" -i "$TARGET"
|
$TRYSUDO sed -E "s/^VERSION=.*/VERSION=$VERSION/" "$SOURCE" > "$TARGET"
|
||||||
# allow execute permissions with group
|
# allow execute permissions
|
||||||
trysudo chmod +x "$TARGET"
|
$TRYSUDO chmod +x "$TARGET"
|
||||||
# make sure non-root user is owner
|
|
||||||
trysudo chown "$USER" "$TARGET"
|
|
||||||
echo "Installed: $TARGET"
|
echo "Installed: $TARGET"
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -134,17 +118,14 @@ function install_cpp_program {
|
|||||||
# compile program to temporary file first
|
# compile program to temporary file first
|
||||||
TMP_TARGET="$(mktemp)"
|
TMP_TARGET="$(mktemp)"
|
||||||
$COMPILE "$COMPILE_SOURCE" -o "$TMP_TARGET" -DCOMFORTABLE_SWIPE_VERSION="\"$VERSION\"" -DCOMFORTABLE_SWIPE_CONFIG="\"$CONF_TARGET\"" -DCOMFORTABLE_SWIPE_AUTOSTART="\"$AUTOSTART_TARGET\""
|
$COMPILE "$COMPILE_SOURCE" -o "$TMP_TARGET" -DCOMFORTABLE_SWIPE_VERSION="\"$VERSION\"" -DCOMFORTABLE_SWIPE_CONFIG="\"$CONF_TARGET\"" -DCOMFORTABLE_SWIPE_AUTOSTART="\"$AUTOSTART_TARGET\""
|
||||||
# compilation ok, now try to install with sudo
|
# compilation ok, now try to install
|
||||||
trysudo mkdir -p "$(dirname "$COMPILE_TARGET")"
|
# eheck permissions maybe if will need sudo
|
||||||
# remove existing file for permissions to work
|
TRYSUDO=
|
||||||
if [[ -f "$COMPILE_TARGET" ]]; then
|
if ! touch "$COMPILE_TARGET" 2> /dev/null; then
|
||||||
sudo rm "$COMPILE_TARGET"
|
TRYSUDO=sudo
|
||||||
fi
|
fi
|
||||||
trysudo mv "$TMP_TARGET" "$COMPILE_TARGET"
|
# move executable to target
|
||||||
# bugfix: add with group permissions
|
$TRYSUDO mv "$TMP_TARGET" "$COMPILE_TARGET"
|
||||||
trysudo chmod go+x "$COMPILE_TARGET"
|
|
||||||
# make sure non-root user is owner
|
|
||||||
trysudo chown "$USER" "$COMPILE_TARGET"
|
|
||||||
echo "Installed: $COMPILE_TARGET"
|
echo "Installed: $COMPILE_TARGET"
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -155,7 +136,6 @@ function install_cpp_program {
|
|||||||
# /home/$USER/.config/autostart/comfortable-swipe.desktop
|
# /home/$USER/.config/autostart/comfortable-swipe.desktop
|
||||||
#
|
#
|
||||||
function install_autostart {
|
function install_autostart {
|
||||||
mkdir -p "$(dirname "$AUTOSTART_TARGET")"
|
|
||||||
cat "$AUTOSTART_SOURCE" > "$AUTOSTART_TARGET"
|
cat "$AUTOSTART_SOURCE" > "$AUTOSTART_TARGET"
|
||||||
echo "Installed: $AUTOSTART_TARGET"
|
echo "Installed: $AUTOSTART_TARGET"
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user