17ee0e400b
After moving off of Meta, Dotfiles has a greater responsibility to manage configs. Vim, Tmux, and Emacs are now within Stow's purview.
130 lines
4.8 KiB
EmacsLisp
130 lines
4.8 KiB
EmacsLisp
;;; slack-message-editor.el --- edit message interface -*- lexical-binding: t; -*-
|
|
|
|
;; Copyright (C) 2015 南優也
|
|
|
|
;; Author: 南優也 <yuyaminami@minamiyuunari-no-MacBook-Pro.local>
|
|
;; Keywords:
|
|
|
|
;; This program is free software; you can redistribute it and/or modify
|
|
;; it under the terms of the GNU General Public License as published by
|
|
;; the Free Software Foundation, either version 3 of the License, or
|
|
;; (at your option) any later version.
|
|
|
|
;; This program is distributed in the hope that it will be useful,
|
|
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
;; GNU General Public License for more details.
|
|
|
|
;; You should have received a copy of the GNU General Public License
|
|
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
;;; Commentary:
|
|
|
|
;;
|
|
|
|
;;; Code:
|
|
(require 'slack-util)
|
|
(require 'slack-room)
|
|
(require 'slack-message-sender)
|
|
|
|
(defconst slack-message-edit-url "https://slack.com/api/chat.update")
|
|
(defconst slack-message-edit-buffer-name "*Slack - Edit message*")
|
|
(defconst slack-message-write-buffer-name "*Slack - Write message*")
|
|
(defconst slack-message-share-buffer-name "*Slack - Share message*")
|
|
(defconst slack-share-url "https://slack.com/api/chat.shareMessage")
|
|
(defvar slack-buffer-function)
|
|
(defvar slack-target-ts)
|
|
(make-local-variable 'slack-target-ts)
|
|
(defvar slack-message-edit-buffer-type)
|
|
(make-local-variable 'slack-message-edit-buffer-type)
|
|
|
|
(defvar slack-edit-message-mode-map
|
|
(let ((keymap (make-sparse-keymap)))
|
|
(define-key keymap (kbd "C-s C-m") #'slack-message-embed-mention)
|
|
(define-key keymap (kbd "C-s C-c") #'slack-message-embed-channel)
|
|
(define-key keymap (kbd "C-c C-k") #'slack-message-cancel-edit)
|
|
(define-key keymap (kbd "C-c C-c") #'slack-message-send-from-buffer)
|
|
keymap))
|
|
|
|
(define-derived-mode slack-edit-message-mode fundamental-mode "Slack Edit Msg"
|
|
""
|
|
(slack-buffer-enable-emojify))
|
|
|
|
(defun slack-message-share ()
|
|
(interactive)
|
|
(slack-if-let* ((buf slack-current-buffer))
|
|
(slack-buffer-share-message buf (slack-get-ts))))
|
|
|
|
(defun slack-message-share--send (team room ts msg)
|
|
(let* ((slack-room-list (or (and (object-of-class-p room 'slack-channel)
|
|
(slack-message-room-list team))
|
|
(list (cons (slack-room-display-name room)
|
|
room))))
|
|
(share-channel-id (oref (slack-select-from-list
|
|
(slack-room-list
|
|
"Select Channel: "
|
|
:initial
|
|
(slack-room-name room)))
|
|
id)))
|
|
(cl-labels
|
|
((on-success (&key data &allow-other-keys)
|
|
(slack-request-handle-error
|
|
(data "slack-message-share"))))
|
|
(slack-request
|
|
(slack-request-create
|
|
slack-share-url
|
|
team
|
|
:type "POST"
|
|
:params (list (cons "channel" (oref room id))
|
|
(cons "timestamp" ts)
|
|
(cons "text" (slack-message-prepare-links
|
|
(slack-escape-message msg)
|
|
team))
|
|
(cons "share_channel" share-channel-id))
|
|
:success #'on-success)))))
|
|
|
|
(defun slack-message-write-another-buffer ()
|
|
(interactive)
|
|
(slack-if-let* ((buf slack-current-buffer))
|
|
(slack-buffer-display-message-compose-buffer buf)))
|
|
|
|
(defmethod slack-message-get-user-id ((m slack-user-message))
|
|
(oref m user))
|
|
|
|
(defun slack-message-edit ()
|
|
(interactive)
|
|
(slack-if-let* ((buf slack-current-buffer))
|
|
(slack-buffer-display-edit-message-buffer buf (slack-get-ts))))
|
|
|
|
|
|
(defun slack-message-cancel-edit ()
|
|
(interactive)
|
|
(let ((buffer (slack-buffer-buffer slack-current-buffer)))
|
|
(with-current-buffer buffer
|
|
(erase-buffer)
|
|
(if (> (count-windows) 1) (delete-window)))))
|
|
|
|
(defun slack-message-send-from-buffer ()
|
|
(interactive)
|
|
(slack-if-let* ((buf slack-current-buffer)
|
|
(text (buffer-substring-no-properties (point-min) (point-max))))
|
|
(slack-buffer-send-message buf text)))
|
|
|
|
(defun slack-message--edit (channel team ts text)
|
|
(cl-labels ((on-edit (&key data &allow-other-keys)
|
|
(slack-request-handle-error
|
|
(data "slack-message--edit"))))
|
|
(slack-request
|
|
(slack-request-create
|
|
slack-message-edit-url
|
|
team
|
|
:type "POST"
|
|
:params (list (cons "channel" channel)
|
|
(cons "ts" ts)
|
|
(cons "text" (slack-message-prepare-links
|
|
(slack-escape-message text)
|
|
team)))
|
|
:success #'on-edit))))
|
|
|
|
(provide 'slack-message-editor)
|
|
;;; slack-message-editor.el ends here
|