commit a8ec5539ab1101d19da07862e91a11fe75681e2a
parent da622cf99c4a9049de5cc9b70c75919b32dacb11
Author: Nihal Jere <nihal@nihaljere.xyz>
Date: Mon, 4 Oct 2021 00:04:24 -0500
add mobile-terminal layout
Diffstat:
2 files changed, 164 insertions(+), 1 deletion(-)
diff --git a/layout.mobile-terminal.h b/layout.mobile-terminal.h
@@ -0,0 +1,145 @@
+#define KEYS 46
+static Key keys_en[KEYS] = {
+ { "Tab", 0, XKB_KEY_Tab, 2 },
+ { "←", 0, XKB_KEY_Left, 2 },
+ { "↑", 0, XKB_KEY_Up, 2 },
+ { "↓", 0, XKB_KEY_Down, 2 },
+ { "→", 0, XKB_KEY_Right, 2 },
+
+ { 0 }, /* New row */
+
+ { "q", "Q", XKB_KEY_q, 1 },
+ { "w", "W", XKB_KEY_w, 1 },
+ { "e", "E", XKB_KEY_e, 1 },
+ { "r", "R", XKB_KEY_r, 1 },
+ { "t", "T", XKB_KEY_t, 1 },
+ { "y", "Y", XKB_KEY_y, 1 },
+ { "u", "U", XKB_KEY_u, 1 },
+ { "i", "I", XKB_KEY_i, 1 },
+ { "o", "O", XKB_KEY_o, 1 },
+ { "p", "P", XKB_KEY_p, 1 },
+
+ { 0 }, /* New row */
+
+ { "a", "A", XKB_KEY_a, 1 },
+ { "s", "S", XKB_KEY_s, 1 },
+ { "d", "D", XKB_KEY_d, 1 },
+ { "f", "F", XKB_KEY_f, 1 },
+ { "g", "G", XKB_KEY_g, 1 },
+ { "h", "H", XKB_KEY_h, 1 },
+ { "j", "J", XKB_KEY_j, 1 },
+ { "k", "K", XKB_KEY_k, 1 },
+ { "l", "L", XKB_KEY_l, 1 },
+
+ { 0 }, /* New row */
+
+ { "⇧", 0, XKB_KEY_Shift_L, 1 },
+ { "z", "Z", XKB_KEY_z, 1 },
+ { "x", "X", XKB_KEY_x, 1 },
+ { "c", "C", XKB_KEY_c, 1 },
+ { "v", "V", XKB_KEY_v, 1 },
+ { "b", "B", XKB_KEY_b, 1 },
+ { "n", "N", XKB_KEY_n, 1 },
+ { "m", "M", XKB_KEY_m, 1 },
+ { "↺", 0, XKB_KEY_Cancel, 1},
+
+ { 0 }, /* New row */
+ { "⟵", 0, XKB_KEY_BackSpace, 2 },
+ { " ", 0, XKB_KEY_space, 5 },
+ { "↩", 0, XKB_KEY_Return, 2 },
+};
+
+static Key keys_symbols[KEYS] = {
+ { "1", "!", XKB_KEY_1, 1 },
+ { "2", "@", XKB_KEY_2, 1 },
+ { "3", "#", XKB_KEY_3, 1 },
+ { "4", "$", XKB_KEY_4, 1 },
+ { "5", "%", XKB_KEY_5, 1 },
+ { "6", "^", XKB_KEY_6, 1 },
+ { "7", "&", XKB_KEY_7, 1 },
+ { "8", "*", XKB_KEY_8, 1 },
+ { "9", "(", XKB_KEY_9, 1 },
+ { "0", ")", XKB_KEY_0, 1 },
+
+ { 0 }, /* New row */
+
+ { "|", "\"", XKB_KEY_apostrophe, 1 },
+ { "`", "~", XKB_KEY_grave, 1 },
+ { "-", "_", XKB_KEY_minus, 1 },
+ { "=", "+", XKB_KEY_plus, 1 },
+ { "[", "{", XKB_KEY_bracketleft, 1 },
+ { "]", "}", XKB_KEY_bracketright, 1 },
+ { ",", "<", XKB_KEY_comma, 1 },
+ { ".", ">", XKB_KEY_period, 1 },
+ { "/", "?", XKB_KEY_slash, 1 },
+ { "\\", "|", XKB_KEY_backslash, 1 },
+ { ";",":", XKB_KEY_colon, 1 },
+ { "'", "\"", XKB_KEY_apostrophe, 2 },
+
+ { 0 }, /* New row */
+
+ { "⇧", 0, XKB_KEY_Shift_L, 1 },
+ { "", 0, XKB_KEY_Shift_L, 7 },
+ { "↺", 0, XKB_KEY_Cancel, 1},
+
+ { 0 }, /* New row */
+ { "⟵", 0, XKB_KEY_BackSpace, 2 },
+ { " ", 0, XKB_KEY_space, 5 },
+ { "↩", 0, XKB_KEY_Return, 2 },
+};
+
+static Key keys_control[KEYS] = {
+ { "NUL", "\x00", XKB_KEY_XF86Terminal, 2 },
+ { "SOH", "\x01", XKB_KEY_XF86Terminal, 2 },
+ { "STX", "\x02", XKB_KEY_XF86Terminal, 2 },
+ { "ETX", "\x03", XKB_KEY_XF86Terminal, 2 },
+ { "EOT", "\x04", XKB_KEY_XF86Terminal, 2 },
+
+ { 0 },
+
+ { "LF", "\x0A", XKB_KEY_XF86Terminal, 2 },
+ { "VT", "\x0B", XKB_KEY_XF86Terminal, 2 },
+ { "FF", "\x0C", XKB_KEY_XF86Terminal, 2 },
+ { "CR", "\x0D", XKB_KEY_XF86Terminal, 2 },
+ { "SO", "\x0E", XKB_KEY_XF86Terminal, 2 },
+
+ { 0 }, /* New row */
+
+ { "DC4", "\x14", XKB_KEY_XF86Terminal, 2 },
+ { "NAK", "\x15", XKB_KEY_XF86Terminal, 2 },
+ { "SYN", "\x16", XKB_KEY_XF86Terminal, 2 },
+ { "ETB", "\x17", XKB_KEY_XF86Terminal, 2 },
+ { "CAN", "\x18", XKB_KEY_XF86Terminal, 2 },
+
+ { 0 }, /* New row */
+
+ { "EM", "\x19", XKB_KEY_XF86Terminal, 2 },
+ { "SUB", "\x1A", XKB_KEY_XF86Terminal, 2 },
+ { "ESC", "\x1B", XKB_KEY_XF86Terminal, 2 },
+ { "FS", "\x1C", XKB_KEY_XF86Terminal, 2 },
+ { "GS", "\x1D", XKB_KEY_XF86Terminal, 2 },
+
+ { 0 }, /* New row */
+
+ { "↺", 0, XKB_KEY_Cancel, 1},
+ { "RS", "\x1E", XKB_KEY_XF86Terminal, 2 },
+ { "US", "\x1F", XKB_KEY_XF86Terminal, 2 },
+};
+
+#define OVERLAYS 1
+static Key overlay[OVERLAYS] = {
+ { 0, 0, XKB_KEY_Cancel },
+};
+
+#define LAYERS 3
+static char* layer_names[LAYERS] = {
+ "en",
+ "symbols",
+ "terminal",
+};
+
+static Key* available_layers[LAYERS] = {
+ keys_en,
+ keys_symbols,
+ keys_control,
+};
diff --git a/svkbd.c b/svkbd.c
@@ -161,7 +161,7 @@ static uint32_t serial = 0;
static Key keys[KEYS] = { NULL };
static Key* layers[LAYERS];
-static bool shift = false;
+static bool shift;
void
cleanup(void)
@@ -397,6 +397,24 @@ unpress(Key *k)
case XKB_KEY_Return:
zwp_input_method_v2_commit_string(im, "\n");
break;
+ case XKB_KEY_Tab:
+ zwp_input_method_v2_commit_string(im, "\t");
+ break;
+ case XKB_KEY_Up:
+ zwp_input_method_v2_commit_string(im, "\x1B[A");
+ break;
+ case XKB_KEY_Down:
+ zwp_input_method_v2_commit_string(im, "\x1B[B");
+ break;
+ case XKB_KEY_Right:
+ zwp_input_method_v2_commit_string(im, "\x1B[C");
+ break;
+ case XKB_KEY_Left:
+ zwp_input_method_v2_commit_string(im, "\x1B[D");
+ break;
+ case XKB_KEY_XF86Terminal:
+ zwp_input_method_v2_commit_string(im, k->label2);
+ break;
default:
if (!shift) {
if (k->label)