コード概観
概観
インデント
- スペース2個
- &tabstop == 8
- GNUスタイルって言うんだっけ?
- 宗教論争にはあまり詳しくないのでよく分かりません
関数
SkkMode(on)
mapmode-lにする。
mapmode-lについては下の項目参照。
- exists('b:skk_on') でなければs:SkkBufInit()が実行される
- バッファ変数の初期化など
- a:onがtrueの場合
- 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()でいろいろ見られる。
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()
こうするべきじゃないだろうか。
その他にも、キーがマッピングされてるのにも関わらずベタ書きされてるのはなんか理由があるんだろうか。
感想・その他
- コードの整理とかやってもいいんだろうか。
- あまりにも変えすぎるのはよくない。
- 互換性は死守したい。(超重要)
- あまり変わりすぎると他の人が手を加えにくくなってしまう。(これも重要)
- でもそれをやるのは仕切ってる人(自分)の仕事だろうなぁとも思う。
できれば自分はこういう風に思ってるよーみたいな感想ください。
あとその必要性があるかどうかも知りたいです。