ZERO3[es] と文字入力

2006/08/16 (最終更新:2006/08/19 12:30)

◎ 文字入力環境を整え中

「ZERO3 と WindowsMobilie5.0」 でも書いたように、 現在ビュアとしての PDA と文字入力用端末との融合を目指していろいろ挑戦中です。

外付けの USB キーボードを使う場合は ホームポジションから手を動かさないで漢字変換したいので、 変換中にカーソルキーを使わなくて済むように設定を変更します。 以前同じ目的で作った imekeyset というソフトがあるので、 まずこれを WindowsMobile5.0 に移植しました。

imekeyset5 は MS-IME 専用です。 ATOK でキー操作を変更する方方がまだわからないので、 残念ですがとりあえず ATOK は断念することにしました。

◎ MS-IME だとテンキーで変換ができない

変換操作をホームポジションからできるように設定を書き換えました。 Desktop PC で設定している操作と全く一緒で非常に快適です。

こんな感じに設定しています

が、MS-IME にしてしまうとカーソルキーでは漢字変換できないことが判明。 USB 外付けキーボード使用時はいいのですがテンキーを遣って入力している場合は 非常に不便です。 (よく見るとマニュアルにも載ってるし)

結局 imekeyset5 を使って同じように カーソルキーに変換操作を割り当てたら、 かなり携帯電話風の操作で良い感じになりました。 結構便利なので Phone style として imekeyset5 に組み込んでみました。

◎ Ctrl キーを Capslock と交換したい

W-ZERO3[es] 用に 外付けの USB キーボードとして小型のもの ELECOM TK-UP84CP を購入しました。

やはり一般的なキー配列なので Ctrl キーが左下に位置しています。 自分は普段 vi(vim) 系や emacs 系のテキストエディタを使用しており、 [A] の左側に [Ctrl]、[1] の左側に [ESC] を配置して操作しています。

以前も PocketPC で同じ目的のツールを作ったことがありました。 ( Targus Stowaway Portable Keyboard でキー配置変更)

今回も何とかキー入力をうばって無理やり Capslock を Ctrl キーとして 使えるように変更するソフト (ctrlswapmini) を作成。 とりあえずちゃんと動いてますが ちょっと強引な方法なので当初は公開を控えておきます。

IME 操作といい Ctrl キーの位置といい、 いつも使ってるデスクトップ環境とほとんど同じになって 文字入力が非常に快適になりました。

◎ テンキー入力時に微妙な違和感

落ち着いた状態では外付けキーボードでしっかりと入力できて、 電車の中では携帯電話としてテンキーだけで閲覧&入力操作するのが目的です。

ちょっとした文章ならテンキー変換でいけるし、 長めの URL を打つときは QWERTY キーボードを開いてできるし、 場合によってさまざまな入力手段を選べるのは非常に便利です。

ATOK だとテンキー操作では IME を off にできなかったのですが、 MS-IME だと半角英数字を入力中は IME が off になってくれます。 非常に便利なのですが、 携帯電話風操作をしてると若干挙動に違和感を感じることがあります。

トグル入力中に同じキーの文字を連続して打つ場合は、 トグル入力を一旦終了させる区切りとしてカーソルキーの右 [→] を入力します。 マニュアルにもきちんとそう書いてあります。

例えば「あい」と入力するには  [1あ] [→] [1あ] [1あ]  のように操作する必要があります。

だけど W-ZERO3[es] では [→] を入力した時点で、 トグル終了だけでなく 同時にカーソルも右に移動してしまうようです。

IME ON の時はカーソルが入力バッファの末尾に位置することがほとんどなので、 右移動は無視されてしまいこの問題がめったに表面化しません。 ですが一旦カーソル位置を左に動かしてから上記操作を行うとカーソルが右に 動いてしまうことが確認できます。

ATOK に切り替えても同じなので どうやらキーボードドライバ側の問題のようです。 [→] キーはトグル入力のキャンセルではなくて、 単なるカーソル右移動として実装されているようです。

そうえば ATOK では半角英数の入力時にも IME が on のままです。 推測変換のためかもしれませんが、 この仕様なら上記問題が表面化しないことがわかります。 ひょっとしたら問題回避も目的なのかもしれません。

◎ トグル入力キャンセルを改善してみる

トグル入力時の [→] によるキャンセルの挙動は、 結局 ATOK を使ってるとほとんど問題にならないし QWERTY キーボードも付いてるので比較的どうでも良いことかもしれません

だけど折角なので 回避手段がないのか少々調べてみました。

送信されてくるキーコードを見ると、 トグルキーの実装は結構強引な方法で実現されていることがわかります。 例えば [1あ] を 2回押して「い」を入力するには次のようになります。 (コードを整理した内容で、実際は全部 DOWN/UP のペアです)

・[1あ] 1回目

    [かな] on
    [あ]
    [かな] off

・[1あ] 2回目

    [BS]
    [かな] on
    [い]
    [かな] off

前のトグル文字を消すために [BS] が送信されていたり、 入力モードを切り替えるために [かな] を毎回送ったりと 純粋にキー操作をシミュレーションしていることがわかります。 もちろん送られてくるコードは文字入力モードによって変化します。

何かしら特別なトグルキー操作だけのコードが送られているわけでもなく、 トグル入力中かどうか、 現在どの文字入力モードなのか を調べる方法もちょっとやそっとではわかりません。

DLL をのっとって キーボードドライバを自分で置き換えてしまえばよいのですが、 そこまで調べるのは少々かかりそうです。 PlatformBuilder とかもないし。

また QWERTY キーボード側の送信コードを見ていると こっちも結構複雑なキーコードを送ってきていることがわかります。

例えば Shift を一旦押して離してから [A] を押した場合は次の通りです。

    [Shift] on
    [Shift] off

    [Shift] on
    [A]
    [Shift] off
Shift を離したときに一旦 Shift KEYUP を送って Shift を解除するのですが、 直後の 1 キーは Shift で囲まれたコードになります。 これは Shift や Ctrl 等のキーが、同時押しと2タップ押しの双方に 対応しているからです。 例えば Shift+[A] は次の2種類の操作ができます。 結果は全く同じです。
  ・[Shift] を押しながら [A]
  ・[Shift] を押して一旦離したあとに [A]

テンキーのトグル対応といい キーボード関係は意外に複雑な実装になっているようです。 短い開発期間で非常によくがんばっている、といったところでしょうか。

こんな感じでコードを調べていって 何とかトグル状態かどうか判別つきそうだったので試しに実装してみました。 トグル入力直後の [→] だけ送信されてきても無視します。 うまくいけばこれで操作がほぼ携帯電話と同等になります。 swapctrlmini に追加で組み込んだので 公開テスト版としてアップしてみます。

これでようやく満足できる入力環境が整いました。 いろいろと不便や不具合があったんですが 何とか自力解決でいけそうです。

◎ ポケベル入力を実装してみる

文字コード解析の結果 入力モードによらずにテンキーを ほぼ1キーとして認識できるようになりました。

この応用例としてポケベル方式の入力ができるようにしてみました。 新しい swapctrlmini で対応しています。(もはやプログラムの名前が中身とあってないですが)

ポケベル入力方式は今まで使ったことが無かったのですが 手持ちの Vodafone 905SH のマニュアルを参考に組み込んでみたのがこれです。 (QWERTY キーボードも付いている WS-ZERO3[es] で 本当に必要あるのかどうかわかりませんが・・) ちなみにモードは2つだけでキーマップは下記の通り。 拡張は可能なので、本当に使い物になるようでしたら改良するかもしれません。

  大文字モード
   1  2  3  4  5   6  7  8  9  0
---------------------------------
1  あ い う え お  A  B  C  D  E
2  か き く け こ  F  G  H  I  J
3  さ し す せ そ  K  L  M  N  O
4  た ち つ て と  P  Q  R  S  T
5  な に ぬ ね の  U  V  W  X  Y
6  は ひ ふ へ ほ  Z  ?  !  ー /
7  ま み む め も  \  &       改行
8  や ( ゆ ) よ  *  # spc   切替
9  ら り る れ ろ  1  2  3  4  5
0  わ を ん ゛ ゜  6  7  8  9  0


  小文字モード
   1  2  3  4  5   6  7  8  9  0
---------------------------------
1  ぁ ぃ ぅ ぇ ぉ  a  b  c  d  e
2  か き く け こ  f  g  h  i  j
3  さ し す せ そ  k  l  m  n  o
4  た ち っ て と  p  q  r  s  t
5  な に ぬ ね の  u  v  w  x  y
6  は ひ ふ へ ほ  z  ?  !  -  /
7  ま み む め も  \  &       改行
8  ゃ ( ゅ ) ょ  *  # spc   切替
9  ら り る れ ろ  1  2  3  4  5
0  わ を ん 、 。  6  7  8  9  0

これで完全にテンキー入力の挙動をのっとることができそうです。 おそらくトグル入力も 自分で独自のものに置き換えてしまうことができるでしょう。 文字を追加したり逆トグルを入れたり、 Nokia 端末のような Timeout 確定をつけたり。 (長押しによる直接数字入力は無理そう)

◎ 残るは

入力側はいろいろ改善できたので、 あとは良いテキストエディタさえあれば・・

それとデータ同期&履歴管理ツールとして使うために WindowsMobile 版の Subversion クライアントが欲しいところです。

[戻る]
[メニューに戻る] [ZAURUS総合] [Direct3D] [Ko-Window] [Win32] [WinCE] [携帯電話] [その他]
フルパワー全開 Hyperでんち

Hiroyuki Ogasawara <ho>