Add plug-ins to Fcitx framework
Fcitx plug-ins can be divided into four categories:
1.Frontend
2.Input Method
3.Module
4.User Interface
Frontend plug-in is responsible for interface key messages and passing them to Fcitx framework,
InputMethod plug-in is responsible for converting keyboard input into their language information, which is the core module of input method
Module is a general module, which realizes various functions through registration hooks
The User interface module is responsible for displaying various UI elements through the screen
If the plug-in needs a configuration file, the plug-in should first provide a configuration description file, and the name of the file should be the same as that of the plug-in. If the plug-in needs a series of sub configuration files or text files, the description file of the plug-in should contain the SubConfig field to match various file names.
The format of the plug-in description file is as follows:
[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
The fcitx table plug-in has multiple configuration files, and the sub configuration format is as follows:
SuConfig=SubConfig1,SubConfig2,...
The definition format of each sub configuration is as follows:
Name:type:description
The current configuration types can be: configfile, native,domain
The configuration file in native format defines a simple text file name in the description. The file name does not support fuzzy matching characters
The configuration file name described in the description of the configuration file in configfile format supports fuzzy matching symbols
The configuration file in domian format defines the text translation of the module
The names of configfile and natvie can be translated, and the corresponding translation content should be configured in the sub configuration of domain.
How to implement the user interface module of fcitx
If there are no special requirements, in fact, fcitx does not recommend implementing a new user interface module, because there are already three user interface modules in the existing fcitx framework. namely:
1.fcitx-classic-ui
2. Fcitx kimpanel UI based on DBus
3.fcitx-light-ui
In order to implement the new user interface module, it is better to use the protocol compatible with kimpanel, and do not modify the protocol of fcitx.
In the customized User Interface plug-in, we first need to define each interface of the plug-in:
//Define the name, domain, and type of the plug-in //The name is feifei_ui, which belongs to the ui domain, and the type is FcitxUI FCITX_DEFINE_PLUGIN(feifei_ui, ui, FcitxUI) = { FeifeiUICreate, //Callback function of UI construction FeifeiUICloseInputWindow, //Close callback of input window FeifeiUIShowInputWindow, //Displays the callback of the input window FeifeiUIMoveInputWindow, //Move callback of input window FeifeiUIUpdateStatus, //Callback to update UI status FeifeiUIRegisterStatus, //Register callback for UI status FeifeiUIRegisterMenu, //Register callback of UI menu FeifeiUIOnInputFocus, //Callback to get focus FeifeiUIOnInputUnFocus, //Callback without focus FeifeiUIOnTriggerOn, //Active callback FeifeiUIOnTriggerOff, //Closed callback NULL, //Callback for presentation message (disabled) FeifeiUIMainWindowSizeHint, //Callback to get the size of the main window ReloadConfigFeifeiUI, //Reload configured callback FeifeiUISuspend, //Pause switching callback FeifeiUIResume, //Callback to resume from pause NULL, //Destroy callback of user interface FeifeiUIRegisterComplexStatus, //Registration complex status FeifeiUIUpdateComplexStatus, //Update complex state FeifeiUIUnRegisterMenu, //Registration menu };
At cmakelists Txt file through fcitx_addon_full interface to declare the information of the plug-in
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) //The desc parameter determines the desc file for installing the plug-in, and the path of the configuration file with desc as the suffix, //By DESC_SRC to determine //The SCAN parameter generates the header file of the API, and the name of the generated header file is through FXADDON_GEN parameter //The path of the input file is via FXADDON_SRC parameters, //SCAN_PRIV generates the added function header file, and the path of the input file is through FXADDON_SRC parameters, //The resulting header file is generated through ADDFUNCTIONS_GEN parameter determination //NO_INSTALL does not install any files or compile any resources when the module is disabled, but it needs to generate //Header file //SCAN_IN passed In file to generate api header file, fxaddon The path of the in file is via FXADDON_SRC parameters //To determine The name of the generated header file is passed through the parameter FXADDON_GEN to determine //HEADR_ The subdirectory of dir fcitx / module directory where the header files of plug-ins will be installed //LIB_NAME: the binary name of the plug-in is (fcitx ${short_name}) by default //CONF_SRC: the path of the plug-in conf file (without. In suffix). The default is fxitx - ${short_name} desc //DESC_SRC: path of plug-in desc configuration file //UNIQUE_NAME: the unique name of the plug-in. The default is fcitx-${short_name} /********The following are multivalued parameters******/ //SOURCES: the source file that the plug-in needs to compile //HEADER: the HEADER file that the plug-in needs to install (excluding the generated parameters) //EXTRA_DESC: additional DESC parameters that need to be installed //EXTRA_PO: additional files for browsing string translation //EXTRA_LIBS needs to rely on additional library files //Demands: some other files that the plug-in needs to rely on //IM_CONFIG: input method configuration file