Add compose seq's for ASCII symbols absent from Cyrillic layouts to ru_RU
Intro
JCUKEN (ЙЦУКЕН) layout and its derivatives is a de-facto standard for many Cyrillic scripts (Bashkir, Tatar, Belarusian, Kazakh, Russian, Tajik, Ukrainian, Yakut, etc.) and is the only one printed on mass-produced Cyrillic keyboards (in the form of QWERTY/ЙЦУКЕН pair) and, like QWERTY, it has a number of flaws. One of the very annoying ones is that most of the punctuation marks were moved from their QWERTY positions to uppercase number row to make space for 33+ Cyrillic letters, and ~`@#$^&[]{}|'<>
were removed altogether. This is a major PITA for programmers, scientists, tech writers and translators who type in two or more languages (one has to Alt+Shift, Shift+4, Alt+Shift
to type $
). A number of projects try to fix this, including alt layouts, AHK scripts, custom XCompose maps, etc. (examples below), but no simple solution available OOTB yet.
Proposal
Add sequences like
<Multi_key> <colon> <space> : "^" asciicircum # CIRCUMFLEX ACCENT
and maybe also
<Multi_key> <space> <colon> : "^" asciicircum # CIRCUMFLEX ACCENT
to ru_RU.UTF-8/Compose
(and possibly other languages with JCUKEN-based layouts) for all the missing characters, so that they can be entered using the same keys as in QWERTY. The <Multi_key> <symbol> <space>
and <Multi_key> <space> <symbol>
pattern is established in Spacing versions of accents section of en_US
and is not used anywhere else.
Complete file: ru_RU.UTF-8_Compose.pre
Advantages
- Doesn't require inventing and memorizing many sequences — the keys are the same as in QWERTY, only prefixed with
Compose
(and trailingspace
is typed naturally). - Uses existing
Compose
key approach and tries to follow established patterns. - Doesn't require dedicated modifier keys.
- Completely non-invasive, doesn't break existing UX.
- Doesn't touch
en_US
.
Drawbacks
A couple of proposed sequences, namely
<Multi_key> <quotedbl> <space> : "@" at # COMMERCIAL AT
<Multi_key> <semicolon> <space> : "$" dollar # DOLLAR SIGN
override ones in en_US
:
<Multi_key> <quotedbl> <space> : "¨" diaeresis # DIAERESIS
<Multi_key> <semicolon> <space> : "˛" ogonek # OGONEK
While unfortunate, this is not critical, as spacing diaeresis is available in other sequences, and ogonek is not used in Cyrillic. As this proposal only covers Cyrillic layout(s) without touching en_US
, these conflicts may be considered minor.
Alternative approaches
-
Use a "switch layout while pressed" modifier (
grp:switch
and other...switch
options inxkb-options
). Convenient, but requires a dedicated mod key, and JCUKEN is crowded already. Same is for customAltGr
layer. Definitely not something to impose upon users by default. By contrast,Compose
can be mapped to an existing key in a "tap forCompose
, hold forModifier
" manner. -
Use a dead key like
<dead_somekey> <quotedbl>
. Requires some dead key to be set up to a non-standard behavior, so not an option. (Side note: it would be nice to havedead_latin
anddead_cyrillic
, similar todead_greek
). -
Add compose sequences in style of the ones in Characters that may be difficult to access section of
en_US
. While this proposal fits there nicely, it requires inventing new sequences of look-alike chars, which seems challenging, given the overall limited repertoire of symbols in JCUKEN (.,"-_?!();:/\=+%*№
). More importantly, it requires users to learn a number of different sequences. This proposal, instead, uses a unified pattern, and the chars are printed on keycaps, nothing to memorize. -
Add sequences as proposed, but with shorter/simpler patterns, like
<Multi_key> <quotedbl> <quotedbl>
or<Multi_key> <quotedbl>
. Both, especially the latter, override too many things inen_US
, compared to a couple minor ones in the proposal. It seems that other possible sequences are similarly either too conflicting, or too complex to type/memorize. -
Input method - likely an overkill.
-
Non-JCUKEN layout as default for Cyrillic scripts. Probably the best in long-term, but extremely invasive (and incompatible with kbd legends).
Existing attempts at dealing with this
- https://gitlab.freedesktop.org/xkeyboard-config/xkeyboard-config/-/blob/master/symbols/ru?ref_type=heads#L1062
- https://gitlab.freedesktop.org/xkeyboard-config/xkeyboard-config/-/blob/master/symbols/ru?ref_type=heads#L1234
- https://gitlab.freedesktop.org/xkeyboard-config/xkeyboard-config/-/blob/master/symbols/ru?ref_type=heads#L1258
- https://ilyabirman.ru/typography-layout/
- https://tonsky.livejournal.com/318571.html
- https://github.com/braindefender/universal-layout
- https://habr.com/ru/articles/99042/
- https://github.com/uqqu/qPhyx