From f70edb1fae46afe8c26dd13020a3c67bd1b46f29 Mon Sep 17 00:00:00 2001 From: marty hiatt Date: Wed, 10 Aug 2022 14:57:19 +0200 Subject: fix formatting of unmute-user --- lisp/mastodon-tl.el | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lisp/mastodon-tl.el b/lisp/mastodon-tl.el index 7aef0a1..4014772 100644 --- a/lisp/mastodon-tl.el +++ b/lisp/mastodon-tl.el @@ -1444,7 +1444,8 @@ by `mastodon-tl--follow-user' to enable or disable notifications." ((string-equal notify "false") (message "Not receiving notifications for user %s (@%s)!" name user-handle)) - ((string-equal action "mute") + ((or (string-equal action "mute") + (string-equal action "unmute")) (message "User %s (@%s) %sd!" name user-handle action)) ((eq notify nil) (message "User %s (@%s) %sed!" name user-handle action))))))) -- cgit v1.2.3 From c18f3391b26a16c5a1bc7568cfd06a8ce6367c67 Mon Sep 17 00:00:00 2001 From: marty hiatt Date: Wed, 10 Aug 2022 15:00:53 +0200 Subject: remove commented code in profile--fields-insert --- lisp/mastodon-profile.el | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/lisp/mastodon-profile.el b/lisp/mastodon-profile.el index 260c2d3..cfea26c 100644 --- a/lisp/mastodon-profile.el +++ b/lisp/mastodon-profile.el @@ -253,37 +253,25 @@ JSON is the data returned by the server." (defun mastodon-profile--fields-get (account) "Fetch the fields vector (aka profile metadata) from profile of ACCOUNT. - Returns a list of lists." (let ((fields (mastodon-profile--account-field account 'fields))) (when fields - (mapcar - (lambda (el) - (list - (alist-get 'name el) - (alist-get 'value el))) - fields)))) + (mapcar (lambda (el) + (list (alist-get 'name el) + (alist-get 'value el))) + fields)))) (defun mastodon-profile--fields-insert (fields) "Format and insert field pairs (a.k.a profile metadata) in FIELDS." (let* ((car-fields (mapcar 'car fields)) - ;; (cdr-fields (mapcar 'cadr fields)) - ;; (cdr-fields-rendered - ;; (list - ;; (mapcar (lambda (x) - ;; (mastodon-tl--render-text x nil)) - ;; cdr-fields))) (left-width (car (sort (mapcar 'length car-fields) '>)))) - ;; (right-width (car (sort (mapcar 'length cdr-fields) '>)))) (mapconcat (lambda (field) (mastodon-tl--render-text (concat (format "_ %s " (car field)) (make-string (- (+ 1 left-width) (length (car field))) ?_) (format " :: %s" (cadr field))) - ;; (make-string (- (+ 1 right-width) (length (cdr field))) ?_) - ;; " |") - field)) ; nil)) ; hack to make links tabstops + field)) ; hack to make links tabstops fields ""))) (defun mastodon-profile--get-statuses-pinned (account) -- cgit v1.2.3 From 6c04327b6c89529a19f196f2610ad86779ab8232 Mon Sep 17 00:00:00 2001 From: marty hiatt Date: Fri, 19 Aug 2022 09:21:39 +0200 Subject: tl--init*: fix a stray bracket --- lisp/mastodon-tl.el | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/lisp/mastodon-tl.el b/lisp/mastodon-tl.el index 4014772..0d666ed 100644 --- a/lisp/mastodon-tl.el +++ b/lisp/mastodon-tl.el @@ -1688,14 +1688,13 @@ JSON is the data returned from the server." #'mastodon-tl--update-timestamps-callback (current-buffer) nil))) - (unless - ;; for everything save profiles: - (string-prefix-p "accounts" endpoint)) - ;;(or (equal endpoint "notifications") - ;; (string-prefix-p "timelines" endpoint) - ;; (string-prefix-p "favourites" endpoint) - ;; (string-prefix-p "statuses" endpoint)) - (mastodon-tl--goto-first-item))) + (unless (string-prefix-p "accounts" endpoint) + ;; for everything save profiles + (mastodon-tl--goto-first-item)))) +;;(or (equal endpoint "notifications") +;; (string-prefix-p "timelines" endpoint) +;; (string-prefix-p "favourites" endpoint) +;; (string-prefix-p "statuses" endpoint)) (defun mastodon-tl--init-sync (buffer-name endpoint update-function) "Initialize BUFFER-NAME with timeline targeted by ENDPOINT. -- cgit v1.2.3 From b058512c3e437ec9334b59645d9c625528e40996 Mon Sep 17 00:00:00 2001 From: marty hiatt Date: Fri, 19 Aug 2022 09:35:44 +0200 Subject: format for bookmarked toots, help-echo for B/F/K format chars --- lisp/mastodon-tl.el | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/lisp/mastodon-tl.el b/lisp/mastodon-tl.el index 0d666ed..4330084 100644 --- a/lisp/mastodon-tl.el +++ b/lisp/mastodon-tl.el @@ -532,6 +532,7 @@ By default it is `mastodon-tl--byline-boosted'" (parsed-time (date-to-time created-time)) (faved (equal 't (mastodon-tl--field 'favourited toot))) (boosted (equal 't (mastodon-tl--field 'reblogged toot))) + (bookmarked (equal 't (mastodon-tl--field 'bookmarked toot))) (visibility (mastodon-tl--field 'visibility toot))) (concat ;; Boosted/favourited markers are not technically part of the byline, so @@ -544,7 +545,9 @@ By default it is `mastodon-tl--byline-boosted'" (concat (when boosted (mastodon-tl--format-faved-or-boosted-byline "B")) (when faved - (mastodon-tl--format-faved-or-boosted-byline "F"))) + (mastodon-tl--format-faved-or-boosted-byline "F")) + (when bookmarked + (mastodon-tl--format-faved-or-boosted-byline "K"))) (propertize (concat ;; we propertize help-echo format faves for author name @@ -575,9 +578,17 @@ By default it is `mastodon-tl--byline-boosted'" (defun mastodon-tl--format-faved-or-boosted-byline (letter) "Format the byline marker for a boosted or favourited status. -LETTER is a string, either F or B." - (format "(%s) " - (propertize letter 'face 'mastodon-boost-fave-face))) +LETTER is a string, F for favourited, B for boosted, or K for bookmarked." + (let ((help-string (cond ((equal letter "F") + "favourited") + ((equal letter "B") + "boosted") + ((equal letter "K") + "bookmarked")))) + (format "(%s) " + (propertize letter 'face 'mastodon-boost-fave-face + 'help-echo (format "You have %s this status." + help-string))))) (defun mastodon-tl--render-text (string toot) "Return a propertized text rendering the given HTML string STRING. -- cgit v1.2.3 From 4b39459c720f2ed8efe54efa23f1a92613bbe34e Mon Sep 17 00:00:00 2001 From: marty hiatt Date: Fri, 19 Aug 2022 09:23:59 +0200 Subject: docstring --- lisp/mastodon-tl.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/mastodon-tl.el b/lisp/mastodon-tl.el index 4330084..638f01a 100644 --- a/lisp/mastodon-tl.el +++ b/lisp/mastodon-tl.el @@ -264,7 +264,7 @@ text, i.e. hidden spoiler text." "local" "timelines/public?local=true" 'mastodon-tl--timeline)) (defun mastodon-tl--get-tag-timeline () - "Prompts for tag and opens its timeline." + "Prompt for tag and opens its timeline." (interactive) (let* ((word (or (word-at-point) "")) (input (read-string (format "Load timeline for tag (%s): " word))) -- cgit v1.2.3 From ea6e9675bdfffb682f2210312eea22d7d4c0a92f Mon Sep 17 00:00:00 2001 From: marty hiatt Date: Fri, 19 Aug 2022 10:18:16 +0200 Subject: FIX the post visibility marker displayable check --- lisp/mastodon-tl.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lisp/mastodon-tl.el b/lisp/mastodon-tl.el index 638f01a..168523b 100644 --- a/lisp/mastodon-tl.el +++ b/lisp/mastodon-tl.el @@ -554,11 +554,11 @@ By default it is `mastodon-tl--byline-boosted'" ;; in `mastodon-tl--byline-author' (funcall author-byline toot) (cond ((equal visibility "direct") - (if (fontp (char-displayable-p #10r128274)) + (if (fontp (char-displayable-p #10r9993)) " ✉" " [direct]")) ((equal visibility "private") - (if (fontp (char-displayable-p #10r9993)) + (if (fontp (char-displayable-p #10r128274)) " 🔒" " [followers]"))) (funcall action-byline toot) -- cgit v1.2.3 From 05c42b95f48d57ac0d06a9a5c4cd910db77f073b Mon Sep 17 00:00:00 2001 From: marty hiatt Date: Fri, 19 Aug 2022 10:19:05 +0200 Subject: use bookmark emoji if possible --- lisp/mastodon-tl.el | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lisp/mastodon-tl.el b/lisp/mastodon-tl.el index 168523b..d955a5e 100644 --- a/lisp/mastodon-tl.el +++ b/lisp/mastodon-tl.el @@ -547,7 +547,10 @@ By default it is `mastodon-tl--byline-boosted'" (when faved (mastodon-tl--format-faved-or-boosted-byline "F")) (when bookmarked - (mastodon-tl--format-faved-or-boosted-byline "K"))) + (mastodon-tl--format-faved-or-boosted-byline + (if (fontp (char-displayable-p #10r128278)) + "🔖" + "K")))) (propertize (concat ;; we propertize help-echo format faves for author name @@ -583,7 +586,7 @@ LETTER is a string, F for favourited, B for boosted, or K for bookmarked." "favourited") ((equal letter "B") "boosted") - ((equal letter "K") + ((equal letter (or "🔖" "K")) "bookmarked")))) (format "(%s) " (propertize letter 'face 'mastodon-boost-fave-face -- cgit v1.2.3 From 0e297693434939a70e1d323a4b6880c0ff5e7527 Mon Sep 17 00:00:00 2001 From: marty hiatt Date: Fri, 19 Aug 2022 10:19:05 +0200 Subject: use bookmark emoji if possible --- lisp/mastodon-tl.el | 1 + 1 file changed, 1 insertion(+) diff --git a/lisp/mastodon-tl.el b/lisp/mastodon-tl.el index d955a5e..8a600d4 100644 --- a/lisp/mastodon-tl.el +++ b/lisp/mastodon-tl.el @@ -590,6 +590,7 @@ LETTER is a string, F for favourited, B for boosted, or K for bookmarked." "bookmarked")))) (format "(%s) " (propertize letter 'face 'mastodon-boost-fave-face + ;; emojify breaks this for 🔖: 'help-echo (format "You have %s this status." help-string))))) -- cgit v1.2.3 From 7be929c123d8ce94934a8b6f7c214df1d0bc346f Mon Sep 17 00:00:00 2001 From: marty hiatt Date: Sat, 20 Aug 2022 12:16:55 +0200 Subject: readme merge all --- README.org | 336 +++++++++++++++++++++++++++++-------------------------------- 1 file changed, 157 insertions(+), 179 deletions(-) diff --git a/README.org b/README.org index a072c52..7503328 100644 --- a/README.org +++ b/README.org @@ -1,115 +1,8 @@ #+OPTIONS: toc:nil -* mastodon.el updated - -This is an updated version of the great but seemingly dormant mastodon client for emacs. - -This is now the version available via MELPA. - -[The original readme is below.] - -It adds the following features: - -| Profiles: | | -| | display profile metadata fields | -| | display pinned toots first | -| | display relationship (follows you/followed by you) | -| | display toots/follows/followers counts | -| | links/tags/mentions in profile bios are active links | -| | show a lock icon for locked accounts | -| =G= | view follow suggestions | -| =R=, =a=, =r= | view/accept/reject follow requests | -| =V= | view your favorited toots | -| =i= | toggle pinning of toots | -| =U= | update your profile bio note | -| =O= | jump to own profile | -| Notifications: | | -| | follow requests now also appear in notifications | -| =a=, =j= | accept/reject follow request | -| | notifications for when a user posts (=mastodon-tl--enable-notify-user-posts=) | -| Timelines: | | -| =C= | copy url of toot at point | -| =d= | delete your toot at point, and reload current timeline | -| =D= | delete and redraft toot at point, preserving reply/CW/visibility | -| =W=, =M=, =B= | (un)follow, (un)mute, (un)block author of toot at point | -| =k=, =K= | toggle bookmark of toot at point, view bookmarked toots | -| =I=, =c=, =d= | view, create, and delete filters | -| | display image captions | -| | display polls and vote on them | -| | images are links to the full image, can be zoomed/rotated/saved (see image keymap) | -| | images scale properly | -| | toot visibility (direct, followers only) icon appears in toot bylines | -| | display toot's number of favorites, boosts and replies | -| | play gifs and videos (requires =mpv= to be installed) | -| | customize option to cache images | -| Toots: | | -| | mention booster in replies by default | -| | replies preserve visibility status/CW of original toot | -| | autocompletion of user mentions, via =company-mode= (must be installed to work) | -| =C-c C-a= | media uploads, asynchronous | -| | media upload previews displayed in toot compose buffer | -| =C-c C-n= | and sensitive media/nsfw flag | -| =C-c C-e= | add emoji (if =emojify= installed) | -| | download and use your instance's custom emoji | -| | server's maximum toot length shown in toot compose buffer | -| Search: | | -| =S= | search (posts, users, tags) (NB: only posts you have interacted with are searched) | -| | | - -It also makes some small cosmetic changes to make timelines easier to read, and makes some functions asynchronous, based on https://github.com/ieure/mastodon.el. +* README -The minimum Emacs version is now 27.1. But if you are running an older version it shouldn't be very hard to get it working. - -** live-updating timelines: =mastodon-async-mode= - -(code taken from https://github.com/alexjgriffith/mastodon-future.el.) - -Works for federated, local, and home timelines and for notifications. It's a little touchy, one thing to avoid is trying to load a timeline more than once at a time. It can go off the rails a bit, but it's still pretty cool. - -To enable, it, add =(require 'mastodon-async)= to your =init.el=. Then you can view a timeline with one of the commands that begin with =mastodon-async--stream-=. - -** translating toots - -You can translate toots with =mastodon-toot--translate-toot-text=. At the moment this requires [[https://codeberg.org/martianh/lingva.el][lingva.el]], a little interface I wrote to https://lingva.ml, to be installed to work. - -You could easily modify the simple function to use your emacs translator of choice (=google-translate=, =babel=, =go-translate=, etc.), you just need to fetch the toot's content with =(mastodon-tl--content toot)= and pass it to your translator function as its text argument. Here's what =mastodon-toot--translate-toot-text= looks like: - -#+begin_src emacs-lisp - (defun mastodon-toot--translate-toot-text () - "Translate text of toot at point. - Uses `lingva.el'." - (interactive) - (let* ((toot (mastodon-tl--property 'toot-json))) - (if toot - (lingva-translate nil (mastodon-tl--content toot)) - (message "No toot to translate?")))) -#+end_src - -** NB: dependencies - -This version depends on the library =request= (for uploading attachments). You can install it from MELPA, or https://github.com/tkf/emacs-request. It also depends on =seq=. - -Optional dependencies: -- =company= for autocompletion of mentions when composing a toot -- =emojify= for inserting and viewing emojis -- =mpv= and =mpv.el= for viewing videos and gifs -- =lingva.el= for translating toots - -** NB: bugs - -This repo also incorporates fixes for two bugs that were never merged into the upstream repo: -- https://github.com/jdenen/mastodon.el/issues/227 (and https://github.com/jdenen/mastodon.el/issues/234) -- https://github.com/jdenen/mastodon.el/issues/228 - -** contributing - -Contributions are welcome. - -1. Create an here on codeberg detailing the feature you'd like to add. -2. Fork the repository and create a branch off of =develop=. -3. Create a pull request referencing the issue created in step 1. - -* Original README +=mastodon.el= is an Emacs client for the Mastodon and Pleroma social networks. For info see https://joinmastodon.org/. ** Installation @@ -128,6 +21,8 @@ Or, with =use-package=: :ensure t) #+END_SRC +The minimum Emacs version is now 27.1. But if you are running an older version it shouldn't be very hard to get it working. + *** MELPA Add =MELPA= to your archives: @@ -171,12 +66,13 @@ Or, with =use-package=: #+END_SRC ** Usage -*** Instance + +*** Logging in to your instance You need to set 2 variables in your init file to get started: -1. mastodon-instance-url -2. mastodon-active-user +1. =mastodon-instance-url= +2. =mastodon-active-user= (see their doc strings for details). For example If you want to post toots as "example_user@social.instance.org", then put this in your init @@ -192,95 +88,181 @@ to internet before you do this. If you have multiple mastodon accounts you can activate one at a time by changing those two variables and restarting Emacs. -If you have been using mastodon.el before this change and the above -steps do not work it's advisable that you delete the old file specified -by =mastodon-client--token-file= and restart Emacs and follow the steps -again. +If you were using mastodon.el before 2FA was implemented and the above steps +do not work, delete the old file specified by =mastodon-client--token-file= and +restart Emacs and follow the steps again. *** Timelines =M-x mastodon= -Opens a =*mastodon-home*= buffer in the major mode so you can see toots. You will be prompted for email and password. The app registration process will take place if your =mastodon-token-file= does not contain =:client_id= and =:client_secret=. +Opens a =*mastodon-home*= buffer in the major mode and displays toots. You +will be prompted for email and password. The app registration process will +take place if your =mastodon-token-file= does not contain =:client_id= and +=:client_secret=. **** Keybindings -|-----------------+---------------------------------------------------------| -| Key | Action | -|-----------------+---------------------------------------------------------| -| | /Help/ | -| =?= | Open context menu if =discover= is available | -| | /Timeline actions/ | -| =n= | Go to next item (toot, notification) | -| =p= | Go to previous item (toot, notification) | -| =M-n=/== | Go to the next interesting thing that has an action | -| =M-p=/== | Go to the previous interesting thing that has an action | -| =u= | Update timeline | -| =#= | Prompt for tag and open its timeline | -| =A= | Open author profile of toot under =point= | -| =F= | Open federated timeline | -| =H= | Open home timeline | -| =L= | Open local timeline | -| =N= | Open notifications timeline | -| =P= | Open profile of user attached to toot under =point= | -| =T= | Open thread buffer for toot under =point= | -| | /Toot actions/ | -| =c= | Toggle content warning content | -| =b= | Boost toot under =point= | -| =f= | Favourite toot under =point= | -| =r= | Reply to toot under =point= | -| =n= | Compose a new toot | -| | /Switching to other buffers/ | -| | /Quitting/ | -| =q= | Quit mastodon buffer, leave window open | -| =Q= | Quit mastodon buffer and kill window | -|-----------------+---------------------------------------------------------| +|---------------+-----------------------------------------------------------------------| +| Key | Action | +|---------------+-----------------------------------------------------------------------| +| | /Help/ | +| =?= | Open context menu if =discover= is available | +|---------------+-----------------------------------------------------------------------| +| | /Timeline actions/ | +| =n= | Go to next item (toot, notification) | +| =p= | Go to previous item (toot, notification) | +| =M-n=/== | Go to the next interesting thing that has an action | +| =M-p=/== | Go to the previous interesting thing that has an action | +| =u= | Update timeline | +| =#= | Prompt for tag and open its timeline | +| =A= | Open author profile of toot under =point= | +| =F= | Open federated timeline | +| =H= | Open home timeline | +| =L= | Open local timeline | +| =N= | Open notifications timeline | +| =P= | Open profile of user attached to toot under =point= | +| =O= | View own profile | +| =U= | update your profile bio note | +| =T= | Open thread buffer for toot under =point= | +|---------------+-----------------------------------------------------------------------| +| | Other views | +| =S= | search (posts, users, tags) (NB: only posts you have interacted with) | +| =I=, =c=, =d= | view, create, and delete filters | +| =R=, =a=, =r= | view/accept/reject follow requests | +| =G= | view follow suggestions | +| =V= | view your favorited toots | +| =K= | view bookmarked toots | +|---------------+-----------------------------------------------------------------------| +| | /Toot actions/ | +| =c= | Toggle content warning content | +| =b= | Boost toot under =point= | +| =f= | Favourite toot under =point= | +| =r= | Reply to toot under =point= | +| =t= | Compose a new toot | +| =v= | Vote on poll at point | +| =C= | copy url of toot at point | +| =C-RET= | play video/gif at point (requires =mpv=) | +| =i= | (un)pin toot at point | +| =d= | delete your toot at point, and reload current timeline | +| =D= | delete and redraft toot at point, preserving reply/CW/visibility | +| =W=, =M=, =B= | (un)follow, (un)mute, (un)block author of toot at point | +| =k= | toggle bookmark of toot at point | +|---------------+-----------------------------------------------------------------------| +| | Notifications view | +| =a=, =j= | accept/reject follow request | +|---------------+-----------------------------------------------------------------------| +| | /Switching to other buffers/ | +| | /Quitting/ | +| =q= | Quit mastodon buffer, leave window open | +| =Q= | Quit mastodon buffer and kill window | +|---------------+-----------------------------------------------------------------------| **** Legend -|--------+-------------------------| -| Marker | Meaning | -|--------+-------------------------| -| =(B)= | I boosted this toot. | -| =(F)= | I favourited this toot. | -|--------+-------------------------| +|----------------+------------------------| +| Marker | Meaning | +|----------------+------------------------| +| =(B)= | I boosted this toot | +| =(F)= | I favourited this toot | +| (=K=) (or emoji) | I bookmarked this toot | +|----------------+------------------------| -*** Toot toot +*** Composing toots -=M-x mastodon-toot= +=M-x mastodon-toot= (or =t= from a mastodon.el buffer). -Pops a new buffer/window with a =mastodon-toot= minor mode. Enter the +Pops a new buffer/window in =mastodon-toot= minor mode. Enter the contents of your toot here. =C-c C-c= sends the toot. =C-c C-k= cancels. Both actions kill the buffer and window. -If you have not previously authenticated, you will be prompted for your -account email and password. *NOTE*: Email and password are NOT stored by mastodon.el. +Autocompletion of mentions is provided by a mastodon company backend (requires =company-mode=). -Authentication stores your access token in the =mastodon-auth--token= -variable. It is not stored on your filesystem, so you will have to -re-authenticate when you close/reopen Emacs. +Replies preserve visibility status/content warnings, and include boosters by default. -**** Customization -The default toot visibility can be changed by setting or customizing the =mastodon-toot--default-visibility= variable. Valid values are ="public"=, ="unlisted"=, ="private"=, or =direct=. +Server's max toot length, and attachment previews, are shown. -Toot visibility can also be changed on a per-toot basis from the new toot buffer. +You can download and use your instance's custom emoji +(=mastodon-toot--download-custom-emoji=, =mastodon-toot--enable-custom-emoji=). **** Keybindings -|-----------+------------------------| -| Key | Action | -|-----------+------------------------| -| =C-c C-c= | Send toot | -| =C-c C-k= | Cancel toot | -| =C-c C-w= | Add content warning | -| =C-c C-v= | Change toot visibility | -|-----------+------------------------| +|---------+----------------------------------| +| Key | Action | +|---------+----------------------------------| +| =C-c C-c= | Send toot | +| =C-c C-k= | Cancel toot | +| =C-c C-w= | Add content warning | +| =C-c C-v= | Change toot visibility | +| =C-c C-n= | Add sensitive media/nsfw flag | +| =C-c C-a= | Upload attachment(s) | +| =C-c != | Remove all attachments | +| =C-c C-e= | add emoji (if =emojify= installed) | +|---------+----------------------------------| + +*** Customization + +See =M-x customize-group RET mastodon= to view all customize options. + +- Timeline options: + - Use proportional fonts + - Timestamp format + - Relative timestamps + - Display use avatars + - Avatar image hight + - Enable image caching + +- Compose options: + - Default toot visibility, using =mastodon-toot--default-visibility= variable. Valid values are ="public"=, ="unlisted"=, ="private"=, or =direct=. + - Completions for mentions + - Enable custom emoji + +*** live-updating timelines: =mastodon-async-mode= + +(code taken from https://github.com/alexjgriffith/mastodon-future.el.) + +Works for federated, local, and home timelines and for notifications. It's a +little touchy, one thing to avoid is trying to load a timeline more than once +at a time. It can go off the rails a bit, but it's still pretty cool. The +current maintainer of =mastodon.el= is unable to debug improve this feature. + +To enable, it, add =(require 'mastodon-async)= to your =init.el=. Then you can +view a timeline with one of the commands that begin with +=mastodon-async--stream-=. + +*** translating toots + +You can translate toots with =mastodon-toot--translate-toot-text=. At the moment +this requires [[https://codeberg.org/martianh/lingva.el][lingva.el]], a little interface I wrote to https://lingva.ml, to +be installed to work. + +You could easily modify the simple function to use your emacs translator of +choice (=libretrans.el= , =google-translate=, =babel=, =go-translate=, etc.), you just +need to fetch the toot's content with =(mastodon-tl--content toot)= and pass it +to your translator function as its text argument. Here's what +=mastodon-toot--translate-toot-text= looks like: + +#+begin_src emacs-lisp + (defun mastodon-toot--translate-toot-text () + "Translate text of toot at point. + Uses `lingva.el'." + (interactive) + (let* ((toot (mastodon-tl--property 'toot-json))) + (if toot + (lingva-translate nil (mastodon-tl--content toot)) + (message "No toot to translate?")))) +#+end_src -** Roadmap +** dependencies -[[https://github.com/jdenen/mastodon.el/milestone/1][Here]] are the features I plan to implement before putting mastodon.el on MELPA. +This version depends on the library =request= (for uploading attachments). You +can install it from MELPA, or https://github.com/tkf/emacs-request. -[[https://github.com/jdenen/mastodon.el/milestone/2][Here]] are the plans I have for the =1.0.0= release. +Optional dependencies: +- =company= for autocompletion of mentions when composing a toot +- =emojify= for inserting and viewing emojis +- =mpv= and =mpv.el= for viewing videos and gifs +- =lingva.el= for translating toots ** Contributing @@ -297,7 +279,3 @@ PRs, issues, and feature requests are very welcome! 1. In an [[https://github.com/jdenen/mastodon.el/issues][issue]], let me know that you're working to fix it. 2. Fork the repository and create a branch off of =develop=. 3. Create a pull request referencing the issue from step 1. - -** Connect - -If you want to get in touch with me, give me a [[https://mastodon.social/@johnson][toot]] or leave an [[https://github.com/jdenen/mastodon.el/issues][issue]]. -- cgit v1.2.3