fcitx ----------------------------------

本文介绍了X-Window系统下的XIM输入法协议,包括其客户端/服务器模型、IM结构、事件处理模型以及Fcitx对其支持。XIM通过协议在应用程序和输入法服务器之间实现国际化输入,而Fcitx则是一个支持XIM和多种图形库的输入法框架。文章详细阐述了XIM的实现过程,包括初始化输入法服务、协议处理函数以及主事件循环。
摘要由CSDN通过智能技术生成

输入法不知道为什么可以用了。。好累的样子

我想知道他的原理

先从

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值