Introduction
Introduction Statistics Contact Development Disclaimer Help
Move layouts to single layout.h file & toggle layers via memcpy w/ XK_Cancel - …
git clone git://git.suckless.org/svkbd
Log
Files
Refs
README
LICENSE
---
commit 6e5bf2d8e4d85a19b0ee82d4fb92b850a78b3892
parent 0a3a153aa6cf827ccbda179e831065293bfdabdb
Author: Miles Alan <[email protected]>
Date: Sun, 2 Aug 2020 15:46:07 +0200
Move layouts to single layout.h file & toggle layers via memcpy w/ XK_Cancel
Diffstat:
D layout.en.h | 58 ------------------------------
A layout.sxmo.h | 111 ++++++++++++++++++++++++++++++
D layout.symbols.h | 58 ------------------------------
M svkbd.c | 33 +++++++++++++++++++++++++++++…
4 files changed, 143 insertions(+), 117 deletions(-)
---
diff --git a/layout.en.h b/layout.en.h
@@ -1,58 +0,0 @@
-static Key keys[] = {
- { 0, XK_q, 1 },
- { 0, XK_w, 1 },
- { 0, XK_e, 1 },
- { 0, XK_r, 1 },
- { 0, XK_t, 1 },
- { 0, XK_y, 1 },
- { 0, XK_u, 1 },
- { 0, XK_i, 1 },
- { 0, XK_o, 1 },
- { 0, XK_p, 1 },
-
- { 0 }, /* New row */
-
-
- { 0, XK_a, 1 },
- { 0, XK_s, 1 },
- { 0, XK_d, 1 },
- { 0, XK_f, 1 },
- { 0, XK_g, 1 },
- { 0, XK_h, 1 },
- { 0, XK_j, 1 },
- { 0, XK_k, 1 },
- { 0, XK_l, 1 },
- { ";:", XK_colon, 1 },
- /*{ "'", XK_apostrophe, 2 },*/
-
- { 0 }, /* New row */
-
- { 0, XK_z, 1 },
- { 0, XK_x, 1 },
- { 0, XK_c, 1 },
- { 0, XK_v, 1 },
- { 0, XK_b, 1 },
- { 0, XK_n, 1 },
- { 0, XK_m, 1 },
- /*{ "/?", XK_slash, 1 },*/
- { "Tab", XK_Tab, 1 },
- { "<-", XK_BackSpace, 2 },
-
- { 0 }, /* New row */
- { "Layer 2", XK_Cancel, 1},
- { "Shift", XK_Shift_L, 1 },
- /*{ "L", XK_Left, 1 },*/
- { "D", XK_Down, 1 },
- { "U", XK_Up, 1 },
- /*{ "R", XK_Right, 1 },*/
- { "", XK_space, 2 },
- { "Esc", XK_Escape, 1 },
- { "Ctrl", XK_Control_L, 1 },
- /*{ "Alt", XK_Alt_L, 1 },*/
- { "Enter", XK_Return, 2 },
-};
-
-Buttonmod buttonmods[] = {
- { XK_Shift_L, Button2 },
- { XK_Alt_L, Button3 },
-};
diff --git a/layout.sxmo.h b/layout.sxmo.h
@@ -0,0 +1,111 @@
+static Key keys[40] = { NULL };
+
+static Key keys_en[40] = {
+ { 0, XK_q, 1 },
+ { 0, XK_w, 1 },
+ { 0, XK_e, 1 },
+ { 0, XK_r, 1 },
+ { 0, XK_t, 1 },
+ { 0, XK_y, 1 },
+ { 0, XK_u, 1 },
+ { 0, XK_i, 1 },
+ { 0, XK_o, 1 },
+ { 0, XK_p, 1 },
+
+ { 0 }, /* New row */
+
+ { 0, XK_a, 1 },
+ { 0, XK_s, 1 },
+ { 0, XK_d, 1 },
+ { 0, XK_f, 1 },
+ { 0, XK_g, 1 },
+ { 0, XK_h, 1 },
+ { 0, XK_j, 1 },
+ { 0, XK_k, 1 },
+ { 0, XK_l, 1 },
+ { ";:", XK_colon, 1 },
+ /*{ "'", XK_apostrophe, 2 },*/
+
+ { 0 }, /* New row */
+
+ { 0, XK_z, 1 },
+ { 0, XK_x, 1 },
+ { 0, XK_c, 1 },
+ { 0, XK_v, 1 },
+ { 0, XK_b, 1 },
+ { 0, XK_n, 1 },
+ { 0, XK_m, 1 },
+ /*{ "/?", XK_slash, 1 },*/
+ { "Tab", XK_Tab, 1 },
+ { "<-", XK_BackSpace, 2 },
+
+ { 0 }, /* New row */
+ { "Layer 2", XK_Cancel, 1},
+ { "Shift", XK_Shift_L, 1 },
+ /*{ "L", XK_Left, 1 },*/
+ { "D", XK_Down, 1 },
+ { "U", XK_Up, 1 },
+ /*{ "R", XK_Right, 1 },*/
+ { "", XK_space, 2 },
+ { "Esc", XK_Escape, 1 },
+ { "Ctrl", XK_Control_L, 1 },
+ /*{ "Alt", XK_Alt_L, 1 },*/
+ { "Enter", XK_Return, 2 },
+};
+
+static Key keys_symbols[40] = {
+ { "1!", XK_1, 1 },
+ { "2@", XK_2, 1 },
+ { "3#", XK_3, 1 },
+ { "4$", XK_4, 1 },
+ { "5%", XK_5, 1 },
+ { "6^", XK_6, 1 },
+ { "7&", XK_7, 1 },
+ { "8*", XK_8, 1 },
+ { "9(", XK_9, 1 },
+ { "0)", XK_0, 1 },
+
+ { 0 }, /* New row */
+
+ { "'\"", XK_apostrophe, 1 },
+ { "`~", XK_grave, 1 },
+ { "-_", XK_minus, 1 },
+ { "=+", XK_plus, 1 },
+ { "[{", XK_bracketleft, 1 },
+ { "]}", XK_bracketright, 1 },
+ { ",<", XK_comma, 1 },
+ { ".>", XK_period, 1 },
+ { "/?", XK_slash, 1 },
+ { "\\", XK_backslash, 1 },
+
+ { 0 }, /* New row */
+
+ { "|", XK_Shift_L|XK_bar, 1 },
+ { "L", XK_Left, 1 },
+ { "R", XK_Right, 1 },
+ { "Ctrl-C", XK_Shift_L|XK_bar, 1 },
+ { "Ctrl-L", XK_Shift_L|XK_bar, 1 },
+ { "Ctrl-V", XK_Shift_L|XK_bar, 1 },
+ { "Ctrl-D", XK_Shift_L|XK_bar, 1 },
+ { "TAB", XK_Tab, 1 },
+ { "<-", XK_BackSpace, 2 },
+
+ { 0 }, /* New row */
+ { "Layer 1", XK_Cancel, 1},
+ { "Shift", XK_Shift_L, 1 },
+ /*{ "L", XK_Left, 1 },*/
+ { "D", XK_Down, 1 },
+ { "U", XK_Up, 1 },
+ /*{ "R", XK_Right, 1 },*/
+ { "", XK_space, 2 },
+ { "Esc", XK_Escape, 1 },
+ { "Ctrl", XK_Control_L, 1 },
+ /*{ "Alt", XK_Alt_L, 1 },*/
+ { "Enter", XK_Return, 2 },
+};
+
+Buttonmod buttonmods[] = {
+ { XK_Shift_L, Button2 },
+ { XK_Alt_L, Button3 },
+};
+
diff --git a/layout.symbols.h b/layout.symbols.h
@@ -1,58 +0,0 @@
-static Key keys[] = {
-
-
- { "1!", XK_1, 1 },
- { "2@", XK_2, 1 },
- { "3#", XK_3, 1 },
- { "4$", XK_4, 1 },
- { "5%", XK_5, 1 },
- { "6^", XK_6, 1 },
- { "7&", XK_7, 1 },
- { "8*", XK_8, 1 },
- { "9(", XK_9, 1 },
- { "0)", XK_0, 1 },
-
- { 0 }, /* New row */
-
- { "'\"", XK_apostrophe, 1 },
- { "`~", XK_grave, 1 },
- { "-_", XK_minus, 1 },
- { "=+", XK_plus, 1 },
- { "[{", XK_bracketleft, 1 },
- { "]}", XK_bracketright, 1 },
- { ",<", XK_comma, 1 },
- { ".>", XK_period, 1 },
- { "/?", XK_slash, 1 },
- { "\\", XK_backslash, 1 },
-
- { 0 }, /* New row */
-
- { "|", XK_Shift_L|XK_bar, 1 },
- { "L", XK_Left, 1 },
- { "R", XK_Right, 1 },
- { "Ctrl-C", XK_Shift_L|XK_bar, 1 },
- { "Ctrl-L", XK_Shift_L|XK_bar, 1 },
- { "Ctrl-V", XK_Shift_L|XK_bar, 1 },
- { "Ctrl-D", XK_Shift_L|XK_bar, 1 },
- { "TAB", XK_Tab, 1 },
- { "<-", XK_BackSpace, 2 },
-
- { 0 }, /* New row */
- { "Layer 1", XK_Cancel, 1},
- { "Shift", XK_Shift_L, 1 },
- /*{ "L", XK_Left, 1 },*/
- { "D", XK_Down, 1 },
- { "U", XK_Up, 1 },
- /*{ "R", XK_Right, 1 },*/
- { "", XK_space, 2 },
- { "Esc", XK_Escape, 1 },
- { "Ctrl", XK_Control_L, 1 },
- /*{ "Alt", XK_Alt_L, 1 },*/
- { "Enter", XK_Return, 2 },
-};
-
-Buttonmod buttonmods[] = {
- { XK_Shift_L, Button2 },
- { XK_Alt_L, Button3 },
-};
-
diff --git a/svkbd.c b/svkbd.c
@@ -13,6 +13,7 @@
#include <X11/Xutil.h>
#include <X11/Xproto.h>
#include <X11/extensions/XTest.h>
+#include <signal.h>
/* macros */
#define MAX(a, b) ((a) > (b) ? (a) : (b))
@@ -96,8 +97,10 @@ static Bool running = True, isdock = False;
static KeySym pressedmod = 0;
static int rows = 0, ww = 0, wh = 0, wx = 0, wy = 0;
static char *name = "svkbd";
+static int terminate = 0;
Bool ispressing = False;
+Bool baselayer = True;
/* configuration, allows nested code to access above variables */
#include "config.h"
@@ -393,7 +396,10 @@ unpress(Key *k, KeySym mod) {
if(k != NULL) {
switch(k->keysym) {
case XK_Cancel:
- exit(0);
+ togglelayer();
+ break;
+ case XK_Break:
+ running = False;
default:
break;
}
@@ -580,11 +586,36 @@ usage(char *argv0) {
exit(1);
}
+void
+togglelayer() {
+ memcpy(&keys, baselayer ? &keys_symbols : &keys_en, sizeof(keys_en));
+ updatekeys();
+ drawkeyboard();
+ baselayer = !baselayer;
+}
+
+void
+sigterm(int sig)
+{
+ // E.g. Since sometimes we might use svkbd, to kill svkbd - e.g. in
+ // terminal or script (pkill svkbd), .. that signal might register bef…
+ // the keyup event is processed so X thinks the key is held down forev…
+ // so here we keyup every key & exit (XK_Break) to keyup cleanup prope…
+ int i;
+ for(i = 0; i < LENGTH(keys); i++) {
+ XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, keys[i].keysym), False,…
+ }
+ running = False;
+ //XTestFakeKeyEvent(dpy, XK_Break, False, 0);
+}
+
int
main(int argc, char *argv[]) {
int i, xr, yr, bitm;
unsigned int wr, hr;
+ signal(SIGTERM, sigterm);
+ memcpy(&keys, &keys_en, sizeof(keys_en));
for (i = 1; argv[i]; i++) {
if(!strcmp(argv[i], "-v")) {
die("svkbd-"VERSION", © 2006-2016 svkbd engineers,"
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.