[Anthy-dev 1363] uim-pref開発計画

Back to archive index

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*****



Anthy-dev メーリングリストの案内
Back to archive index