wvkbd/layout.mobintl.h
2021-10-19 23:12:01 -07:00

1312 lines
44 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* constants */
/* how tall the keyboard should be by default (can be overriden) */
#define KBD_PIXEL_HEIGHT 240
/* if your layout leaves an empty margin, increase this to fix it */
#define KBD_PIXEL_OVERSCAN_WIDTH 5
/* spacing between keys */
#define KBD_KEY_BORDER 2
/* layout declarations */
enum layout_id {
Full = 0,
Special,
Simple,
Cyrillic,
ComposeA,
ComposeE,
ComposeY,
ComposeU,
ComposeI,
ComposeO,
ComposeQ,
ComposeW,
ComposeR,
ComposeT,
ComposeP,
ComposeS,
ComposeD,
ComposeF,
ComposeG,
ComposeH,
ComposeJ,
ComposeK,
ComposeL,
ComposeZ,
ComposeX,
ComposeC,
ComposeV,
ComposeB,
ComposeN,
ComposeM,
ComposeMath,
ComposePunctuation,
ComposeBracket,
ComposeCyrI,
ComposeCyrJ,
ComposeCyrE,
ComposeCyrU,
ComposeCyrL,
ComposeCyrN,
ComposeCyrTse,
ComposeCyrChe,
ComposeCyrG,
ComposeCyrK,
NumLayouts,
};
/* layers is an ordered list of layouts, used to cycle through */
static enum layout_id layers[] = {
Full, //First layout is the default layout on startup
Special,
Simple,
Cyrillic,
NumLayouts //signals the last item, may not be omitted
};
#include "keymap.mobintl.h"
#include "keyboard.h"
/* font (see `man fonts-conf` for instructions) */
static const char *fc_font_pattern =
"Monospace:size=16:antialias=true:hinting=true";
static struct key keys_full[], keys_special[], keys_simple[], keys_cyrillic[],
keys_compose_a[], keys_compose_e[], keys_compose_y[], keys_compose_u[],
keys_compose_i[], keys_compose_o[], keys_compose_q[], keys_compose_w[],
keys_compose_r[], keys_compose_t[], keys_compose_p[], keys_compose_s[],
keys_compose_d[], keys_compose_f[], keys_compose_g[], keys_compose_h[],
keys_compose_j[], keys_compose_k[], keys_compose_l[], keys_compose_z[],
keys_compose_x[], keys_compose_c[], keys_compose_v[], keys_compose_b[],
keys_compose_n[], keys_compose_m[], keys_compose_math[],
keys_compose_punctuation[], keys_compose_bracket[], keys_compose_cyr_i[],
keys_compose_cyr_j[], keys_compose_cyr_e[], keys_compose_cyr_u[],
keys_compose_cyr_l[], keys_compose_cyr_n[], keys_compose_cyr_tse[],
keys_compose_cyr_che[], keys_compose_cyr_g[], keys_compose_cyr_k[];
static struct layout layouts[NumLayouts] = {
[Full] = {keys_full, "latin", "full"}, // second parameter is the keymap name
// third parameter is the layout name
[Special] = {keys_special, "latin", "special"},
[Simple] = {keys_simple, "latin", "simple"},
[Cyrillic] = {keys_cyrillic, "cyrillic", "cyrillic"},
[ComposeA] = {keys_compose_a, "latin"},
[ComposeE] = {keys_compose_e, "latin"},
[ComposeY] = {keys_compose_y, "latin"},
[ComposeU] = {keys_compose_u, "latin"},
[ComposeI] = {keys_compose_i, "latin"},
[ComposeO] = {keys_compose_o, "latin"},
[ComposeQ] = {keys_compose_q, "latin"},
[ComposeW] = {keys_compose_w, "latin"},
[ComposeR] = {keys_compose_r, "latin"},
[ComposeT] = {keys_compose_t, "latin"},
[ComposeP] = {keys_compose_p, "latin"},
[ComposeS] = {keys_compose_s, "latin"},
[ComposeD] = {keys_compose_d, "latin"},
[ComposeF] = {keys_compose_f, "latin"},
[ComposeG] = {keys_compose_g, "latin"},
[ComposeH] = {keys_compose_h, "latin"},
[ComposeJ] = {keys_compose_j, "latin"},
[ComposeK] = {keys_compose_k, "latin"},
[ComposeL] = {keys_compose_l, "latin"},
[ComposeZ] = {keys_compose_z, "latin"},
[ComposeX] = {keys_compose_x, "latin"},
[ComposeC] = {keys_compose_c, "latin"},
[ComposeV] = {keys_compose_v, "latin"},
[ComposeB] = {keys_compose_b, "latin"},
[ComposeN] = {keys_compose_n, "latin"},
[ComposeM] = {keys_compose_m, "latin"},
[ComposeMath] = {keys_compose_math, "latin"},
[ComposePunctuation] = {keys_compose_punctuation, "latin"},
[ComposeBracket] = {keys_compose_bracket, "latin"},
[ComposeCyrI] = {keys_compose_cyr_i, "cyrillic"},
[ComposeCyrJ] = {keys_compose_cyr_j, "cyrillic"},
[ComposeCyrE] = {keys_compose_cyr_e, "cyrillic"},
[ComposeCyrU] = {keys_compose_cyr_u, "cyrillic"},
[ComposeCyrL] = {keys_compose_cyr_l, "cyrillic"},
[ComposeCyrN] = {keys_compose_cyr_n, "cyrillic"},
[ComposeCyrTse] = {keys_compose_cyr_tse, "cyrillic"},
[ComposeCyrChe] = {keys_compose_cyr_che, "cyrillic"},
[ComposeCyrG] = {keys_compose_cyr_g, "cyrillic"},
[ComposeCyrK] = {keys_compose_cyr_k, "cyrillic"},
};
/* keyboard settings */
static struct kbd keyboard = {
/* default layout */
.layers = (enum layout_id *) &layers,
.layer_index = 0,
.scheme =
{
/* colors */
.bg = {.bgra = {15, 15, 15, 225}},
.fg = {.bgra = {45, 45, 45, 225}},
.high = {.bgra = {100, 100, 100, 225}},
.text = {.color = UINT32_MAX},
},
.scheme1 =
{
/* colors */
.bg = {.bgra = {15, 15, 15, 225}},
.fg = {.bgra = {32, 32, 32, 225}},
.high = {.bgra = {100, 100, 100, 225}},
.text = {.color = UINT32_MAX},
},
};
/* key layouts
*
* define keys like:
*
* `{
* "label",
* "SHIFT_LABEL",
* 1,
* [Code, Mod, Layout, EndRow, Last],
* [KEY_CODE, Modifier],
* [&layout]
* },`
*
* - label: normal label for key
*
* - shift_label: label for key in shifted (uppercase) layout
*
* - width: column width of key
*
* - type: what kind of action this key peforms (emit keycode, toggle modifier,
* switch layout, or end the layout)
*
* - code: key scancode or modifier name (see
* `/usr/include/linux/input-event-codes.h` for scancode names, and
* `keyboard.h` for modifiers)
*
* - layout: layout to switch to when key is pressed
*/
static struct key keys_full[] = {
{"Esc", "Esc", 1.0, Code, KEY_ESC, .scheme = 1},
{"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1},
{"Tab", "Tab", 1.0, Code, KEY_TAB, .scheme = 1},
{"", "", 1.0, Code, KEY_UP, .scheme = 1},
{"", "", 1.0, Code, KEY_DOWN, .scheme = 1},
{"", "", 1.0, Code, KEY_LEFT, .scheme = 1},
{"", "", 1.0, Code, KEY_RIGHT, .scheme = 1},
{"'", "\"", 1.0, Code, KEY_APOSTROPHE, .scheme = 1},
{";", ":", 1.0, Code, KEY_SEMICOLON, .scheme = 1},
{"/", "?", 1.0, Code, KEY_SLASH, .scheme = 1},
{"", "", 0.0, EndRow},
{"1", "!", 1.0, Code, KEY_1},
{"2", "@", 1.0, Code, KEY_2},
{"3", "#", 1.0, Code, KEY_3},
{"4", "$", 1.0, Code, KEY_4},
{"5", "%", 1.0, Code, KEY_5},
{"6", "^", 1.0, Code, KEY_6},
{"7", "&", 1.0, Code, KEY_7},
{"8", "*", 1.0, Code, KEY_8},
{"9", "(", 1.0, Code, KEY_9},
{"0", ")", 1.0, Code, KEY_0},
{"-", "_", 1.0, Code, KEY_MINUS},
{"=", "+", 1.0, Code, KEY_EQUAL},
{"", "", 0.0, EndRow},
{"", "", 0.5, Pad},
{"q", "Q", 1.0, Code, KEY_Q, &layouts[ComposeQ]},
{"w", "W", 1.0, Code, KEY_W, &layouts[ComposeW]},
{"e", "E", 1.0, Code, KEY_E, &layouts[ComposeE]},
{"r", "R", 1.0, Code, KEY_R, &layouts[ComposeR]},
{"t", "T", 1.0, Code, KEY_T, &layouts[ComposeT]},
{"y", "Y", 1.0, Code, KEY_Y, &layouts[ComposeY]},
{"u", "U", 1.0, Code, KEY_U, &layouts[ComposeU]},
{"i", "I", 1.0, Code, KEY_I, &layouts[ComposeI]},
{"o", "O", 1.0, Code, KEY_O, &layouts[ComposeO]},
{"p", "P", 1.0, Code, KEY_P, &layouts[ComposeP]},
{"", "", 0.0, EndRow},
{"Cmp", "Cmp", 1.0, Compose, .scheme = 1},
{"a", "A", 1.0, Code, KEY_A, &layouts[ComposeA]},
{"s", "S", 1.0, Code, KEY_S, &layouts[ComposeS]},
{"d", "D", 1.0, Code, KEY_D, &layouts[ComposeD]},
{"f", "F", 1.0, Code, KEY_F, &layouts[ComposeF]},
{"g", "G", 1.0, Code, KEY_G, &layouts[ComposeG]},
{"h", "H", 1.0, Code, KEY_H, &layouts[ComposeH]},
{"j", "J", 1.0, Code, KEY_J, &layouts[ComposeJ]},
{"k", "K", 1.0, Code, KEY_K, &layouts[ComposeK]},
{"l", "L", 1.0, Code, KEY_L, &layouts[ComposeL]},
{"", "", 0.5, Pad},
{"", "", 0.0, EndRow},
{"", "", 1.5, Mod, Shift, .scheme = 1},
{"z", "Z", 1.0, Code, KEY_Z, &layouts[ComposeZ]},
{"x", "X", 1.0, Code, KEY_X, &layouts[ComposeX]},
{"c", "C", 1.0, Code, KEY_C, &layouts[ComposeC]},
{"v", "V", 1.0, Code, KEY_V, &layouts[ComposeV]},
{"b", "B", 1.0, Code, KEY_B, &layouts[ComposeB]},
{"n", "N", 1.0, Code, KEY_N, &layouts[ComposeN]},
{"m", "M", 1.0, Code, KEY_M, &layouts[ComposeM]},
{"", "", 1.5, Code, KEY_BACKSPACE, .scheme = 1},
{"", "", 0.0, EndRow},
{"Sym", "Sym", 1.0, NextLayer, .scheme = 1},
{"Alt", "Alt", 1.0, Mod, Alt, .scheme = 1},
{",", "'", 1.0, Code, KEY_COMMA},
{"", "", 4.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_DOT},
{"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1},
/* end of layout */
{"", "", 0.0, Last},
};
static struct key keys_special[] = {
{"Esc", "Esc", 1.0, Code, KEY_ESC, .scheme = 1},
{"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1},
{"Tab", "Tab", 1.0, Code, KEY_TAB, .scheme = 1},
{"", "", 1.0, Code, KEY_UP, .scheme = 1},
{"", "", 1.0, Code, KEY_DOWN, .scheme = 1},
{"", "", 1.0, Code, KEY_LEFT, .scheme = 1},
{"", "", 1.0, Code, KEY_RIGHT, .scheme = 1},
{"", "", 1.0, Code, KEY_PAGEUP, .scheme = 1},
{"", "", 1.0, Code, KEY_PAGEDOWN, .scheme = 1},
{"", "", 1.0, Code, KEY_HOME, .scheme = 1},
{"", "", 1.0, Code, KEY_END, .scheme = 1},
{"", "", 0.0, EndRow},
{"1", "!", 1.0, Code, KEY_1},
{"2", "@", 1.0, Code, KEY_2},
{"3", "#", 1.0, Code, KEY_3},
{"4", "$", 1.0, Code, KEY_4},
{"5", "%", 1.0, Code, KEY_5},
{"6", "^", 1.0, Code, KEY_6},
{"7", "&", 1.0, Code, KEY_7},
{"8", "*", 1.0, Code, KEY_8},
{"9", "(", 1.0, Code, KEY_9},
{"0", ")", 1.0, Code, KEY_0},
{"", "", 0.0, EndRow},
{"Caps", "Caps", 1.0, Mod, CapsLock, .scheme = 1},
{"Sup", "Sup", 1.0, Mod, Super, .scheme = 1},
{"`", "~", 1.0, Code, KEY_GRAVE},
{"'", "\"", 1.0, Code, KEY_APOSTROPHE},
{"-", "_", 1.0, Code, KEY_MINUS},
{"=", "+", 1.0, Code, KEY_EQUAL},
{"[", "{", 1.0, Code, KEY_LEFTBRACE},
{"]", "}", 1.0, Code, KEY_RIGHTBRACE},
{"\\", "|", 1.0, Code, KEY_BACKSLASH},
{"Del", "Del", 1.0, Code, KEY_DELETE, .scheme = 1},
{"", "", 0.0, EndRow},
{"", "", 2.0, Mod, Shift, .scheme = 1},
{";", ":", 1.0, Code, KEY_SEMICOLON},
{"/", "?", 1.0, Code, KEY_SLASH},
{"<", "«", 1.0, Code, KEY_COMMA, 0, AltGr},
{">", "»", 1.0, Code, KEY_DOT, 0, AltGr},
{"¡", "¿", 1.0, Code, KEY_MENU},
{"", "", 1.0, Pad},
{"AGr", "AGr", 1.0, Mod, AltGr, .scheme = 1},
{"", "", 1.0, Code, KEY_BACKSPACE, .scheme = 1},
{"", "", 0.0, EndRow},
{"Abc", "Abc", 1.0, NextLayer, .scheme = 1},
{"Alt", "Alt", 1.0, Mod, Alt, .scheme = 1},
{",", "'", 1.0, Code, KEY_COMMA},
{"", "", 4.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_DOT},
{"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1},
/* end of layout */
{"", "", 0.0, Last},
};
static struct key keys_simple[] = {
{"Tab", "Tab", 0.5, Code, KEY_TAB, .scheme = 1},
{"q", "Q", 1.0, Code, KEY_Q, &layouts[ComposeQ]},
{"w", "W", 1.0, Code, KEY_W, &layouts[ComposeW]},
{"e", "E", 1.0, Code, KEY_E, &layouts[ComposeE]},
{"r", "R", 1.0, Code, KEY_R, &layouts[ComposeR]},
{"t", "T", 1.0, Code, KEY_T, &layouts[ComposeT]},
{"y", "Y", 1.0, Code, KEY_Y, &layouts[ComposeY]},
{"u", "U", 1.0, Code, KEY_U, &layouts[ComposeU]},
{"i", "I", 1.0, Code, KEY_I, &layouts[ComposeI]},
{"o", "O", 1.0, Code, KEY_O, &layouts[ComposeO]},
{"p", "P", 1.0, Code, KEY_P, &layouts[ComposeP]},
{"", "", 0.0, EndRow},
{"Cmp", "Cmp", 1.0, Compose, .scheme = 1},
{"a", "A", 1.0, Code, KEY_A, &layouts[ComposeA]},
{"s", "S", 1.0, Code, KEY_S, &layouts[ComposeS]},
{"d", "D", 1.0, Code, KEY_D, &layouts[ComposeD]},
{"f", "F", 1.0, Code, KEY_F, &layouts[ComposeF]},
{"g", "G", 1.0, Code, KEY_G, &layouts[ComposeG]},
{"h", "H", 1.0, Code, KEY_H, &layouts[ComposeH]},
{"j", "J", 1.0, Code, KEY_J, &layouts[ComposeJ]},
{"k", "K", 1.0, Code, KEY_K, &layouts[ComposeK]},
{"l", "L", 1.0, Code, KEY_L, &layouts[ComposeL]},
{"'", "\"", 0.5, Code, KEY_APOSTROPHE, &layouts[ComposeBracket]},
{"", "", 0.0, EndRow},
{"", "", 1.5, Mod, Shift, .scheme = 1},
{"z", "Z", 1.0, Code, KEY_Z, &layouts[ComposeZ]},
{"x", "X", 1.0, Code, KEY_X, &layouts[ComposeX]},
{"c", "C", 1.0, Code, KEY_C, &layouts[ComposeC]},
{"v", "V", 1.0, Code, KEY_V, &layouts[ComposeV]},
{"b", "B", 1.0, Code, KEY_B, &layouts[ComposeB]},
{"n", "N", 1.0, Code, KEY_N, &layouts[ComposeN]},
{"m", "M", 1.0, Code, KEY_M, &layouts[ComposeM]},
{"", "", 1.5, Code, KEY_BACKSPACE, .scheme = 1},
{"", "", 0.0, EndRow},
{"Abc", "Abc", 1.0, NextLayer, .scheme = 1},
{"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1},
{",", "'", 1.0, Code, KEY_COMMA, &layouts[ComposeMath]},
{"", "", 4.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_DOT, &layouts[ComposePunctuation]},
{"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1},
/* end of layout */
{"", "", 0.0, Last},
};
static struct key keys_cyrillic[] = {
{"1", "!", 1.0, Code, KEY_1},
{"2", "@", 1.0, Code, KEY_2},
{"3", "#", 1.0, Code, KEY_3},
{"4", ";", 1.0, Code, KEY_4},
{"5", "%", 1.0, Code, KEY_5},
{"6", ":", 1.0, Code, KEY_6},
{"7", "&", 1.0, Code, KEY_7},
{"8", "*", 1.0, Code, KEY_8},
{"9", "(", 1.0, Code, KEY_9},
{"0", ")", 1.0, Code, KEY_0},
{"ю", "Ю", 1.0, Code, KEY_DOT},
{"э", "Э", 1.0, Code, KEY_APOSTROPHE, &layouts[ComposeCyrE]},
{"ё", "Ё", 1.0, Code, KEY_GRAVE, &layouts[ComposeCyrE]},
{"", "", 0.0, EndRow},
{"й", "Й", 1.0, Code, KEY_Q, &layouts[ComposeCyrJ]},
{"ц", "Ц", 1.0, Code, KEY_W, &layouts[ComposeCyrTse]},
{"у", "У", 1.0, Code, KEY_E},
{"к", "К", 1.0, Code, KEY_R, &layouts[ComposeCyrK]},
{"е", "Е", 1.0, Code, KEY_T, &layouts[ComposeCyrE]},
{"н", "Н", 1.0, Code, KEY_Y},
{"г", "Г", 1.0, Code, KEY_U, &layouts[ComposeCyrG]},
{"ш", "ш", 1.0, Code, KEY_I},
{"щ", "щ", 1.0, Code, KEY_O},
{"з", "з", 1.0, Code, KEY_P},
{"х", "Х", 1.0, Code, KEY_LEFTBRACE},
{"ъ", "Ъ", 0.5, Code, KEY_RIGHTBRACE},
{"", "", 0.0, EndRow},
{"ф", "Ф", 1.0, Code, KEY_A},
{"ы", "Ы", 1.0, Code, KEY_S, &layouts[ComposeCyrI]},
{"в", "В", 1.0, Code, KEY_D},
{"а", "А", 1.0, Code, KEY_F},
{"п", "П", 1.0, Code, KEY_G},
{"р", "Р", 1.0, Code, KEY_H},
{"о", "О", 1.0, Code, KEY_J},
{"л", "Л", 1.0, Code, KEY_K, &layouts[ComposeCyrL]},
{"д", "Д", 1.0, Code, KEY_L},
{"ж", "Ж", 1.0, Code, KEY_SEMICOLON},
{"", "", 0.0, EndRow},
{"", "", 1.5, Mod, Shift, .scheme = 1},
{"я", "Я", 1.0, Code, KEY_Z},
{"ч", "Ч", 1.0, Code, KEY_X, &layouts[ComposeCyrChe]},
{"c", "С", 1.0, Code, KEY_C},
{"м", "М", 1.0, Code, KEY_V},
{"и", "И", 1.0, Code, KEY_B, &layouts[ComposeCyrI]},
{"т", "Т", 1.0, Code, KEY_N},
{"ь", "Ь", 1.0, Code, KEY_M},
{"б", "Б", 1.0, Code, KEY_COMMA},
{"", "", 1.5, Code, KEY_BACKSPACE, .scheme = 1},
{"", "", 0.0, EndRow},
{"Abc", "Abc", 1.0, NextLayer, .scheme = 1},
{"Cmp", "Cmp", 1.0, Compose, .scheme = 1},
{",", "'", 1.0, Code, KEY_EQUAL},
{"", "", 4.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_SLASH},
{"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1},
/* end of layout */
{"", "", 0.0, Last},
};
static struct key keys_compose_a[] = {
{"à", "À", 1.0, Copy, 0x00E0, 0, 0x00C0},
{"á", "Á", 1.0, Copy, 0x00E1, 0, 0x00C1},
{"â", "Â", 1.0, Copy, 0x00E2, 0, 0x00C2},
{"ã", "Ã", 1.0, Copy, 0x00E3, 0, 0x00C3},
{"ä", "Ä", 1.0, Copy, 0x00E4, 0, 0x00C4},
{"å", "Å", 1.0, Copy, 0x00E5, 0, 0x00C5},
{"æ", "Æ", 1.0, Copy, 0x00E5, 0, 0x00C6},
{"ā", "Ā", 1.0, Copy, 0x0101, 0, 0x0100},
{"ă", "Ă", 1.0, Copy, 0x0103, 0, 0x0102},
{"ą", "Ą", 1.0, Copy, 0x0105, 0, 0x0104},
{"", "", 0.0, EndRow},
{"α", "Α", 1.0, Copy, 0x03B1, 0, 0x0391},
{"", "", 9.0, Pad},
{"", "", 0.0, EndRow},
{"", "", 1.5, Mod, Shift, .scheme = 1},
{"", "", 7, Pad},
{"", "", 1.5, Code, KEY_BACKSPACE, .scheme = 1},
{"", "", 0.0, EndRow},
{"Abc", "Abc", 1.0, BackLayer, .scheme = 1},
{"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1},
{",", "'", 1.0, Code, KEY_COMMA},
{"", "", 4.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_DOT},
{"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1},
{"", "", 0.0, Last},
};
static struct key keys_compose_e[] = {
{"è", "È", 1.0, Copy, 0x00E8, 0, 0x00C8},
{"é", "É", 1.0, Copy, 0x00E9, 0, 0x00C9},
{"ê", "Ê", 1.0, Copy, 0x00EA, 0, 0x00CA},
{"ë", "Ë", 1.0, Copy, 0x00EB, 0, 0x00CB},
{"ē", "Ē", 1.0, Copy, 0x0113, 0, 0x0112},
{"ĕ", "Ĕ", 1.0, Copy, 0x0115, 0, 0x0114},
{"ė", "Ė", 1.0, Copy, 0x0117, 0, 0x0116},
{"ę", "Ę", 1.0, Copy, 0x0119, 0, 0x0118},
{"ě", "Ě", 1.0, Copy, 0x011B, 0, 0x011A},
{"", "", 0.0, EndRow},
{"ε", "Ε", 1.0, Copy, 0x03B5, 0, 0x0395},
{"ǝ", "Ə", 1.0, Copy, 0x0259, 0, 0x018F},
{"", "", 8.0, Pad},
{"", "", 0.0, EndRow},
{"", "", 1.5, Mod, Shift},
{"", "", 7, Pad},
{"", "", 1.5, Code, KEY_BACKSPACE},
{"", "", 0.0, EndRow},
{"Abc", "Abc", 1.0, BackLayer},
{"Ctr", "Ctr", 1.0, Mod, Ctrl},
{",", "'", 1.0, Code, KEY_COMMA},
{"", "", 4.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_DOT},
{"Enter", "Enter", 2.0, Code, KEY_ENTER},
{"", "", 0.0, Last},
};
static struct key keys_compose_y[] = {
{"ý", "Ý", 1.0, Copy, 0x00FD, 0, 0x00DD},
{"ÿ", "Ÿ", 1.0, Copy, 0x00FF, 0, 0x0178},
{"ŷ", "Ŷ", 1.0, Copy, 0x0177, 0, 0x0176},
{"", "", 7.0, Pad},
{"", "", 0.0, EndRow},
{"υ", "Υ", 1.0, Copy, 0x03C5, 0, 0x03A5},
{"", "", 0.0, EndRow},
{"", "", 1.5, Mod, Shift, .scheme = 1},
{"", "", 7, Pad},
{"", "", 1.5, Code, KEY_BACKSPACE, .scheme = 1},
{"", "", 0.0, EndRow},
{"Abc", "Abc", 1.0, BackLayer},
{"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1},
{",", "'", 1.0, Code, KEY_COMMA},
{"", "", 4.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_DOT},
{"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1},
{"", "", 0.0, Last},
};
static struct key keys_compose_u[] = {
{"ù", "Ù", 1.0, Copy, 0x00F9, 0, 0x00D9},
{"ú", "Ú", 1.0, Copy, 0x00FA, 0, 0x00DA},
{"û", "Û", 1.0, Copy, 0x00FB, 0, 0x00DB},
{"ü", "Ü", 1.0, Copy, 0x00FC, 0, 0x00DC},
{"ũ", "Ũ", 1.0, Copy, 0x0169, 0, 0x0168},
{"ū", "Ū", 1.0, Copy, 0x016B, 0, 0x016A},
{"ŭ", "Ŭ", 1.0, Copy, 0x016D, 0, 0x016C},
{"ů", "Ů", 1.0, Copy, 0x016F, 0, 0x016E},
{"ű", "Ű", 1.0, Copy, 0x0171, 0, 0x0170},
{"ų", "Ų", 1.0, Copy, 0x0172, 0, 0x0173},
{"", "", 0.0, EndRow},
{"υ", "Υ", 1.0, Copy, 0x03C5, 0, 0x03A5},
{"", "", 9.0, Pad},
{"", "", 0.0, EndRow},
{"", "", 1.5, Mod, Shift, .scheme = 1},
{"", "", 7, Pad},
{"", "", 1.5, Code, KEY_BACKSPACE, .scheme = 1},
{"", "", 0.0, EndRow},
{"Abc", "Abc", 1.0, BackLayer},
{"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1},
{",", "'", 1.0, Code, KEY_COMMA},
{"", "", 4.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_DOT},
{"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1},
{"", "", 0.0, Last},
};
static struct key keys_compose_o[] = {
{"ò", "Ò", 1.0, Copy, 0x00F2, 0, 0x00D2},
{"ó", "Ó", 1.0, Copy, 0x00F3, 0, 0x00D3},
{"ô", "Ô", 1.0, Copy, 0x00F4, 0, 0x00D4},
{"õ", "Õ", 1.0, Copy, 0x00F5, 0, 0x00D5},
{"ø", "Ø", 1.0, Copy, 0x00F8, 0, 0x00D8},
{"ō", "Ō", 1.0, Copy, 0x014D, 0, 0x014C},
{"ŏ", "Ŏ", 1.0, Copy, 0x014F, 0, 0x014E},
{"ő", "Ő", 1.0, Copy, 0x0150, 0, 0x0151},
{"œ", "Œ", 1.0, Copy, 0x0153, 0, 0x0152},
{"", "", 0.0, EndRow},
{"ο", "Ο", 1.0, Copy, 0x03BF, 0, 0x039F},
{"ω", "Ο", 1.0, Copy, 0x03C9, 0, 0x03A9},
{"", "", 8.0, Pad},
{"", "", 0.0, EndRow},
{"", "", 1.5, Mod, Shift, .scheme = 1},
{"", "", 7, Pad},
{"", "", 1.5, Code, KEY_BACKSPACE, .scheme = 1},
{"", "", 0.0, EndRow},
{"Abc", "Abc", 1.0, BackLayer},
{"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1},
{",", "'", 1.0, Code, KEY_COMMA},
{"", "", 4.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_DOT},
{"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1},
{"", "", 0.0, Last},
};
static struct key keys_compose_i[] = {
{"ì", "Ì", 1.0, Copy, 0x00EC, 0, 0x00CC},
{"í", "Í", 1.0, Copy, 0x00ED, 0, 0x00CD},
{"î", "Î", 1.0, Copy, 0x00EE, 0, 0x00CE},
{"ï", "Ï", 1.0, Copy, 0x00EF, 0, 0x00CF},
{"ĩ", "Ĩ", 1.0, Copy, 0x0129, 0, 0x0128},
{"ī", "Ī", 1.0, Copy, 0x012B, 0, 0x012A},
{"ĭ", "Ĭ", 1.0, Copy, 0x012D, 0, 0x012C},
{"į", "Į", 1.0, Copy, 0x012F, 0, 0x012E},
{"ı", "I", 1.0, Copy, 0x0150, 0, 0x0049},
{"i", "İ", 1.0, Copy, 0x0069, 0, 0x0152},
{"", "", 0.0, EndRow},
{"ι", "Ι", 1.0, Copy, 0x03B9, 0, 0x0399},
{"η", "Η", 1.0, Copy, 0x03B7, 0, 0x0397},
{"", "", 8.0, Pad},
{"", "", 0.0, EndRow},
{"", "", 1.5, Mod, Shift, .scheme = 1},
{"", "", 7, Pad},
{"", "", 1.5, Code, KEY_BACKSPACE, .scheme = 1},
{"", "", 0.0, EndRow},
{"Abc", "Abc", 1.0, BackLayer},
{"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1},
{",", "'", 1.0, Code, KEY_COMMA},
{"", "", 4.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_DOT},
{"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1},
{"", "", 0.0, Last},
};
static struct key keys_compose_q[] = {
{"🙂", "", 1.0, Copy, 0x1f642, 0, 0}, // Emojis
{"😀", "", 1.0, Copy, 0x1f600, 0, 0},
{"😁", "", 1.0, Copy, 0x1f601, 0, 0},
{"😂", "", 1.0, Copy, 0x1f602, 0, 0},
{"😃", "", 1.0, Copy, 0x1f603, 0, 0},
{"😄", "", 1.0, Copy, 0x1f604, 0, 0},
{"😅", "", 1.0, Copy, 0x1f605, 0, 0},
{"😆", "", 1.0, Copy, 0x1f606, 0, 0},
{"😇", "", 1.0, Copy, 0x1f607, 0, 0},
{"😈", "", 1.0, Copy, 0x1f608, 0, 0},
{"", "", 0.0, EndRow},
{"😉", "", 1.0, Copy, 0x1f609, 0, 0},
{"😊", "", 1.0, Copy, 0x1f60a, 0, 0},
{"😋", "", 1.0, Copy, 0x1f60b, 0, 0},
{"😌", "", 1.0, Copy, 0x1f60c, 0, 0},
{"😍", "", 1.0, Copy, 0x1f60d, 0, 0},
{"😎", "", 1.0, Copy, 0x1f60e, 0, 0},
{"😏", "", 1.0, Copy, 0x1f60f, 0, 0},
{"😐", "", 1.0, Copy, 0x1f610, 0, 0},
{"😒", "", 1.0, Copy, 0x1f612, 0, 0},
{"😓", "", 1.0, Copy, 0x1f613, 0, 0},
{"", "", 0.0, EndRow},
{"😛", "", 1.0, Copy, 0x1f61b, 0, 0},
{"😮", "", 1.0, Copy, 0x1f62e, 0, 0},
{"😟", "", 1.0, Copy, 0x1f61f, 0, 0},
{"😟", "", 1.0, Copy, 0x1f620, 0, 0},
{"😢", "", 1.0, Copy, 0x1f622, 0, 0},
{"😭", "", 1.0, Copy, 0x1f62d, 0, 0},
{"😳", "", 1.0, Copy, 0x1f633, 0, 0},
{"😴", "", 1.0, Copy, 0x1f634, 0, 0},
{"", "", 2.0, Code, KEY_BACKSPACE},
{"", "", 0.0, EndRow},
{"Abc", "Abc", 1.0, BackLayer},
{",", "'", 1.0, Code, KEY_COMMA},
{"", "", 5.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_DOT},
{"Enter", "Enter", 2.0, Code, KEY_ENTER},
{"", "", 0.0, Last},
};
static struct key keys_compose_w[] = {
{"ŵ", "Ŵ", 1.0, Copy, 0x0175, 0, 0x0174},
{"", "", 9.0, Pad},
{"", "", 0.0, EndRow},
{"", "", 0.0, EndRow},
{"", "", 1.5, Mod, Shift, .scheme = 1},
{"", "", 7, Pad},
{"", "", 1.5, Code, KEY_BACKSPACE, .scheme = 1},
{"", "", 0.0, EndRow},
{"Abc", "Abc", 1.0, BackLayer},
{"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1},
{",", "'", 1.0, Code, KEY_COMMA},
{"", "", 4.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_DOT},
{"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1},
{"", "", 0.0, Last},
};
static struct key keys_compose_r[] = {
{"ŕ", "Ŕ", 1.0, Copy, 0x0155, 0, 0x0154},
{"ŗ", "Ŗ", 1.0, Copy, 0x0157, 0, 0x0156},
{"ř", "Ř", 1.0, Copy, 0x0159, 0, 0x0158},
{"", "", 7.0, Pad},
{"", "", 0.0, EndRow},
{"ρ", "Ρ", 1.0, Copy, 0x03C1, 0, 0x03A1},
{"", "", 9.0, Pad},
{"", "", 0.0, EndRow},
{"", "", 1.5, Mod, Shift, .scheme = 1},
{"", "", 7, Pad},
{"", "", 1.5, Code, KEY_BACKSPACE, .scheme = 1},
{"", "", 0.0, EndRow},
{"Abc", "Abc", 1.0, BackLayer},
{"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1},
{",", "'", 1.0, Code, KEY_COMMA},
{"", "", 4.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_DOT},
{"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1},
{"", "", 0.0, Last},
};
static struct key keys_compose_t[] = {
{"ț", "Ț", 1.0, Copy, 0x021B, 0, 0x021A},
{"ť", "Ť", 1.0, Copy, 0x0165, 0, 0x0164},
{"ŧ", "Ŧ", 1.0, Copy, 0x0167, 0, 0x0166},
{"þ", "Þ", 1.0, Copy, 0x00FE, 0, 0x00DE},
{"", "", 6.0, Pad},
{"", "", 0.0, EndRow},
{"τ", "Τ", 1.0, Copy, 0x03C4, 0, 0x03A4},
{"θ", "Θ", 1.0, Copy, 0x03B8, 0, 0x0398},
{"", "", 8.0, Pad},
{"", "", 0.0, EndRow},
{"", "", 1.5, Mod, Shift, .scheme = 1},
{"", "", 7, Pad},
{"", "", 1.5, Code, KEY_BACKSPACE, .scheme = 1},
{"", "", 0.0, EndRow},
{"Abc", "Abc", 1.0, BackLayer},
{"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1},
{",", "'", 1.0, Code, KEY_COMMA},
{"", "", 4.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_DOT},
{"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1},
{"", "", 0.0, Last},
};
static struct key keys_compose_p[] = {
{"", "", 10.0, Pad},
{"", "", 0.0, EndRow},
{"π", "Π", 1.0, Copy, 0x03C0, 0, 0x03A0},
{"", "", 9.0, Pad},
{"", "", 0.0, EndRow},
{"", "", 1.5, Mod, Shift, .scheme = 1},
{"", "", 7, Pad},
{"", "", 1.5, Code, KEY_BACKSPACE, .scheme = 1},
{"", "", 0.0, EndRow},
{"Abc", "Abc", 1.0, BackLayer},
{"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1},
{",", "'", 1.0, Code, KEY_COMMA},
{"", "", 4.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_DOT},
{"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1},
{"", "", 0.0, Last},
};
static struct key keys_compose_s[] = {
{"ś", "Ś", 1.0, Copy, 0x015B, 0, 0x015A},
{"ŝ", "Ŝ", 1.0, Copy, 0x015D, 0, 0x015C},
{"ş", "Ş", 1.0, Copy, 0x015F, 0, 0x015E},
{"š", "Š", 1.0, Copy, 0x0161, 0, 0x0160},
{"ß", "", 1.0, Copy, 0x00DF, 0, 0x1E9E},
{"", "", 5.0, Pad},
{"", "", 0.0, EndRow},
{"σ", "Σ", 1.0, Copy, 0x03C3, 0, 0x03A3},
{"ς", "Σ", 1.0, Copy, 0x03C2, 0, 0x03A3},
{"", "", 9.0, Pad},
{"", "", 0.0, EndRow},
{"", "", 1.5, Mod, Shift, .scheme = 1},
{"", "", 7, Pad},
{"", "", 1.5, Code, KEY_BACKSPACE, .scheme = 1},
{"", "", 0.0, EndRow},
{"Abc", "Abc", 1.0, BackLayer},
{"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1},
{",", "'", 1.0, Code, KEY_COMMA},
{"", "", 4.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_DOT},
{"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1},
{"", "", 0.0, Last},
};
static struct key keys_compose_d[] = {
{"ð", "Ð", 1.0, Copy, 0x00F0, 0, 0x00D0},
{"ď", "Ď", 1.0, Copy, 0x010F, 0, 0x010E},
{"đ", "Đ", 1.0, Copy, 0x0111, 0, 0x0110},
{"", "", 7.0, Pad},
{"", "", 0.0, EndRow},
{"δ", "Δ", 1.0, Copy, 0x03B4, 0, 0x0394},
{"", "", 9.0, Pad},
{"", "", 0.0, EndRow},
{"", "", 1.5, Mod, Shift, .scheme = 1},
{"", "", 7, Pad},
{"", "", 1.5, Code, KEY_BACKSPACE, .scheme = 1},
{"", "", 0.0, EndRow},
{"Abc", "Abc", 1.0, BackLayer},
{"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1},
{",", "'", 1.0, Code, KEY_COMMA},
{"", "", 4.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_DOT},
{"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1},
{"", "", 0.0, Last},
};
static struct key keys_compose_f[] = {
{"", "", 10.0, Pad},
{"", "", 0.0, EndRow},
{"φ", "Φ", 1.0, Copy, 0x03C6, 0, 0x03A6},
{"", "", 9.0, Pad},
{"", "", 0.0, EndRow},
{"", "", 1.5, Mod, Shift, .scheme = 1},
{"", "", 7, Pad},
{"", "", 1.5, Code, KEY_BACKSPACE, .scheme = 1},
{"", "", 0.0, EndRow},
{"Abc", "Abc", 1.0, BackLayer},
{"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1},
{",", "'", 1.0, Code, KEY_COMMA},
{"", "", 4.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_DOT},
{"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1},
{"", "", 0.0, Last},
};
static struct key keys_compose_g[] = {
{"ĝ", "Ĝ", 1.0, Copy, 0x011D, 0, 0x011C},
{"ğ", "Ğ", 1.0, Copy, 0x011F, 0, 0x011E},
{"", "", 8.0, Pad},
{"", "", 0.0, EndRow},
{"γ", "Γ", 1.0, Copy, 0x03B3, 0, 0x0393},
{"", "", 9.0, Pad},
{"", "", 0.0, EndRow},
{"", "", 1.5, Mod, Shift, .scheme = 1},
{"", "", 7, Pad},
{"", "", 1.5, Code, KEY_BACKSPACE, .scheme = 1},
{"", "", 0.0, EndRow},
{"Abc", "Abc", 1.0, BackLayer},
{"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1},
{",", "'", 1.0, Code, KEY_COMMA},
{"", "", 4.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_DOT},
{"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1},
{"", "", 0.0, Last},
};
static struct key keys_compose_h[] = {
{"ĥ", "Ĥ", 1.0, Copy, 0x0125, 0, 0x0124},
{"ħ", "Ħ", 1.0, Copy, 0x0127, 0, 0x0126},
{"", "", 8.0, Pad},
{"", "", 0.0, EndRow},
{"η", "Η", 1.0, Copy, 0x03B7, 0, 0x0397},
{"", "", 9.0, Pad},
{"", "", 0.0, EndRow},
{"", "", 1.5, Mod, Shift, .scheme = 1},
{"", "", 7, Pad},
{"", "", 1.5, Code, KEY_BACKSPACE, .scheme = 1},
{"", "", 0.0, EndRow},
{"Abc", "Abc", 1.0, BackLayer},
{"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1},
{",", "'", 1.0, Code, KEY_COMMA},
{"", "", 4.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_DOT},
{"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1},
{"", "", 0.0, Last},
};
static struct key keys_compose_j[] = {
{"ĵ", "Ĵ", 1.0, Copy, 0x0135, 0, 0x0134},
{"", "", 9.0, Pad},
{"", "", 0.0, EndRow},
{"", "", 10.0, Pad},
{"", "", 0.0, EndRow},
{"", "", 1.5, Mod, Shift, .scheme = 1},
{"", "", 7, Pad},
{"", "", 1.5, Code, KEY_BACKSPACE, .scheme = 1},
{"", "", 0.0, EndRow},
{"Abc", "Abc", 1.0, BackLayer},
{"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1},
{",", "'", 1.0, Code, KEY_COMMA},
{"", "", 4.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_DOT},
{"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1},
{"", "", 0.0, Last},
};
static struct key keys_compose_k[] = {
{"ķ", "Ķ", 1.0, Copy, 0x0137, 0, 0x0136},
{"ǩ", "Ǩ", 1.0, Copy, 0x01E9, 0, 0x01E8},
{"", "", 8.0, Pad},
{"", "", 0.0, EndRow},
{"κ", "Κ", 1.0, Copy, 0x03BA, 0, 0x039A},
{"", "", 9.0, Pad},
{"", "", 0.0, EndRow},
{"", "", 1.5, Mod, Shift, .scheme = 1},
{"", "", 7, Pad},
{"", "", 1.5, Code, KEY_BACKSPACE, .scheme = 1},
{"", "", 0.0, EndRow},
{"Abc", "Abc", 1.0, BackLayer},
{"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1},
{",", "'", 1.0, Code, KEY_COMMA},
{"", "", 4.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_DOT},
{"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1},
{"", "", 0.0, Last},
};
static struct key keys_compose_l[] = {
{"ľ", "Ľ", 1.0, Copy, 0x013D, 0, 0x013E},
{"ŀ", "Ŀ", 1.0, Copy, 0x0140, 0, 0x013F},
{"ł", "Ł", 1.0, Copy, 0x0142, 0, 0x0141},
{"", "", 7.0, Pad},
{"", "", 0.0, EndRow},
{"λ", "Λ", 1.0, Copy, 0x03BB, 0, 0x039B},
{"", "", 9.0, Pad},
{"", "", 0.0, EndRow},
{"", "", 1.5, Mod, Shift, .scheme = 1},
{"", "", 7, Pad},
{"", "", 1.5, Code, KEY_BACKSPACE, .scheme = 1},
{"", "", 0.0, EndRow},
{"Abc", "Abc", 1.0, BackLayer},
{"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1},
{",", "'", 1.0, Code, KEY_COMMA},
{"", "", 4.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_DOT},
{"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1},
{"", "", 0.0, Last},
};
static struct key keys_compose_z[] = {
{"ź", "Ź", 1.0, Copy, 0x017A, 0, 0x0179},
{"ż", "Ż", 1.0, Copy, 0x017C, 0, 0x017B},
{"ž", "Ž", 1.0, Copy, 0x017E, 0, 0x017D},
{"", "", 9.0, Pad},
{"", "", 0.0, EndRow},
{"ζ", "Ζ", 1.0, Copy, 0x03B6, 0, 0x0396},
{"", "", 9.0, Pad},
{"", "", 0.0, EndRow},
{"", "", 1.5, Mod, Shift, .scheme = 1},
{"", "", 7, Pad},
{"", "", 1.5, Code, KEY_BACKSPACE, .scheme = 1},
{"", "", 0.0, EndRow},
{"Abc", "Abc", 1.0, BackLayer},
{"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1},
{",", "'", 1.0, Code, KEY_COMMA},
{"", "", 4.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_DOT},
{"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1},
{"", "", 0.0, Last},
};
static struct key keys_compose_x[] = {
{"", "", 10.0, Pad},
{"", "", 0.0, EndRow},
{"χ", "Χ", 1.0, Copy, 0x03C7, 0, 0x03A7},
{"ξ", "Ξ", 1.0, Copy, 0x03BE, 0, 0x039E},
{"", "", 9.0, Pad},
{"", "", 0.0, EndRow},
{"", "", 1.5, Mod, Shift, .scheme = 1},
{"", "", 7, Pad},
{"", "", 1.5, Code, KEY_BACKSPACE, .scheme = 1},
{"", "", 0.0, EndRow},
{"Abc", "Abc", 1.0, BackLayer},
{"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1},
{",", "'", 1.0, Code, KEY_COMMA},
{"", "", 4.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_DOT},
{"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1},
{"", "", 0.0, Last},
};
static struct key keys_compose_c[] = {
{"ç", "Ç", 1.0, Copy, 0x00E7, 0, 0x00C7},
{"ć", "Ć", 1.0, Copy, 0x0107, 0, 0x0106},
{"ĉ", "Ĉ", 1.0, Copy, 0x0109, 0, 0x0108},
{"ċ", "Ċ", 1.0, Copy, 0x010B, 0, 0x010A},
{"č", "Č", 1.0, Copy, 0x010D, 0, 0x010C},
{"", "", 9.0, Pad},
{"", "", 0.0, EndRow},
{"χ", "Χ", 1.0, Copy, 0x03C7, 0, 0x03A7},
{"", "", 9.0, Pad},
{"", "", 0.0, EndRow},
{"", "", 1.5, Mod, Shift, .scheme = 1},
{"", "", 7, Pad},
{"", "", 1.5, Code, KEY_BACKSPACE, .scheme = 1},
{"", "", 0.0, EndRow},
{"Abc", "Abc", 1.0, BackLayer},
{"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1},
{",", "'", 1.0, Code, KEY_COMMA},
{"", "", 4.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_DOT},
{"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1},
{"", "", 0.0, Last},
};
static struct key keys_compose_v[] = {
{"", "", 10.0, Pad},
{"", "", 0.0, EndRow},
{"", "", 10.0, Pad},
{"", "", 0.0, EndRow},
{"", "", 1.5, Mod, Shift, .scheme = 1},
{"", "", 7, Pad},
{"", "", 1.5, Code, KEY_BACKSPACE, .scheme = 1},
{"", "", 0.0, EndRow},
{"Abc", "Abc", 1.0, BackLayer},
{"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1},
{",", "'", 1.0, Code, KEY_COMMA},
{"", "", 4.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_DOT},
{"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1},
{"", "", 0.0, Last},
};
static struct key keys_compose_b[] = {
{"", "", 10.0, Pad},
{"", "", 0.0, EndRow},
{"β", "Β", 1.0, Copy, 0x03B2, 0, 0x0392},
{"", "", 9.0, Pad},
{"", "", 0.0, EndRow},
{"", "", 1.5, Mod, Shift, .scheme = 1},
{"", "", 7, Pad},
{"", "", 1.5, Code, KEY_BACKSPACE, .scheme = 1},
{"", "", 0.0, EndRow},
{"Abc", "Abc", 1.0, BackLayer},
{"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1},
{",", "'", 1.0, Code, KEY_COMMA},
{"", "", 4.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_DOT},
{"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1},
{"", "", 0.0, Last},
};
static struct key keys_compose_n[] = {
{"ñ", "Ñ", 1.0, Copy, 0x00F1, 0, 0x00D1},
{"ń", "Ń", 1.0, Copy, 0x0144, 0, 0x0143},
{"ņ", "Ņ", 1.0, Copy, 0x0146, 0, 0x0145},
{"ň", "Ň", 1.0, Copy, 0x0148, 0, 0x0147},
{"ŋ", "Ŋ", 1.0, Copy, 0x014B, 0, 0x014A},
{"", "", 5.0, Pad},
{"", "", 0.0, EndRow},
{"ν", "Ν", 1.0, Copy, 0x03BD, 0, 0x039D},
{"", "", 9.0, Pad},
{"", "", 0.0, EndRow},
{"", "", 1.5, Mod, Shift, .scheme = 1},
{"", "", 7, Pad},
{"", "", 1.5, Code, KEY_BACKSPACE, .scheme = 1},
{"", "", 0.0, EndRow},
{"Abc", "Abc", 1.0, BackLayer, .scheme = 1},
{"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1},
{",", "'", 1.0, Code, KEY_COMMA},
{"", "", 4.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_DOT},
{"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1},
{"", "", 0.0, Last},
};
static struct key keys_compose_m[] = {
{"", "", 10.0, Pad},
{"", "", 0.0, EndRow},
{"μ", "Μ", 1.0, Copy, 0x03BC, 0, 0x039C},
{"", "", 9.0, Pad},
{"", "", 0.0, EndRow},
{"", "", 1.5, Mod, Shift, .scheme = 1},
{"", "", 7, Pad},
{"", "", 1.5, Code, KEY_BACKSPACE, .scheme = 1},
{"", "", 0.0, EndRow},
{"Abc", "Abc", 1.0, BackLayer},
{"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1},
{",", "'", 1.0, Code, KEY_COMMA},
{"", "", 4.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_DOT},
{"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1},
{"", "", 0.0, Last},
};
static struct key keys_compose_cyr_i[] = {
{"і", "І", 1.0, Copy, 0x0456, 0, 0x0406},
{"ї", "Ї", 1.0, Copy, 0x0457, 0, 0x0407},
{"", "", 8.0, Pad},
{"", "", 0.0, EndRow},
{"", "", 0.0, EndRow},
{"", "", 1.5, Mod, Shift, .scheme = 1},
{"", "", 7, Pad},
{"", "", 1.5, Code, KEY_BACKSPACE, .scheme = 1},
{"", "", 0.0, EndRow},
{"Abc", "Abc", 1.0, BackLayer},
{"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1},
{",", "'", 1.0, Code, KEY_EQUAL},
{"", "", 4.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_SLASH},
{"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1},
{"", "", 0.0, Last},
};
static struct key keys_compose_cyr_j[] = {
{"ј", "Ј", 1.0, Copy, 0x0458, 0, 0x0408},
{"", "", 9.0, Pad},
{"", "", 0.0, EndRow},
{"", "", 0.0, EndRow},
{"", "", 1.5, Mod, Shift, .scheme = 1},
{"", "", 7, Pad},
{"", "", 1.5, Code, KEY_BACKSPACE, .scheme = 1},
{"", "", 0.0, EndRow},
{"Abc", "Abc", 1.0, BackLayer},
{"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1},
{",", "'", 1.0, Code, KEY_EQUAL},
{"", "", 4.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_SLASH},
{"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1},
{"", "", 0.0, Last},
};
static struct key keys_compose_cyr_e[] = {
{"є", "Є", 1.0, Copy, 0x0454, 0, 0x0404},
{"", "", 9.0, Pad},
{"", "", 0.0, EndRow},
{"", "", 0.0, EndRow},
{"", "", 1.5, Mod, Shift, .scheme = 1},
{"", "", 7, Pad},
{"", "", 1.5, Code, KEY_BACKSPACE, .scheme = 1},
{"", "", 0.0, EndRow},
{"Abc", "Abc", 1.0, BackLayer},
{"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1},
{",", "'", 1.0, Code, KEY_EQUAL},
{"", "", 4.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_SLASH},
{"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1},
{"", "", 0.0, Last},
};
static struct key keys_compose_cyr_u[] = {
{"ў", "Ў", 1.0, Copy, 0x045E, 0, 0x040E},
{"", "", 9.0, Pad},
{"", "", 0.0, EndRow},
{"", "", 0.0, EndRow},
{"", "", 1.5, Mod, Shift, .scheme = 1},
{"", "", 7, Pad},
{"", "", 1.5, Code, KEY_BACKSPACE, .scheme = 1},
{"", "", 0.0, EndRow},
{"Abc", "Abc", 1.0, BackLayer},
{"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1},
{",", "'", 1.0, Code, KEY_EQUAL},
{"", "", 4.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_SLASH},
{"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1},
{"", "", 0.0, Last},
};
static struct key keys_compose_cyr_l[] = {
{"љ", "Љ", 1.0, Copy, 0x0459, 0, 0x0409},
{"", "", 9.0, Pad},
{"", "", 0.0, EndRow},
{"", "", 0.0, EndRow},
{"", "", 1.5, Mod, Shift, .scheme = 1},
{"", "", 7, Pad},
{"", "", 1.5, Code, KEY_BACKSPACE, .scheme = 1},
{"", "", 0.0, EndRow},
{"Abc", "Abc", 1.0, BackLayer},
{"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1},
{",", "'", 1.0, Code, KEY_EQUAL},
{"", "", 4.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_SLASH},
{"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1},
{"", "", 0.0, Last},
};
static struct key keys_compose_cyr_n[] = {
{"њ", "Њ", 1.0, Copy, 0x045A, 0, 0x040A},
{"", "", 9.0, Pad},
{"", "", 0.0, EndRow},
{"", "", 0.0, EndRow},
{"", "", 1.5, Mod, Shift, .scheme = 1},
{"", "", 7, Pad},
{"", "", 1.5, Code, KEY_BACKSPACE, .scheme = 1},
{"", "", 0.0, EndRow},
{"Abc", "Abc", 1.0, BackLayer},
{"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1},
{",", "'", 1.0, Code, KEY_EQUAL},
{"", "", 4.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_SLASH},
{"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1},
{"", "", 0.0, Last},
};
static struct key keys_compose_cyr_che[] = {
{"ћ", "Ћ", 1.0, Copy, 0x045B, 0, 0x040B},
{"ђ", "Ђ", 1.0, Copy, 0x0452, 0, 0x0402},
{"", "", 8.0, Pad},
{"", "", 0.0, EndRow},
{"", "", 0.0, EndRow},
{"", "", 1.5, Mod, Shift, .scheme = 1},
{"", "", 7, Pad},
{"", "", 1.5, Code, KEY_BACKSPACE, .scheme = 1},
{"", "", 0.0, EndRow},
{"Abc", "Abc", 1.0, BackLayer},
{"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1},
{",", "'", 1.0, Code, KEY_EQUAL},
{"", "", 4.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_SLASH},
{"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1},
{"", "", 0.0, Last},
};
static struct key keys_compose_cyr_tse[] = {
{"џ", "Џ", 1.0, Copy, 0x045F, 0, 0x040F},
{"ѕ", "Ѕ", 1.0, Copy, 0x0455, 0, 0x0405},
{"", "", 8.0, Pad},
{"", "", 0.0, EndRow},
{"", "", 0.0, EndRow},
{"", "", 1.5, Mod, Shift, .scheme = 1},
{"", "", 7, Pad},
{"", "", 1.5, Code, KEY_BACKSPACE, .scheme = 1},
{"", "", 0.0, EndRow},
{"Abc", "Abc", 1.0, BackLayer},
{"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1},
{",", "'", 1.0, Code, KEY_EQUAL},
{"", "", 4.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_SLASH},
{"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1},
{"", "", 0.0, Last},
};
static struct key keys_compose_cyr_g[] = {
{"ѓ", "Ѓ", 1.0, Copy, 0x0453, 0, 0x0403},
{"", "", 9.0, Pad},
{"", "", 0.0, EndRow},
{"", "", 0.0, EndRow},
{"", "", 1.5, Mod, Shift, .scheme = 1},
{"", "", 7, Pad},
{"", "", 1.5, Code, KEY_BACKSPACE, .scheme = 1},
{"", "", 0.0, EndRow},
{"Abc", "Abc", 1.0, BackLayer},
{"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1},
{",", "'", 1.0, Code, KEY_EQUAL},
{"", "", 4.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_SLASH},
{"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1},
{"", "", 0.0, Last},
};
static struct key keys_compose_cyr_k[] = {
{"ќ", "Ќ", 1.0, Copy, 0x0453, 0, 0x040C},
{"", "", 9.0, Pad},
{"", "", 0.0, EndRow},
{"", "", 0.0, EndRow},
{"", "", 1.5, Mod, Shift, .scheme = 1},
{"", "", 7, Pad},
{"", "", 1.5, Code, KEY_BACKSPACE, .scheme = 1},
{"", "", 0.0, EndRow},
{"Abc", "Abc", 1.0, BackLayer},
{"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1},
{",", "'", 1.0, Code, KEY_EQUAL},
{"", "", 4.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_SLASH},
{"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1},
{"", "", 0.0, Last},
};
static struct key keys_compose_math[] = {
{"1", "!", 1.0, Code, KEY_1},
{"2", "@", 1.0, Code, KEY_2},
{"3", "#", 1.0, Code, KEY_3},
{"4", "$", 1.0, Code, KEY_4},
{"5", "%", 1.0, Code, KEY_5},
{"6", "^", 1.0, Code, KEY_6},
{"7", "&", 1.0, Code, KEY_7},
{"8", "*", 1.0, Code, KEY_8},
{"9", "(", 1.0, Code, KEY_9},
{"0", ")", 1.0, Code, KEY_0},
{"", "", 0.0, EndRow},
{"", "", 10.0, Pad},
{"", "", 0.0, EndRow},
{"", "", 2, Mod, Shift, .scheme = 1},
{"-", "-", 1, Code, KEY_MINUS},
{"+", "+", 1, Code, KEY_EQUAL, 0, Shift},
{"/", "/", 1, Code, KEY_SLASH},
{"*", "*", 1, Code, KEY_8, 0, Shift},
{"=", "=", 1, Code, KEY_EQUAL},
{"_", "_", 1, Code, KEY_MINUS, 0, Shift},
{"", "", 2, Pad},
{"", "", 0.0, EndRow},
{"Abc", "Abc", 1.0, BackLayer},
{"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1},
{",", "'", 1.0, Code, KEY_COMMA, &layouts[ComposeMath]},
{"", "", 4.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_DOT, &layouts[ComposePunctuation]},
{"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1},
{"", "", 0.0, Last},
};
static struct key keys_compose_punctuation[] = {
{"1", "!", 1.0, Code, KEY_1},
{"2", "@", 1.0, Code, KEY_2},
{"3", "#", 1.0, Code, KEY_3},
{"4", "$", 1.0, Code, KEY_4},
{"5", "%", 1.0, Code, KEY_5},
{"6", "^", 1.0, Code, KEY_6},
{"7", "&", 1.0, Code, KEY_7},
{"8", "*", 1.0, Code, KEY_8},
{"9", "(", 1.0, Code, KEY_9},
{"0", ")", 1.0, Code, KEY_0},
{"", "", 0.0, EndRow},
{"", "", 2, Mod, Shift, .scheme = 1},
{"", "", 1, Pad},
{":", ":", 1, Code, KEY_SEMICOLON, 0, Shift},
{";", ";", 1, Code, KEY_SEMICOLON, 0},
{"!", "!", 1, Code, KEY_1, 0, Shift},
{"?", "?", 1, Code, KEY_DOT, 0, Shift},
{",", ",", 1, Code, KEY_COMMA},
{"", "", 2, Pad},
{"", "", 0.0, EndRow},
{"Abc", "Abc", 1.0, BackLayer},
{"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1},
{",", "'", 1.0, Code, KEY_COMMA, &layouts[ComposeMath]},
{"", "", 4.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_DOT, &layouts[ComposePunctuation]},
{"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1},
{"", "", 0.0, Last},
};
static struct key keys_compose_bracket[] = {
{"", "", 5, Pad},
{"{", "{", 1, Code, KEY_LEFTBRACE, 0, Shift},
{"}", "}", 1, Code, KEY_RIGHTBRACE, 0, Shift},
{"[", "[", 1, Code, KEY_LEFTBRACE},
{"]", "]", 1, Code, KEY_RIGHTBRACE},
{"", "", 0, EndRow},
{"", "", 5, Pad},
{"<", "<", 1, Code, KEY_COMMA, 0, AltGr},
{">", ">", 1, Code, KEY_SLASH, 0, Shift},
{"`", "`", 1, Code, KEY_GRAVE},
{"\"", "\"", 1, Code, KEY_APOSTROPHE, 0, Shift},
{"'", "'", 1, Code, KEY_APOSTROPHE},
{"", "", 0.0, EndRow},
{"", "", 2, Mod, Shift, .scheme = 1},
{"", "", 8, Pad},
{"", "", 0.0, EndRow},
{"Abc", "Abc", 1.0, BackLayer},
{"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme = 1},
{",", "'", 1.0, Code, KEY_COMMA, &layouts[ComposeMath]},
{"", "", 4.0, Code, KEY_SPACE},
{".", "?", 1.0, Code, KEY_DOT, &layouts[ComposePunctuation]},
{"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme = 1},
{"", "", 0.0, Last},
};