JIS 配列になってるソフトウエアキーボードを US 配列に戻す ── というか、追加する。 基本的には、 qtopia-free に付属するソフトウエアキーボードは US 配列的だから、 これを arm 用に make して持ち込めばいい。 焦点は仮名漢字変換対応ってことになる。
/opt/Qtopia/sharp/{include, lib} を build した Qt/Embedded ので置き換えたあと、
% export PATH=/opt/Embedix/tools/bin/:${PATH}
% export QTDIR=/opt/Qtopia/sharp
% export QPEDIR=/home/src/zaurus/Qt/qtopia-arm
% cd qtopia-arm
% ./configure -xplatform linux-sharp-g++
% make -i |& tee ../make.log
make に -i がついてるのは、
make すると同時に /opt/Qtopia/sharp/lib/ にコピーしようとする (で権限がなくて失敗する)
からなのと、libjpeg の link に失敗するからだ。
シャープの配付する 開発用 libqte は jpeg をサポートしてないので
エラーもなにもない (libjpeg を link しにいかない) が、SL-A300 に合わせた今は libjpeg を link
しにいく。
libjpeg を /opt/Qtopia/sharp/lib/ に置けばいいはずだと思うのだが、 qtopia の ld は libjpeg を探しに行きはするが発見できないらしい。 明示的に -ljpeg つけないといけない。ld ってば、どこ探してんねん。
% cd inputmethods/keyboard % make % ls -l ../../plugins/inputmethods/libqkeyboard.so.1.0.0 -rwxr-xr-- 1 kensyu users 158592 Oct 7 23:20 ../../plugins/inputmethods/libqkeyboard.so.1.0.0
バイナリ は ${QPEDIR}/plugins/inputmethods/ に置かれ、qpe の起動時にリストされる。
開発環境 (qvfb) 上の qpe の場合は「設定」のとこに「shutdown」(の下の「サーバの再起動」)
and 「language」(言語の設定) というのがあるので、
このどちらかで qpe を起動しなおすと plugins のリストをもいっかい読みにいく。
「shutdown」ってのが実機に必要ないのはわかるが、
「language」のほうは実機にもあると嬉しいというわけで bin/langauge を実機に持ち込んでみたら、
「locale の切替え」としてはちゃんと動いた。
SL5000 風の表示に切り替わる。
plugins は読みにいってくれないらしく、更新できなかったけど。
実機では /home/QtPalmtop/plugins/inputmethods/ 下に置いたあと 再起動することになる。Menu から「再起動」を選ぶのであって、 つい習慣でリセットボタンを 15 秒押しなんぞしたりするとメモリがきれいさっぱりクリアされて ついでに (ROM に入ってない) 作ったばっかの plugins まで消える。 別に止めはしないが ...
実機には既に日本語キーボードが同名で入っている。適当に名前を変えて入れる。 SL-A300 上にて:
# mount -t nfs atropos:/home/src/zaurus/Qt/qtopia-1.5.0 /mnt # cd /home/QtPalmtop/plugins/inputmethods/ # cp /mnt/plugins/inputmethods/libqkeyboard.so.1.0.0 libquskeyboard.so.1.0.0 % ln -sf libquskeyboard.so.1.0.0 libquskeyboard.so.1.0 % ln -sf libquskeyboard.so.1.0.0 libquskeyboard.so.1 % ln -sf libquskeyboard.so.1.0.0 libquskeyboard.so入力方法の選択メニューはファイル名の昇順らしい。libquskeyboard として置くとメニューの一番下に並ぶ。
余談だが。ramdisk が RAM の固定番地に置かれる理由がよーやく分かったりして。 ふつーの PC と違い、リセットをまたいで保護される ramdisk が必要になるのね。
実際、qtopia-free のキーボードをそのまま持ち込んでも、 日本語キーボードから「漢字」キーで仮名漢字変換モードに入っておけば、 US 配列キーボードに移って入力すれば仮名も漢字も入力できる。 変換モードをトグルするのにいちいち日本語キーボードに戻る必要があるだけだ。
トグルするのに必要な「漢字」シンボルだけがない。 他に「カナ変換」とかも無い訳だけど、そのへんはどうでもいいとして。 ctrl-o とか ctrl-\ とかを順繰りに押してみたが、トグルしてくれなかった。
で、どのあたりの名前を使ってるのかと /opt/Qtopia/sharp/include/qnamespace.h 見ながら keyboard.cpp の specialM[] (特殊キーシンボルテーブル) にヤマほどシンボル追加して全数テスト(笑)。Qt::Key_F25 (0x1048) ですな。
Key_F2x にあった。残りは:
ってな感じ。 真中が qnamespace.h での対応位置のシンボル。 右端のは strings libqkeyboard.so で見えたものからのシンボル名の推定。
英数 Key_F20 EISU 半角 Key_F21 ZEN? ? Key_F22 SNG? 音訓 Key_F23 ONK 変換 Key_F24 HEN 漢字 Key_F25 KNJ カナ Key_F26 KNA カナ変換 Key_F27 HKNA 全半変換 Key_F28 HHAN 英数変換 Key_F29 HEI
ソースには USE_SMALL_BACKSPACE というフラグがあって、 これを #undef すると BS を長くしてくれる (と同時に "1" の位置が "Q" の左上になる)。 ... が、どこにもドキュメントされてないだけあってバグっとる。 こういう場合、"1" の左隣は "~" か ESC が来るべきだが、")" が来る (笑)。
漢字キーを置くついでに直しておいた。
標準では kbdrate -r 6.6 -d 500 相当になっている。
Psion 5 で使ってる kbdrate -r 16.6 -d 300 相当にしてみたが、微妙に滑べるな。
カーソルリピートなどで 1 文字くらい行きすぎる。む〜
PC で使ってる kbdrate -r 33 -d 250 なんてとんでもなかろう。
キーボードとスクリーンの間に微妙に 1 行空いてるのは pick keyboard 用 (pobox もどき)。 どれくらい有用かってのは使ってみないと分からんし、外すには pick keyboard 側のまで読まなならんといけなさそうなので、とりあえずそのまんま。