TabSideBarの進捗旅 at 土善旅館

11月23日から26日にかけて三泊四日のVimmer7人で開発合宿を行った。

f:id:rbtnn:20171126234738j:plain

土善旅館での食事とか様子とかは他のVimmerのブログを見てもらうとして、私はやったことをつらつら書きます。

1日目

今回の目標は、WindowsにてTabSideBarの描写がおかしくなるのを修正するというのが一応目標だった。いつもはMacBookAirでもくもく会などに参加しているが、今回はSurfacePro4のWindowsでの参戦。

Windowsの描写まわりが壊滅状態 · Issue #3 · rbtnn/vim · GitHub

描写がおかしくなる現象は以下の通り。スクロールしようとすると、TabSideBar分のスクロール位置がずれる。

f:id:rbtnn:20171127000601g:plain

この現象は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。

f:id:rbtnn:20171127003151g:plain

3日目

3日目はコマンドラインでCtrl-dしてtabキーを押すとwildmenuの描写位置がおかしい問題。

コマンドラインでCtrl-dしてtabキーで表示がおかしい · Issue #6 · rbtnn/vim · GitHub

f:id:rbtnn:20171127004056p:plain

まぁこれは、コマンドラインでCtrl-dしてtabキーを押した時もTabSideBarの幅が考慮されたまま描写されていて、比較的簡単だった。wild_menu_showingという変数がwildmenuの表示状態を保持していて、wildmenuが表示中はTabSideBarの幅を0にしてあっけなく完了。

f:id:rbtnn:20171127004615p:plain

次にマウス対応。この時のTabSideBarは全くマウス対応してない状態。

マウス対応(%T) · Issue #4 · rbtnn/vim · GitHub

で、マウスのイベントはVimのどこで処理しているかと探しているとnormal.cのdo_mouse関数でかなりわかりやすいコードでtablineのマウスクリックイベントが処理されている。screen.cとはUI周りの座標計算ばっかなので全く読みやすくない! tablineのマウスクリックイベント処理をそのままパクって多分TabSideBarのマウスイベントも実装完了。3日目終了。 ただ、TabSideBarにおいて%T%Xはどうするか?という問題は残ったまま保留。

f:id:rbtnn:20171127005513g:plain

4日目

TabSideBarのテストを書くかーと思ったが、Vim本体のテスト実行するmakeのパラメータを忘れている。 なので、めんどくさいことはとりあえずVim scriptで書き書き....

GitHub - rbtnn/vim-runtest

runtest.vimを実行するだけのコマンドが定義してあるVimプラグインを作成して、

:RunTest test_alot.vim

ステーキを食べて4日目終了。

f:id:rbtnn:20171127010511j:plain

個人的には進捗が出た4日間でした。よかったよかった。