diff options
Diffstat (limited to 'configs/shared/emacs/.emacs.d/elpa/slack-20180913.651/slack-dialog-edit-element-buffer.el')
-rw-r--r-- | configs/shared/emacs/.emacs.d/elpa/slack-20180913.651/slack-dialog-edit-element-buffer.el | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/configs/shared/emacs/.emacs.d/elpa/slack-20180913.651/slack-dialog-edit-element-buffer.el b/configs/shared/emacs/.emacs.d/elpa/slack-20180913.651/slack-dialog-edit-element-buffer.el new file mode 100644 index 000000000000..53b23c388678 --- /dev/null +++ b/configs/shared/emacs/.emacs.d/elpa/slack-20180913.651/slack-dialog-edit-element-buffer.el @@ -0,0 +1,111 @@ +;;; slack-dialog-edit-element-buffer.el --- -*- lexical-binding: t; -*- + +;; Copyright (C) 2018 南優也 + +;; Author: 南優也 <yuyaminami@minamiyuuya-no-MacBook.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 <https://www.gnu.org/licenses/>. + +;;; Commentary: + +;; + +;;; Code: +(require 'eieio) +(require 'slack-dialog-buffer) + +(defclass slack-dialog-edit-element-buffer (slack-buffer) + ((dialog-buffer :initarg :dialog-buffer :type slack-dialog-buffer) + (element :initarg :element :type slack-dialog-element))) + +(define-derived-mode slack-dialog-edit-element-buffer-mode fundamental-mode "Slack Dialog Edit Element Buffer" + (setq-local default-directory slack-default-directory)) + +(setq slack-dialog-edit-element-buffer-mode-map + (let ((map (make-sparse-keymap))) + (define-key map (kbd "C-c C-c") + #'slack-dialog-edit-buffer-save-content) + (define-key map (kbd "C-c C-k") + #'slack-dialog-edit-buffer-abort) + map)) + +(defun slack-dialog-edit-buffer-save-content () + (interactive) + (let ((content (buffer-substring-no-properties (point-min) + (point-max))) + (buffer slack-current-buffer)) + (with-slots (element dialog-buffer) buffer + (slack-dialog-edit-buffer-abort) + (slack-dialog-buffer-save-element-value dialog-buffer + (oref element name) + content)))) + +(defun slack-dialog-edit-buffer-abort () + (interactive) + (let* ((buffer-name (slack-buffer-name slack-current-buffer)) + (buf (get-buffer buffer-name)) + (win (get-buffer-window buf))) + (kill-buffer buf) + (when (< 1 (count-windows)) + (delete-window win)))) + +(defmethod slack-buffer-name :static ((_class slack-dialog-edit-element-buffer) + dialog-buffer element team) + (with-slots (dialog dialog-id) dialog-buffer + (with-slots (name) element + (with-slots (title) dialog + (format "* Slack Dialog Edit Element - %s [%s] edit %s : %s" + title dialog-id name (slack-team-name team)))))) + +(defmethod slack-buffer-find :static ((class slack-dialog-edit-element-buffer) + dialog-buffer element team) + (slack-buffer-find-4 class dialog-buffer element team)) + +(defmethod slack-buffer-name ((this slack-dialog-edit-element-buffer)) + (with-slots (dialog-buffer element team) this + (slack-buffer-name 'slack-dialog-edit-element-buffer + dialog-buffer element team))) + +(defun slack-create-dialog-element-edit-buffer (dialog-buffer element team) + (slack-if-let* + ((buf (slack-buffer-find 'slack-dialog-edit-element-buffer + dialog-buffer + element + team))) + buf + (make-instance 'slack-dialog-edit-element-buffer + :dialog-buffer dialog-buffer + :element element + :team team))) + +(defmethod slack-buffer-init-buffer ((this slack-dialog-edit-element-buffer)) + (let* ((buf (generate-new-buffer (slack-buffer-name this))) + (element (oref this element))) + (with-current-buffer buf + (slack-dialog-edit-element-buffer-mode) + (slack-buffer-set-current-buffer this) + (goto-char (point-min)) + (with-slots (value label) element + (setq-local header-line-format + (format "%s: C-c to save content" label)) + (insert (or value "")))) + (slack-buffer-push-new-4 'slack-dialog-edit-element-buffer + (oref this dialog-buffer) + element + (oref this team)))) + + +(provide 'slack-dialog-edit-element-buffer) +;;; slack-dialog-edit-element-buffer.el ends here |