Input-Method

驗證 ~/.XCompose

  • June 16, 2021

我正在努力在~/.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。看起來很有希望(從Google搜尋的manpagemkcomposecache(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是我需要的,即使它會起作用。

我對這個擴展進行了逆向工程,並將其製成了一個小網路應用程序。

你可以在這裡使用它:https ://jsfiddle.net/9p1s60of/

這是該工具的執行圖像:

行動中的工具

有點粗糙,但你可以使用關聯數組快速破解一些東西,例如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

引用自:https://unix.stackexchange.com/questions/415202