Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

Nyaovim上で動く ニコ生のコメビュを作ってみた

$
0
0

完成したもの

リポジトリ

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さんありがとうございます.


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>