在 Linux 中通过按住一个键来选择字符(如在 OSX 中)

xim*_*bal 24 x11 input-method keyboard-layout

我一直想知道是否有任何可以做 Mac OS X 之类的插件。我的母语是西班牙语,现在我生活在讲法语的环境中,我也经常说英语,所以我需要不同的口音,特别是在法语方面,我已经使用 Linux 两年了,并且时不时地使用 Mac OS X 进行测试。

我发现 Mac OS X 上可用的功能非常有用,您可以一直按该键,它会显示相同字符、不同重音或标点符号的可用选项列表。我可以在 Linux 上执行此操作吗?

Hal*_*ost 5

恐怕我知道没有任何应用程序可以做到这一点。开发一种可能需要创建自己的输入法(以替换XIM)。

但是,我可以为您提供一个替代方案,您可能会发现它比简单地更改按键布局更有帮助。XIM一段时间以来,X(通过)提供了一个名为 XCompose 的实用程序。XCompose 允许您通过按前导键(您指定的键)后跟可自定义的键序列来键入“异国情调”字符。例如,Composee'产生字符é。大多数情况下,默认序列非常直观,但 XCompose 最强大的部分是您可以添加(或修改)序列,以便从理论上生成您认为合适的任何 unicode 字符。

序列的设置是通过纯文本文件完成的(您可以放入$HOME/.XCompose或放在其他地方但$HOME/.XCompose有源文件(如果您感兴趣,可以在此处查看我的整个设置;具体查看XCompose和 下的文件compose/)。下面是一个我个人的片段$HOME/.XCompose

include "%L"     # This enables all the default bindings
include "/home/halosghost/.compose/greek.compose" # some greek characters
Run Code Online (Sandbox Code Playgroud)

现在是greek.compose上面包含的片段(请注意,这些肯定不是您可以使用的最符合人体工程学或最有效的序列,它们只是一个示例):

# Lower case
<Multi_key> <a> <l> <p> <h> <a>     : "?"   U03B1   # Alpha
<Multi_key> <b> <e> <t> <a>         : "?"   U03B2   # Beta
<Multi_key> <d> <e> <l> <t> <a>     : "?"   U03B4   # Delta
<Multi_key> <g> <a> <m> <m> <a>     : "?"   U03B3   # Gamma
<Multi_key> <l> <a> <m> <b> <d> <a> : "?"   U03BB   # Lambda
<Multi_key> <p> <i>                 : "?"   U03C0   # Pi
<Multi_key> <m> <u>                 : "µ"   U03BC   # Mu
Run Code Online (Sandbox Code Playgroud)

您会看到这些文件的格式实际上非常简单(尽管在某些情况下您不使用字符本身而是使用它的名称(例如,<period>而不是<.>))。

有了上面的内容,我现在可以输入Capsmu生成µ(请注意,我的 Compose 键设置为Caps)。

您没有提到您正在使用(或考虑使用)哪个发行版,但 XCompose 附带 xorg,因此您需要做的就是设置它。XIM可以在此处找到有关设置 Compose 的相关阅读材料,但您还应该注意,XIM这些天来它已经很旧了,它可能不是最佳选择。此外,至少还有一个其他 IME 支持 Compose 序列(尽管它使用的实现略有不同):IBus

就我个人而言,我使用XIM,我希望在我切换到 wayland 之前这样做(我希望那里会有一个更好的 IME 等着我),但这是 Linux;一种尺寸并不适合所有人,您应该使用最适合您的工作流程的尺寸(在合理范围内)。


  1. 从该链接中,您会发现您可以通过以下命令(for Caps)轻松设置用于 Compose 的键(假设您的键盘不够深奥,实际上没有专用的 Compose 键):

    setxkbmap -option compose:caps
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我可以做梦,对吧?

作为最后一个有趣的说明,这篇文章中的所有“异国情调”字符(包括 é、“、”、µ、¹ 和 ²)都是使用 XCompose 生成的。