Humanity

Edit the world by your favorite way

eskk構想 - ローマ字からひらがなへの変換時の細かい挙動

152 名前:chozetsu :2008/03/05(水) 15:44:59 ID:/UTkR6680
kana-rule-listを書き換えて、漢直(超絶技巧入力)を使おうと思っているんですが、
おおよそできるものの、一部困ってます。

具体的には、超絶の場合、

jfで「あ」、jf;で「ぁ」、ofで「は」、of;で「ば」、ofaで「ぱ」

などのように、ひらかなの拗音の二文字目や(半)濁音を打つとき、先に直音(たとえ
ばof)部を打って、次に(半)濁音や拗音の二文字目部分(たとえば;やa)を打って
(半)濁音や拗音の二文字目部分を入力(この場合、「ば」と「ぱ」)する仕組みにな
っています。

OS9まで使えたWXGやVJEなどでは、こういうローマ字定義がそのまま可能だったので
すが、AquaSKKでこれをやろうとすると、たとえばofを打鍵した際、「は」が確定せ
ず、次のキーを何か打って初めて「は」が確定するようになってしまいます。この際、
「は」のみで確定すればいいのですが、次に打ったキーがゴミとして「は」の跡にくっ
ついてしまいます。

そこで、(半)濁音や拗音の二文字目部分のキー入力順序を入れ替えて凌いでいるの
ですが、たとえば本来の超絶では『of;で「ば」』となり、それで指が記憶しているの
を、『o;fで「ば」』と変えてしまうと入力時にストレスがかかってしまい、これなら
ゴミが出るストレスと一緒だな、とうなだれている次第です。

Windows上ではVISTAでもまだWXGやVJEや松茸などが(工夫すれば)使えるのでそ
れを使えばいいのですが、私はMac使いなので、何とかMac OS X上で超絶を実現した
く、試行錯誤しています。様々なMac OS X用のIMEを試しましたが、いずれも「帯に
短し」の類で、AquaSKK以外は超絶が実用できるようには細工できませんでした(私
自身のスキルの限界です)。

どなたか本件に関しまして、回避法などをご存知でしたらどうかよろしくお願いいたします。

AquaSKKスレッド 3

これはnの処理と似てるな。かな配列の濁点の付け方とも似てる。
ローマ字からひらがなへ変換する時、他のIMEなどを見るとだいたいこんな挙動が期待される。

  • skk.vim
  • MS IMEなど
  • Vimマッピング
  • Vimと似てるけど>>152が言ってるように最短でマッチしたものをその場で待たずに変換する。次のキーでマッチしたらまた変換し、マッチしなかったら変換したものをバッファテーブルからクリアして、入力された1文字を変換か追加

これらの挙動をグローバル変数で変えられればいいかもしれない。


追記:
ちょっと間違えた。
あと説明が不十分だと思うのでつける。

下の説明の「マッチ」というのは、
ローマ字→ひらがなの変換、たとえば sa→さ, n→ん のような対応表にマッチしたということ。

  • skk.vim
    • マッチしたら変換。ただ「n→ん」がマッチしても「nn→ん」のようにまだ他の変換があったら待つ。
    • マッチしないかつ候補がない場合、前の文字を削除する。
    • 現在のeskk.vimはこれ。デフォルトもこれにするつもり。extended skk.vimなので。
  • MS IME, Anthy, etc.
    • マッチしたら変換。ただ「n→ん」がマッチしても「nn→ん」のようにまだ他の変換があったら待つ。
    • マッチしないかつ候補がない場合、前の文字を削除せず、そのまま入力を続ける。
  • Vimマッピング
    • マッチしたら変換。ただ「n→ん」がマッチしても「nn→ん」のようにまだ他の変換があったら待つ。
    • マッチしないかつ候補がない場合、前のマッピングを実行し、入力された1文字をキューにためる。それもマッチしたらまた実行する。
  • Vimと似てるけど(略)
    • マッチしたら変換。他の候補があったとしても。
      • 他の候補がある場合はまだバッファテーブルはクリアしない。
      • 次でマッチしたら挿入された文字を削除し変換、を続ける。
    • マッチしないかつ候補がない場合、前の文字を削除せず、そのまま入力を続ける。
    • これが個人的には理想。


実際の実装も

  1. マッチした場合
  2. 候補がある場合
  3. 候補がない場合

にif, elseif, elseと分かれてます。*1
この3パターンの場合の動作を簡略化したいなーと思ってるので、
それぞれの動作をラップした関数をautoload/eskk/mode.vimあたりに作りたいと思ってます。

*1:autoload/eskk/mode/hira.vim