edit-slack.vimをアップデートした

4 min read読了の目安(約4000字

こんなプラグイン使ってるのは自分だけな気がしますが、備忘録として対応内容を残しておきます

https://github.com/yaasita/edit-slack.vim

そもそもこれは何?

slackへの投稿をvimから行うプラグインです
vimだけでちょっとしたメッセージを送信出来るので、
ブラウザを経由しない分、コードのコピペ、ファイルアップロードがたまーに便利だったりします

1

操作後のslackをブラウザで見るとこんな感じです(user2がedit-slack.vim)

2

構成はvimからgolangで書いたバイナリ経由でslackにpostしています

mechanizm
(c) gopher stickers

表示はslack://で始まる場合、コマンドを呼び出します

autocmd BufReadCmd slack://* call edit_slack#Open(expand("<amatch>"))

投稿はvimscriptで=== Message ===以下に書かれた部分を取得し、コマンドの標準入力で渡しています

3

autocmdで書き込みがあったときに関数を呼んで

autocmd BufWriteCmd slack://* call edit_slack#Write(expand("<amatch>"))

system()を呼んでいるだけです

call system(実行コマンド, postする文字列)

本質的にはこれだけ

以下アップデート内容

goのバージョンアップ

golangのバージョンを1.15まで上げました
手元のdebian 11 bullseyeが1.15.9だったのでそのまま使いました
(1.6が出たばかりですが・・・)

あとModuleを使うようにして、slack-go を使うようにしました

slack側の仕様変更に追従

slackのAPIを操作するのでtokenが必要なのですが、何でも出来るLegacy tokenは廃止され、
slackアプリを作成してパーミッションを設定する方法になりました
tokenを利用するだけなのでソースコードに影響はしないですが、READMEに補足だけ書いておきました

設定方法解説

https://www.youtube.com/watch?v=z9PD7-UXSbA

必要な権限はこちら
あと、tokenを取る際に作るslackアプリ名は自分の名前にしておいた方がよいです(詳細は後述)

channelを取得するAPIも個別に取得するAPIは非推奨になったので
ConversationsAPIに移行しました
dmだったり、publicチャンネルを区別する必要も無いので、チャンネルは全て以下のようなルールで開けるようにしました

# チャンネルリスト
slack://ch

# チャンネル
slack://ch/<channel name>

チャンネルリストには一覧が出るので、gfコマンド等で開きます

スレッド対応

こんなissueが立っていたので、スレッド機能に対応しました

以下のようなルールでスレッドを開けるようにしました

# スレッド
slack://ch/<channel name>/<timestamp>

タイムスタンプを手打ちするはしんどいので、 :EditSlackOpenReplies というコマンドでスレッドが開けるようにしました

4

スレッドを開くためのタイムスタンプを発言事に取得する必要があります。メッセージ一覧に表示していたのですが、ごちゃごちゃして見にくくなったのでconceal機能で隠しています
syntax onにすると隠れるようになっています

7

またスレッドにはチャンネルにも投稿するオプションがあったので
投稿部分に[] Also send to channel という行を追加し、
githubのチェックボックスみたいに[][x]に変えるとチャンネルにも投稿できるようにしました

5

※チャンネルにも投稿すると、名前とアイコンがアプリの物になってしまいます
slackに問い合わせてみたところ既知のバグみたいなのでいつか対応してくれるかもしれません

channelへのjoin/leave対応

:EditSlackJoin / :EditSlackLeave でチャンネルに参加/退出できるようにしました

8

file download/upload対応

以下のコマンドでダウンロード、アップロードができるようにしました

:EditSlackDownloadFile /path/to/savefile
:EditSlackUploadFile /path/to/uploadfile

down
up

検索機能対応

検索機能は以下のコマンドで可能です

:EditSlackSearch search_word

検索ワードはg:edit_slack_search_wordに入っている文字列をそのままPOSTしているだけなので、
以下の様な行をvimrcに書いてそのまま slack://search を開いてもOKです

let g:edit_slack_search_word = "on:today"

search

その他機能

とりあえず今のところは使えてます
使ってるうちに欲しい機能が見つかったら追加するかもしれないです
暇が出来たらReactionに対応してみようかな...