slack client for emacs
Emacs Slack
GNU Emacs client for Slack.
You can see some gifs on the wiki.
package install
;; 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))
window.prompt("your api token is: ", TS.boot_data.api_token)
For further explanation, see the documentation for the emojme project: (github.com/jackellenberger/emojme)
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
the auth-source
documentation
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
token).
Then finally, in your Emacs init read the token from your
auth-source
:
(slack-register-team
:name "myslackteam"
:token (auth-source-pick-first-password
:host "myslackteam.slack.com"
:user "[email protected]")
:subscribed-channels '((channel1 channel2)))
I recommend to chat with slackbot for tutorial using slack-im-select
.
Some terminology in the slack-
functions:
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.
slack-register-team
slack-change-current-team
slack-current-team
varslack-start
slack-ws-close
slack-group-select
slack-im-select
slack-channel-select
slack-group-list-update
slack-im-list-update
slack-channel-list-update
slack-message-embed-mention
slack-message-embed-channel
slack-file-upload
See alert.