Humanity

Edit the world by your favorite way

コード概観

概観

インデント
  • スペース2個
  • &tabstop == 8
  • GNUスタイルって言うんだっけ?
  • 宗教論争にはあまり詳しくないのでよく分かりません

流れ

  • g:skk_control_j_keyを押す
  • mapmode-lになる*1

関数

SkkMode(on)

mapmode-lにする。
mapmode-lについては下の項目参照。

  • exists('b:skk_on') でなければs:SkkBufInit()が実行される
    • バッファ変数の初期化など
  • a:onがtrueの場合
    • s:SkkOn()
      • let b:skk_on = 1
    • SkkMap(silent)
    • s:SkkMapCR()
      • g:skk_egg_like_newlineなどを考慮して、の割り当てをする (TODO: これSkkMap(silent)の方に持っていってもいいかも)
    • 最後にSkkMode(on)は=の中で評価されるので"\"*2を返す
  • a:onがfalseの場合
    • (TODO: まだ見てない)
SkkMap(silent)

(TODO: まだよく見てない)

s:SkkKey(key)

キー入力ごとにこの関数が実行される。
特定のキー入力以外はs:SkkInsert(char)に渡す。

デバッグなどにはここにprintf()などを置いておくと分かりやすいかも。

function! s:SkkKey(key)
  echomsg printf('a:key = %s', a:key)
  echomsg printf('b:skk_on = %s, b:skk_mode = %s, b:skk_line = %s', b:skk_on, b:skk_mode, b:skk_line)
  echomsg printf('b:skk_rom = %s, b:skk_romv = %s, b:skk_rstart = %s', b:skk_rom, b:skk_romv, b:skk_rstart)
  echomsg printf('b:skk_henkan_mode = %s, b:skk_abbrev_mode_on = %s, b:skk_autofill = %s', b:skk_henkan_mode, b:skk_abbrev_mode_on, b:skk_autofill)
  sleep 1

  " ...

以下「変換」とタイプして変換するまでバッファ変数の変遷。

s:SkkInsert(char)

コメントによると

入力の大元。ここで状態、キーを見てそれぞれの関数を呼び出す。

色んな関数を呼び出していて、まだよく見ていない。
ここら辺はキー入力してデバッグしながら流れを見ていくと分かりやすいかもしれない。

変数

バッファ変数

かなり多い。
s:SkkBufInit()とs:SkkSaveEnv()でいろいろ見られる。

s:skk_cmdline_*

なんだかよく分からない。
多分cmdline functionsで使われてるっぽくて、そこを見ると
= だと setcmdpos() が思ったように動かないため自前で組み立てる」
と書いてある。
バッドノウハウの香り
Vimのバグ・・・とか?
もしかしてここら辺ごっそりといらなくなるんじゃ・・・

mapmode-l

(TODO: まだよく(ry)

:help language-mapping にfとかrでlmapの設定が使えるって書いてあるんだけどこれマジか・・・
fとかrで日本語使えたら便利だなぁ。
skk.vimでこれサポートしたい。

気づいたこと

g:skk_control_j_keyを''にしているにも関わらずでIMが終了する

コード見てて気づいたけど、は特別なキーらしい。
s:SkkKey(key)で処理されてて、s:SkkControlJ()という関数を呼び出す。
この関数はここからしか呼ばれてなくて、
コメントに書かれてある通りSKKをonにすることはない。

elseif a:key == "\<C-j>"
  let str = s:SkkControlJ()

これは

elseif a:key == eval(printf('"\%s"', g:skk_control_j_key))
  let str = s:SkkControlJ()

こうするべきじゃないだろうか。

その他にも、キーがマッピングされてるのにも関わらずベタ書きされてるのはなんか理由があるんだろうか。

感想・その他

  • コードの整理とかやってもいいんだろうか。
  • あまりにも変えすぎるのはよくない。
    • 互換性は死守したい。(超重要)
    • あまり変わりすぎると他の人が手を加えにくくなってしまう。(これも重要)
    • でもそれをやるのは仕切ってる人(自分)の仕事だろうなぁとも思う。

できれば自分はこういう風に思ってるよーみたいな感想ください。
あとその必要性があるかどうかも知りたいです。

整理するとしたら

などなど。

*1:自分の環境だと「-- 挿入 (言語) --」と表示される

*2::help i_CTRL-^ か :help c_CTRL-^