Compare commits

..

No commits in common. "master" and "v1.2.2" have entirely different histories.

6 changed files with 164 additions and 278 deletions

350
README.md
View File

@ -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:

View File

@ -1 +1 @@
v1.2.5 v1.2.2

View File

@ -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
} }
@ -200,10 +200,10 @@ function status {
else else
vstatus="VALID" vstatus="VALID"
if [[ "$key" != mouse* ]]; then if [[ "$key" != mouse* ]]; then
if [[ "$key" == *3 && -n "$mouse3" && "$mouse3" != move ]]; then if [[ "$key" == *3 && -n "$mouse3" ]]; then
vstatus="DISABLED" vstatus="IGNORED"
elif [[ "$key" == *4 && -n "$mouse4" && "$mouse4" != move ]]; then elif [[ "$key" == *4 && -n "$mouse4" ]]; then
vstatus="DISABLED" vstatus="IGNORED"
fi fi
fi fi
if [[ "$key" == threshold ]]; then if [[ "$key" == threshold ]]; then

View File

@ -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

View File

@ -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;
} }

47
install
View File

@ -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
@ -112,15 +98,9 @@ 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 # install to target, with hardcoded version
if [[ -f "$TARGET" ]]; then trysudo sed -E "s/^VERSION=.*/VERSION=$VERSION/" "$SOURCE" > "$TARGET"
trysudo rm "$TARGET" # allow execute permissions
fi
trysudo cp "$SOURCE" "$TARGET"
trysudo sed -E "s/^VERSION=.*/VERSION=$VERSION/" -i "$TARGET"
# allow execute permissions with group
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 +114,9 @@ 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")" # check permissions maybe if will need sudo
# remove existing file for permissions to work
if [[ -f "$COMPILE_TARGET" ]]; then
sudo rm "$COMPILE_TARGET"
fi
trysudo mv "$TMP_TARGET" "$COMPILE_TARGET" trysudo mv "$TMP_TARGET" "$COMPILE_TARGET"
# bugfix: add with group permissions
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 +127,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"
} }