aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormarty hiatt <martianhiatus [a t] riseup [d o t] net>2022-09-19 18:22:37 +0200
committermarty hiatt <martianhiatus [a t] riseup [d o t] net>2022-09-19 18:22:37 +0200
commit98606cc26e650ddd98e5e6d87f44ff9585a76e17 (patch)
treed5dbdc561946ba77e49f0250b877c5d39c540fc5
parentbfc45ff25df938891c317466c3200a86d0585081 (diff)
parent759267c593d88fcce453212b0a8a2892bb90ea8f (diff)
Merge branch 'draft-toots' into develop
-rw-r--r--README.org8
-rw-r--r--lisp/mastodon-toot.el58
2 files changed, 43 insertions, 23 deletions
diff --git a/README.org b/README.org
index 4289d32..73a42e5 100644
--- a/README.org
+++ b/README.org
@@ -205,6 +205,14 @@ You can download and use your instance's custom emoji
| =C-c C-e= | add emoji (if =emojify= installed) |
|---------+----------------------------------|
+**** draft toots
+
+- Compose buffer text is saved as you type, kept in =mastodon-toot-current-toot-text=.
+- =mastodon-toot-save-draft=: save the current toot as a draft.
+- =mastodon-toot-open-draft-toot=: Open a compose buffer and insert one of your draft toots.
+- =mastodon-toot-delete-draft-toot=: Delete a draft toot.
+- =mastodon-toot-delete-all-drafts=: Delete all your drafts.
+
*** Other commands and account settings:
- =mastodon-url-lookup=: Attempt to load URL in =mastodon.el=. URL may be the one at point or provided in the minibuffer. Should also work if =mastodon.el= is not yet loaded.
diff --git a/lisp/mastodon-toot.el b/lisp/mastodon-toot.el
index 5ec58dd..79a99ad 100644
--- a/lisp/mastodon-toot.el
+++ b/lisp/mastodon-toot.el
@@ -50,6 +50,8 @@
(defvar mastodon-instance-url)
(defvar mastodon-tl--buffer-spec)
(defvar mastodon-tl--enable-proportional-fonts)
+(defvar mastodon-profile-account-settings)
+
(autoload 'mastodon-auth--user-acct "mastodon-auth")
(autoload 'mastodon-http--api "mastodon-http")
(autoload 'mastodon-http--delete "mastodon-http")
@@ -196,13 +198,17 @@ send.")
nil t)))
(mastodon-profile--update-preference "privacy" vis :source)))
-(defun mastodon-toot--get-max-toot-chars (&optional no-toot)
- "Fetch max_toot_chars from `mastodon-instance-url' asynchronously."
+(defun mastodon-toot--get-max-toot-chars (&optional _no-toot)
+ "Fetch max_toot_chars from `mastodon-instance-url' asynchronously.
+NO-TOOT means we are not calling from a toot buffer."
(mastodon-http--get-json-async
- (mastodon-http--api "instance") 'mastodon-toot--get-max-toot-chars-callback 'no-toot))
+ (mastodon-http--api "instance")
+ 'mastodon-toot--get-max-toot-chars-callback 'no-toot))
-(defun mastodon-toot--get-max-toot-chars-callback (json-response &optional no-toot)
- "Set max_toot_chars returned in JSON-RESPONSE and display in new toot buffer."
+(defun mastodon-toot--get-max-toot-chars-callback (json-response
+ &optional no-toot)
+ "Set max_toot_chars returned in JSON-RESPONSE and display in new toot buffer.
+NO-TOOT means we are not calling from a toot buffer."
(let ((max-chars
(or
(alist-get 'max_toot_chars json-response)
@@ -459,25 +465,32 @@ REPLY-ID, TOOT-VISIBILITY, and TOOT-CW of deleted toot are preseved."
(mastodon-toot-set-cw toot-cw)
(mastodon-toot--update-status-fields))))
-(defun mastodon-toot--kill (&optional cancel)
- "Kill `mastodon-toot-mode' buffer and window.
-CANCEL means the toot was not sent, so we save the toot text as a draft."
- (unless (eq mastodon-toot-current-toot-text nil)
- (when cancel
- (cl-pushnew mastodon-toot-current-toot-text
- mastodon-toot-draft-toots-list :test 'equal)))
- ;; prevent some weird bug when cancelling a non-empty toot:
- (delete #'mastodon-toot-save-toot-text after-change-functions)
- (kill-buffer-and-window))
+(defun mastodon-toot--kill ()
+ "Kill `mastodon-toot-mode' buffer and window."
+ (with-current-buffer (get-buffer "*new toot*")
+ ;; FIXME: prevent some weird bug when cancelling a non-empty toot:
+ (delete #'mastodon-toot--save-toot-text after-change-functions)
+ (kill-buffer-and-window)))
(defun mastodon-toot--cancel ()
"Kill new-toot buffer/window. Does not POST content to Mastodon.
-Toot text is saved as a draft."
+If toot is not empty, prompt to save text as a draft."
(interactive)
(if (mastodon-toot-empty-p)
- (mastodon-toot--kill :cancel)
- (when (y-or-n-p "Discard draft toot? (text will be saved)")
- (mastodon-toot--kill :cancel))))
+ (mastodon-toot--kill)
+ (when (y-or-n-p "Save draft toot?")
+ (mastodon-toot-save-draft))
+ (mastodon-toot--kill)))
+
+(defun mastodon-toot-save-draft ()
+ "Save the current compose toot text as a draft.
+Pushes `mastodon-toot-current-toot-text' to
+`mastodon-toot-draft-toots-list'."
+ (interactive)
+ (unless (eq mastodon-toot-current-toot-text nil)
+ (cl-pushnew mastodon-toot-current-toot-text
+ mastodon-toot-draft-toots-list :test 'equal)
+ (message "Draft saved!")))
(defun mastodon-toot-empty-p (&optional text-only)
"Return t if no text or attachments have been added to the compose buffer.
@@ -1065,16 +1078,15 @@ REPLY-JSON is the full JSON of the toot being replied to."
(list 'invisible (not mastodon-toot--content-warning)
'face 'mastodon-cw-face)))))
-(defun mastodon-toot-save-toot-text (&rest _args)
+(defun mastodon-toot--save-toot-text (&rest _args)
"Save the current toot text in `mastodon-toot-current-toot-text'.
Added to `after-change-functions' in new toot buffers."
- (interactive)
(let ((text (mastodon-toot--remove-docs)))
(unless (string-empty-p text)
(setq mastodon-toot-current-toot-text text))))
(defun mastodon-toot-open-draft-toot ()
- "Prompt for a draft toot and open a new compose buffer containing the draft."
+ "Prompt for a draft and compose a toot with it."
(interactive)
(if mastodon-toot-draft-toots-list
(let ((text (completing-read "Select draft toot: "
@@ -1164,7 +1176,7 @@ a draft into the buffer."
(mastodon-toot--update-status-fields)
;; draft toot text saving:
(setq mastodon-toot-current-toot-text nil)
- (push #'mastodon-toot-save-toot-text after-change-functions)
+ (push #'mastodon-toot--save-toot-text after-change-functions)
(when initial-text
(insert initial-text))))