Osaka.vim #4に参加しました

様々なVim使いの集い、Vimについて開発する会、Osaka.vim #4に参加してきました。実は、Osaka.vimはかつて一度、Osaka.vim #1に参加しておりますので、二回目の参加でした。

Osaka.vimもくもく会は、とにかく5時間弱、Vimについてもくもくと開発する会です。vimrcの設定を書き直してもよし、Vim scriptを勉強をしてもよし、新しいVimプラグインを導入してもよし、vimrcをひたすら眺めていてもよし、パソコンの設定もよし。都会の喧騒の中、休日のビルの一室で、普段顔を合わせることもない様々な人が、ひたすらパソコンとにらめっこしながら各自思い思いのことをするというのは、とても奇妙な光景です。しかし、Vimという共通点によって集いし人々が、お互いに一所懸命作業する姿に感化され、切磋琢磨しあうというのは、素晴らしいことだと思います。

ただし、はやぶささんのこのツイートにも、共感してしまいました。

前回参加した時は(#1)は少しは他の人との交流がありましたが、今回は本当にもくもくもくもくもく会という感じで、ひたすら静かにカタカタやってました。おかげで進捗を上げることが出来ましたが、もう少し交流する機会があったら嬉しいかなと思いました。前の席の方の画面をちらちら見ていると、ただひたすら他の人のブログを眺めたり、自分のvimrcをスクロールしてぼーっとしたりしてたので、終わってから「すごい人たちがいっぱい来ていながら、何も教えてくれないなら家で作業するのと変わらない」と思われても仕方がないです。もくもく会の趣旨はいいのですが、今度からは最後の一時間のように時間を決めて、質問タイムを設けてみてもいいと思います。

さて、もくもく会での私の進捗は、主にcalendar.vimの機能追加になります。普段からコンスタントに機能追加issueが立っていて、普段はなかなか対応できないので、片付けられて良かったです。

まず、Can't delete task · Issue #89 · itchyny/calendar.vim · GitHubを片付けました。calendar.vimのタスク画面では、安全のためD/ddでタスクを完了し、Lで完了したタスクを削除するというインターフェースになっています。いきなり削除すると元に戻せないからです。しかし、D/ddで直接タスクを削除したいという要求が出ていたため、オプションを実装し対応しました。

次に、List or Agenda view · Issue #88 · itchyny/calendar.vim · GitHubを実装しました。Google CalendarにはAgendaというボタンがあり、これをクリックすると現在時刻移行のイベントのリストが表示されます。これ相当の機能をcalendar.vimに実装しました。このAgenda viewを使うには、まず

let g:calendar_views = [ 'year', 'month', 'agenda', 'day_3', 'clock' ]

のように 'agenda'g:calendar_views に追加して下さい。 >< でビューを切り替えていくと、画面いっぱいにAgenda listを見ることが出来ます。更に、

:Calendar -view=agenda

でいきなりこのviewを開くことも出来ます。実装としては、既にあったEvent viewにオプションを追加して、Agenda viewにも使えるようにしました。本当ならば、Event viewとAgenda viewで抽象クラスを継承すべきところですが、もくもく会の時間内にさっと実装できてしまったし、差分もそんなに多くなかったので、楽な実装をしてしまいました。

calendar.vimは様々な技術的な技が詰まっていて、未だにそのアーキテクチャについて解説していないので、いわば専有特許みたいになってしまっているところがあるかなぁと思っています。コードはもちろん公開しているので誰でも読むことはできるのですが。いつかcalendar.vimアーキテクチャについて話す機会があればいいなと思っています。

普段の休日ならだらだらしてしまうところを、なかなか手を付けられないissueを片付けることが出来て、良いもくもく会でした。運営の皆様、会場を提供してくださった皆様に感謝致します。