US配列ソフトキーボード


JIS 配列になってるソフトウエアキーボードを US 配列に戻す ── というか、追加する。 基本的には、 qtopia-free に付属するソフトウエアキーボードは US 配列的だから、 これを arm 用に make して持ち込めばいい。 焦点は仮名漢字変換対応ってことになる。

Qtopia for arm

なんか 6 日のとこにメモするの忘れてたので。

/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 ってば、どこ探してんねん。

qtopia inputmethods の追加

ソフトキーボード、手書き認識のたぐいは qtopia の中で独立したアプリにはなっておらず、 qpe の plugins になっている。 ソースは (qtopia-free-1.5.0/ の) inputmethods/keyboard/ だ。 build すると plugins/inputmethods/ に出来る。
% 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 が必要になるのね。

仮名漢字変換への対応

make する前は libqsfepj との連係がどうなってるのかが気になったんだが、 SL-A300 の inputmethod plugins は libqsfepj を叩いていなかった (objdump -p で need していないのが分かる)。 inputmethod plugins の側でスペースキー or 変換キーを受けて API を呼んでいるのでなく、 libqsfepj に投げられた「スペース」というシンボルを libqsfepj が「変換」という動作(関数)に読み換えているということになる。 これなら libqsfepj の挙動は知らなくてもなんとかなる。

実際、qtopia-free のキーボードをそのまま持ち込んでも、 日本語キーボードから「漢字」キーで仮名漢字変換モードに入っておけば、 US 配列キーボードに移って入力すれば仮名も漢字も入力できる。 変換モードをトグルするのにいちいち日本語キーボードに戻る必要があるだけだ。

トグルするのに必要な「漢字」シンボルだけがない。 他に「カナ変換」とかも無い訳だけど、そのへんはどうでもいいとして。 ctrl-o とか ctrl-\ とかを順繰りに押してみたが、トグルしてくれなかった。

で、どのあたりの名前を使ってるのかと /opt/Qtopia/sharp/include/qnamespace.h 見ながら keyboard.cppspecialM[] (特殊キーシンボルテーブル) にヤマほどシンボル追加して全数テスト(笑)。Qt::Key_F25 (0x1048) ですな。

Key_F2x にあった。残りは:

英数 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
ってな感じ。 真中が qnamespace.h での対応位置のシンボル。 右端のは strings libqkeyboard.so で見えたものからのシンボル名の推定。

USE_SMALL_BACKSPACE

US 配列っつーても qtopia-free のは、 "1" キーが "Q" キーの右上にあるというのは Psion 5 もそうなんで腹は立たんが、 Return キーが小さい ( 逆 "L" 字でない) のに BS も小さいのはやっぱ好かん。

ソースには USE_SMALL_BACKSPACE というフラグがあって、 これを #undef すると BS を長くしてくれる (と同時に "1" の位置が "Q" の左上になる)。 ... が、どこにもドキュメントされてないだけあってバグっとる。 こういう場合、"1" の左隣は "~" か ESC が来るべきだが、")" が来る (笑)。

漢字キーを置くついでに直しておいた。

キーボードリピート

日本語キーボードでも US キーボードでも適当に文字をタップしたままにするとオートリピートが掛かる。 が、とんでもなく遅いうえに、 ハードコーディングしてる。しかも設定位置が分散しとるぞ。 あんまり使いそうにないっつうても、ちと酷くないか?

標準では kbdrate -r 6.6 -d 500 相当になっている。 Psion 5 で使ってる kbdrate -r 16.6 -d 300 相当にしてみたが、微妙に滑べるな。 カーソルリピートなどで 1 文字くらい行きすぎる。む〜
PC で使ってる kbdrate -r 33 -d 250 なんてとんでもなかろう。

修飾キーふたっつ

シフトキー
日本語キーボードではシフトキーがトグルになっている。CAPS キーが別にあるのに。 US キーボードのほうはというと普通に sticky 動作になっていた。 US のほうの挙動で別にかまわんと思うんだが ...
コントロールキー
ぐ、日本語キーボードと US キーボードで ctrl 修飾の取り扱いが違う。 embedded-konsole-ja ってば、何やった?

ソース

スクリーンショット

US キーボード1 US キーボード2

キーボードとスクリーンの間に微妙に 1 行空いてるのは pick keyboard 用 (pobox もどき)。 どれくらい有用かってのは使ってみないと分からんし、外すには pick keyboard 側のまで読まなならんといけなさそうなので、とりあえずそのまんま。


[日記へ] [目次へ]