Humanity

Edit the world by your favorite way

skk.vimに新たな機能追加を予定

SkkEnable()、SkkToggle()、SkkDisable()関数実行時に呼ぶフック関数を呼べるようにするという機能追加を予定しています。
以下Lingrのログ。

tyru:
skk.vimに新たにマッピングをいじるためのグローバル変数を加えるのを検討中です。

tyru:
http://twitter.com/hamaco/statuses/12206372721

VimBots:
http://a3.twimg.com/profile_images/698968627/hamaco_normal.jpg Name:hamaco
skk.vimでC-jを押した時にすでにhiraになってるとskk_on = 0になるのは設定ではどうしようもないのかなー
2010-04-15T15:25:56Z 22 hours ago

tyru:
(skk-enable-im)と(skk-disable-im)に分けても結局lmapの方が優先されるため、結果SKKKey()でが処理されてしまうんですよねー。

tyru:
lmap (skk-disable-im)しとくにもskk.vimは毎回lmapclear をしてるから無視されるだろうし...

tyru:
というわけでSkkEnable()やSkkToggle()時に実行するフックを登録すればいいんじゃないかと思いました。そこでマッピングを上書きしたい人はするということで。

tyru:
でもskk.vimはリストや辞書がない頃のVimでも使えることを目標というか前提にしてるので...

tyru:
関数は以下のように登録することを検討してます。

tyru:
let skk_enable_hook = 'MySkkMap,MyAnotherSkkMap'

tyru:
一応複数とれるように。

tyru:
あ、ここまで書いてそれautocmdでいいんじゃないかと思いました。

tyru:
一応skk.vimでもautocmd使ってるので多分古いVimでも使えるはず。

tyru:
うーんでも使うとしたらUserイベントですがUserイベントが古いVimで使えるか分からないですね...

tyru:
やっぱりskk.vimが動く「古いVim」のバージョンを定めるのと実行環境が実際にないときつい気がする...

tyru:
やっぱりグローバル変数で登録するのも互換性考えるとアリですね。

tyru:
新しいVimではリストで登録できるようにtype(g:skk_enable_hook) == type([])として処理を分けようかと思いましたが2つ問題があります。

tyru:
まずこの行が実行されると「古いVim」でエラーが起きるだろうことと、

tyru:
type()関数が存在するか分からないということです。

tyru:
今調べましたがtype()関数はskk.vimでは使われてません。

tyru:
となると互換性を考えた上で一番いい方法は上で書いたg:skk_enable_hookに文字列として関数をカンマ区切りで登録していくことです。

tyru:
そしてcall {func}()すると。call()関数はskk.vimで使われていないので避けます。

tyru:
よし、とりあえず案は決まりました。暇を見つけたら実装しようかと思います。

tyru:
む、augroupはskk.vimでも使われている...

tyru:
あああでもやっぱりdoautocmdがskk.vimで使われていないのでユーザにaugroupに登録しといてもらうという方法も使えなさそうだ...グローバル変数だなやっぱり