JexGay
Last updated 2026-09-20
JexGay is a keyboard layout for the Unexpected Keyboard Android app I designed for myself.
Design
The JexGay layout is heavily inspired by the MessagEase layout, in that keys enter the most common characters with a tap and other characters are entered by swiping in eight directions. However, there are some major differences:
- MessagEase is a paid proprietary app, whereas JexGay is designed for the FOSS Unexpected Keyboard app.
- MessagEase is designed only for English, whereas JexGay is for a combination of English, Czech and German.
- The MessagEase layout only has 14 keys (4×4 layout with three keys joined into the spacebar), while JexGay has 24 keys (6×4 layout without merged keys), allowing many more characters to be inputted without requiring special gestures other than taps and swipes.
- JexGay does not use a shift key to enter uppercase letters. Instead, each uppercase letter is a separate entry residing “above“ the lowercase letter. For example:
- A tap on the key below the spacebar enters “a”. A swipe up on the same key enters “A”.
- A swipe left on the key below the spacebar enters “g”. A swipe up-left on the same key enters “G”.
There is some regularity to the layout:
- The middle 4×4 keys, except the very bottom subrow, are mostly for entering ASCII characters and some common non-ASCII punctuation.
- The two columns on the side, except the top row, are mostly for Czech and German accented letters and non-ASCII currency symbols.
- The top left key is for arrows and the top right for backspace and other editing operations.
- The very bottom subrow is for accents.
Name
The layout is named after two keys on the keyboard whose triplet of letters happens to spell out a word: “Jex” (the surname of a professor at my faculty) and “gay”. This is not meant to imply any connection between these two words, it’s purely coincidental.
XML code
If you want to try out JexGay for yourself, simply install the Unexpected Keyboard app (from F-Droid, Google Play or GitHub), add a custom layout in the settings and paste the code below.
<keyboard name="JexGay" bottom_row="false" script="latin">
<row>
<key nw="↖" n="↑" ne="↗" w="←" c="" e="→" sw="↙" s="↓" se="↘" />
<key nw="'" n="U" ne=""" w="‘" c="u" e="’" sw="„" s="“" se="”" />
<key nw="Q" n="S" ne="P" w="q" c="s" e="p" sw="…" s="•" se="." />
<key nw="B" n="R" ne="K" w="b" c="r" e="k" sw="," s=":" se=";" />
<key nw="`" n="C" ne="´" w="switch_forward" c="c" e="delete" sw="action" s="enter" se="\n" />
<key nw="undo" n="pasteAsPlainText" ne="redo" w="selectAll" c="backspace" e="shareText" sw="copy" s="paste" se="cut" />
</row>
<row>
<key nw="Ü" n="Í" ne="Š" w="ü" c="í" e="š" sw="" s="¥" se="ß" />
<key nw="^" n="I" ne="/" w="+" c="i" e="-" sw="_" s="|" se="\\" />
<key nw="≤" n="up" ne="≥" w="left" c="space" e="right" sw="<" s="down" se=">" />
<key nw="J" n="E" ne="X" w="j" c="e" e="x" sw="\?" s="!" se="‽" />
<key nw="[" n="H" ne="]" w="(" c="h" e=")" sw="{" s="&" se="}" />
<key nw="Č" n="Ě" ne="Ť" w="č" c="ě" e="ť" sw="superscript" s="subscript" se="ordinal" />
</row>
<row>
<key nw="Ä" n="Á" ne="Ů" w="ä" c="á" e="ů" sw="accent_aigu" s="£" se="€" />
<key nw="*" n="N" ne="–" w="=" c="n" e="—" sw="\#" s="0" se="1" />
<key nw="G" n="A" ne="Y" w="g" c="a" e="y" sw="2" s="3" se="4" />
<key nw="F" n="O" ne="W" w="f" c="o" e="w" sw="5" s="6" se="7" />
<key nw="alt" n="T" ne="esc" w="ctrl" c="t" e="meta" sw="8" s="9" se="f11_placeholder" />
<key nw="Ň" n="É" ne="Ó" w="ň" c="é" e="ó" sw="f12_placeholder" s="config" se="box" />
</row>
<row>
<key nw="Ö" n="Ý" ne="Ú" w="ö" c="ý" e="ú" sw="accent_caron" s="accent_cedille" se="accent_circonflexe" />
<key nw="$" n="V" ne="%" w="~" c="v" e="\@" sw="accent_grave" s="accent_macron" se="accent_ring" />
<key nw="\t" n="L" ne="tab" w="cursor_left" c="l" e="cursor_right" sw="accent_tilde" s="accent_trema" se="accent_ogonek" />
<key nw="Z" n="D" ne="switch_clipboard" w="z" c="d" e="compose" sw="accent_dot_above" s="accent_double_aigu" se="accent_slash" />
<key nw="switch_numeric" n="M" ne="switch_greekmath" w="switch_emoji" c="m" e="fn" sw="accent_arrow_right" s="accent_breve" se="accent_bar" />
<key nw="Ž" n="Ř" ne="Ď" w="ž" c="ř" e="ď" sw="accent_dot_below" s="accent_horn" se="accent_hook_above" />
</row>
</keyboard>