Plugin for uim From 0.4.6, uim supports plugin system which loads library and scheme definition. uim's plugin consist of both scheme and library. ___________ (load-plugin "foo") | | ------------------+---> libuim-foo.so | libuim | | |___________| +---> foo.scm When called (load-plugin "foo") from libuim scheme engine, libuim-foo.so is loaded and call 'plugin_instance_init' in libuim-foo.so first. After loading libuim-foo.so is succeeded, 'foo.scm' is loaded. * For end users If you want to install 3rd party plugin, you have to place both the shared object and scheme file to ~/.uim.d/plugin/. For example, if you want to install "foo", you have to locate both libuim-foo.so and foo.scm to ~/.uim.d/plugin. And you have to add to ~/.uim as follows, (load-plugin "foo") * For system admins If you want to install 3rd party plugin, you have to place the shared object to ${libdatadir}/plugin/ and place the scheme library to ${datadir}/plugin. For example, if you want to install "foo", you have to install libuim-foo.so to ${libdatadir}/plugin and foo.scm to ${datadir}/plugin. If you want to enable this for all users put it as follows in ${datadir}/loader.scm, (load-plugin "foo") * For plugin developers plugin_instance_init(void): Called when plugin is being loaded. In most case, initialize variables and bind scheme symbol and C functions. plugin_instance_quit(void): Called when plugin is being unloaded. - Plugin's loading scheme: 1. Plugin loading dlopen(libuim-foo.so) -> call plugin_instance_init -> call "foo.scm" 2. Plugin unloading call plugin_instance_quit -> dlclose(libuim-foo.so)