fcitx功能插件的开发和应用

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:输入法配置文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农飞飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值