Add autostart feature

Also generified config file location
This commit is contained in:
Rico Tiongson 2017-10-23 23:09:01 +08:00
parent 2597058bfb
commit 1c7c0bb10f
3 changed files with 79 additions and 10 deletions

View File

@ -3,7 +3,7 @@ DIR=$(dirname $0)
#copy config file #copy config file
mkdir -p ~/.config mkdir -p ~/.config
DCONF_PATH=$DIR/src/defaults.conf DCONF_PATH=$DIR/src/defaults.conf
CONF_PATH=~/.config/comfortable-swipe.conf CONF_PATH=${XDG_CONFIG_HOME:-$HOME/.config}/comfortable-swipe.conf
if [ ! -f $CONF_PATH ]; then if [ ! -f $CONF_PATH ]; then
cat $DCONF_PATH > $CONF_PATH cat $DCONF_PATH > $CONF_PATH
else else
@ -23,5 +23,5 @@ else
fi fi
echo "Installing..." echo "Installing..."
mkdir -p ~/.local/bin mkdir -p ~/.local/bin
g++ -std=c++11 -O2 $DIR/src/comfortable-swipe.cpp -lxdo -o ~/.local/bin/comfortable-swipe || exec echo "Installation aborted" g++ -std=c++11 -O2 $DIR/src/comfortable-swipe.cpp -lxdo -o $HOME/.local/bin/comfortable-swipe || exec echo "Installation aborted"
echo "Successfully installed. You may now run 'comfortable-swipe start'." echo "Successfully installed. You may now run 'comfortable-swipe start'."

View File

@ -63,6 +63,7 @@ namespace service {
void start(); void start();
void stop(); void stop();
void restart(); void restart();
void autostart();
void help(); void help();
} }
@ -76,6 +77,7 @@ int main(int argc, char** args) {
else if (arg == "stop") service::stop(); else if (arg == "stop") service::stop();
else if (arg == "restart") service::restart(); else if (arg == "restart") service::restart();
else if (arg == "buffer") service::buffer(); else if (arg == "buffer") service::buffer();
else if (arg == "autostart") service::autostart();
else service::help(); else service::help();
} else { } else {
service::help(); service::help();
@ -168,20 +170,52 @@ struct swipe_gesture_impl : swipe_gesture {
} }
}; };
// path services
namespace service {
// get the full path of the .conf file
string conf_filename() {
static string *filename = NULL;
if (filename == NULL) {
const char* xdg_config = getenv("XDG_CONFIG_HOME");
string config(
xdg_config == NULL
? string(getenv("HOME")) + "/.config"
: xdg_config
);
filename = new string(config + "/comfortable-swipe.conf");
}
return *filename;
}
// get the full path of the .desktop file associated
// with the autostart feature
string autostart_filename() {
static string *filename = NULL;
if (filename == NULL) {
const char* xdg_config = getenv("XDG_CONFIG_HOME");
string config(
xdg_config == NULL
? string(getenv("HOME")) + "/.config"
: xdg_config
);
filename = new string(config
+ "/autostart/comfortable-swipe.desktop");
}
return *filename;
}
}
namespace service { namespace service {
// parses output from libinput-debug-events // parses output from libinput-debug-events
void buffer() { void buffer() {
// check first if $user // check first if $user
ios::sync_with_stdio(false); ios::sync_with_stdio(false);
cin.tie(0); cin.tie(0); cout.tie(0);
const regex gesture_begin(util::build_gesture_begin()); const regex gesture_begin(util::build_gesture_begin());
const regex gesture_update(util::build_gesture_update()); const regex gesture_update(util::build_gesture_update());
const regex gesture_end(util::build_gesture_end()); const regex gesture_end(util::build_gesture_end());
string sentence; string sentence;
// read config file // read config file
string conf_filename = string(getenv("HOME")) auto config = util::read_config_file(conf_filename().data());
+ "/.config/comfortable-swipe.conf";
auto config = util::read_config_file(conf_filename.data());
// initialize gesture handler // initialize gesture handler
swipe_gesture_impl swipe( swipe_gesture_impl swipe(
config.count("threshold") ? stoi(config["threshold"]) : 20, config.count("threshold") ? stoi(config["threshold"]) : 20,
@ -223,7 +257,7 @@ namespace service {
} }
// starts service // starts service
void start() { void start() {
int x = system("stdbuf -oL -eL libinput-debug-events | comfortable-swipe buffer"); int x = system("stdbuf -oL -eL libinput-debug-events | $HOME/.local/bin/comfortable-swipe buffer");
} }
// stops service // stops service
void stop() { void stop() {
@ -249,16 +283,51 @@ namespace service {
service::stop(); service::stop();
service::start(); service::start();
} }
// toggle automatically start application on startup
void autostart() {
string path = autostart_filename();
if (ifstream(path.data()).good()) {
// file found, delete it
if (remove(path.data()) != 0)
cerr << "Error: failed to switch off autostart. "
<< "Maybe the autostart file is in use?"
<< endl;
else
cout << "Autostart switched off" << endl;
} else {
// file not found, create it
int result = system(("mkdir -p $(dirname " + path + ")").data());
ofstream fout(path.data());
if (result != 0 || !fout.good())
cerr << "Error: failed to switch on autostart. "
<< "Are you sure you have the permissions?"
<< endl;
else {
fout <<
"[Desktop Entry]\n"
"Type=Application\n"
"Exec=comfortable-swipe start\n"
"Hidden=false\n"
"NoDisplay=false\n"
"X-GNOME-Autostart-enabled=true\n"
"Name=Comfortable Swipe\n"
"Comment=3 or 4 touchpad gestures\n";
cout << "Autostart switched on" << endl;
}
}
}
// shows help // shows help
void help() { void help() {
puts("comfortable-swipe [start|stop|restart|buffer|help]"); puts("comfortable-swipe [start|stop|restart|autostart|buffer|help]");
puts("");
puts("start - starts 3/4-finger gesture service"); puts("start - starts 3/4-finger gesture service");
puts("stop - stops 3/4-finger gesture service"); puts("stop - stops 3/4-finger gesture service");
puts("restart - stops then starts 3/4-finger gesture service"); puts("restart - stops then starts 3/4-finger gesture service");
puts("autostart - automatically run on startup (toggleable)");
puts("buffer - parses output of libinput-debug-events"); puts("buffer - parses output of libinput-debug-events");
puts("help - shows the help dialog"); puts("help - shows the help dialog");
puts(""); puts("");
puts("Configuration file can be found in ~/.config/comfortable-swipe.conf"); puts((("Configuration file can be found in ") + conf_filename()).data());
} }
} }

View File

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
echo "Uninstalling..." echo "Uninstalling..."
comfortable-swipe stop 2> /dev/null comfortable-swipe stop 2> /dev/null
rm /home/$USER/.local/bin/comfortable-swipe 2> /dev/null rm $HOME/.local/bin/comfortable-swipe 2> /dev/null
sleep 1 sleep 1
echo "Successfully uninstalled comfortable-swipe" echo "Successfully uninstalled comfortable-swipe"