aboutsummaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
Diffstat (limited to 'lisp')
-rw-r--r--lisp/mastodon-discover.el10
-rw-r--r--lisp/mastodon-tl.el13
-rw-r--r--lisp/mastodon-toot.el20
-rw-r--r--lisp/mastodon.el19
4 files changed, 49 insertions, 13 deletions
diff --git a/lisp/mastodon-discover.el b/lisp/mastodon-discover.el
index 1b960e5..b3819ed 100644
--- a/lisp/mastodon-discover.el
+++ b/lisp/mastodon-discover.el
@@ -66,9 +66,11 @@
("C" "Copy toot URL" mastodon-toot--copy-toot-url)
("d" "Delete (your) toot" mastodon-toot--delete-toot)
("D" "Delete and redraft (your) toot" mastodon-toot--delete-toot)
+ ("e" "Edit (your) toot" mastodon-toot--edit-toot-at-point)
+ ("E" "View edits of (your) toot" mastodon-toot--view-toot-edits)
("i" "Pin/Unpin (your) toot" mastodon-toot--pin-toot-toggle)
("P" "View user profile" mastodon-profile--show-user)
- ("s" "Translate toot at point" mastodon-toot--translate-toot-text)
+ ("a" "Translate toot at point" mastodon-toot--translate-toot-text)
("T" "View thread" mastodon-tl--thread)
("v" "Vote on poll" mastodon-tl--poll-vote))
("Views"
@@ -78,6 +80,7 @@
("H" "Home" mastodon-tl--get-home-timeline)
("L" "Local" mastodon-tl--get-local-timeline)
("N" "Notifications" mastodon-notifications-get)
+ ("@" "Notifications with mentions" mastodon-notifications--get-mentions)
("u" "Update timeline" mastodon-tl--update)
("S" "Search" mastodon-search--search-query)
("O" "Jump to your profile" mastodon-profile--my-profile)
@@ -86,7 +89,10 @@
("V" "View favourites" mastodon-profile--view-favourites)
("R" "View follow requests" mastodon-profile--view-follow-requests)
("G" "View follow suggestions" mastodon-tl--get-follow-suggestions)
- ("I" "View filters" mastodon-tl--view-filters))
+ ("I" "View filters" mastodon-tl--view-filters)
+ ("X" "View lists" mastodon-tl--view-lists)
+ ("s" "View scheduled toots" mastodon-tl--view-scheduled-toots)
+ (";" "View instance description" mastodon-tl--view-instance-description))
("Users"
("W" "Follow" mastodon-tl--follow-user)
("C-S-W" "Unfollow" mastodon-tl--unfollow-user)
diff --git a/lisp/mastodon-tl.el b/lisp/mastodon-tl.el
index 1528dc6..8c20b77 100644
--- a/lisp/mastodon-tl.el
+++ b/lisp/mastodon-tl.el
@@ -1439,7 +1439,10 @@ Should work in all mastodon buffers."
(let ((endpoint-fun (mastodon-tl--get-endpoint nil :no-error))
(buffer-name-fun (mastodon-tl--buffer-name nil :no-error)))
(cond (mastodon-toot-mode
- 'compose-toot)
+ ;; composing/editing:
+ (if (string= "*edit toot*" (buffer-name))
+ 'edit-toot
+ 'new-toot))
;; main timelines:
((string= "timelines/home" endpoint-fun)
'home)
@@ -1459,6 +1462,8 @@ Should work in all mastodon buffers."
;; threads:
((string-suffix-p "context" endpoint-fun)
'thread)
+ ((string-prefix-p "statuses" endpoint-fun)
+ 'single-status)
;; profiles:
((string-prefix-p "accounts" endpoint-fun)
(cond
@@ -1496,7 +1501,9 @@ Should work in all mastodon buffers."
'scheduled-statuses)
;; instance description
((string= "instance" endpoint-fun)
- 'instance-description))))
+ 'instance-description)
+ ((string= "*mastodon-toot-edits*" buffer-name-fun)
+ 'toot-edits))))
(defun mastodon-tl--has-toots-p ()
"Return non-nil if the current buffer contains toots.
@@ -1915,7 +1922,7 @@ a: add account to this list, r: remove account from this list"
"Return the list of followers of the logged in account."
(let* ((id (mastodon-auth--get-account-id))
(url (mastodon-http--api (format "accounts/%s/following" id))))
- (mastodon-http--get-json url)))
+ (mastodon-http--get-json url '(("limit" . "80"))))) ; max 80 accounts
(defun mastodon-tl--add-account-to-list-at-point ()
"Prompt for account and add to list at point."
diff --git a/lisp/mastodon-toot.el b/lisp/mastodon-toot.el
index 177cfdc..0d4f9e2 100644
--- a/lisp/mastodon-toot.el
+++ b/lisp/mastodon-toot.el
@@ -793,9 +793,9 @@ instance to edit a toot."
(toot-language (alist-get 'language toot))
(reply-id (alist-get 'in_reply_to_id toot)))
(when (y-or-n-p "Edit this toot? ")
- (mastodon-toot--compose-buffer)
+ (mastodon-toot--compose-buffer nil reply-id nil content :edit)
(goto-char (point-max))
- (insert content)
+ ;; (insert content)
;; adopt reply-to-id, visibility, CW, and language:
(mastodon-toot--set-toot-properties reply-id toot-visibility
source-cw toot-language)
@@ -815,7 +815,8 @@ instance to edit a toot."
(defun mastodon-toot--view-toot-edits ()
"View editing history of the toot at point in a popup buffer."
(interactive)
- (let ((history (mastodon-tl--property 'edit-history)))
+ (let ((id (mastodon-tl--property 'base-toot-id))
+ (history (mastodon-tl--property 'edit-history)))
(with-current-buffer (get-buffer-create "*mastodon-toot-edits*")
(let ((inhibit-read-only t))
(special-mode)
@@ -836,7 +837,10 @@ instance to edit a toot."
(format "Edits to toot by %s:"
(alist-get 'username
(alist-get 'account (car history))))
- 'face font-lock-comment-face))))))
+ 'face font-lock-comment-face))
+ (mastodon-tl--set-buffer-spec (buffer-name (current-buffer))
+ (format "statuses/%s/history" id)
+ nil)))))
(defun mastodon-toot--insert-toot-iter (it)
"Insert iteration IT of toot."
@@ -1539,15 +1543,17 @@ Added to `after-change-functions'."
;; NB: now that we have toot drafts, to ensure offline composing remains
;; possible, avoid any direct requests here:
(defun mastodon-toot--compose-buffer (&optional reply-to-user
- reply-to-id reply-json initial-text)
+ reply-to-id reply-json initial-text
+ edit)
"Create a new buffer to capture text for a new toot.
If REPLY-TO-USER is provided, inject their handle into the message.
If REPLY-TO-ID is provided, set the `mastodon-toot--reply-to-id' var.
REPLY-JSON is the full JSON of the toot being replied to.
INITIAL-TEXT is used by `mastodon-toot-insert-draft-toot' to add
a draft into the buffer."
- (let* ((buffer-exists (get-buffer "*new toot*"))
- (buffer (or buffer-exists (get-buffer-create "*new toot*")))
+ (let* ((buffer-name (if edit "*edit toot*" "*new toot*"))
+ (buffer-exists (get-buffer buffer-name))
+ (buffer (or buffer-exists (get-buffer-create buffer-name)))
(inhibit-read-only t)
(reply-text (alist-get 'content reply-json))
(previous-window-config (list (current-window-configuration)
diff --git a/lisp/mastodon.el b/lisp/mastodon.el
index cd7dd8e..1c3136c 100644
--- a/lisp/mastodon.el
+++ b/lisp/mastodon.el
@@ -203,7 +203,10 @@ Use. e.g. \"%c\" for your locale's date and time format."
(define-key map (kbd "e") #'mastodon-toot--edit-toot-at-point)
(define-key map (kbd "E") #'mastodon-toot--view-toot-edits)
(when (require 'lingva nil :no-error)
- (define-key map (kbd "s") #'mastodon-toot--translate-toot-text))
+ (define-key map (kbd "a") #'mastodon-toot--translate-toot-text))
+ (define-key map (kbd "s") #'mastodon-tl--view-scheduled-toots)
+ (define-key map (kbd "M-C-q") #'mastodon-kill-all-buffers)
+ (define-key map (kbd ";") #'mastodon-tl--view-instance-description)
map)
"Keymap for `mastodon-mode'.")
@@ -345,6 +348,20 @@ not, just browse the URL in the normal fashion."
(string-match "^/[[:alpha:]]+$" query)
(string-match "^/u/[[:alpha:]]+$" query)))))
+(defun mastodon-live-buffers ()
+ "Return a list of open mastodon buffers.
+Calls `mastodon-tl--get-buffer-type', which see."
+ (cl-loop for x in (buffer-list)
+ when (with-current-buffer x (mastodon-tl--get-buffer-type))
+ collect (get-buffer x)))
+
+(defun mastodon-kill-all-buffers ()
+ "Kill any and all open mastodon buffers, hopefully."
+ (interactive)
+ (let ((mastodon-buffers (mastodon-live-buffers)))
+ (cl-loop for x in mastodon-buffers
+ do (kill-buffer x))))
+
;;;###autoload
(add-hook 'mastodon-mode-hook (lambda ()
(when (require 'emojify nil :noerror)