我正在努力在~/.XCompose
.当我添加越来越多的序列时,有时我会犯错或对不同的符号使用相同的序列。
例子:
拼写错误/不存在的代码
<Multi_key> <non-existent-keysym> : other-non-existent-keysym
全面碰撞
<Multi_key> <a> <b> : x # overrule by 2nd rule
<Multi_key> <a> <b> : y
前缀冲突
<Multi_key> <a> <b> <c> : y
<Multi_key> <a> <b> : x # overruled by 1st rule
问题
是否有一个命令可以验证我的~/.XCompose
文件。最低要求是二元答案:要么 »您的 XCompose 没有错误“ 或者 ”您的 XCompose 包含错误«。如果出现错误,会显示有用的错误消息,例如 »规则序列前缀的冲突 « 将受到欢迎。
我尝试过的
我创建了~/.XCompose
包含上面所有错误的内容并打开了一个文本编辑器。文本编辑器没有显示错误(在控制台上)。正确且未被推翻的序列有效,所有其他序列都将被忽略。
我读man 5 XCompose
。在文档本身中,我发现没有任何帮助。我看了最后的参考文献man 5 XCompose
。只是mkcomposecache(1)
看起来有希望(从谷歌搜索手册页),但在我的系统(Linux Mint 18.3)上似乎丢失了。man -k mkcomposecache
也没有apt search mkcomposecache
找到任何东西。
编辑:正如@quixotic所建议的,我编译mkcomposecache
自来源并运行它,但1
无论我选择什么撰写文件(有或没有错误),它的退出状态都是 。没有错误消息。不生成缓存。我如何调用该程序的示例:
$ mkcomposecache en_US.UTF-8 /usr/share/X11/locale/en_US.UTF-8/Compose /tmp/
* XOpenDisplay: Success
$ echo $?
1
该文件/usr/share/X11/locale/en_US.UTF-8/Compose
是 Ubuntu 的原始撰写文件,应该没有错误。我想它没有打包在 Ubuntu 和 Arch Linux 存储库中是有原因的。
我怀疑这mkcomposecache
就是我所需要的,即使它能起作用。
答案1
答案2
有点粗糙,但你可以使用关联数组快速将某些东西组合在一起,例如awk
:
对于像这样的输入文件
<Multi_key> <a> <t> : y
<Multi_key> <a> <g> : y
<Multi_key> <a> <b> : x
<Multi_key> <a> <b> : y
<Multi_key> <a> <x> <c> : y
<Multi_key> <a> <x> : x
<Multi_key> <a> <g> : Q
<Multi_key> <a> <n> : y
这个命令
awk '!d[$2][$3]{d[$2][$3]=1;next} {print $0 " PROBLEM!"}' myFile
将输出
<Multi_key> <a> <b> : y PROBLEM!
<Multi_key> <a> <x> : x PROBLEM!
<Multi_key> <a> <g> : Q PROBLEM!
还要查看与之冲突的行:
awk 'c=d[$2][$3]{print $0 " COLLISION: " c;next} {d[$2][$3]=$0}' myFile
结果:
<Multi_key> <a> <b> : y COLLISION: <Multi_key> <a> <b> : x
<Multi_key> <a> <x> : x COLLISION: <Multi_key> <a> <x> <c> : y
<Multi_key> <a> <g> : Q COLLISION: <Multi_key> <a> <g> : y