2013、5日目の記事になります。プラグインの完成が遅れ、遅刻力を発揮してしまいました...。ThingsPast.vimをリリースしましたThingsPast.vimというプラグインをリリースしました。Xの通知センターのようなものをVim内で実装したものです。https://github.com/supermomonga/thingspast.vimMacをお持ちでない方のために簡単に説明すると、通知センターは各アプリケーションによるユーザーへの「通知」をハンドリングする機能です。Twitterの新着リプライや新着受信メールなどといった通知の一覧表示や、通知一覧からの選択によってアプリケーションを適切な状態で起動、たとえば通知された新着メールをクリックするとそのメールが選択された状態でメーラーを起動するなど、を行うことができます。ThingsPast.vimは、これをVim内で再実装したものです。ThingsPast.vimのメリットVimで動作するTwitterクライアントやメーラー、Lingrクライアントなど、Vimをプラットフォームとして動作するアプリケーションがあります。これらの新着通知をハンドリングする手段としては、今までGrowlなどのOSレベルの通知アプリケーションと連携して通知を行われるのが一般的でした。この方法には欠点があります。それは、OSから見て、通知元のアプリケーションは単にVimでしかなく、Vimで動作しているどのアプリケーションからの通知であるのかといった情報のハンドリングが難しいことです。Xの通知センターに表示すること自体は可能なものの、それを通知一覧から選択した際にVimを起動し、その中でTweetVimを起動し、該当のリプライや会話を表示する、といった動作を行わせることはかなり難しいのです。ThingsPast.vimは、Vim内に独立した通知管理システムを構築することで、こういった問題を解決しました。ThingsPast.vimの動作風景ThingsPast.vimをインストールし、<Space>nを打鍵すると、Vimのウィンドウが縦に分割され、右側にプラグインごとの通知一覧が表示されます。j,kで通知を選択でき、選択した状態で<CR>(Enter)を打鍵すると、プラグインごとに最適な処理が実行され、その後通知一覧から通知は消えます。ThingsPast.vimの想定利用シーンThingsPast.vimの想定している利用シーンとして、以下の様なものがあります。新着DM通知J6uil.vim(Lingrクライアント)新着メッセージ通知Gmail.vim(Gmailクライアント)新着メール通知VimShell.vim(ターミナルエミュレータ)時間がかかった処理が終了した際、VimShellがアクティブバッファでない場合、通知をするThingsPast.vimで通知を受け取るには、それぞれのプラグインからThingsPast.vimが提供しているAPI関数をコールする必要があります。hookの仕組みが実装されているプラグインとの連携を、vimrcの設定で記述することができます。この辺りについて、詳しくはヘルプドキュメントの方をご覧ください。実際には、上記のプラグインにはhook機能が不足しておりThingsPast.vimとの連携ができないものが多いのが現状です。Requestを送りたいなと考えています。選択中の通知は、省略されたメッセージが右から左に流れて全文を読めるようにしたいですHookの実装これにより、通知が追加された際にShaberu.vimで音声通知を行う、といったことができるようになります新着通知が追加されたプラグインを上に表示する用に、並び順を改善ステータスラインに通知数を表示することなどができるように、外部からの利用を想定した便利関数の実装コードのリファクタリングVimAdventCalendarに間に合わせるために、所々に妥協した面が見えます...ユニットテストの充実化12月7日に開催されるTokyoVimでは、ThingsPast.vimのリファクタリングや機能追加など、重点的に行いたいと思います。scriptプログラミングの経験が浅い私にとって、かなり手探りでの実装となりました。プラグインを作成するにあたってLingrのVim部屋にて多数の方から様々なアドバイスを頂戴し、なんとか完成に至ったという次第です。アドバイスをくださった皆さまに、この場を借りてお礼申し上げます。6日目は明日、というか今日ですが、の担当は@kaoriyaさんです。お願いします!はてブに追加この記事をツイートFeedlyで購読supermomongaかなりすごいことでゆうめい。したまちでしらぬものはいない。),;’EmacsユーザーがVimを1ヶ月使った感想RubyでGUIアプリを作るならJRuby+JavaFX+Rawrで決まり!automatic.vimでウィンドウの一時的分割をハンドリングしようももんが流NeoBundle管理術Vimと対話せよVimShellが動的プロンプトに対応しました(やばい)ジャズだって聴ける。X(1)homebrew(1)rbenv(1)Evil(1)Mechanize(1)Scraping(1)聴いてるやつ。