aboutsummaryrefslogtreecommitdiff
path: root/lisp/mastodon-tl.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/mastodon-tl.el')
-rw-r--r--lisp/mastodon-tl.el44
1 files changed, 36 insertions, 8 deletions
diff --git a/lisp/mastodon-tl.el b/lisp/mastodon-tl.el
index 6711351..4790589 100644
--- a/lisp/mastodon-tl.el
+++ b/lisp/mastodon-tl.el
@@ -231,6 +231,7 @@ Optionally start from POS."
(let* ((account (cdr (assoc 'account toot)))
(handle (cdr (assoc 'acct account)))
(name (cdr (assoc 'display_name account)))
+ (profile-url (cdr (assoc 'url account)))
(avatar-url (cdr (assoc 'avatar account))))
;; TODO: Once we have a view for a user (e.g. their posts
;; timeline) make this a tab-stop and attach an action
@@ -238,10 +239,16 @@ Optionally start from POS."
(when (and mastodon-tl--show-avatars-p mastodon-tl--display-media-p)
(mastodon-media--get-avatar-rendering avatar-url))
(propertize name 'face 'mastodon-display-name-face)
- (propertize (concat " (@"
- handle
- ")")
- 'face 'mastodon-handle-face))))
+ " ("
+ (propertize (concat "@" handle)
+ 'face 'mastodon-handle-face
+ 'mouse-face 'highlight
+ ;; TODO: Replace url browsing with native profile viewing
+ 'mastodon-tab-stop 'shr-url
+ 'shr-url profile-url
+ 'keymap mastodon-tl--shr-map-replacement
+ 'help-echo (concat "Browse user profile of @" handle))
+ ")")))
(defun mastodon-tl--byline-boosted (toot)
"Add byline for boosted data from TOOT."
@@ -328,7 +335,7 @@ TIME-STAMP is assumed to be in the past."
(defun mastodon-tl--byline (toot author-byline action-byline)
"Generate byline for TOOT.
-AUTHOR-BYLINE is function for adding the author portion of
+AUTHOR-BYLINE is function for adding the author portion of
the byline that takes one variable.
ACTION-BYLINE is a function for adding an action, such as boosting
favouriting and following to the byline. It also takes a single function. By default
@@ -394,14 +401,24 @@ links in the text."
(url-host toot-url))
mastodon-instance-url))
(maybe-hashtag (mastodon-tl--extract-hashtag-from-url
- url toot-instance-url)))
- ;; TODO: Recognize user handles
+ url toot-instance-url))
+ (maybe-userhandle (mastodon-tl--extract-userhandle-from-url
+ url (buffer-substring-no-properties start end))))
(cond (;; Hashtags:
maybe-hashtag
(setq mastodon-tab-stop-type 'hashtag
keymap mastodon-tl--link-keymap
help-echo (concat "Browse tag #" maybe-hashtag)
extra-properties (list 'mastodon-tag maybe-hashtag)))
+
+ (;; User handles:
+ maybe-userhandle
+ ;; Until we have native profile page viewing we leave these as HTML
+ ;; links.
+ (setq mastodon-tab-stop-type 'shr-url
+ keymap mastodon-tl--shr-map-replacement
+ help-echo (concat "Browse user profile of " maybe-userhandle)))
+
;; Anything else:
(t
;; Leave it as a url handled by shr.el.
@@ -417,6 +434,17 @@ links in the text."
'help-echo help-echo)
extra-properties))))
+(defun mastodon-tl--extract-userhandle-from-url (url buffer-text)
+ "Returns the user hande the URL points to or nil if it is not a profile link.
+
+BUFFER-TEXT is the text covered by the link with URL, for a user profile
+this should be of the form <at-sign><user id>, e.g. \"@Gargon\"."
+ (let ((parsed-url (url-generic-parse-url url)))
+ (when (and (string= "@" (substring buffer-text 0 1))
+ (string= (downcase buffer-text)
+ (downcase (substring (url-filename parsed-url) 1))))
+ (concat buffer-text "@" (url-host parsed-url)))))
+
(defun mastodon-tl--extract-hashtag-from-url (url instance-url)
"Returns the hashtag that URL points to or nil if URL is not a tag link.
@@ -563,7 +591,7 @@ message is a link which unhides/hides the main body."
"Display the content and byline of a timeline element.
BODY will form the section of the toot above the byline.
-AUTHOR-BYLINE is an optional function for adding the author portion of
+AUTHOR-BYLINE is an optional function for adding the author portion of
the byline that takes one variable. By default it is `mastodon-tl--byline-author'
ACTION-BYLINE is also an optional function for adding an action, such as boosting
favouriting and following to the byline. It also takes a single function. By default