diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..885a2d6
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,25 @@
+dist: xenial
+language: python
+sudo: required
+python:
+ - 2.7
+ - 3.5
+ - 3.6
+ - 3.7
+ - 3.8-dev
+addons:
+ apt:
+ update: true
+ sources:
+ - ubuntu-toolchain-r-test
+ packages:
+ - libxdo-dev
+ - libinput-tools
+ - g++-7
+env:
+ CC: gcc-7
+ CXX: g++-7
+install:
+ - pip install .
+script:
+ - python setup.py test
diff --git a/README.md b/README.md
index a6e8ee3..81dddfa 100644
--- a/README.md
+++ b/README.md
@@ -1,30 +1,62 @@
-# Comfortable Swipe (Ubuntu)
-[](https://www.gnu.org/licenses/gpl-3.0)
+# Comfortable Swipe (Debian/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`.
+[](https://github.com/Hikari9/comfortable-swipe/releases)
+[](https://github.com/Hikari9/comfortable-swipe/commits/master)
+[](https://github.com/Hikari9/comfortable-swipe/commits/develop)
+[](https://www.gnu.org/licenses/gpl-3.0)
+
+Comfortable, seamless, and fast 3-finger (and 4-finger) touchpad swipe gestures. Tested in Ubuntu 14.04 LTS and beyond, for Unity, GNOME, and KDE desktop environments.
+
+> **Note**: May work for other Linux distros that support `libinput` and `libxdo` (untested).
## Installation
-1. Install Python3, libinput, and g++
+1. Update and install essential tools and libraries
```bash
- sudo apt-get install git python3-dev libinput-tools libxdo-dev
+ sudo apt update && sudo apt install git g++-7 python3-pip libinput-tools libxdo-dev
```
-2. Clone this repository
+2. Install `comfortable-swipe` for your user
```bash
- git clone https://github.com/Hikari9/comfortable-swipe-ubuntu.git
- cd comfortable-swipe-ubuntu
+ pip3 install --user git+https://github.com/Hikari9/comfortable-swipe
```
-3. Install
+3. You can check status with `comfortable-swipe status`
```bash
- bash install
+ $> comfortable-swipe status
+ usr/local/share/comfortable-swipe/comfortable-swipe.conf
+ threshold = 0.0
+ left3 = ctrl+alt+Right
+ left4 = ctrl+alt+shift+Right
+ right3 = ctrl+alt+Left
+ right4 = ctrl+alt+shift+Left
+ up3 = ctrl+alt+Down
+ up4 = ctrl+alt+shift+Down
+ down3 = ctrl+alt+Up
+ down4 = ctrl+alt+shift+Up
+ autostart is ON
+ comfortable-swipe program is STOPPED
```
-4. You may delete the downloaded `comfortable-swipe-ubuntu` folder after installation.
+3. You can list down all commands with `comfortable-swipe` or `comfortable-swipe help`
+
+ ```bash
+ $> comfortable-swipe
+ comfortable-swipe [start|stop|restart|autostart|buffer|help|config|debug|status]
+
+ start - starts 3/4-finger gesture service
+ stop - stops 3/4-finger gesture service
+ restart - stops then starts 3/4-finger gesture service
+ autostart - automatically run on startup (toggleable)
+ buffer - parses output of libinput debug-events
+ help - shows the help dialog
+ config - locates the config file
+ debug - logs raw output from input events taken from libinput
+ status - checks status of program and autostart
+ ```
## How to Run
@@ -33,27 +65,84 @@ Comfortable, seamless, and fast 3-finger (and 4-finger) touchpad swipe gestures
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
- ```
+3. By default, comfortable-swipe should be running. Otherwise, run:
+ ```bash
comfortable-swipe start
```
-4. _Optional_: Automatically run on startup
+ You can see if gestures work correctly if you see `SWIPE xxx` in the output:
+
+ ```bash
+ $> comfortable-swipe start
+ SWIPE left3
+ SWIPE right3
+ ...
```
- comfortable-swipe autostart
+
+## How to Upgrade
+
+```bash
+pip3 install -U --user git+https://github.com/Hikari9/comfortable-swipe
+```
+
+## Uninstall
+
+```bash
+# Uncomment below to COMPLETELY remove configurations (not recommended)
+# rm $(comfortable-swipe config)
+
+pip3 uninstall comfortable-swipe
+```
+
+## Other Commands
+
+1. `comfortable-swipe config` - outputs location of configuration file
+
+ ```bash
+ $> comfortable-swipe config
+ /usr/local/share/comfortable-swipe/comfortable-swipe.conf
```
-5. Check the status of your application by running
+
+2. `comfortable-swipe autostart` - Toggles autostart
+ ```bash
+ $> comfortable-swipe autostart
+ Autostart switched off
```
- comfortable-swipe status
+
+3. `comfortable-swipe debug` - Debugs input (this is an unbuffered alias of `libinput debug-events`)
+
+ ```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
+ ...
```
+ If you can see `GESTURE_SWIPE_XXX` in your output, that means your touchpad supports multi-touch swipe gestures.
+
## Configurations
+
Comfortable swipe makes use of keyboard shortcuts for configurations. Edit by running
-```
-nano $(comfortable-swipe config)
+
+```bash
+gedit $(comfortable-swipe config)
```
-Make sure to run after making changes:
-```
+Make sure to restart after making changes:
+```bash
comfortable-swipe restart
```
@@ -85,45 +174,6 @@ Taken from `man xdotool`:
Refer to https://www.linux.org/threads/xdotool-keyboard.10528/ for a complete list of keycodes you can use.
-
-## Debugging
-
-You can check your touchpad driver by running
-
-```bash
-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:
-
-```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
- ...
-```
-
-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
+
Create an issue [here](https://github.com/Hikari9/comfortable-swipe-ubuntu/issues/new) to report a bug.
diff --git a/comfortable_swipe/autostart.py b/comfortable_swipe/autostart.py
index 164a335..2580e97 100644
--- a/comfortable_swipe/autostart.py
+++ b/comfortable_swipe/autostart.py
@@ -45,6 +45,11 @@ def get_status():
# sets the autostart status
def set_status(status=ON):
if status == ON:
+ # make sure dir exists
+ path = target_path()
+ path_dir = os.path.dirname(path)
+ if not os.path.exists(path_dir):
+ os.makedirs(path_dir)
with open(target_path(), 'w') as file:
file.write(template())
elif status == OFF:
diff --git a/cpp/gesture/swipe_gesture.cpp b/cpp/gesture/swipe_gesture.cpp
index 9056911..b1c7ebc 100644
--- a/cpp/gesture/swipe_gesture.cpp
+++ b/cpp/gesture/swipe_gesture.cpp
@@ -32,182 +32,185 @@ extern "C"
// CURRENT_WINDOW
}
-namespace comfortable_swipe::gesture
+namespace comfortable_swipe
{
- /**
- * Constructs a new swipe gesture, given configurations for certain swipe events.
- */
- swipe_gesture::swipe_gesture
- (
- const float threshold,
- const char* left3 /* 000 */,
- const char* left4 /* 001 */,
- const char* right3 /* 010 */,
- const char* right4 /* 011 */,
- const char* up3 /* 100 */,
- const char* up4 /* 101 */,
- const char* down3 /* 110 */,
- const char* down4 /* 111 */
- ):
- comfortable_swipe::gesture::xdo_gesture(),
- threshold_squared(threshold*threshold),
- commands(new const char*[8]{left3, left4, right3, right4, up3, up4, down3, down4}),
- flag_swiping(false)
+ namespace gesture
{
- // improve responsiveness of first gesture by pre-empting xdotool runtime
- xdo_get_mouse_location(this->xdo, &this->ix, &this->iy, &this->screen_num);
- }
-
- /**
- * Destructs this swipe gesture.
- */
- swipe_gesture::~swipe_gesture()
- {
- delete[] commands;
- }
-
- /**
- * Hook on begin of swipe gesture.
- */
- void swipe_gesture::begin()
- {
- xdo_get_mouse_location(this->xdo, &this->ix, &this->iy, &this->screen_num);
- this->previous_gesture = swipe_gesture::FRESH;
- this->x = 0;
- this->y = 0;
- }
-
- /**
- * Hook on update of swipe gesture.
- */
- void swipe_gesture::update()
- {
- this->x += this->dx;
- this->y += this->dy;
- // scale threshold to 1/10 when gesture is not fresh
- float scale = this->previous_gesture == swipe_gesture::FRESH
- ? 1.00f
- : 0.01f; // square root of 1/10
- static const float EPSILON = 1e-6f;
- if (this->x * this->x + this->y * this->y
- > this->threshold_squared * scale + EPSILON)
+ /**
+ * Constructs a new swipe gesture, given configurations for certain swipe events.
+ */
+ swipe_gesture::swipe_gesture
+ (
+ const float threshold,
+ const char* left3 /* 000 */,
+ const char* left4 /* 001 */,
+ const char* right3 /* 010 */,
+ const char* right4 /* 011 */,
+ const char* up3 /* 100 */,
+ const char* up4 /* 101 */,
+ const char* down3 /* 110 */,
+ const char* down4 /* 111 */
+ ):
+ comfortable_swipe::gesture::xdo_gesture(),
+ threshold_squared(threshold*threshold),
+ commands(new const char*[8]{left3, left4, right3, right4, up3, up4, down3, down4}),
+ flag_swiping(false)
{
- int mask = 0;
- if (this->fingers == 3) mask |= swipe_gesture::MSK_THREE_FINGERS;
- else if (this->fingers == 4) mask |= swipe_gesture::MSK_FOUR_FINGERS;
-
- const float absx = x >= 0 ? x : -x;
- const float absy = y >= 0 ? y : -y;
- if (absx > absy)
- { // horizontal
- mask |= swipe_gesture::MSK_HORIZONTAL;
- if (x < 0)
- mask |= swipe_gesture::MSK_NEGATIVE;
- else
- mask |= swipe_gesture::MSK_POSITIVE;
- }
- else /* std::abs(x) <= std::abs(y) */
- { // vertical
- mask |= swipe_gesture::MSK_VERTICAL;
- if (y < 0)
- mask |= swipe_gesture::MSK_NEGATIVE;
- else
- mask |= swipe_gesture::MSK_POSITIVE;
- }
-
- // send command on fresh OR opposite gesture
- if (this->previous_gesture == swipe_gesture::FRESH
- || this->previous_gesture == (mask ^ swipe_gesture::MSK_POSITIVE))
- {
- xdo_send_keysequence_window(this->xdo, CURRENTWINDOW, swipe_gesture::commands[mask], 0);
- this->x = this->y = 0;
- this->previous_gesture = mask;
- std::cout << "SWIPE " << swipe_gesture::command_map[mask] << std::endl;
- }
+ // improve responsiveness of first gesture by pre-empting xdotool runtime
+ xdo_get_mouse_location(this->xdo, &this->ix, &this->iy, &this->screen_num);
}
- }
- /**
- * Hook on end of swipe gesture.
- */
- void swipe_gesture::end()
- { }
-
- /**
- * Dispatches begin/update/end depending on the regex pattern provided by this class.
- *
- * @param line the line from libinput debug-events to parse
- * @return true if begin/update/end was dispatched
- */
- bool swipe_gesture::parse_line(const char * line)
- {
- static const std::regex gesture_swipe_begin(swipe_gesture::GESTURE_BEGIN_REGEX_PATTERN);
- static const std::regex gesture_swipe_update(swipe_gesture::GESTURE_UPDATE_REGEX_PATTERN);
- static const std::regex gesture_swipe_end(swipe_gesture::GESTURE_END_REGEX_PATTERN);
-
- // prepare holder for regex matches
- static std::cmatch matches;
-
- if (this->flag_swiping)
+ /**
+ * Destructs this swipe gesture.
+ */
+ swipe_gesture::~swipe_gesture()
{
- // currently swiping
- if (std::regex_match(line, matches, gesture_swipe_update) != 0)
- {
- // assign necessary variables for swipe update
- this->fingers = std::stoi(matches[1]);
- this->dx = std::stof(matches[2]);
- this->dy = std::stof(matches[3]);
- this->udx = std::stof(matches[4]);
- this->udy = std::stof(matches[5]);
- // dispatch update
- this->update();
- return true;
- }
- else if (std::regex_match(line, matches, gesture_swipe_end) != 0)
- {
- // assign necessary variables for swipe end
- this->flag_swiping = false;
- this->fingers = std::stoi(matches[1]);
- // dispatch end
- this->end();
- return true;
- }
+ delete[] commands;
}
- else
+
+ /**
+ * Hook on begin of swipe gesture.
+ */
+ void swipe_gesture::begin()
{
- // not swiping, check if swipe will begin
- if (std::regex_match(line, matches, gesture_swipe_begin) != 0)
+ xdo_get_mouse_location(this->xdo, &this->ix, &this->iy, &this->screen_num);
+ this->previous_gesture = swipe_gesture::FRESH;
+ this->x = 0;
+ this->y = 0;
+ }
+
+ /**
+ * Hook on update of swipe gesture.
+ */
+ void swipe_gesture::update()
+ {
+ this->x += this->dx;
+ this->y += this->dy;
+ // scale threshold to 1/10 when gesture is not fresh
+ float scale = this->previous_gesture == swipe_gesture::FRESH
+ ? 1.00f
+ : 0.01f; // square root of 1/10
+ static const float EPSILON = 1e-6f;
+ if (this->x * this->x + this->y * this->y
+ > this->threshold_squared * scale + EPSILON)
{
- // assign necessary variables for swipe begin
- this->flag_swiping = true;
- this->fingers = std::stoi(matches[1]);
- // dispatch begin
- this->begin();
- return true;
+ int mask = 0;
+ if (this->fingers == 3) mask |= swipe_gesture::MSK_THREE_FINGERS;
+ else if (this->fingers == 4) mask |= swipe_gesture::MSK_FOUR_FINGERS;
+
+ const float absx = x >= 0 ? x : -x;
+ const float absy = y >= 0 ? y : -y;
+ if (absx > absy)
+ { // horizontal
+ mask |= swipe_gesture::MSK_HORIZONTAL;
+ if (x < 0)
+ mask |= swipe_gesture::MSK_NEGATIVE;
+ else
+ mask |= swipe_gesture::MSK_POSITIVE;
+ }
+ else /* std::abs(x) <= std::abs(y) */
+ { // vertical
+ mask |= swipe_gesture::MSK_VERTICAL;
+ if (y < 0)
+ mask |= swipe_gesture::MSK_NEGATIVE;
+ else
+ mask |= swipe_gesture::MSK_POSITIVE;
+ }
+
+ // send command on fresh OR opposite gesture
+ if (this->previous_gesture == swipe_gesture::FRESH
+ || this->previous_gesture == (mask ^ swipe_gesture::MSK_POSITIVE))
+ {
+ xdo_send_keysequence_window(this->xdo, CURRENTWINDOW, swipe_gesture::commands[mask], 0);
+ this->x = this->y = 0;
+ this->previous_gesture = mask;
+ std::cout << "SWIPE " << swipe_gesture::command_map[mask] << std::endl;
+ }
}
}
- return false;
- }
+ /**
+ * Hook on end of swipe gesture.
+ */
+ void swipe_gesture::end()
+ { }
- /* STATICS DEFINITIONS */
- const int swipe_gesture::MSK_THREE_FINGERS = 0;
- const int swipe_gesture::MSK_FOUR_FINGERS = 1;
- const int swipe_gesture::MSK_NEGATIVE = 0;
- const int swipe_gesture::MSK_POSITIVE = 2;
- const int swipe_gesture::MSK_HORIZONTAL = 0;
- const int swipe_gesture::MSK_VERTICAL = 4;
- const int swipe_gesture::FRESH = -1;
- const char * const swipe_gesture::command_map[8] = {
- "left3",
- "left4",
- "right3",
- "right4",
- "up3",
- "up4",
- "down3",
- "down4"
- };
+ /**
+ * Dispatches begin/update/end depending on the regex pattern provided by this class.
+ *
+ * @param line the line from libinput debug-events to parse
+ * @return true if begin/update/end was dispatched
+ */
+ bool swipe_gesture::parse_line(const char * line)
+ {
+ static const std::regex gesture_swipe_begin(swipe_gesture::GESTURE_BEGIN_REGEX_PATTERN);
+ static const std::regex gesture_swipe_update(swipe_gesture::GESTURE_UPDATE_REGEX_PATTERN);
+ static const std::regex gesture_swipe_end(swipe_gesture::GESTURE_END_REGEX_PATTERN);
+
+ // prepare holder for regex matches
+ static std::cmatch matches;
+
+ if (this->flag_swiping)
+ {
+ // currently swiping
+ if (std::regex_match(line, matches, gesture_swipe_update) != 0)
+ {
+ // assign necessary variables for swipe update
+ this->fingers = std::stoi(matches[1]);
+ this->dx = std::stof(matches[2]);
+ this->dy = std::stof(matches[3]);
+ this->udx = std::stof(matches[4]);
+ this->udy = std::stof(matches[5]);
+ // dispatch update
+ this->update();
+ return true;
+ }
+ else if (std::regex_match(line, matches, gesture_swipe_end) != 0)
+ {
+ // assign necessary variables for swipe end
+ this->flag_swiping = false;
+ this->fingers = std::stoi(matches[1]);
+ // dispatch end
+ this->end();
+ return true;
+ }
+ }
+ else
+ {
+ // not swiping, check if swipe will begin
+ if (std::regex_match(line, matches, gesture_swipe_begin) != 0)
+ {
+ // assign necessary variables for swipe begin
+ this->flag_swiping = true;
+ this->fingers = std::stoi(matches[1]);
+ // dispatch begin
+ this->begin();
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /* STATICS DEFINITIONS */
+ const int swipe_gesture::MSK_THREE_FINGERS = 0;
+ const int swipe_gesture::MSK_FOUR_FINGERS = 1;
+ const int swipe_gesture::MSK_NEGATIVE = 0;
+ const int swipe_gesture::MSK_POSITIVE = 2;
+ const int swipe_gesture::MSK_HORIZONTAL = 0;
+ const int swipe_gesture::MSK_VERTICAL = 4;
+ const int swipe_gesture::FRESH = -1;
+ const char * const swipe_gesture::command_map[8] = {
+ "left3",
+ "left4",
+ "right3",
+ "right4",
+ "up3",
+ "up4",
+ "down3",
+ "down4"
+ };
+ }
}
#endif /* __COMFORTABLE_SWIPE__gesture_swipe_gesture__ */
diff --git a/cpp/gesture/swipe_gesture.h b/cpp/gesture/swipe_gesture.h
index 86ec3bd..4e843d6 100644
--- a/cpp/gesture/swipe_gesture.h
+++ b/cpp/gesture/swipe_gesture.h
@@ -21,70 +21,65 @@ along with this program. If not, see .
#include "xdo_gesture.h"
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-namespace comfortable_swipe::gesture
+namespace comfortable_swipe
{
- class swipe_gesture : protected xdo_gesture
+ namespace gesture
{
- public:
- // constructor
- swipe_gesture(
- const float threshold,
- const char* left3 /* 000 */,
- const char* left4 /* 001 */,
- const char* right3 /* 010 */,
- const char* right4 /* 011 */,
- const char* up3 /* 100 */,
- const char* up4 /* 101 */,
- const char* down3 /* 110 */,
- const char* down4 /* 111 */
- );
+ class swipe_gesture : protected xdo_gesture
+ {
+ public:
+ // constructor
+ swipe_gesture(
+ const float threshold,
+ const char* left3 /* 000 */,
+ const char* left4 /* 001 */,
+ const char* right3 /* 010 */,
+ const char* right4 /* 011 */,
+ const char* up3 /* 100 */,
+ const char* up4 /* 101 */,
+ const char* down3 /* 110 */,
+ const char* down4 /* 111 */
+ );
- ~swipe_gesture();
+ ~swipe_gesture();
- // fields for xdo
- int fingers;
- float dx, dy, udx, udy;
+ // fields for xdo
+ int fingers;
+ float dx, dy, udx, udy;
- void begin() override;
- void update() override;
- void end() override;
- bool parse_line(const char *) override;
+ void begin() override;
+ void update() override;
+ void end() override;
+ bool parse_line(const char *) override;
- protected:
- // location of mouse
- int screen_num, ix, iy;
+ protected:
+ // location of mouse
+ int screen_num, ix, iy;
- // current location
- float x, y, threshold_squared;
- int previous_gesture;
- const char ** commands;
+ // current location
+ float x, y, threshold_squared;
+ int previous_gesture;
+ const char ** commands;
- // optimization flag for checking if GESTURE_SWIPE_BEGIN was dispatched
- bool flag_swiping;
+ // optimization flag for checking if GESTURE_SWIPE_BEGIN was dispatched
+ bool flag_swiping;
- public:
- // static constants
- static const int MSK_THREE_FINGERS;
- static const int MSK_FOUR_FINGERS;
- static const int MSK_NEGATIVE;
- static const int MSK_POSITIVE;
- static const int MSK_HORIZONTAL;
- static const int MSK_VERTICAL;
- static const int FRESH;
- static const char * const command_map[8];
- // regex patterns
- static const char* GESTURE_BEGIN_REGEX_PATTERN;
- static const char* GESTURE_UPDATE_REGEX_PATTERN;
- static const char* GESTURE_END_REGEX_PATTERN;
- };
+ public:
+ // static constants
+ static const int MSK_THREE_FINGERS;
+ static const int MSK_FOUR_FINGERS;
+ static const int MSK_NEGATIVE;
+ static const int MSK_POSITIVE;
+ static const int MSK_HORIZONTAL;
+ static const int MSK_VERTICAL;
+ static const int FRESH;
+ static const char * const command_map[8];
+ // regex patterns
+ static const char* GESTURE_BEGIN_REGEX_PATTERN;
+ static const char* GESTURE_UPDATE_REGEX_PATTERN;
+ static const char* GESTURE_END_REGEX_PATTERN;
+ };
+ }
}
-#ifdef __cplusplus
-}
-#endif
-
#endif /* __COMFORTABLE_SWIPE__gesture_swipe_gesture_h__ */
diff --git a/cpp/gesture/swipe_gesture.regex.cpp b/cpp/gesture/swipe_gesture.regex.cpp
index 7dd1d04..ded720f 100644
--- a/cpp/gesture/swipe_gesture.regex.cpp
+++ b/cpp/gesture/swipe_gesture.regex.cpp
@@ -21,71 +21,74 @@ along with this program. If not, see .
#include "swipe_gesture.h"
-namespace comfortable_swipe::gesture
+namespace comfortable_swipe
{
- /**
- * Regex pattern for the libinput entry for start of swipe.
- * Extracts one match for the number of fingers used during the swipe.
- *
- * eg. event15 GESTURE_SWIPE_BEGIN +34.33s 3
- * ^
- * fingers
- */
- const char* swipe_gesture::GESTURE_BEGIN_REGEX_PATTERN =
- "^" // start of string
- "[ -]event\\d+" // event
- "\\s+GESTURE_SWIPE_BEGIN" // gesture
- "\\s+\\S+" // timestamp
- "\\s+(\\d+)" // fingers
- "\\s*$" // end of string
- ;
+ namespace gesture
+ {
+ /**
+ * Regex pattern for the libinput entry for start of swipe.
+ * Extracts one match for the number of fingers used during the swipe.
+ *
+ * eg. event15 GESTURE_SWIPE_BEGIN +34.33s 3
+ * ^
+ * fingers
+ */
+ const char* swipe_gesture::GESTURE_BEGIN_REGEX_PATTERN =
+ "^" // start of string
+ "[ -]event\\d+" // event
+ "\\s+GESTURE_SWIPE_BEGIN" // gesture
+ "\\s+\\S+" // timestamp
+ "\\s+(\\d+)" // fingers
+ "\\s*$" // end of string
+ ;
- /**
- * Regex pattern for the libinput entry for the end of swipe.
- * Extracts one match for the number of fingers used during the swipe.
- *
- * eg. event15 GESTURE_SWIPE_END +35.03s 3
- * ^
- * fingers
- */
- const char* swipe_gesture::GESTURE_END_REGEX_PATTERN =
- "^" // start of string
- "[ -]event\\d+" // event
- "\\s+GESTURE_SWIPE_END" // gesture
- "\\s+\\S+" // timestamp
- "\\s+(\\d+)" // fingers
- "\\s*$" // end of string
- ;
+ /**
+ * Regex pattern for the libinput entry for the end of swipe.
+ * Extracts one match for the number of fingers used during the swipe.
+ *
+ * eg. event15 GESTURE_SWIPE_END +35.03s 3
+ * ^
+ * fingers
+ */
+ const char* swipe_gesture::GESTURE_END_REGEX_PATTERN =
+ "^" // start of string
+ "[ -]event\\d+" // event
+ "\\s+GESTURE_SWIPE_END" // gesture
+ "\\s+\\S+" // timestamp
+ "\\s+(\\d+)" // fingers
+ "\\s*$" // end of string
+ ;
- // matches signed decimal numbers (eg. "6.02" "-1.1")
- #define CF_NUMBER_REGEX "-?\\d+(?:\\.\\d+)"
+ // matches signed decimal numbers (eg. "6.02" "-1.1")
+ #define CF_NUMBER_REGEX "-?\\d+(?:\\.\\d+)"
- // matches and extracts a space-prefixed signed fraction (eg. "-3.00/ 5.12")
- #define CF_NUMBER_DIVISION "\\s*(" CF_NUMBER_REGEX ")/\\s*(" CF_NUMBER_REGEX ")"
+ // matches and extracts a space-prefixed signed fraction (eg. "-3.00/ 5.12")
+ #define CF_NUMBER_DIVISION "\\s*(" CF_NUMBER_REGEX ")/\\s*(" CF_NUMBER_REGEX ")"
- /**
- * Regex pattern for the libinput entry for during a swipe.
- * Extracts number of fingers used and the speed (normal and accelerated) of the swipe.
- *
- * eg. event15 GESTURE_SWIPE_UPDATE +34.70s 3 -0.12/ 4.99 (-0.33/13.50 unaccelerated)
- * ^ ^ ^ ^ ^
- * fingers dx dy udx udy
- */
- const char* swipe_gesture::GESTURE_UPDATE_REGEX_PATTERN =
- "^" // start of string
- "[ -]event\\d+" // event
- "\\s+GESTURE_SWIPE_UPDATE" // gesture
- "\\s+\\S+" // timestamp
- "\\s+(\\d+)" // fingers
- "\\s+" CF_NUMBER_DIVISION // speed (dx/dy)
- "\\s+\\(" CF_NUMBER_DIVISION "\\s+unaccelerated\\)" // unaccelerated speed (udx/udy)
- "\\s*$" // end of string
- ;
+ /**
+ * Regex pattern for the libinput entry for during a swipe.
+ * Extracts number of fingers used and the speed (normal and accelerated) of the swipe.
+ *
+ * eg. event15 GESTURE_SWIPE_UPDATE +34.70s 3 -0.12/ 4.99 (-0.33/13.50 unaccelerated)
+ * ^ ^ ^ ^ ^
+ * fingers dx dy udx udy
+ */
+ const char* swipe_gesture::GESTURE_UPDATE_REGEX_PATTERN =
+ "^" // start of string
+ "[ -]event\\d+" // event
+ "\\s+GESTURE_SWIPE_UPDATE" // gesture
+ "\\s+\\S+" // timestamp
+ "\\s+(\\d+)" // fingers
+ "\\s+" CF_NUMBER_DIVISION // speed (dx/dy)
+ "\\s+\\(" CF_NUMBER_DIVISION "\\s+unaccelerated\\)" // unaccelerated speed (udx/udy)
+ "\\s*$" // end of string
+ ;
- // delete macros
- #undef CF_NUMBER_DIVISION
- #undef CF_NUMBER_EXTRACT
- #undef CF_NUMBER_REGEX
+ // delete macros
+ #undef CF_NUMBER_DIVISION
+ #undef CF_NUMBER_EXTRACT
+ #undef CF_NUMBER_REGEX
+ }
}
#endif /* __COMFORTABLE_SWIPE__gesture_swipe_gesture_regex__ */
diff --git a/cpp/gesture/xdo_gesture.cpp b/cpp/gesture/xdo_gesture.cpp
index 3afda7d..7b044c7 100644
--- a/cpp/gesture/xdo_gesture.cpp
+++ b/cpp/gesture/xdo_gesture.cpp
@@ -26,21 +26,24 @@ extern "C"
#include "xdo_gesture.h"
-namespace comfortable_swipe::gesture
+namespace comfortable_swipe
{
- /**
- * Constructs a new gesture handler with xdo.
- */
- xdo_gesture::xdo_gesture():
- xdo(xdo_new(NULL))
- { }
-
- /**
- * Constructs a new swipe gesture with xdo.
- */
- xdo_gesture::~xdo_gesture()
+ namespace gesture
{
- xdo_free(this->xdo);
+ /**
+ * Constructs a new gesture handler with xdo.
+ */
+ xdo_gesture::xdo_gesture():
+ xdo(xdo_new(NULL))
+ { }
+
+ /**
+ * Constructs a new swipe gesture with xdo.
+ */
+ xdo_gesture::~xdo_gesture()
+ {
+ xdo_free(this->xdo);
+ }
}
}
diff --git a/cpp/service/_index.hpp b/cpp/service/_index.hpp
index 25af404..584787e 100644
--- a/cpp/service/_index.hpp
+++ b/cpp/service/_index.hpp
@@ -4,20 +4,17 @@
#include