Plugin for uim
------------------------------------------------------------------------------
- Traditional input method plugin system
uim supports plugin system which loads dynamic library and scheme definition
as a input method module.
uim's plugin may consist of scheme file and/or dynamic library.
___________ (require-module "foo")
| | ------------------+---> libuim-foo.so
| libuim | |
|___________| +---> foo.scm
When called (require-module "foo") from libuim scheme engine, libuim-foo.so
is loaded if existed and call 'uim_dynlib_instance_init' in libuim-foo.so
first. After that 'foo.scm' is loaded if existed.
* For end users
If you want to install 3rd party plugin, you have to place both the dynamic
shared object and scheme file to ~/.uim.d/plugin/.
For example, if you want to install "foo", you have to put both
libuim-foo.so and foo.scm to ~/.uim.d/plugin. And you need to invoke
following command to enable the plugin.
$ uim-module-manager --register foo --path=~/.uim.d/plugin
* For system admins
If you want to install 3rd party plugin, you have to place the dynamic shared
object to ${pkglibdir}/plugin/ and place the scheme library to
${pkgdatadir}/.
For example, if you want to install "foo", you have to install libuim-foo.so
to ${pkglibdir}/plugin and foo.scm to ${pkgdatadir}/. If you want to enable
this for all users, invoke following command.
$ sudo uim-module-manager --register foo
* For plugin developers
uim_dynlib_instance_init(void): Called when plugin is being loaded. In most
case, initialize variables and bind scheme
symbol and C functions.
uim_dynlib_instance_quit(void): Called when plugin is being unloaded.
- Plugin's loading scheme:
1. Plugin loading
dlopen(libuim-foo.so) -> call uim_dynlib_instance_init -> call "foo.scm"
2. Plugin unloading
call uim_dynlib_instance_quit -> dlclose(libuim-foo.so)
------------------------------------------------------------------------------
- Dynamic library loading
From 1.6.0, uim supports plugin system which loads dynamic library explicitly
from scheme file. Use this system if you want to use external C code or
library from scheme side.
___________ (require "foo") --> (require-dynlib "bar")
| |
| libuim | ----------> foo.scm --------> libuim-bar.so
|___________|
When called (require-dynlib "bar") from the top of foo.scm, libuim-bar.so is
loaded and 'uim_dynlib_instance_init' in libuim-bar.so is called.
* For developers
uim_dynlib_instance_init(void): Called when plugin is being loaded. In most
case, initialize variables and bind scheme
symbol and C functions.
uim_dynlib_instance_quit(void): Called when plugin is being unloaded.
- Plugin's loading scheme:
1. Plugin loading
(require-dynlib "foo") -> dlopen(libuim-foo.so) -> call uim_dynlib_instance_init -> (provide "foo")
2. Plugin unloading
(dynlib-unload "foo") -> call uim_dynlib_instance_quit -> dlclose(libuim-foo.so)
Generated by dwww version 1.16 on Sat Oct 3 03:16:18 CEST 2026.