Slack、Skype、チャットワークの「改行」「送信」キーを統一した
仕事でクライアントとのやり取りにメッセンジャーアプリを使っています。私が使っているのは LINE、チャットワーク、Slack、Skype、Discord ですが、これらのキーバインドがまちまちで、改行しようとしてメッセージ送信したり、送信しようとして別ウィンドウが立ち上がったりしてかなり面倒な状況だったので、ツールを使って操作を統一しました。設定方法を共有します。
使ったツールは Hammerspoon です。
動作確認環境
- macOS Sierra 10.12.6
- Hammerspoon 0.9.56
- LINE 5.3.2
- ChatWork 2.3.0
- Slack 2.8.0
- Skype 7.58
各種チャット・メッセンジャーアプリのキーバインド
下記ページに非常に丁寧にまとめてくださっている方がいますので、参考にさせていただきました。
各種チャット・メッセンジャーアプリの送信(改行)ショートカットについて考える
私がメッセンジャーアプリを使っている感覚としては、
- Enter で改行
- Cmd + Enter で送信
が使いやすいです。よって、各アプリの動作を上記で統一するのが今回の設定の目的となります。(今回の設定を応用すれば別のキーバインドで統一することも可能かと思います)
使用しているアプリの中では、LINEとチャットワークがデフォルトで上記設定になっていて、SlackとSkype、Discord が別のキーバインドになっていますので、これらののキーバインドをHammerspoonというツールで変更します。
Hammerspoon とは
ざっくり言うと、Lua スクリプトによって Mac の各種操作を自動化しようぜって感じのソフトです。Mac が macOS Sierra になってから、Karabiner が使えなくなったため、各種キーバインドの設定に利用していました。
インストールの方法なども上記公式サイトに書いてあるとおりですが、基本的にはインストールして ~/.hammerspoon/init.lua
に Lua スクリプトを書いていけば動作するものになっています。
設定内容
全文は GitHubにありますので細かい部分はそちらを参照ください。
なお、以前 Qiitaの方に書いた記事 Hammerspoonで macOS Sierra + Xcode に emacs ライクなキーバインドを設定した の設定内容も入っていますので、興味がある方はそちらも見ていただけると嬉しいです。
今回の設定内容の部分だけ抜粋すると、下記になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
slackSendBindings = hs.eventtap.new( {hs.eventtap.event.types.keyDown}, function(e) if hs.keycodes.map[e:getKeyCode()] == 'return' and isEqualTable(e:getFlags(), {cmd = true}) then e:setFlags({cmd = false}) elseif hs.keycodes.map[e:getKeyCode()] == 'return' and isEqualTable(e:getFlags(), {}) then e:setFlags({shift = true}) end end) hs.window.filter.new({'Slack', 'Skype', 'Discord'}) :subscribe(hs.window.filter.windowFocused,function() slackSendBindings:start() end) :subscribe(hs.window.filter.windowUnfocused,function() slackSendBindings:stop() end) |
やっていることとしては、
- Cmd + Enter が押された時は、Enter として処理する(cmd が押されなかったことにする)
- Enter が押された時は、Shift + Enter として処理する(shift が押されたことにする)
- 上記動作は Slack、Skype 時のみ有効とする
の3点です。
Hammerspoon自体はもっと簡単にキーのリマップを定義できますが、単純に hotkey などで設定しようとすると、keyDown で修飾キーのみ違うキーの押下を行うはできないみたいでしたので、上記の実装にしました。
ちなみにこの実装をすると、もともと Cmd + Enter に割り当てられている動作を封じてしまうことになります。気になる方は別のキーバインドを同じように定義して回避するようにしてください。
日本語変換中の問題とワークアラウンド
上記設定で、ひとまずやりたいことは出来たのですが、一つ問題がありました。Google日本語入力で日本語変換していると、変換の確定ができない状態に陥りました。上記で Enter -> Shift + Enter にリマップしている影響です。
最初 Hammerspoon でどうにか変換中であることを検知しよう模索しましたが、方法が見つかりませんでした。そこで視点を変えて、Google日本語入力の方の設定で回避しました。
下記の様に Shift + Enter で、Enter と同じ動作をするようにキーバインドを追加しました。
この問題は、標準のIMEを使っていると起きないかもしれません。
最後に
設定内容は短いですが、かなり試行錯誤してしまいました。
でもこれでやっとツールを意識せずに Enter 押せます・・・!!
同じことで困っている方の助けになれば幸いです。
最後まで読んでいただきありがとうございます。 このブログを「いいな」と感じていただけましたら、Twiter にてフォローいただけるとうれしいです。ブログ更新情報などもお届けします。
Follow @ryuta461
この記事をシェアする