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
47
Can we use Slack on Vim?
higashi000
1
290
VimでSlackがしたい
higashi000
0
910
Featured
See All Featured
It's Worth the Effort
3n
185
28k
Making Projects Easy
brettharned
116
6.3k
Become a Pro
speakerdeck
PRO
28
5.4k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Documentation Writing (for coders)
carmenintech
72
4.9k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
8
670
Making the Leap to Tech Lead
cromwellryan
134
9.3k
Into the Great Unknown - MozCon
thekraken
39
1.9k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.8k
How GitHub (no longer) Works
holman
314
140k
What's in a price? How to price your products and services
michaelherold
246
12k
Automating Front-end Workflow
addyosmani
1370
200k
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