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
150
Neovim × リアルタイムチャット
higashi
December 28, 2020
Tweet
Share
More Decks by higashi
See All by higashi
Go! Go! WebAssembly!!
higashi000
0
40
Can we use Slack on Vim?
higashi000
1
250
VimでSlackがしたい
higashi000
0
850
Featured
See All Featured
Measuring & Analyzing Core Web Vitals
bluesmoon
6
220
Facilitating Awesome Meetings
lara
51
6.2k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
33
2.8k
StorybookのUI Testing Handbookを読んだ
zakiyama
28
5.4k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
For a Future-Friendly Web
brad_frost
176
9.5k
Practical Orchestrator
shlominoach
186
10k
GraphQLとの向き合い方2022年版
quramy
44
13k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
20
2.4k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
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