为什么我不能输入 ag?和我输入ñ的方式一样?

mma*_*uff 12 xorg keyboard i18n x11 gtk

我的语言瓜拉尼语使用 G?/g? 表示鼻化的软膜近似。我以为我可以通过将死波浪号与 g 结合来输入它,但这不起作用。为什么没有,我该如何解决?

我的主要怀疑是,这与以下事实有关,即 g? 没有单独的 Unicode 字符,只有带有组合波浪号的 g。我可以打字 ?和 ?很好,但不是 j?, r?, m?,这似乎是问题所在的很好的证据。

因此,我可以解决这个问题的一种方法是将键映射到 0x1000303(即 U+0303 或 ?? ),即组合波浪号,而不是 dead_tilde。然而,这会产生几个问题:

  • 如果我在所有情况下都切换到使用组合波浪号:
    • 我最终输入例如 n + ?? 在许多需要单个字符 ñ 的情况下,它们会产生不同的结果。例如,我注意到某些网站在我输入一个和另一个时不会显示相同的搜索结果(显然这是在他们身上,但我想要一个与现在世界一样的键盘布局)。
    • 令人讨厌的是,我必须退格两次才能删除带有组合波浪号的字符,如果它仅用于 g?,我可以接受,但对于每个鼻化字符来说,这有点多。
  • 如果我同时添加两者,这就是我目前正在做的,这对于可用性来说变得非常困难,因为:
    • 当我的大脑认为它们相同时,我必须在每种情况下考虑使用哪个键
    • 输入两者的机制不同,因为 dead_tilde 在字符之前被按下,而 ?? 追求。我可怜的小脑袋永远不会习惯那个。

似乎在理想情况下,我会让 X 注意到 dead_tilde + g 不起作用,只是像输入 g + ?? 一样处理它,然后一起为我输入两个字符,就像 ñ 一样, ã, ?, ?, õ, ?, ? 等。

值得注意的是,通过添加 g? 直接到我的键盘布局,因为 xkb 似乎不支持将一个键映射到组合的 Unicode 字形(尽管请参阅自定义 xkb 布局的答案,其中一个键创建两个 unicode 代码点以进行变通的解决方法)。如果我能解决这个问题,我想这将是一个小问题。

我正在运行 Ubuntu 18.04,不确定其他背景信息会有帮助,但我认为这对运行 X 的任何人来说都是一个问题。

编辑 1:编辑 Compose 映射不起作用

我尝试过的另一件事也不起作用,它是编辑Compose映射以添加组合 g?。我写了一个 .XCompose 文件如下:

include "%L"

<dead_tilde> <g> : "g?" gtilde
<dead_tilde> <G> : "G?" Gtilde
Run Code Online (Sandbox Code Playgroud)

但这也不起作用,我假设出于上述相同的原因:X 需要单个字符,而 g? 技术上是两个。顺便说一句,我注意到我的语言环境的默认 Compose 文件中附带的一些映射也不起作用,大概是出于同样的原因。en_US.UTF-8 的以下映射,也许还有更多,实际上什么都不做:

<dead_acute> <dead_tilde> <a>       : "a??"   # LATIN SMALL LETTER A WITH TILDE AND ACUTE
<dead_grave> <dead_tilde> <a>       : "a??"   # LATIN SMALL LETTER A WITH TILDE AND GRAVE
<dead_acute> <dead_tilde> <A>       : "A??"   # LATIN CAPITAL LETTER A WITH TILDE AND ACUTE
<dead_grave> <dead_tilde> <A>       : "A??"   # LATIN CAPITAL LETTER A WITH TILDE AND GRAVE
<dead_acute> <dead_tilde> <e>       : "e??"   # LATIN SMALL LETTER E WITH TILDE AND ACUTE
<dead_grave> <dead_tilde> <e>       : "e??"   # LATIN SMALL LETTER E WITH TILDE AND GRAVE
<dead_acute> <dead_tilde> <E>       : "E??"   # LATIN CAPITAL LETTER E WITH TILDE AND ACUTE
<dead_grave> <dead_tilde> <E>       : "E??"   # LATIN CAPITAL LETTER E WITH TILDE AND GRAVE
<dead_acute> <dead_tilde> <i>       : "i??"   # LATIN SMALL LETTER I WITH TILDE AND ACUTE
<dead_grave> <dead_tilde> <i>       : "i??"   # LATIN SMALL LETTER I WITH TILDE AND GRAVE
<dead_acute> <dead_tilde> <I>       : "I??"   # LATIN CAPITAL LETTER I WITH TILDE AND ACUTE
<dead_grave> <dead_tilde> <I>       : "I??"   # LATIN CAPITAL LETTER I WITH TILDE AND GRAVE
<dead_grave> <dead_tilde> <o>       : "o??"   # LATIN SMALL LETTER O WITH TILDE AND GRAVE
<dead_grave> <dead_tilde> <O>       : "O??"   # LATIN CAPITAL LETTER O WITH TILDE AND GRAVE
<dead_grave> <dead_tilde> <u>       : "u??"   # LATIN SMALL LETTER U WITH TILDE AND GRAVE
<dead_grave> <dead_tilde> <U>       : "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
Run Code Online (Sandbox Code Playgroud)

就意见而言,我不认为这是我们应该解决的问题:为每个可能的变音符号在 Compose 文件中添加额外的一行似乎很浪费,并且没有利用 Unicode 希望我们使用的漂亮的组合变音符号的简单性.

在删除这个 .XCompose 之前,我注意到一件有趣的事情是从终端启动 GTK 程序会导致以下错误:

(gedit:7229): Gtk-WARNING **: 23:03:04.848: GTK+ supports to output one char only: "g?" gtilde: <dead_tilde> <g> : "g?" gtilde
Run Code Online (Sandbox Code Playgroud)

所以大概这是一个GTK问题?我会继续努力追踪它,但希望得到任何帮助。

编辑 2:相关 GTK 问题

我的解决方案似乎是解决这个问题:https : //gitlab.gnome.org/GNOME/gtk/-/issues/186

mma*_*uff 1

我刚刚升级到 Ubuntu 20.04,现在.XCompose解决方案完美运行!所以这应该是最好的解决方案。您只需.XCompose在主目录中创建一个文件,如下所示,或添加到现有文件中:

\n
include "%L"\n\n<dead_tilde> <g> : "g\xcc\x83" gtilde\n<dead_tilde> <G> : "G\xcc\x83" Gtilde\n
Run Code Online (Sandbox Code Playgroud)\n