掌握 Linux 输入魔法:深入解析 XCompose 自定义组合键

本文深入探讨了 Linux 系统中的 XCompose 功能,这是一个强大且灵活的工具,允许用户通过自定义组合键序列来输入 Unicode 字符,甚至是预定义的字符串。文章涵盖了其工作原理、配置方法、自定义规则创建以及常见用例。

我们的计算机可以显示数量惊人的符号。仅 Unicode 就定义了超过 15 万个字符,涵盖了从数学运算符、音标字母到表情符号以及晦涩的历史文字等一切。另一方面,我们的键盘却顽固地局限于几十个按键。

在 Windows 上,传统的解决方法涉及记忆数字代码或在字符映射表中翻找。而 Linux,作为 Linux,提供了一个灵活得多的方案:XCompose。这是那些功能强大、默默闪耀的特性之一,它已经存在了很久,几乎无处不在都能工作,但不知怎地,至今仍像个秘密。

什么是 XCompose?

XCompose 是 X11 输入系统的一部分。它允许你定义组合序列:能产生一个 Unicode 字符的简短按键序列。可以把它看作一个可编程的、功能超强的“死键”系统。这可以简单到设定按 ‘E’ 产生欧元符号,也可以复杂到将“flower”转换成一个小花表情符号。尽管这个系统起源于 X11,但据我所知,它在 Wayland 下也基本能工作。那么让我们深入了解一下。

启动 XCompose

关键就在于 Compose 键或 Multi-key。你按下它,本质上就进入了 XCompose 模式,所以当你输入“flower”时,系统知道你不是想输入那些字面字母。你可以在系统设置里选择键盘上的哪个键作为你的 Compose 键。右 Alt 或 Ctrl 键是常见选择。我使用我的 Caps Lock 键,因为我从来不用它做别的事。

你也可以通过其他方式设置 Compose 键,包括在 /.XCompose 文件中设置,但通常更容易在系统设置里完成。不过,/.XCompose 是你可以设置自定义规则的地方之一。

默认情况下,你应该已经有一些有用的组合了。例如,<Compose> ' e 应该给你 é,<Compose> " o 应该给你 ö。默认规则位于 /usr/share/X11/locale/*/Compose,其中 * 是你选择的区域设置。

自定义规则

默认规则通常涵盖了大量内容。但你可能想定义自己的规则。你可以通过创建或编辑 ~/.XCompose 来实现。这个文件可以包含规则或包含其他规则文件。不过,我听说 Wayland 不支持包含语句,所以如果你使用 Wayland,需要记住这一点。

文件格式非常简单,每行是一个定义:

1
<Multi_key> <a> <e> : "æ"

注意不要犯这样的错误:尝试写成类似 <@> 的东西。所有特殊字符都需要使用 X11 的 keysymdef.h 文件中的名称,如 <at><asterisk>

当你创建一个自定义文件时,通常以这样开头:

1
include "%L"

这告诉系统为你所在的语言环境加载默认规则。你也可以使用 %H 代表你的家目录,或 %S 代表系统目录。在某些系统上,你可能需要使用 "/%L"

正式地,配置行的格式如下:

1
<EVENT>... : <RESULT>  # 注释

<EVENT> 允许你不仅指定按键,还可以指定必须存在或不存在的修饰键。<RESULT> 可以是一个字符串或一个字符,你甚至可以插入一个八进制或十六进制数字以确保得到你想要的键。更多信息,请参阅手册页。

值得注意的是,你提供的任何定义都会覆盖系统的定义,所以如果你不喜欢某个规则,很容易将其重定义为其他内容。一个好处是,结果不必是单个字符。你可以使用整个字符串系统。例如:

1
<Multi_key> <c> <q> : "CQ de WD5GNR K"

据我所知,没有一种方法可以在结果中嵌入始终有效的新行。你可以尝试使用类似 \xa 的东西,但 \n 不行。此外,在密码/PIN 输入框中,替换不会生效,这是设计使然。

为什么构建你自己的规则?

你可以构建对你自己有意义的字符串。但你知道,已经有人做过了。这个代码仓库 里有一个有趣定义的核心文件和一些额外的文件。我的建议是:不要使用他们的安装函数,那只提供核心文件。只需像这样创建你自己的文件,并根据你放置文件的位置进行调整:

1
2
3
4
5
6
include "%L"
include "/home/xxx/xcompose/dotXCompose"
include "/home/xxx/xcompose/frakturcompose"
include "/home/xxx/xcompose/emoji.compose"
include "/home/xxx/xcompose/modletters.compose"
include "/home/xxx/xcompose/parens.compose"

请记住,当你更改这个文件时,它只会应用于更改后启动的 GUI 应用程序。试试 <Compose> : ) 可以得到 等符号。

如果你不喜欢那个集合,还有其他的。

一些常见用例

音乐?试试 (#b) 或 (##)。你甚至可以做音符,如 (#e)。更喜欢数学?那 (/=) 或平方根符号 (v/) 怎么样?如果你的数学更偏向会计,你可以写欧元 (=E) 或日元 (¥=Y)。火腿族会欣赏 /O,它产生 Ø(注意,输入时是大写字母 O)。

还有很多其他的组合。最好的了解方法是查看你正在使用的文件并进行实验。

1
<Multi_key> <3> <3> : "¯\_(ツ)_/¯" # 耸肩

你可以轻松地编写诸如你的姓名、电子邮件地址等东西。因为你可以使用名称而不是神秘的按键,所以使用起来要容易得多。例如,我记不住我的名字在 Macro+F5 上,但 <Compose>@name 很容易记住。我发现,如果我用某个字符(如“@”)作为我所有(或大部分)个人命令的前缀,就更容易记住。例如,我可能有 @name@add@tel@email。只是别忘了,实际规则必须使用键名:

1
<Multi_key> <at> <n> <a> <m> <e> : "Al Williams"

一些应用程序,特别是 GTK 应用程序,不经过一些调整就无法与 XCompose 配合工作。特别是,你可能需要覆盖默认的输入方法。如果这个问题困扰了你,快速搜索“XCompose and GTK”应该能给你一些建议。总有可能你的应用程序,甚至应用程序中的某些输入字段,无法与 XCompose 一起工作。生活就是这样。

XCompose 不是什么

请记住,XCompose 只在 GUI 中工作。它没有上下文感知能力。它不允许你插入多行。如果你需要脚本和其他高级功能,这里不是合适的地方。想只映射某些按键吗?你可以做到,但不是用这个工具。

但对于几乎通用的键盘重映射,一旦你习惯了语法,它就能很好地工作。你的 .XCompose 文件里有最喜欢的一行吗?在评论中分享吧!

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计