ibus-table
ibus-table
是 ibus
框架的原生码表,不要看到「原生」二字,就以为必然就更高效——其实恰恰相反。
ibus-table
和 fcitx5-table
作为两个流行框架的原生码表,都是用前端去检索二进制词典,运行的效率与性能与有着独立引擎的 RIME
相差很远。
原生码表的性能与功能,都远远不及中州韵。但是,作为一项基础设施,还是有必要讲一下它的用法。
使用方法
资源库里的「ibus原生码表」,解压后有 run.sh
文件,Debian
系列发行版可直接运行:
#!/bin/bash
python3 ./reset_dic.py
sudo apt install ibus-table ibus-table-wubi -y
cd ./achieve
ibus-table-createdb -n wb98.db -s wb98.txt
sudo rm -rf /usr/share/ibus-table/tables/*.db
sudo cp -rf ./wb98.db /usr/share/ibus-table/tables
sudo chmod -R 755 /usr/share/ibus-table/tables
echo "重启系统后,在 ibus 的面板下添加「五笔98版」。"
可以看到,里面有 apt install
命令,其它发行版自行修改为合适的包管理命令即可。
文件结构
从上面可以看到,run.sh
执行了一个 python
脚本:
# 导入模块
import os
import re
# 获取文件名
file_list = os.listdir(".")
my_path = os.path.abspath('.')
my_list = list(filter(lambda x: re.match('.*txt', x) != None, file_list))
# 抛异常
if len(my_list) != 1:
print("请在『ibus-table-tool』这个文件夹下面\n只放\n一个『单行单义』的码表文件。")
input()
exit()
# 文件名赋值
txt_name = my_list[0]
# 先写表头
# 合成『ibus-table』
# 初始化『new_table』为『wb98.txt』
new_table = open('%s/achieve/wb98.txt'%(my_path),"w",encoding='utf-8')
new_table.close()
# 写入表头
new_table = open('%s/achieve/wb98.txt'%(my_path),"a", encoding='utf-8')
rd_conf = open('%s/base/表头.txt'%(my_path),"r",encoding='utf-8')
while True:
conf_line = rd_conf.readline()
new_table.write(conf_line)
if conf_line == "":
break
rd_conf.close()
new_table.close()
print("表头写入完毕,\n即将写入码表正文,\n这可能会需要一点时间,\n稍安匆躁。")
# 再写正文
# 写正文
new_table = open('%s/achieve/wb98.txt'%(my_path),"a",encoding='utf-8')
rd_dup = open(txt_name,"r", encoding='utf-8')
freq_num = 900000
while True:
dup_line = rd_dup.readline().rstrip()
if dup_line == "":
break
cut_line = dup_line.split('\t',1)
dup = cut_line[1] + '\t' + cut_line[0] + '\t' + str(freq_num) + '\n'
new_table.write(dup)
freq_num -= 1
rd_dup.close()
new_table.close()
print("正文已经写好了,\n即将写入构词表。")
# 最后构词表
# 写入造词表
new_table = open('%s/achieve/wb98.txt'%(my_path),"a",encoding='utf-8')
rd_gouci = open('%s/base/造词表.txt'%(my_path),"r",encoding='utf-8')
while True:
gouci_line = rd_gouci.readline()
new_table.write(gouci_line)
if gouci_line == "":
break
rd_gouci.close()
new_table.close()
print("全部写好,转换成功!")
脚本从「单行单义」码表,构建出一个 ibus-table
格式的新表。
后续,则调用 ibus-table-createdb -n wb98.db -s wb98.txt
转化为二进制码表,并放到正确的位置里。
补记
ibus-table
依然保持着二十年前的样子,不支持「四码唯一自动上屏」功能。当然,也没有更多进阶的设置。
非常不建议使用 ibus-table
作为日用,ibus-rime
有着更快更好的实现。