Fcitx框架添加插件
Fcitx插件可以分为四类分别是:
1.Frontend
2.Input Method
3.Module
4.User Interface
Frontend插件负责接口按键消息并把消息传递给Fcitx框架,
InputMethod插件负责将键盘输入转换成他们的语言信息,也就是输入法的核心模块
Module是通用模块,通过注册钩子实现各种各样的功能
User interface模块负责通过屏幕展示各种UI元素
如果插件需要配置文件的话,插件首先应该提供一个配置描述文件,文件的名称应该和插件的名称相同。如果插件需要一系列的子配置文件,或者文本文件的话,插件的描述文件应该包含SubConfig字段用来匹配各种文件名称。
插件的描述文件的格式如下:
[Addon]
Name=fcitx-table
_GeneralName=Table
_Comment=Table Input Method for Fcitx
Category=InputMethod
Enabled=True
Library=fcitx-table.so
Type=SharedLibrary
Dependency=fcitx-pinyin,fcitx-punc
SubConfig=Table:configfile:table/*.conf:table.desc,fcitx:domain
fcitx-table插件有多个配置文件,子配置的格式如下:
SuConfig=SubConfig1,SubConfig2,...
每个子配置的定义格式如下:
Name:type:description
现在的配置类型可以是:configfile, native,domain
native格式的配置文件在描述中定义了一个简单的文本文件名称,文件名称不支持模糊匹配字符.
configfile格式的配置文件的描述中描述的配置文件名称支持模糊匹配符号
domian格式的配置文件定义了模块的文本翻译.
configfile和natvie的名称都是可以翻译的,对应的翻译内容应该被配置在domain的子配置中。
如何实现fcitx的user interface模块
没有特殊需求的话,其实fcitx是不建议实现一个全新的user interface模块的,因为现有的fcitx框架中的已经有三个个User Interface模块了。分别是:
1.fcitx-classic-ui
2.基于DBus的fcitx-kimpanel-ui
3.fcitx-light-ui
为了实现新的用户界面模块,最好使用与kimpanel兼容的协议,不要修改fcitx的的协议。
在自定义的User Interface插件中我们首先要定义插件的各个接口:
//定义插件的名称,所属领域,和类型
//名称是feifei_ui,所属的领域是ui领域,类型是FcitxUI
FCITX_DEFINE_PLUGIN(feifei_ui, ui, FcitxUI) = {
FeifeiUICreate, //UI构建的回调函数
FeifeiUICloseInputWindow, //关闭输入窗口的回调
FeifeiUIShowInputWindow, //显示输入窗口的回调
FeifeiUIMoveInputWindow, //移动输入窗口的回调
FeifeiUIUpdateStatus, //更新UI状态的回调
FeifeiUIRegisterStatus, //注册UI状态的回调
FeifeiUIRegisterMenu, //注册UI菜单的回调
FeifeiUIOnInputFocus, //获取焦点的回调
FeifeiUIOnInputUnFocus, //失去焦点的回调
FeifeiUIOnTriggerOn, //激活的回调
FeifeiUIOnTriggerOff, //关闭的回调
NULL, //展示消息的回调(禁用)
FeifeiUIMainWindowSizeHint, //获取主窗口大小的回调
ReloadConfigFeifeiUI, //重新加载配置的回调
FeifeiUISuspend, //暂停切换的回调
FeifeiUIResume, //从暂停进行恢复的回调
NULL, //销毁user interface的回调
FeifeiUIRegisterComplexStatus, //注册复杂状态
FeifeiUIUpdateComplexStatus, //更新复杂状态
FeifeiUIUnRegisterMenu, //注册菜单
};
在CMakeLists.txt文件中通过fcitx_addon_full接口来声明插件的信息
fcitx_add_addon_full(feifei-ui DESC SCAN SCAN_PRIV ${kimpanel_noinstall}
HEADER_DIR feifeiui
FXADDON_SRC fcitx-feifeiui.fxaddon
FXADDON_GEN fcitx-feifeiui.h
SOURCES ${FEIFEI_KIMPANEL_UI_SOURCES}
HEADERS feifeiinterface.h
LINK_LIBS ${FEIFEI_KIMPANEL_LINK_LIBS}
EXTRA_DESC skin.desc
EXTRA_PO fcitx-skin-installer.desktop.in fcitx-skin-installer.sh)
//DESC参数确定安装插件的desc文件,以desc为后缀的配置文件的路径,
//通过DESC_SRC来确定
//SCAN参数产生API的头文件,产生的头文件的名称通过FXADDON_GEN参数来确定
//输入文件的路径通过FXADDON_SRC参数来确定,
//SCAN_PRIV生成添加的函数头文件,输入文件的路径通过FXADDON_SRC参数来进行确定,
//产生的头文件通过ADDFUNCTIONS_GEN参数确定
//NO_INSTALL 当模块禁用的时候不安装任何文件,也不编译任何资源,但是需要产生的
//头文件
//SCAN_IN 通过.in文件生成api头文件,fxaddon.in文件的路径通过FXADDON_SRC参数
//来确定.生成的头文件的名称通过参数FXADDON_GEN来确定
//HEADR_DIR fcitx/module目录下的子目录,插件的头文件将会安装在这个目录下
//LIB_NAME: 插件的二进制名称默认为(fcitx_${short_name})
//CONF_SRC: 插件conf文件的路径(没有.in后缀),默认为fxitx-${short_name}.desc
//DESC_SRC: 插件desc配置文件的路径
//UNIQUE_NAME:插件的唯一名称,默认为fcitx-${short_name}
/********以下为多值参数******/
//SOURCES:插件需要编译的源文件
//HEADER:插件需要安装的头文件(不包含产生的参数)
//EXTRA_DESC:需要安装的额外的DESC参数
//EXTRA_PO: 额外用来浏览字符串翻译的文件
//EXTRA_LIBS 需要依赖的额外的库文件
//DEPENDS:插件需要依赖的一些其他的文件
//IM_CONFIG:输入法配置文件