Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Neovim × リアルタイムチャット
Search
higashi
December 28, 2020
1
160
Neovim × リアルタイムチャット
higashi
December 28, 2020
Tweet
Share
More Decks by higashi
See All by higashi
Go! Go! WebAssembly!!
higashi000
0
51
Can we use Slack on Vim?
higashi000
1
310
VimでSlackがしたい
higashi000
0
940
Featured
See All Featured
Making the Leap to Tech Lead
cromwellryan
135
9.6k
How to train your dragon (web standard)
notwaldorf
96
6.3k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
Mobile First: as difficult as doing things right
swwweet
224
10k
Faster Mobile Websites
deanohume
310
31k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
127
53k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.7k
Fireside Chat
paigeccino
40
3.7k
A Modern Web Designer's Workflow
chriscoyier
697
190k
Transcript
Neovim × リアルタイムチャット @higashi136_2
名前 : higashi 職業 : 高専 4 年生 好きなもの :
Vim, Golang, プログラミング GitHub : higashi000 Twitter : @higashi136_2 自己紹介
Vim 関係で関わったもの ・sarahck.vim →Vim で Slack をするプラグイン ・sleahck.vim →Vim で
Slack をするプラグイン ・vimdoc-ja-working →ドキュメントの翻訳プロジェクト ・slacklog-generator → vim-jp の log を HTML 化するプロジェクト
こう思ったことは ありませんか?
Vim(Neovim) で .* がしたい!!
.* の幅はとても広い... なんでも Vim でやりたくなってしまう... でもスライド一本で .* すべてを Vim でできるようにするのは厳しい...
.* の幅はとても広い... なんでも Vim でやりたくなってしまう... でもスライド一本で .* すべてを Vim でできるようにするのは厳しい...
→「 Vim で .* がしたい」 のうち 1 つを紹介
今回やりたいこと Vim で リアルタイムチャットが したい!!
Vim で WebSocket を使えるようにしよう リアルタイムチャットをするために
Vim で WebSocket を使えるようにしよう → if_python3 使えば行ける...? リアルタイムチャットをするために
Vim で WebSocket を使えるようにしよう → if_python3 使えば行ける...? → websocket-client というライブラリを使うことにした
リアルタイムチャットをするために
単純に while True で recv 関数を呼び出してみると... メッセージ受信中は Vim で他の動作ができない リアルタイムチャットをするために
単純に while True で recv 関数を呼び出してみると... メッセージ受信中は Vim で他の動作ができない -
メッセージも送信できない リアルタイムチャットをするために
単純に while True で recv 関数を呼び出してみると... メッセージ受信中は Vim で他の動作ができない -
メッセージも送信できない →非同期で動かしてあげたい リアルタイムチャットをするために
単純に while True で recv 関数を呼び出してみると... メッセージ受信中は Vim で他の動作ができない -
メッセージも送信できない →非同期で動かしてあげたい 非同期処理をうまく実装できなかった;; リアルタイムチャットをするために
諦めるわけには行かない なんとかしてリアルタイムチャットがしたい
諦めるわけには行かない なんとかしてリアルタイムチャットがしたい →Neovim の Remote Plugin !!
Vim で リアルタイムチャットが したい!!
Neovim で リアルタイムチャットが したい!!
WebSocket でのメッセージ受信部分 Remote Plugin を使うことで受信しながら他の動作を行えるようになった
WebSocket でのメッセージ受信部分 Remote Plugin を使うことで受信しながら他の動作を行えるようになった が
メッセージの送信ができない
メッセージの送信ができない send という関数を使用してメッセージを送信する予定だった
メッセージの送信ができない send という関数を使用してメッセージを送信する予定だった 実行してもメッセージを受信する関数が終了しないと送信されない
メッセージの送信ができない send という関数を使用してメッセージを送信する予定だった 実行してもメッセージを受信する関数が終了しないと送信されない →いくつかのプラグインのソースコードを読むも解決方法がわからず...
メッセージ送信をなんとかしよう VimScript で書いた関数は実行できた
メッセージ送信をなんとかしよう VimScript で書いた関数は実行できた →system で外部コマンドを実行すればメッセージの送信ができるのでは...?
curl でメッセージを POST して あとはサーバーに任せる!
クライアント側 従来の実装 Neovim logo by Jason Long, and license: CC3.0 サーバー
メッセージの受信 Python: recv() 他クライアントからのメッ セージ送信 メッセージの送信 Python: send() メッセージ受信 他クライアント 他クライアント 他クライアント
クライアント側 従来の実装 Neovim logo by Jason Long, and license: CC3.0 サーバー
メッセージの受信 Python: recv() 他クライアントからのメッ セージ送信 メッセージの送信 Python: send() メッセージ受信 他クライアント 他クライアント 他クライアント
クライアント側 従来の実装 Neovim logo by Jason Long, and license: CC3.0 サーバー
メッセージの受信 Python: recv() 他クライアントからのメッ セージ送信 メッセージの送信 system() + curl メッセージ受信 他クライアント 他クライアント 他クライアント
クライアント側 従来の実装 Neovim logo by Jason Long, and license: CC3.0 サーバー
メッセージの受信 Python: recv() 他クライアントからのメッ セージ送信 メッセージの送信 system() + curl メッセージ受信 他クライアント 他クライアント 他クライアント
サーバー側の改良に着手 元々 Go で実装していたのでそれを改良する
サーバー側の改良に着手 元々 Go で実装していたのでそれを改良する → リクエストを受け取ったら接続済みクライアントにメッセージを流す
サーバー側の改良に着手 元々 Go で実装していたのでそれを改良する → リクエストを受け取ったら接続済みクライアントにメッセージを流す すんなり終わった
完成...? ・メッセージの受信 ・メッセージの送信 ともに実装完了 これで試してみることに
デモ https://noa.higashi.dev というページを事前に作成しました QR コードの作成には https://qr.quel.jp/ というサイトを使わせていただきました
デモ ↑部屋の ID を入力します 今回は gorillavim という ID を使います 入力後,ボタンを押し,部屋に移動します
デモ ←表示名 ←発言 ↑送信
Neovim クライアントについて GitHub にて公開しています higashi000/noachat.nvim pynvim と websocket-client を pip
でインストール必要があります ぜひお試しください
現在の課題点 ・メッセージ受信中は他の Remote Plugin が使えない →使おうとすると Neovim が固まる ・別のバッファに移動すると固まる ・Vim
非対応
このプラグインを活かしてできそうなこと ・共同編集 ・Slack RTM API を使用したプラグイン
Neovim × リアルタイムチャット @higashi136_2