edit-slack.vimをアップデートした
こんなプラグイン使ってるのは自分だけな気がしますが、備忘録として対応内容を残しておきます
そもそもこれは何?
slackへの投稿をvimから行うプラグインです
vimだけでちょっとしたメッセージを送信出来るので、
ブラウザを経由しない分、コードのコピペ、ファイルアップロードがたまーに便利だったりします
操作後のslackをブラウザで見るとこんな感じです(user2がedit-slack.vim)
構成はvimからgolangで書いたバイナリ経由でslackにpostしています
(c) gopher stickers
表示はslack://で始まる場合、コマンドを呼び出します
autocmd BufReadCmd slack://* call edit_slack#Open(expand("<amatch>"))
投稿はvimscriptで=== Message ===
以下に書かれた部分を取得し、コマンドの標準入力で渡しています
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に補足だけ書いておきました
設定方法解説
必要な権限はこちら
あと、tokenを取る際に作るslackアプリ名は自分の名前にしておいた方がよいです(詳細は後述)
channelを取得するAPIも個別に取得するAPIは非推奨になったので
ConversationsAPIに移行しました
dmだったり、publicチャンネルを区別する必要も無いので、チャンネルは全て以下のようなルールで開けるようにしました
# チャンネルリスト
slack://ch
# チャンネル
slack://ch/<channel name>
チャンネルリストには一覧が出るので、gfコマンド等で開きます
スレッド対応
こんなissueが立っていたので、スレッド機能に対応しました
以下のようなルールでスレッドを開けるようにしました
# スレッド
slack://ch/<channel name>/<timestamp>
タイムスタンプを手打ちするはしんどいので、 :EditSlackOpenReplies
というコマンドでスレッドが開けるようにしました
スレッドを開くためのタイムスタンプを発言事に取得する必要があります。メッセージ一覧に表示していたのですが、ごちゃごちゃして見にくくなったのでconceal機能で隠しています
syntax onにすると隠れるようになっています
またスレッドにはチャンネルにも投稿するオプションがあったので
投稿部分に[] Also send to channel
という行を追加し、
githubのチェックボックスみたいに[]
を[x]
に変えるとチャンネルにも投稿できるようにしました
※チャンネルにも投稿すると、名前とアイコンがアプリの物になってしまいます
slackに問い合わせてみたところ既知のバグみたいなのでいつか対応してくれるかもしれません
channelへのjoin/leave対応
:EditSlackJoin
/ :EditSlackLeave
でチャンネルに参加/退出できるようにしました
file download/upload対応
以下のコマンドでダウンロード、アップロードができるようにしました
:EditSlackDownloadFile /path/to/savefile
:EditSlackUploadFile /path/to/uploadfile
検索機能対応
検索機能は以下のコマンドで可能です
:EditSlackSearch search_word
検索ワードはg:edit_slack_search_word
に入っている文字列をそのままPOSTしているだけなので、
以下の様な行をvimrcに書いてそのまま slack://search
を開いてもOKです
let g:edit_slack_search_word = "on:today"
その他機能
とりあえず今のところは使えてます
使ってるうちに欲しい機能が見つかったら追加するかもしれないです
暇が出来たらReactionに対応してみようかな...
Discussion