完成したもの
リポジトリ
MaxMEllon/nyaovim-nicolive-comment-viewer
使い方
コマンド | 引数 | 説明 |
---|---|---|
:CommentViewerOpen | ニコ生id (lvXXXXXXX, nsen/hotaru) | 放送へ接続し,コメビュウィンドウを開きます |
:CommentViewerClose | --- | コメビュウィンドウを閉じます |
:CommentViewerPost | コメント | 接続済みであれば,コメントを送信します |
インストール方法はリポジトリのREADMEに
実装
Nyaovimとは
clever-fやcommittia.vimの作者であるrhysdさんが作成した neovim クライアント.
Neovim msgpack-rpc API を用いて作られたelectron製GUI neovimクライアントです
詳しくは作者のrhysdさんのページがわかりやすいです
Web Components と Electron でつくる Neovim フロントエンドの未来
vim側
ifget(g:,'loaded_comment_viewer',0)||!exists('g:nyaovim_version')finishendfunction! OpenComelonView(liveId) abort
call rpcnotify(0,'comelon-view:open',a:liveId)endfunction
command!-nargs=* CommentViewerOpen call OpenComelonView(<f-args>)letg:loaded_comment_viewer =1
Nyaovimプラグインを作ってみてわかったのですが,通常のvim-pluginと異なり,
Vim scriptを記述する場面がとても少ないように感じました.
というのも,rpcnotify()
という関数が,フロントとの通信を手助けしてくれるからです.
rpcnotifyの第一引数に0を入れることで,第二引数のイベントをブロードキャストすることができます.
これをNyaovimの場合,Web Components内のscriptタグから補足することになります.
Nyaovimでは,Web Componentsを直接扱わず,ラッピングしてくれている
Polymerを通して扱っていたいたので,それにしたがってPolymerを利用しました.
dom-module側
Nyaovimは, neovimのruntimepath の nyaovim-plugin/
内にあるWeb Componentsを
いい感じに読み込んでくれます.
読み込んでくれたWeb Componentsを ~/.config/nyaovim/nyaovimrc.html
に追記することで,
自作したコンポーネントを読み込むことができます.
ニコ生関連の処理は,node製のAPIラッパーである59nagaさんのnicoliveを使っています.いつも愛用させて頂いてます.
<dom-moduleid='comelon-view'><template><divid='come-body'class='comelon'></div></template></dom-module><script>(function(){Polymer({is:'comelon-view',properties:{width:{type:Number,value:500},editor:Object},constThisWindow=require('electron').remote.getCurrentWindow();this.client=this.editor.getClient()this.client.on('notification',(method,args)=>{this.size=ThisWindow.getSize();switch(method){case'comelon-view:open':{connect(args[0]);// ニコ生へ接続する関数this.open();// cssのdisplayをnoneから変更し,windowを表示する関数break;}default:break;}});this.client.subscribe('comelon-view:open');})})();</script>
ポイントとなるのは,this.clientのEventEmitterとsubscribeです.
rpcnotifyを実行すると,notificationイベントが発火されます.
ただし予め,イベントをsubscribeしておく必要があります
この辺り,正確に理解していませんが,いい感じになっているおかげで
難なく自分の作りたいものが作れました.
作ってみた感想
Nyaovim(neovim)は,ほぼjavascriptだけの知識でプラグインが作成できるのですごく良いです.
Vim scriptは嫌いではありませんが,一般的にはやや癖が強いと思います.
そんな癖を理解し習得しなくても,イイ感じのものが簡単に作れます.
因みにぼくはVim script好きです
今回は,僕が個人的に使いたいと思っていたニコ生にしましたが,
ニコ生のAPI部分をslackやtwitterにすることで数百行でいろいろなサービスのクライアントが
作成できるのではないのでしょうか.
エディタとしては,lintなどの結果をグラフィカルに表示するインターフェースなどを作ってみるのも面白いかもしれません.
TODO
思いつきで書いたのでコードがすごく汚いのでなおす
テストコードは・・・nightmareになるのかな?
参考サイト
Web Components と Electron でつくる Neovim フロントエンドの未来
Nodejsでニコ生のコメビュを作る
追記
Vim script を Vim Scriptと書いていました.
指摘をくださったkoronさんありがとうございます.