summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Bensmann <johannesbensmann@gmx.de>2019-06-08 20:48:18 +0200
committerJohannes Bensmann <johannesbensmann@gmx.de>2019-06-08 20:48:18 +0200
commit51eb5c314df7e383d31968d1825984348a590780 (patch)
treeedc5508bd7d4bd27b0e21ec58945db4bf34607b3
parent6d56714629eb48640ad66f8f849f38c66d0afc84 (diff)
moved configuration to config.h
-rw-r--r--Makefile2
-rw-r--r--TODO1
-rw-r--r--config.h52
-rw-r--r--xmouseless.c122
4 files changed, 122 insertions, 55 deletions
diff --git a/Makefile b/Makefile
index dadda94..c773fed 100644
--- a/Makefile
+++ b/Makefile
@@ -11,7 +11,7 @@ BIN = xmouseless
all: $(BIN)
-$(BIN): $(SRC)
+$(BIN): $(SRC) config.h
$(CC) $(CFLAGS) -o $(BIN) $(SRC) $(LDFLAGS)
clean:
diff --git a/TODO b/TODO
index 5b8d981..5ac728a 100644
--- a/TODO
+++ b/TODO
@@ -1 +1,2 @@
- call XInitThreads
+- check if key repeat is enabled at start
diff --git a/config.h b/config.h
new file mode 100644
index 0000000..7023886
--- /dev/null
+++ b/config.h
@@ -0,0 +1,52 @@
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+
+/* the rate at which the mouse moves */
+#define MOVE_RATE 30
+
+/* the speed with no modifier */
+#define DEFAULT_SPEED 10
+
+#define EXIT_KEY XK_q
+
+typedef struct {
+ KeySym keysym;
+ int x;
+ int y;
+} MoveBinding;
+
+typedef struct {
+ KeySym keysym;
+ int button;
+} ClickBinding;
+
+typedef struct {
+ KeySym keysym;
+ int speed;
+} SpeedBindings;
+
+static MoveBinding move_bindings[] = {
+ /* key x y */
+ { XK_j, -1, 0 },
+ { XK_l, 1, 0 },
+ { XK_i, 0, -1 },
+ { XK_comma, 0, 1 },
+ { XK_u, -1, -1 },
+ { XK_o, 1, -1 },
+ { XK_m, -1, 1 },
+ { XK_period, 1, 1 },
+};
+
+static ClickBinding click_bindings[] = {
+ /* key button */
+ { XK_f, 1 },
+ { XK_d, 2 },
+ { XK_s, 3 },
+};
+
+static SpeedBindings speed_bindings[] = {
+ /* key speed */
+ { XK_Super_L, 200 },
+ { XK_Alt_L, 50 },
+ { XK_a, 2 },
+};
diff --git a/xmouseless.c b/xmouseless.c
index 197be5b..65f3e13 100644
--- a/xmouseless.c
+++ b/xmouseless.c
@@ -8,26 +8,28 @@
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xos.h>
+#include <X11/XKBlib.h>
#include <X11/extensions/XTest.h>
+#include "config.h"
-int MOVE_RATE = 30;
-int SPEED = 10;
+#define LENGTH(X) (sizeof X / sizeof X[0])
Display *dpy;
int screen;
Window root;
pthread_t movethread;
+unsigned int speed = DEFAULT_SPEED;
+
struct {
int x;
int y;
- int movex;
- int movey;
+ int move_x;
+ int move_y;
} mouseinfo;
-
int getrootptr(int *x, int *y);
void moverelative(int x, int y);
void click(int button, int is_press);
@@ -76,66 +78,81 @@ void close_x() {
void *moveforever(void *val) {
/* this is executed in a thread */
while (1) {
- if (mouseinfo.movex != 0 || mouseinfo.movey != 0) {
- moverelative(SPEED * mouseinfo.movex, SPEED * mouseinfo.movey);
+ if (mouseinfo.move_x != 0 || mouseinfo.move_y != 0) {
+ moverelative(speed * mouseinfo.move_x, speed * mouseinfo.move_y);
}
usleep(1000000 / MOVE_RATE);
}
}
void handle_keypress(XKeyEvent event) {
- if (event.keycode == 24 || event.keycode == 0x09) {
+ unsigned int i;
+ KeySym keysym;
+
+ keysym = XkbKeycodeToKeysym(dpy, event.keycode,
+ 0, event.state & ShiftMask ? 1 : 0);
+
+ /* exit */
+ if (keysym == EXIT_KEY) {
close_x();
exit(0);
}
- else if (event.keycode == 45) {
- mouseinfo.movex = 0;
- mouseinfo.movey = 0;
- }
- else if (event.keycode == 44) {
- mouseinfo.movex -= 1;
- }
- else if (event.keycode == 46) {
- mouseinfo.movex += 1;
- }
- else if (event.keycode == 31) {
- mouseinfo.movey -= 1;
- }
- else if (event.keycode == 59) {
- mouseinfo.movey += 1;
- }
- else if (event.keycode == 64) {
- SPEED = 40;
+
+ /* move bindings */
+ for (i = 0; i < LENGTH(move_bindings); i++) {
+ if (move_bindings[i].keysym == keysym) {
+ printf("move: %i, %i\n", move_bindings[i].x, move_bindings[i].y);
+ mouseinfo.move_x += move_bindings[i].x;
+ mouseinfo.move_y += move_bindings[i].y;
+ }
}
- else if (event.keycode == 41) {
- click(1, True);
+
+ /* click bindings */
+ for (i = 0; i < LENGTH(click_bindings); i++) {
+ if (click_bindings[i].keysym == keysym) {
+ printf("click: %i\n", click_bindings[i].button);
+ click(click_bindings[i].button, True);
+ }
}
- else if (event.keycode == 39) {
- click(3, True);
+
+ /* speed bindings */
+ for (i = 0; i < LENGTH(speed_bindings); i++) {
+ if (speed_bindings[i].keysym == keysym) {
+ printf("speed: %i\n", speed_bindings[i].speed);
+ speed = speed_bindings[i].speed;
+ }
}
}
void handle_keyrelease(XKeyEvent event) {
- if (event.keycode == 44) {
- mouseinfo.movex += 1;
- }
- else if (event.keycode == 46) {
- mouseinfo.movex -= 1;
- }
- else if (event.keycode == 31) {
- mouseinfo.movey += 1;
- }
- else if (event.keycode == 59) {
- mouseinfo.movey -= 1;
- }
- else if (event.keycode == 64) {
- SPEED = 10;
+ unsigned int i;
+ KeySym keysym;
+
+ keysym = XkbKeycodeToKeysym(dpy, event.keycode,
+ 0, event.state & ShiftMask ? 1 : 0);
+
+ /* move bindings */
+ for (i = 0; i < LENGTH(move_bindings); i++) {
+ if (move_bindings[i].keysym == keysym) {
+ mouseinfo.move_x -= move_bindings[i].x;
+ mouseinfo.move_y -= move_bindings[i].y;
+ }
}
- else if (event.keycode == 41) {
- click(1, False);
+
+ /* click bindings */
+ for (i = 0; i < LENGTH(click_bindings); i++) {
+ if (click_bindings[i].keysym == keysym) {
+ printf("click release: %i\n", click_bindings[i].button);
+ click(click_bindings[i].button, False);
+ }
}
- else if (event.keycode == 39) {
- click(3, False);
+
+ /* speed bindings */
+ for (i = 0; i < LENGTH(speed_bindings); i++) {
+ if (speed_bindings[i].keysym == keysym) {
+ printf("speed: %i\n", DEFAULT_SPEED);
+ speed = DEFAULT_SPEED;
+ }
}
}
@@ -146,8 +163,8 @@ int main () {
init_x();
getrootptr(&mouseinfo.x, &mouseinfo.y);
- mouseinfo.movex = 0;
- mouseinfo.movey = 0;
+ mouseinfo.move_x = 0;
+ mouseinfo.move_y = 0;
// start the thread for mouse movement
rc = pthread_create(&movethread, NULL, &moveforever, NULL);
@@ -162,14 +179,11 @@ int main () {
switch (event.type) {
case KeyPress:
getrootptr(&mouseinfo.x, &mouseinfo.y);
- printf("You pressed %i\n", event.xkey.keycode);
-
handle_keypress(event.xkey);
break;
case KeyRelease:
- printf("You released %i\n", event.xkey.keycode);
-
+ getrootptr(&mouseinfo.x, &mouseinfo.y);
handle_keyrelease(event.xkey);
break;
}