#+TITLE: Slack layer

[[file:img/slack.png]]

* Table of Contents                                        :TOC_4_gh:noexport:
 - [[#description][Description]]
 - [[#install][Install]]
 - [[#configuration][Configuration]]
 - [[#key-bindings][Key bindings]]

* Description
This layer provides an interface to the Slack chat service via the emacs-slack
package. Where possible, this layer aims to reuse keybindings from the IRC
packages in Spacemacs.

* Install
To use this configuration layer, add it to your =~/.spacemacs=. You will need to
add =slack= to the existing =dotspacemacs-configuration-layers= list in this
file.

* Configuration

Follow the instructions in the [[https://github.com/yuya373/emacs-slack/blob/master/README.md][emacs-slack]] package for obtaining your client ID,
client secret, and token.

To test that eveyrthing is alright put the following snippet in your
=dotspacemacs/user-config()= replacing =client-id=, =client-secret= and =token=
with your info.

*Important* Do not keep private data in your dotfile. You can put your private
stuff elsewhere (like Dropbox for instance) and load the file in your dotfile.

#+begin_src emacs-lisp
(slack-register-team
  :name "emacs-slack"
  :default t
  :client-id "my@email.address"
  :client-secret "mypassword"
  :token "token"
  :subscribed-channels '(general slackbot))
#+end_src

* Key bindings

| Key Binding | Description              |
|-------------+--------------------------|
| ~SPC a C s~ | (Re)connects to Slack    |
| ~SPC a C j~ | Join a channel           |
| ~SPC a C d~ | Direct message someone   |
| ~SPC a C q~ | Close connection         |
| ~SPC m j~   | Join a channel           |
| ~SPC m d~   | Direct message someone   |
| ~SPC m p~   | Load previous messages   |
| ~SPC m e~   | Edit message at point    |
| ~SPC m q~   | Quit Slack               |
| ~SPC m m~   | Embed mention of user    |
| ~SPC m c~   | Embed mention of channel |

The following bindings are provided to mimic bindings in the official Slack
client.

| Key Binding | Description              |
|-------------+--------------------------|
| ~<SPC> m k~ | Join a channel           |
| ~<SPC> m @~ | Embed mention of user    |
| ~<SPC> m #~ | Embed mention of channel |

In insert state, one can also use ~@~ and ~#~ directly without the leader key
prefix.
