输入法不知道为什么可以用了。。好累的样子
我想知道他的原理
先从
Fcitx支持XIM和GTK2,GTK3,QT4的IM Module
这句话入手吧
XIM --------> X-Window系统下的符合国际化标准的输入法协议
XIM X Input Method X-Window系统下的符合国际化标准的输入法协议。只要应用程序和系统都支持这种输入协议,应用程序就不必具体考虑在不同语言环境下的输入问题,系统可以根据相应的locale去寻找相应的输入法,从而达到国际化的要求
1.1 实现模型 在X-Window 系统环境下,XIM的实现有以下两种典型的体系结构
1)Client/Server模型:
IM服务器是一个独立的进程,由它来处理输入、预编辑、转换和确认。IM库存在于应用程序中,就象IM服务器的一个客户,它只是简单的从IM服务器接收确认字符串。
2)Library模型:
所有的输入都由应用程序中的IM库来处理。事件处理在IM库中就被关闭了,所以就不再需要一个独立的IM服务器。
大多数语言,如亚洲语言一般都有复杂的预编辑,所以都采用Client/Server模型来实现,其他的只有一些死键或组合键的语言,如欧洲语言一般都采用Library模型来实现。
下面主要都讨论Client/Server模型,如图1所示:客户程序通过连接IM服务器来实现XIM输入,它们之间的通讯是利用XIM的协议来实现的。IM子系统完成文字查找和文本的组合。
1.2 IM结构 当客户程序向服务器发出连接或断开请求时,在客户和服务器之间会产生打开和关闭操作。
函数XopenIM()设置或修改客户的locale,IM是根据相应的locale来指定的。另外,客户支持的IM类型可以通过函数XGetIMValues()来获得。
一个客户程序通常有多个输入域,Xlib提供了一个结构“Input Context”(IC)来管理每个输入域。函数XCreateIC()可以指定XIM并创建一个相应的IC,函数XDestroyIC()用来删除此IC。许多重要的信息,比如确认字符串都通过IC来从IM服务器送到客户程序。每一个IC与一个输入域相关,函数XSetICFocus()用来通知IM服务器当前IC获得了焦点(XUnSetICFocus()表示失去焦点)。
1.3 事件处理模型 现存的输入法都支持前端输入法和后端输入法或其中的一种。XIM把后端输入法作为一种默认的输入法,但也支持前端输入法。
1)后端输入法:
在后端输入法中,客户窗口的输入事件总是送到IM库中,然后IM库把此事件送到IM服务器中。事件以传送的顺序来处理,因此在IM库和IM服务器中没有需要同步的问题。
2)前端输入法:
在前端输入法中,客户窗口的输入事件由XServer直接传送到IM库和IM服务器中。因此这种方法提供了更好的接口性能(尤其在IM服务器运行在一台工作站而客户程序运行在另一台工作站上,且网络又相对较慢时)。而,前端模型在处理键的时候有同步问题,时会引起事件丢失或时间重复。因此后端输入法是由核心输入法支持的,前端输入法是从扩展性能的目的出发的。
1.4 事件流控制
XI