GNU Emacs client for Slack.
You can see some gifs on the wiki.
- circe (for the Linewise User Interface library).
- Emojify (optional)
;; I'm using use-package and el-get and evil (el-get-bundle slack) (el-get-bundle yuya373/helm-slack) ;; optional (use-package helm-slack :after (slack)) ;; optional (use-package slack :commands (slack-start) :init (setq slack-buffer-emojify t) ;; if you want to enable emoji, default nil (setq slack-prefer-current-team t) :config (slack-register-team :name "emacs-slack" :default t :token "xoxs-sssssssssss-88888888888-hhhhhhhhhhh-jjjjjjjjjj" :subscribed-channels '(test-rename rrrrr) :full-and-display-names t) (slack-register-team :name "test" :token "xoxs-yyyyyyyyyy-zzzzzzzzzzz-hhhhhhhhhhh-llllllllll" :subscribed-channels '(hoge fuga)) (evil-define-key 'normal slack-info-mode-map ",u" 'slack-room-update-messages) (evil-define-key 'normal slack-mode-map ",c" 'slack-buffer-kill ",ra" 'slack-message-add-reaction ",rr" 'slack-message-remove-reaction ",rs" 'slack-message-show-reaction-users ",pl" 'slack-room-pins-list ",pa" 'slack-message-pins-add ",pr" 'slack-message-pins-remove ",mm" 'slack-message-write-another-buffer ",me" 'slack-message-edit ",md" 'slack-message-delete ",u" 'slack-room-update-messages ",2" 'slack-message-embed-mention ",3" 'slack-message-embed-channel "\C-n" 'slack-buffer-goto-next-message "\C-p" 'slack-buffer-goto-prev-message) (evil-define-key 'normal slack-edit-message-mode-map ",k" 'slack-message-cancel-edit ",s" 'slack-message-send-from-buffer ",2" 'slack-message-embed-mention ",3" 'slack-message-embed-channel)) (use-package alert :commands (alert) :init (setq alert-default-style 'notifier))
How to get token
- Using Chrome, open and sign into the slack customization page, e.g. https://my.slack.com/customize
- Right click anywhere on the page and choose "inspect" from the context menu. This will open the Chrome developer tools.
- Find the console (it's one of the tabs in the developer tools window)
- At the prompt ("> ") type the following:
window.prompt("your api token is: ", TS.boot_data.api_token)
- Copy the displayed token elsewhere, and close the window.
For further explanation, see the documentation for the emojme project: (github.com/jackellenberger/emojme)
How to secure your token
If someone steals your token they can use the token to impersonate you, reading and posting to Slack as if they were you. It's important to take reasonable precautions to secure your token.
One way to do this is by using the Emacs
auth-source library. Read
to learn how to use it to store login information for remote services.
Then configure the
auth-sources variable to select a "backend"
store. The default backend is
~/.authinfo file, which is simple but
also un-encrypted. A more complex option is to encrypt that
.~/authinfo file with
gnupg and configure
auth-sources to use
~/.authinfo.gpg as the source for all passwords and secrets. Other
backends exist beyond these; read the documentation for details.
How to store your slack tokens in your
auth-source backend will vary
depending which backend you chose. See documentation for details. The
"host" and "user" fields can be whatever you like as long as they are
unique; as a suggestion use "myslackteam.slack.com" for host, and use
your email address for user. The "secret" or "password" field should
contain the token you obtained earlier (How to get
Then finally, in your Emacs init read the token from your
(slack-register-team :name "myslackteam" :token (auth-source-pick-first-password :host "myslackteam.slack.com" :user "firstname.lastname@example.org") :subscribed-channels '((channel1 channel2)))
How to use
I recommend to chat with slackbot for tutorial using
Some terminology in the
im: An IM (instant message) is a direct message between you and exactly one other Slack user.
channel: A channel is a Slack channel which you are a member of
group. Any chat (direct message or channel) which isn't an IM is a group.
- set team configuration and create team.
- :name and :token are required
- do authorize and initialize
- turn off websocket connection
- select group from list
- select direct message from list
- select channel from list
- update group list
- update direct message list
- update channel list
- use to mention to user
- use to mention to channel
- uploads a file
- the command allows to choose many channels via select loop. In order to finish the loop input an empty string. For helm that's C+RET or M+TET. In case of Ivy it's C+M+j.