旅とプログラミングを少々

趣味に関する記録などをします。さしあたっては2017年JGC修行とプログラミング入門に関しての内容を連ねていきます。

Miscelous note for building IMs

Ubuntu18.04 で諸々をビルドするために必要だったパッケージ類

libskk

apt install autoconf autopoint libtool gobject-introspection valac libvaladoc-0.40-dev gtkdoc-tools

./autogen.sh --enable-docs

fcitx4

apt install extra-cmake-modules libxkbcommon-dev libxml2-dev libxkbfile-dev libqt4-dev libcairo2-dev

mkdir build && cd build && cmake .. && make && make install

fcitx5

CMakeList内でどれがどう択一なのか等まだ読めていないので、とりあえず共通部分でエラーがなくなるまで。ビルドは通らない。どうもUbuntu18.04のログインスクリーンでgdm on Waylandが使われているせいかWayland関連のライブラリを必須にしてしまっているような気がする。

libdbus1-dev uuid-dev gettext libfmt-dev

XCB-IMDKit https://github.com/wengxt/xcb-imdkit

aptで入るパッケージはまだない。

apt install libxcb-keysyms1-dev libxcb-util-dev

mkdir build && cd build && cmake .. && make && make install

Keycode and Keysym

Keycodeは物理的にどのキーが押されたかの識別子で、たとえばドイツ語キーボードでYが印字されたキーを押した時と英語キーボードでZが印字されたキーを押した時で同一の0x52。

xevで例を見れるが、英語キーボードでAと印字されたキーを押すとkeycode 0x38のkeypress イベントが起こり、Shiftと印字されたキーを押すと0x50のkeypressイベントが起こり、Shiftを押したままAと印字されたキーを押すと同じくkeycode 0x38のkeypressイベントが起きる。ただしkeystateという別のフラグによりShiftが押しっぱなしであることがわかるほか、それぞれのイベントのkeysymは 0x61の'a'と0x41の'A'と別のものになる。

人によってキーの配列が違うのでそれに対応するにはコンフィグ可能にしなければならない。それにはキーを特定する、キーに印字されている文字や機能のシンボルと、ShiftやCtrlなどのModifierに依らず一意な識別子: keycodeが必要になる。

keycodeに対応するキーの印字へのマッピングがない場合、たとえばユーザがコンフィグで機能AをCtrl+Shift+keycode 0x52に割り振った際にその設定状態を表示しようとするとA: Ctrl + Shift + 'Z' としていいのか Ctrl + Shift + 'Y'としていいのかがわからない。通常はkeycodeから無Modキー状態でのkeysymをひいて表示することになるだろう。

keycodeがない場合、たとえば機能をShift+'£'に割り振るというのはどういう事なのだろうか。アメリカの英語ユーザはそのようなキーがなくて使えないだろうし、イギリス人も古いパソコンとキーボードをひっぱり出す羽目になるかもしれない。日本のようなIMEを使う文化では変換して文字を打ち込むとその文字の代わりに機能が実行されると解釈するのかもしれない。機能を割り振りたいのはあくまでキーボードというデバイスのボタンを押した事に対してであり、テキスト入力の表記文字に対して割り振りたいわけではないはずだ。機能のわりあてはキーに対して、つまりキーごとに一意なkeycodeに割り振ることになるべきだ。