現在のクライアントでは設定から変更可能になりました。
注:この記事は Mac の Slack App 向け限定 で書いております。
Slackで Command + Enter => 送信に
チーム開発等でのコミュニケーションツールとしてSlackを使ってる人は少なくないと思うのですが、他のMessenger,Twitter,LINE等のメッセージングアプリで
Commnad(⌘) + Return => 送信
と設定しているため、Slackで改行ようとしてそのまま送信され意味不明な文章を送りつけたり、送信しようとCommnad(⌘) + Returnを押してSnippet Windowが出現してしまうことが多発していたため個人的にかなりストレスフルでした。
さらに、Slackの設定項目にこのようなキーの設定がなく腹が立ってしようがないので、Karabinarを使って設定してみました。
Karabinarとは
Macのいわゆるキーリマッピングツールです。かなり条件を細かくカスタマイズできるので私は普段から重宝してます。
今回の使い方の他にも、予めプリセットが大量に用意されています。
ここに公式ドキュメントとしてまとまっています 例えばDvorakにしたかったりとかも一発でできたりします
private.xmlにお好みの設定を書き込めるので、今回はこれにいろいろ追加していきます。
private.xmlの設定
リファレンスはこちらになりますが、書いてないことも多いです
private.xml Reference Manual - pqrs.org
まずKarabinar を起動し、 Misc & Uninstallというタブに
Open private.xmlという項目があるので開きます
中を覗くとこんな感じになってると思います
<?xml version="1.0"?>
<root>
</root>
ここの<root>タグ内に設定を追加していきます
(ちなみに<include path="./hogehoge.xml" />とかすると、外部から読み込むことができるので、そちらに書くこともできます)
Bundle Identifier のエイリアスの登録
あとあとのために、Slack AppのBundle Identifierを適当な名前にエイリアスを設定しておきます。
.......
<appdef>
<appname>SLACK</appname>
<equal>com.tinyspeck.slackmacgap</equal>
</appdef>
.......
SlackのBundle Identifierはcom.tinyspeck.slackmacgapで、これをSLACKと登録しました。
キーのマッピングの設定
マッピングの設定は全て<item>内に書くことになっています。
<?xml version="1.0"?>
<root>
.......
<item>
<!-- ここに設定を追加 -->
</item>
</root>
まず、<name>に表示する説明、<identifier>にKarabinar内部で使用される識別子を適当に書いてあげます
<name>Command+Enter to send message in slack app</name>
<identifier>private.app.slack.Commnad_Enter_to_send</identifier>
次に、Slack Appで「メッセージを入力するTextBox」以外をフォーカスしている時に、この設定を発動されても困るので、念のため<uielementrole_only>を設定しておきます。
Karabinarに内蔵されているEvent Viewerで、UI ElementはAXTextAreaであることがわかります。
また、Slack以外のアプリでこの設定が発動されてももちろん困るので、<only>で先ほど登録したエイリアスのSLACKを設定します。
<uielementrole_only>AXTextArea</uielementrole_only>
<only>SLACK</only>
そして、お待ちかねのキーリマップの設定です。
<autogen>内に書いていくのですが、書式として
<autogen>
{リマップの種類}
{元のキー},{修飾子キー},
{設定したいキー},{修飾子キー}
....
</autogen>
のような感じになります。
今回は、リマップの種類はあるキーをあるキーに対応させるだけの __KeyToKey__ を用いればよく、あとはひたすらそのキーを書くだけです。
Command + Return => Retrun : 送信
Return=> Shift + Return : 改行
に設定しました。
また、もともとShift + Returnであった、Snippet Windowの設定も変えておく必要があるため
Shift + Return => Command + Return : Snippet Window
としました。
<autogen>
__KeyToKey__
KeyCode::RETURN,MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_COMMAND | ModifierFlag::NONE,
KeyCode::RETURN
</autogen>
<autogen>
__KeyToKey__
KeyCode::RETURN,MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_SHIFT | ModifierFlag::NONE,
KeyCode::RETURN,ModifierFlag::COMMAND_R
</autogen>
<autogen>
__KeyToKey__
KeyCode::RETURN,
KeyCode::RETURN,ModifierFlag::SHIFT_L
</autogen>
これで、念願のCommand + Enter送信が実現しました。
完成
まとまったコードはこちらに上げておきました。
taiyoslime/dotfiles/karabiner/app/slack.xml - GitHub
弊害とか
日本語変換中もReturn => Command + Returnが適用されるため、公式のIMEは全く問題ないのですが、Google IMEで変換がReturnで選択できなくなるようです。(そもそも変換でRetrunなんて使う必要ないですが...)
その他は現状全く問題なく使えています。
その他
ブラウザ版のSlackで同じことをしたい場合は、ブラウザのアプリを指定し、ウィンドウの名前を取得する<windowname_only>の中で、正規表現<regex>を使い、slackが含まれるもの
などと指定してあげれば行けるとは思いますが未検証です。
