diff options
Diffstat (limited to 'configs/shared/emacs/.emacs.d/elpa/slack-20180913.651/slack-message-editor.el')
-rw-r--r-- | configs/shared/emacs/.emacs.d/elpa/slack-20180913.651/slack-message-editor.el | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/configs/shared/emacs/.emacs.d/elpa/slack-20180913.651/slack-message-editor.el b/configs/shared/emacs/.emacs.d/elpa/slack-20180913.651/slack-message-editor.el new file mode 100644 index 000000000000..1c592cf65784 --- /dev/null +++ b/configs/shared/emacs/.emacs.d/elpa/slack-20180913.651/slack-message-editor.el @@ -0,0 +1,130 @@ +;;; 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 team) + room)))) + (share-channel-id (oref (slack-select-from-list + (slack-room-list + "Select Channel: " + :initial + (slack-room-name room team))) + 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 |