在不同用户的工作环境中,都会根据各自使用的字符集的不同,而需要定制优化各自的输入法码表,例如,在GB18030中的大量汉字,或许因为输入法码表的老旧,而难于利用自己熟悉的“五笔”方法快速录入,同样,需要面对简繁体操作的用户也是如此。

在SCIM中,如需定制或添加用户自定义码表,就需要了解一些相关知识和技术。首先,SCIM的码表目录是在“/usr/share/scim/tables/”中,里边已经存放了很多扩展名为“.bin”的码表文件,同以往其他系统一样,这些都是经过处理后的文件。之前介绍过如何得到一个码表文件的文本格式这就是说,只要将自己熟悉喜欢的码表文件转换为明码文件,就可以丰富定制自己的码表了。

利用SCIM提供的工具将已有码表转换为明码,就可看到SCIM下的码表文件结构。

# scim-make-table Wubi.bin -o NWubi.txt

从转换为明码的SCIM码表中可以看到基本结构如下:

SCIM_Generic_Table_Phrase_Library_TEXT

VERSION_1_0

### Begin Table definition.

BEGIN_DEFINITION

UUID = 98e4ca3b-8321-4903-a59d-84abce 22f95a

SERIAL_NUMBER = 20040227

ICON = /usr/share/scim/icons/Wubi.png

NAME = Wubi

NAME.zh_CN = 五笔字型

NAME.zh_HK = 五筆字型

NAME.zh_TW = 五筆字型

LANGUAGES = zh_CN,zh_SG,zh_TW,zh_HK

### AUTHOR =

STATUS_PROMPT = 中

KEYBOARD_LAYOUT = US_Default

VALID_INPUT_CHARS = abcdefghijklmnopqrstuvwxy

### KEY_END_CHARS =

SINGLE_WILDCARD_CHAR = z

MULTI_WILDCARD_CHAR = *

SPLIT_KEYS = apostrophe

COMMIT_KEYS = space

FORWARD_KEYS = Return

SELECT_KEYS = 1,2,3,4,5,6,7,8,9

PAGE_UP_KEYS = Page_Up,comma,minus

PAGE_DOWN_KEYS = Page_Down,period,equal

MODE_SWITCH_KEYS = Shift+KeyRelease+Shift_L,Shift+KeyRelease+Shift_R

FULL_WIDTH_PUNCT_KEYS = Control+period

FULL_WIDTH_LETTER_KEYS = Shift+space

MAX_KEY_LENGTH = 4

SHOW_KEY_PROMPT = FALSE

AUTO_SELECT = TRUE

AUTO_WILDCARD = TRUE

AUTO_COMMIT = TRUE

AUTO_SPLIT = FALSE

AUTO_FILL = FALSE

DISCARD_INVALID_KEY = TRUE

DYNAMIC_ADJUST = FALSE

ALWAYS_SHOW_LOOKUP = TRUE

USE_FULL_WIDTH_PUNCT = TRUE

DEF_FULL_WIDTH_PUNCT = TRUE

USE_FULL_WIDTH_LETTER = TRUE

DEF_FULL_WIDTH_LETTER = FALSE

BEGIN_CHAR_PROMPTS_DEFINITION

a 工

b 子

c 又

d 大

e 月

f 土

g 王

h 目

i 水

j 日

k 口

l 田

m 山

n 已

o 火

p 之

q 金

r 白

s 木

t 禾

u 立

v 女

w 人

x 纟

y 言

END_CHAR_PROMPTS_DEFINITION

END_DEFINITION

### Begin Table data.

BEGIN_TABLE

a   工  52175

b   了  65535

c   以  65535

……

yyyy    文言 63

yyyy    言谈话语 2

END_TABLE

SCIM的码表文件主要是由描述部分(BEGIN_DEFINITION……END_DEFINITION)和码表部分(BEGIN_TABLE……END_TABLE)两大块组成的。描述部分主要是输入法的一些基本的设置,如输入法的名字、输入法的图标等;码表部分就是各字、词对应的输入码。

如果将一些自己工作需要的码表文件中的对应此表部分,以相同的结构关系,添加到其中,这样就可制成自定义的SCIM码表文件了。其中码表文件的名字、说明等可以根据需要修改,如自设计了独特的图标文件(48x48大小png图片),也要复制到/usr/share/scim/icons中,并校正第七行的“ICON=”语句。在第五行是这个码表的UUID号码,这是该码表的唯一标识号,如果保留原来的码表,而将新的码表定制后重新命名,则需要给出新的UUID号,如:

[root@localhost tables]# uuidgen

38f7c0ff-a324-4848-a385-969d9c8507dc

[root@localhost tables]#

定制好的码表文件,还需要转换为“.bin”文件,使用同样命令逆向完成。

# scim-make-table NWubi.txt -b -o XWubi.bin

可以通过SCIM设置菜单中的“通用码表”组中的“码表管理”来添加,或手工将新的码表文件复制到如下目录即可。

cp XWubi.bin /usr/share/scim/tables

cp XWubi.png usr/share/scim/icons

重新启动X后,即可体验新的定制输入法功效

参考

http://wiki.ubuntu.org.cn/IBus

定制个性化码表技术 ibus的更多相关文章

  1. CSDDN特约专稿:个性化推荐技术漫谈

    本文引自http://i.cnblogs.com/EditPosts.aspx?opt=1 如果说过去的十年是搜索技术大行其道的十年,那么个性化推荐技术将成为未来十年中最重要的革新之一.目前几乎所有大 ...

  2. Taro 2.2 全面插件化,支持拓展和定制个性化功能

    自 2.2 开始,Taro 引入了插件化机制,允许开发者通过编写插件的方式来为 Taro 拓展更多功能或者为自身业务定制个性化功能,欢迎大家进行尝试,共同讨论~ 当前版本 2.2.1 官方插件 Tar ...

  3. 用Qt写软件系列四:定制个性化系统托盘菜单

    导读 一款流行的软件,往往会在功能渐趋完善的时候,通过改善交互界面来提高用户体验.毕竟,就算再牛逼的产品,躲藏在糟糕的用户界面之后总会让用户心生不满.界面设计需综合考虑审美学.心理学.设计学等多因素, ...

  4. 定制个性化的FlashPaper生成的文件

    1:找到已安装FlashPaper目录下的子目录Interface下的文件DefaultViewer2.swf,在此swf文件的基础上实现自己的修改. 2:利用swf反编译工具,这里推荐 硕思闪客精灵 ...

  5. Vagrant定制个性化CentOS7虚拟机模板

    关于虚拟机模板 想用vagrant搭建hadoop集群,要完成以下准备工作: 三个虚拟机实例操作系统都是CentOS7的server版: 每个实例都要安装同样的应用.关闭防火墙.关闭swap等: 今天 ...

  6. 定制个性化的GUI

    你现在还在使用SAP GUI710或者是GUI720,又或者更早的640等吗?那么古董先生,推荐您使用GUI730吧,您可能会730好在哪?那我建议您去百度或者Google问吧.对于新的GUI730, ...

  7. 如何用R来定制个性化PPT

    ReporteRs包可以创建word,ppt,html文档.它可以格式化R的输出:如可编辑的矢量图,复杂的表格报告功能,企业模板文档的重用(.docx和.pptx).它是一个很好的自动化报告工具,并且 ...

  8. Quartz任务调度(2)CronTrigger定制个性化调度方案

    Cron表达式 1. 时间字段与基本格式 Cron表达式有6或7个空格分割的时间字段组成: 位置 时间域名 允许值 允许的特殊字符 1 秒 0-59 ,-*/ 2 分支 0-59 ,-*?/ 3 小时 ...

  9. 开源方案搭建可离线的精美矢量切片地图服务-3.Mapbox个性化地图定制入门

    1.简介 mapbox是一家非常牛的公司,比如像特斯拉.DJI大疆创新.孤独星球.Airbnb.GitHub.Cisco.Snap.飞猪.Keep.Bosch这些在国内外各自领域中响当当的企业都是它的 ...

随机推荐

  1. C++11 auto_ptr 的问题

    auto_ptr作为最早的智能指针,可以实现以RAII手法管理堆区对象,但它设计的本意只是简单的利用C++对于栈区对象的自动析构管理堆区对象, 并不像shared_ptr那样包含引用计数,可以在每次拷 ...

  2. C++调用V8与JS交互

    C++访问JS函数 C++部分: /** * COMPILE foo.js AT THE FIRST COMMAND PROMPT TO RUN foo.js */ #include <v8.h ...

  3. python sqlite 插入的数据含有变量,结果不一致

    def insert(): conn = sqlite3.connect("sqlite.db") print "open database passed" t ...

  4. 【转】C#调用DLL

    C#中如何调用动态链接库DLL(转)     每种编程语言调用DLL的方法都不尽相同,在此只对用C#调用DLL的方法进行介绍.首先,您需要了解什么是托管,什么是非托管.一般可以认为:非托管代码主要是基 ...

  5. javaweb常见问题解决

    问题一.如果是在导入的项目的情况下,多数情况下就是jdk版本与项目的jdk版本不匹配, 解决方法: (1)右击工程->Build Path->Configure Build Path-&g ...

  6. poj1741 (点分治)

    Problem Tree 题目大意 给一棵树,有边权.求树上距离小于等于K的点对有多少. 解题分析 点分治.对每一棵子树进行dfs,求出每棵子树的重心,继而转化为子问题. 对于经过根的路径i--j,令 ...

  7. JDK和IDE

    IDE 集成开发环境(IDE,Integrated Development Environment )是用于提供程序开发环境的应用程序,一般包括代码编辑器.编译器.调试器和图形用户界面工具.集成了代码 ...

  8. 微信公众号红包接口开发PHP开发 CA证书出错,请登陆微信支付商户平台下载证书

    微信红包接口调试过程中一直提示“CA证书出错,请登陆微信支付商户平台下载证书”,经反复调试,大致解决方法如下: 1.首先确保CA证书的路径是否正确,一定得是绝对路径,因为是PHP开发的,这里需要三个p ...

  9. .net web端导出Excel个人的看法

    //对已有方法进行重写 public override void VerifyRenderingInServerForm(Control control) { } //设置文件名 string fil ...

  10. Installshield调用DLL的正确姿势

    脚本如下 szDllPath = SUPPORTDIR ^ "TestCom.dll";       set oMyTest = CoCreateObjectDotNet(szDl ...