18
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Slack】Command + Enter で送信できるようにするための設定(Mac)

Last updated at Posted at 2016-04-17

現在のクライアントでは設定から変更可能になりました。


注:この記事は Mac の Slack App 向け限定 で書いております。

Slackで Command + Enter => 送信に

チーム開発等でのコミュニケーションツールとしてSlackを使ってる人は少なくないと思うのですが、他のMessenger,Twitter,LINE等のメッセージングアプリで

Commnad(⌘) + Return => 送信  

と設定しているため、Slackで改行ようとしてそのまま送信され意味不明な文章を送りつけたり、送信しようとCommnad(⌘) + Returnを押してSnippet Windowが出現してしまうことが多発していたため個人的にかなりストレスフルでした。

さらに、Slackの設定項目にこのようなキーの設定がなく腹が立ってしようがないので、Karabinarを使って設定してみました。

---まとまったコードはここにあります---

Karabinarとは

Macのいわゆるキーリマッピングツールです。かなり条件を細かくカスタマイズできるので私は普段から重宝してます。

karabiner-icon@2x.png

ダウンロード - Karabinar

今回の使い方の他にも、予めプリセットが大量に用意されています。
ここに公式ドキュメントとしてまとまっています 例えばDvorakにしたかったりとかも一発でできたりします

private.xmlにお好みの設定を書き込めるので、今回はこれにいろいろ追加していきます。

private.xmlの設定

リファレンスはこちらになりますが、書いてないことも多いです
private.xml Reference Manual - pqrs.org

まずKarabinar を起動し、 Misc & Uninstallというタブに
Open private.xmlという項目があるので開きます

karabinar.png

中を覗くとこんな感じになってると思います

private.xml
<?xml version="1.0"?>
<root>

</root>

ここの<root>タグ内に設定を追加していきます
(ちなみに<include path="./hogehoge.xml" />とかすると、外部から読み込むことができるので、そちらに書くこともできます)

Bundle Identifier のエイリアスの登録

あとあとのために、Slack AppのBundle Identifierを適当な名前にエイリアスを設定しておきます。

private.xml

	.......
	<appdef>
		<appname>SLACK</appname>
		<equal>com.tinyspeck.slackmacgap</equal>
	</appdef>
	.......

SlackのBundle Identifierはcom.tinyspeck.slackmacgapで、これをSLACKと登録しました。

###キーのマッピングの設定
マッピングの設定は全て<item>内に書くことになっています。

private.xml
<?xml version="1.0"?>
<root>
	.......
	<item>

		<!-- ここに設定を追加 -->

	</item>
</root>

まず、<name>に表示する説明、<identifier>にKarabinar内部で使用される識別子を適当に書いてあげます

private.xml
	<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を設定します。

private.xml
	<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

としました。

private.xml
	<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が含まれるもの
などと指定してあげれば行けるとは思いますが未検証です。

18
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?