TabSideBarの進捗旅 at 土善旅館
11月23日から26日にかけて三泊四日のVimmer7人で開発合宿を行った。
土善旅館での食事とか様子とかは他のVimmerのブログを見てもらうとして、私はやったことをつらつら書きます。
1日目
今回の目標は、WindowsにてTabSideBarの描写がおかしくなるのを修正するというのが一応目標だった。いつもはMacBookAirでもくもく会などに参加しているが、今回はSurfacePro4のWindowsでの参戦。
Windowsの描写まわりが壊滅状態 · Issue #3 · rbtnn/vim · GitHub
描写がおかしくなる現象は以下の通り。スクロールしようとすると、TabSideBar分のスクロール位置がずれる。
この現象はMacのTerminal上では発生せず、Windowsでのみ発生するのでずっとTabSideBarの進捗は滞っていた。 1日目はVimの描写回りがコーディングしてあるscreen.cとにらめっこしてあっけなく1日目が終了。この日はなにもわからず、進捗0%... orz
2日目
2日目もscreen.cとにらめっこし途方に暮れていた。2日目も終わろうとしていたころ(23時くらい?)、「scroll_region_set
関数のリージョンってなんだ?」とふと思い、調べてみたところ、term.cに定義してあり、とある条件下の時だけ、このscroll_region_set
関数で描写を行っているっぽい。で、この関数を調べてみたらTabSideBarの対応が全くされていなく、対応したら、あっさりWindowsでのTabSideBarの描写が直った。2日目が終了してもう個人的には進捗100%状態w。
3日目
3日目はコマンドラインでCtrl-dしてtabキーを押すとwildmenuの描写位置がおかしい問題。
コマンドラインでCtrl-dしてtabキーで表示がおかしい · Issue #6 · rbtnn/vim · GitHub
まぁこれは、コマンドラインでCtrl-dしてtabキーを押した時もTabSideBarの幅が考慮されたまま描写されていて、比較的簡単だった。wild_menu_showing
という変数がwildmenuの表示状態を保持していて、wildmenuが表示中はTabSideBarの幅を0にしてあっけなく完了。
次にマウス対応。この時のTabSideBarは全くマウス対応してない状態。
マウス対応(%T) · Issue #4 · rbtnn/vim · GitHub
で、マウスのイベントはVimのどこで処理しているかと探しているとnormal.cのdo_mouse
関数でかなりわかりやすいコードでtablineのマウスクリックイベントが処理されている。screen.cとはUI周りの座標計算ばっかなので全く読みやすくない!
tablineのマウスクリックイベント処理をそのままパクって多分TabSideBarのマウスイベントも実装完了。3日目終了。
ただ、TabSideBarにおいて%T
や%X
はどうするか?という問題は残ったまま保留。
4日目
TabSideBarのテストを書くかーと思ったが、Vim本体のテスト実行するmakeのパラメータを忘れている。 なので、めんどくさいことはとりあえずVim scriptで書き書き....
runtest.vimを実行するだけのコマンドが定義してあるVimプラグインを作成して、
:RunTest test_alot.vim
ステーキを食べて4日目終了。
個人的には進捗が出た4日間でした。よかったよかった。