Pythonでskkservを作ってみる
SKKという革命的で魔法のような入力メソッドのお話です。
SKKにはskkservという変換候補をソケットを通じて取得出来るという便利なものがありまして、仕様を調べてみたら非常にシンプルだったのでPythonでskkservのサーバを作ってみました。
(環境はMac & AquaSKK なので本家SKKで動くかは試してません)
Listenするポートは1178。
SKKからの入力は1文字のコマンドとそれに続く文字列からなります。
文字列はEUCエンコードなので注意してください。
コマンド | 説明 | 入力 | 出力 |
---|---|---|---|
0 | ソケット切断 | (ソケットをclose) | |
1 | 変換 | 変換文字列(半角スペース終端です←) | 変換候補(※1) |
2 | バージョン情報 | 適当に | |
3 | ホスト情報 | 適当(ry | |
4 | abbrev | 1と同じ | 1と同じ |
※1
例えば変換候補がHelloとWorldだとすると、
1/Hello/World/\n
のように返します。
候補がなければ
4\n
を返します。
入力例:
"1はろーわーるど "
出力例:
"1/Hello World/ハローワールド/\n"
"4\n" (候補が無い時)
簡単ですね。
まあ実際に使うのは0と1だけなので2〜4は適当に文字列を返しとけば十分です。
あとは特に書くことはないのですが、ソースコードはこちらです。
http://github.com/osa9/pyskkserv/tree/forhatena
慣れないPythonで書いて少し残念なところもありますが、気にしないでください(
起動は、
./pyskkserv.py [port] (デフォルトポート=1178)
とりあえずサンプルとして、
きょう、いま、now、today
辺りに反応して現在時刻や日付を返すものを作成してみました。
例えば、
「きょう」で変換すると「2010年10月3日」というような変換候補が出ます。
関係してるのは、
pyskkserv.py の9行目と19行目(モジュールのロードと起動条件フィルタ)
mod/CurrentTime.py
辺りです。
モジュールは簡単に追加出来るようにしていますので気が向いたらどうぞ。
(続く)