現在のクライアントでは設定から変更可能になりました。
注:この記事は 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
が含まれるもの
などと指定してあげれば行けるとは思いますが未検証です。