Unix & Linux Asked by mmaluff on July 29, 2020
My language, Guarani, uses G̃/g̃ to denote the nasalized velar approximant. I thought I’d be able to type it by combining a dead tilde with g, but this does not work. Why doesn’t it, and how can I fix it?
My main suspicion is that this has to do with the fact that there is no separate Unicode character for g̃, just g with the combining tilde. I can type ỹ and ṽ just fine, but not j̃, r̃, m̃, which seems like good evidence that therein lies the problem.
So one way I could get around this would be to map a key to 0x1000303 (which is U+0303, or ◌̃ ), the combining tilde, instead of to dead_tilde. However, this creates several problems:
It seems like in the ideal scenario I’d have X notice that dead_tilde + g doesn’t work and just process it as if I’m typing g + ◌̃, and enter the two characters for me together, as it does for ñ, ã, ẽ, ĩ, õ, ũ, ỹ, etc.
It’s worth noting that it’s not possible to get around this by adding the g̃ directly to my keyboard layout, as xkb doesn’t seem to support mapping a key to a combined Unicode glyph (though see the answer to Custom xkb layout in which one key creates two unicode code points for a hacky workaround). If I could fix that, I suppose this would be much less of a problem.
I’m running Ubuntu 18.04, not sure what other background info would be helpful, but I assume this is a problem for anyone running X.
Another thing I’ve tried, which also did not work, is editing the Compose mappings to add a composed g̃. I wrote an .XCompose file as follows:
include "%L"
<dead_tilde> <g> : "g̃" gtilde
<dead_tilde> <G> : "G̃" Gtilde
But this also did not work, I assume for the same reason above: X expects a single character, and g̃ is technically two. Incidentally, I noticed a number of mappings shipped in my locale’s default Compose file also don’t work, presumably for the same reason. The following mappings for en_US.UTF-8, and perhaps many more, actually do nothing:
<dead_acute> <dead_tilde> <a> : "ã́" # LATIN SMALL LETTER A WITH TILDE AND ACUTE
<dead_grave> <dead_tilde> <a> : "ã̀" # LATIN SMALL LETTER A WITH TILDE AND GRAVE
<dead_acute> <dead_tilde> <A> : "Ã́" # LATIN CAPITAL LETTER A WITH TILDE AND ACUTE
<dead_grave> <dead_tilde> <A> : "Ã̀" # LATIN CAPITAL LETTER A WITH TILDE AND GRAVE
<dead_acute> <dead_tilde> <e> : "ẽ́" # LATIN SMALL LETTER E WITH TILDE AND ACUTE
<dead_grave> <dead_tilde> <e> : "ẽ̀" # LATIN SMALL LETTER E WITH TILDE AND GRAVE
<dead_acute> <dead_tilde> <E> : "Ẽ́" # LATIN CAPITAL LETTER E WITH TILDE AND ACUTE
<dead_grave> <dead_tilde> <E> : "Ẽ̀" # LATIN CAPITAL LETTER E WITH TILDE AND GRAVE
<dead_acute> <dead_tilde> <i> : "ĩ́" # LATIN SMALL LETTER I WITH TILDE AND ACUTE
<dead_grave> <dead_tilde> <i> : "ĩ̀" # LATIN SMALL LETTER I WITH TILDE AND GRAVE
<dead_acute> <dead_tilde> <I> : "Ĩ́" # LATIN CAPITAL LETTER I WITH TILDE AND ACUTE
<dead_grave> <dead_tilde> <I> : "Ĩ̀" # LATIN CAPITAL LETTER I WITH TILDE AND GRAVE
<dead_grave> <dead_tilde> <o> : "õ̀" # LATIN SMALL LETTER O WITH TILDE AND GRAVE
<dead_grave> <dead_tilde> <O> : "Õ̀" # LATIN CAPITAL LETTER O WITH TILDE AND GRAVE
<dead_grave> <dead_tilde> <u> : "ũ̀" # LATIN SMALL LETTER U WITH TILDE AND GRAVE
<dead_grave> <dead_tilde> <U> : "Ũ̀" # LATIN CAPITAL LETTER U WITH TILDE AND GRAVE
<dead_grave> <m> : "m̀" # LATIN SMALL LETTER M WITH GRAVE
<dead_grave> <M> : "M̀" # LATIN CAPITAL LETTER M WITH GRAVE
As a matter of opinion, I do not think this is what we should fix: adding an extra line to Compose files for every possible diacritic just seems wasteful, and is not taking advantage of the simplicity of the nice combining diacritics Unicode wants us to use.
An interesting thing I noticed before I removed this .XCompose is that launching GTK programs from the terminal would result in the following errors:
(gedit:7229): Gtk-WARNING **: 23:03:04.848: GTK+ supports to output one char only: "g̃" gtilde: <dead_tilde> <g> : "g̃" gtilde
So presumably this is a GTK issue? I’ll continue trying to track it down, but would appreciate any help.
It seems like my solution would be to fix this: https://gitlab.gnome.org/GNOME/gtk/-/issues/186
From what I have read, you are out of luck using standard xkb because, as you have found, with xkb the output of a dead key combo is either zero (if the second key did not match a valid sequence) or one Unicode code point.
I do not have an Ubuntu running X to test on, so I cannot test this suggestion, but I believe the solution for you is to switch to using uim, which supports multi-codepoint outputs from dead key combos. You can read about how to set up uim
at wikibooks or from this post (but do not follow the whole post, as it is solving a different problem).
The post I referenced shows how to get 'b to output the 2 character sequence 'b
while while still allowing 'a to output the single character á
. They solved it by making ' a dead key and then configuring the sequence dead 'b explicitly, and then repeating that for the 99 other characters on the keyboard. You do not have to go so far.
You already created the .XCompose
file you need. Switching to uim
should be all that is left to do.
Correct answer by Old Pro on July 29, 2020
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP