diff --git a/README.md b/README.md
index afd62d5..d1b85a0 100644
--- a/README.md
+++ b/README.md
@@ -41,13 +41,21 @@ Comfortable, seamless, and fast 3-finger (and 4-finger) touchpad swipe gestures
```
comfortable-swipe autostart
```
-5. _Optional_: Change [configurations](#configurations) (see below). After making changes, run
+5. Check the status of your application by running
```
- comfortable-swipe restart
+ comfortable-swipe status
```
## Configurations
-Comfortable swipe makes use of keyboard shortcuts for configurations. The configuration file is located at `/usr/local/share/comfortable-swipe/comfortable-swipe.conf`. Make sure to run `comfortable-swipe restart` after making changes.
+Comfortable swipe makes use of keyboard shortcuts for configurations. Edit by running
+```
+nano $(comfortable-swipe config)
+```
+
+Make sure to run after making changes:
+```
+comfortable-swipe restart
+```
Property | Description | Default Value | Default Behavior
--------- | ----------- | -------------- | -----
@@ -80,7 +88,13 @@ Refer to https://www.linux.org/threads/xdotool-keyboard.10528/ for a complete li
## 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.
+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:
diff --git a/comfortable-swipe.cpp b/comfortable-swipe.cpp
index a11b232..65359b5 100644
--- a/comfortable-swipe.cpp
+++ b/comfortable-swipe.cpp
@@ -51,6 +51,9 @@ int main(int argc, char** args)
else if (arg == "autostart")
comfortable_swipe::service::autostart();
+ else if (arg == "config")
+ comfortable_swipe::service::config();
+
else if (arg == "debug")
comfortable_swipe::service::debug();
diff --git a/lib/comfortable_swipe b/lib/comfortable_swipe
index ce75197..3ee260a 100644
--- a/lib/comfortable_swipe
+++ b/lib/comfortable_swipe
@@ -30,6 +30,7 @@ along with this program. If not, see .
#include "gesture/swipe_gesture.regex.cpp"
#include "service/autostart.cpp"
#include "service/buffer.cpp"
+#include "service/config.cpp"
#include "service/debug.cpp"
#include "service/help.cpp"
#include "service/restart.cpp"
diff --git a/lib/gesture/swipe_gesture.cpp b/lib/gesture/swipe_gesture.cpp
index 7e4e20b..137d02a 100644
--- a/lib/gesture/swipe_gesture.cpp
+++ b/lib/gesture/swipe_gesture.cpp
@@ -198,14 +198,14 @@ namespace comfortable_swipe::gesture
const int swipe_gesture::MSK_VERTICAL = 4;
const int swipe_gesture::FRESH = -1;
const char * const swipe_gesture::command_map[8] = {
- "left 3",
- "left 4",
- "right 3",
- "right 4",
- "up 3",
- "up 4",
- "down 3",
- "down 4"
+ "left3",
+ "left4",
+ "right3",
+ "right4",
+ "up3",
+ "up4",
+ "down3",
+ "down4"
};
}
diff --git a/lib/index.hpp b/lib/index.hpp
index 35e1482..b54cc3e 100644
--- a/lib/index.hpp
+++ b/lib/index.hpp
@@ -50,6 +50,7 @@ extern "C"
{
void autostart();
void buffer();
+ void config();
void debug();
void help();
void restart();
diff --git a/lib/service/config.cpp b/lib/service/config.cpp
new file mode 100644
index 0000000..6bb02bd
--- /dev/null
+++ b/lib/service/config.cpp
@@ -0,0 +1,38 @@
+#ifndef __COMFORTABLE_SWIPE__service_config__
+#define __COMFORTABLE_SWIPE__service_config__
+
+/*
+Comfortable Swipe
+by Rico Tiongson
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include "../index.hpp"
+#include // std::puts
+
+namespace comfortable_swipe::service
+{
+ /**
+ * Prints where the config file of comfortable swipe is located.
+ *
+ * Usage: nano $(comfortable-swipe config)
+ */
+ void config()
+ {
+ std::puts(comfortable_swipe::util::conf_filename());
+ }
+}
+
+#endif /* __COMFORTABLE_SWIPE__service_config__ */
diff --git a/lib/service/help.cpp b/lib/service/help.cpp
index 6514f24..80c2c85 100644
--- a/lib/service/help.cpp
+++ b/lib/service/help.cpp
@@ -30,7 +30,7 @@ namespace comfortable_swipe::service
void help()
{
using comfortable_swipe::util::conf_filename;
- std::puts("comfortable-swipe [start|stop|restart|autostart|buffer|help|debug]");
+ std::puts("comfortable-swipe [start|stop|restart|autostart|buffer|help|config|debug|status]");
std::puts("");
std::puts("start - starts 3/4-finger gesture service");
std::puts("stop - stops 3/4-finger gesture service");
@@ -38,6 +38,7 @@ namespace comfortable_swipe::service
std::puts("autostart - automatically run on startup (toggleable)");
std::puts("buffer - parses output of libinput debug-events");
std::puts("help - shows the help dialog");
+ std::puts("config - locates the config file [/usr/share/comfortable-swipe/comfortable-swipe.conf]");
std::puts("debug - logs raw output from input events taken from libinput");
std::puts("status - checks status of program and autostart");
std::puts("");
diff --git a/lib/service/status.cpp b/lib/service/status.cpp
index 7894e76..a084de4 100644
--- a/lib/service/status.cpp
+++ b/lib/service/status.cpp
@@ -26,11 +26,12 @@ along with this program. If not, see .
#include // std::array
#include // std::atoi
#include // FILE, std::feof, std::fgets, std::printf
+#include // std::cmatch, std::regex, std::regex_match
namespace comfortable_swipe::service
{
/**
- * Restarts the comfortable-swipe service.
+ * Prints the status of comfortable-swipe.
*/
void status()
{
@@ -52,6 +53,44 @@ namespace comfortable_swipe::service
// print status
std::printf("program is %s\n", running ? "ON" : "OFF");
std::printf("autostart is %s\n", autostart_on ? "ON" : "OFF");
+ std::printf("config file at %s\n", comfortable_swipe::util::conf_filename());
+
+ // check status of configuration file
+ try
+ {
+ auto config = comfortable_swipe::util::read_config_file(comfortable_swipe::util::conf_filename());
+
+ // print keys and values of config file
+ std::printf("\nConfigurations:\n");
+
+ // print threshold
+ if (config.count("threshold") > 0)
+ {
+ auto & threshold = config["threshold"];
+
+ // check if regex pattern matches threshold
+ std::cmatch matches;
+ bool ok = (std::regex_match(threshold.data(), matches, std::regex("^\\d+(?:\\.\\d+)??$")) != 0);
+
+ // print status of threshold
+ std::printf(" %9s is %s (%s)\n", "threshold", ok ? "OK" : "INVALID", threshold.data());
+ }
+ else
+ std::printf(" %9s is OFF\n", "threshold");
+
+ // print swipe commands
+ for (auto &command : comfortable_swipe::gesture::swipe_gesture::command_map)
+ {
+ if (config.count(command) > 0)
+ std::printf(" %9s is OK (%s)\n", command, config[command].data());
+ else
+ std::printf(" %9s is OFF\n", command);
+ }
+ }
+ catch (const std::runtime_error& e)
+ {
+ std::printf("config error: %s\n", e.what());
+ }
}
}
diff --git a/lib/util/read_config_file.cpp b/lib/util/read_config_file.cpp
index d3eafb7..9fd5f0b 100644
--- a/lib/util/read_config_file.cpp
+++ b/lib/util/read_config_file.cpp
@@ -22,32 +22,33 @@ along with this program. If not, see .
#include