X-Post: luga, metalab Ich habe diese Aufgabe ursprünglich für jemanden geschrieben, der sie nicht angegangen ist. Daher werfe ich sie mal in die Öffentlichkeit, mal sehen, was so draus wird. ---- I commission you with the task of some bug fixing and feature development in the Free software [SCIM](http://www.scim-im.org/). In order to tackle these, you need the C++ development toolchain for SCIM and optionally some knowledge about RPM spec files and the [openSUSE Build service] (https://build.opensuse.org/). If you're interested, please write back for any questions, clarifications, negotiations. I promise to support you during the task as much as I can, especially setting up SCIM is difficult for people who never used any input method before and are not familiar with the concept. Milestone 1 =========== Problem description ------------------- SCIM does not play well together with the already existing different [input method Compose](http://en.wikipedia.org/wiki/Compose_key), a feature in [X] (http://x.org/). The reason is that SCIM needs to have these environment variables set in order to work: > env|sort|ack -i scim GTK_IM_MODULE=scim QT_IM_MODULE=scim XMODIFIERS=@im=SCIM However, Compose ceases to work when they are set; so a user must decide at application start which input method he wants to use. As a workaround, SCIM ships with own implementation if Compose. However, **its [data tables] (https://scim.svn.sourceforge.net/svnroot/scim/scim/trunk/src/scim_compose_ke...) are out of date**, e.g. typing `Compose` `.` `.` in SCIM results in `·`; but as of now typing `Compose` `.` `.` should normally result in `…`, and `Compose` `.` `-` in `·`. Inchstone 1a ------------ Get the [current Compose file] (http://cgit.freedesktop.org/xorg/lib/libX11/plain/nls/en_US.UTF-8/Compose.pr...) from the X Git repository. Write a script - preferably in Perl - that massages it into the required header file format. Make it work with an [installed Compose file](file:///usr/share/X11/locale/en_US.UTF-8/Compose), too. The deliverables are the script and the new header file. Inchstone 1b ------------ Compile SCIM with the updated data table. The deliverable is a working demonstration, it must exhibit the correct behaviour as outlined in the problem description. Inchstone 1c ------------ Send an email to the SCIM development mailing list with your changesets, or a link to them. The deliverable is evidence that you did so. You can skip the last inchstones in this milestone and forfeit half this milestone's bounty money. Inchstone 1d ------------ Sign up for Build service, branch your SCIM package off the [M17N project] (https://build.opensuse.org/package/show?package=scim&project=M17N), apply your changesets and build scim packages for 11.3 in both i586 and x86_64. The deliverables are scim RPMs from your home project which installs on my openSUSE systems and which exhibit the correct behaviour as above. Inchstone 1e ------------ Send an email to the openSUSE M17N mailing list with your changesets, or a link to them, and a link to your 1d deliverables. The deliverable is evidence that you did so. Milestone 2 =========== Problem description ------------------- The Compose emulation in SCIM sucks because it needs to be constantly updated to follow upstream X. Also, it just deals with a single Compose file, whereas the real Compose feature allows user customisation in a `$HOME/.XCompose` file. Example: include "/usr/share/X11/locale/en_US.UTF-8/Compose" # If include directive is missing, the directives below # completely replace the system default compose table. <Multi_key> <asciitilde> <exclam> : "̃" U0303 # COMBINING TILDE ACCENT Typing `v` `Compose` `~` `!` then results in `̃v` additionally to the ones provided by the system compose table. Inchstone 2a ------------ Replace the Compose emulation with something better which exhibits the behaviour of the real Compose feature. It must avoid a separate hard coded data table that can fall out of date so easily, instead either tie into the X development files as dependency, so when scim is built, it uses a reasonable fresh copy from X; or even hook into the installed live copy of the Compose file. Either way, it must also respect the custom user file if it exists. Recompile SCIM with your changesets. The deliverables are the changesets, and a working demonstration, it must exhibit the correct behaviour as outlined in the problem description. Inchstone 2b ------------ Send an email to the SCIM development mailing list with your changesets, or a link to them. The deliverable is evidence that you did so. You can skip the last inchstones in this milestone and forfeit half this milestone's bounty money. Inchstone 2c ------------ Same as 1d. Inchstone 2d ------------ Send an email to the openSUSE M17N mailing list with your changesets, or a link to them, and a link to your 2c deliverables. The deliverable is evidence that you did so. Payment ======= Personally in cash immediately upon verification of completion of each milestone, 20€ for full Milestone 1, and 80€ for full Milestone 2. I can come to the Metalab during the evening on half a day's notice in order to meet you. Hints ===== SCIM runs conceptually on top of X. In practice it consists of a number of modules, a pluggable backend that does the real work of creating characters from user input, and a frontend UI for tweaking the settings and a tray icon with floating palette for character candidate selection. I use the frontend skim for KDE. $ /bin/ps -AH --forest -o args | ack s[ck]im /usr/lib64/scim-1.0/scim-launcher -d -c kconfig -e all -f socket --no-stay /opt/kde3/bin/skim --np skimplugin_scim --display :0.0 -c socket -d --no- stay /usr/lib64/scim-1.0/scim-helper-manager /usr/lib64/scim-1.0/scim-launcher -d -c socket -e socket -f x11 I'm afraid the [software architecture is not documented](http://www.scim- im.org/wiki/documentation), for example those daemon programs don't even have a man page. What I can tell you comes from my own observation as a user. `scim-launcher` and `scim-helper` are spawned by `scim -d`, which is launched from `/etc/X11/xim.d/scim` at a user's X session start-up. `skim` is a regular desktop application, which I've set up to run when my KDE session starts. skim communicates with the backend via a socket. These are the minimum packages I have installed that are necessary to do useful work in Chinese, Japanese plus the Compose key. $ rpm -qa | ack s[ck]im | sort scim-1.4.7-174.1.x86_64 scim-anthy-1.2.7-5.1.x86_64 scim-devel-1.4.7-350.4.x86_64 scim-m17n-0.2.2-235.1.x86_64 scim-pinyin-0.5.91.20060705-272.1.x86_64 scim-pinyin-skim-0.5.91.20060705-267.3.x86_64 scim-qtimm-0.9.4-278.1.x86_64 scim-tomoe-0.6.0-23.1.x86_64 skim-1.4.5-263.2.x86_64 skim-scim-anthy-1.2.2-213.3.x86_64 To contact me in real-time when email is too cumbersome: <irc://irc.freenode.net/metalab>, <xmpp:daxim@jabber.metalab.at> I am usually online on workdays during the daytime.