YamaKen
yamak****@bp*****
2004年 11月 11日 (木) 11:52:16 JST
ヤマケンです。 custom APIとuim-prefに関する開発計画をまとめてみました。表さん、 足永さん、kzkさん、確認と意見をお願いします。もちろん他の方々の 意見も歓迎します。 sumikaによるuimの設定にはまだ以下の問題があります。 - 時々再現条件が見えていないSEGVが発生する(tkngさんのところで は起動すらしないとの事) - uim-scm APIをベースにした扱いづらいcustom APIを使っているの で拡張が難しい - キーバインドの設定に未対応 - 5月時点のIM群実装に基づいたcustom variableしか定義されていな いので、設定項目の過不足がある これらの問題を新しいcustom APIとそれを利用するuim-prefの作成によっ て解決したいと考えています。以下のような流れで作業を進めようと思っ ているのでご意見お願いします。 ・custom API改訂 uim-custom.hとしてcommit済。表さん、足永さん、kzkさんの賛同が 得られればヤマケンが中身を実装する。 ・設定保存方法変更 現在のsumikaは ~/.uim に直接設定を上書きするが、[Anthy-dev 719]で述べた通り、以下のように変更する。これはuim-custom.hの uim_custom_save()として実装する予定。 - custom API経由で行った設定は ~/.uim.d/user-custom.scm (仮称) に保存 - ~/.uim はユーザが手書きで設定を行うための専用ファイルとする - ~/.uim.d/user-custom.scm と ~/.uim では ~/.uim の方が後から 読み込まれ、結果として手書き設定の方が優先される - ~/.uim の設定はsumika起動時にも読まれるので、GUI設定の初期値 に影響を与える。つまり一度sumikaで設定をsaveすると ~/.uim の 内容(のうちdefine-customで定義された設定)が ~/.uim.d/user-custom.scm にコピーされる事になる ・uim-pref作成 uim-custom.hを利用したアプリケーションとしてsumikaを元に作り直 す。ヤマケンは基本的に作業せず補完程度。現在のsumikaに加えて、 以下のような追加仕様が必要。 - sumikaでは辞書編集機能との兼ね合いでウィンドウの初期サイズが 小さめになっているが、uim-prefでは最初から適切なサイズに - subgroupによるグループ内グルーピングを実装 現在以下のように表示されている項目を、 □ Specify default IM ┏━━━━━┓ Default input method ┃▼ Anthy ┃ ┗━━━━━┛ 同じsubgroupを持つ項目同士をまとめて以下のように表示する。 ┌─ Default input method ────────────┐ │ │ │ □ Specify default IM │ │ ┏━━━━━┓ │ │ Default input method ┃▼ Anthy ┃ │ │ ┗━━━━━┛ │ └────────────────────────┘ - 各widgetの有効/無効(設定可/不可)をuim_custom->is_activeに応 じて制御 - ユーザが各widgetの値を変更したら即時uim_custom_set()でScheme インタプリタ側に反映するようにする。ある項目の設定が他の項目 の状態(activity等)に影響を与えるような場合があるため(例: "Specify default IM" のチェックを外すと"Default input method"の選択メニューが無効化)。変更はuim_custom_set_cb()で 設定したcallbackで通知される - advanced subgroupだけは特別扱いして、通常のsubgroupのように 枠で囲う代わりに"Advanced settings"ボタンを押した時に現れる ようにしたい(ヤマケンの個人的希望。必須ではない) - 各group毎に「デフォルト設定に戻す」ボタンを追加。押されたら uim_custom->default_valueを各customに設定 ・uim-prefが動くようになってからの拡張 - キーバインド設定用のcustom typeを追加 各groupの下に'keybind' subgroupを作り、キーバインドのcustom variableは全てそこに属するようにする。uim-pref側では以下のよ うな対応が必要 * キーのcapturingによる設定、または文字列として手書き * 1つの機能に対して複数キーのorを可能に。orされる各キーの widgetは分ける(一つの入力欄にカンマ区切り等で入力するので はない。captureボタンも各キー毎に設ける。「追加」ボタンで widget追加?) * Schemeによる設定では以下のように大文字・小文字の区別の問題 があるが、とりあえずuim-pref側でcaptureしたままの入力を uim_custom_set()すればよい事にする。"<Control><Shift>o" → "<Control>O"といった正規化はScheme側で面倒見る。ただし' right' 'escape'等のsymbolicなキー名はuimのものに変換して渡 す事。 (define-key anthy-extend-segment-key? '("<Control>o" "<Control>O" "<Shift>right")) * captureしたキーを文字列としてwidget上に表示する場合、 uim-pref側で直接設定せず、一旦uim_custom_set()してuim側か らのcallbackを待ち、uim_custom_get()で得られたcustom内の文 字列をwidgetに表示する。Scheme側で正規化した結果を表示する ため。 上記のようなwidgetの実装に問題が無ければcustom API側の実装に 移る。 以下は余力があればuim-pref側で実現して欲しい機能。 * キー定義の手段として、キーのcapture、文字列として入力の他 にgeneric-cancel-key?等のsymbolからも選択可能にしたい * ただし、上記設定手段は普通の人には仕組みが理解しづらいため、 通常は存在を隠しておき、keybind subgroupに属する「高度な設 定」というbool custom variableにチェックを入れた時だけ設定 可能にする - 「項目の追加/削除及び並べ変えの可能なリスト」というcustom typeを追加 Mozillaのpreferenceでの"Languages"のようなもの。例えば、 toolbar上に表示されるanthyの入力モードはScheme上では以下のよ うな設定で制御されている。「半角カタカナ」という入力モードが 不要な人はリストからaction_anthy_hankanaを削除、項目の並び順 を変えたい人はaction_anthy_directをリスト先頭に持って来たり と自由にカスタマイズできる。これをGUIで実現したい。 (define anthy-input-mode-actions '(action_anthy_hiragana action_anthy_katakana action_anthy_hankana action_anthy_direct action_anthy_zenkaku)) このようなwidgetを実装する事に問題が無いならcustom API側での custom type追加とuim-pref側でのwidget実装を行い、対応する設 定項目を定義する。 ・全設定項目のdefine-custom化 現在は全IMの設定項目がcustom.scm上に集約されているが、上記の全 ての作業が終わったら各IMのscmファイルで直接define-customで設定 項目の定義を行うように変更する。同時にgettext化も行い日本語表 示を可能にする。 ------------------------------- ヤマケン yamak****@bp*****