emacs: fix vue-semantic-server, update for mastodon.el

This commit is contained in:
Pavel Korytov 2025-04-21 00:04:49 +03:00
parent 58696bf2e5
commit 0f72891f46
2 changed files with 228 additions and 125 deletions

View file

@ -1793,6 +1793,27 @@ targets."
(with-eval-after-load 'lsp-mode
(advice-add 'lsp--progress-status :override #'my/lsp--progress-status))
(setq my/lsp--vue-diagnostics-last-update (make-hash-table :test #'equal))
(defun my/lsp--on-diagnostics (fn workspace params)
(if (equal (gethash 'vue-semantic-server lsp-clients)
(lsp--workspace-client workspace))
(progn
(let* ((is-empty (seq-empty-p (gethash "diagnostics" params)))
(uri (gethash "uri" params))
(last-update (gethash uri my/lsp--vue-diagnostics-last-update))
(current-update (time-convert nil #'integer)))
(unless is-empty
(puthash uri current-update my/lsp--vue-diagnostics-last-update))
(when (or (not is-empty)
(not last-update)
(> (- current-update (or last-update 0)) 5))
(funcall fn workspace params))))
(funcall fn workspace params)))
(with-eval-after-load 'lsp
(advice-add #'lsp--on-diagnostics :around #'my/lsp--on-diagnostics))
(use-package flycheck
:straight t
:config
@ -2315,6 +2336,10 @@ Returns (<buffer> . <workspace-index>) or nil."
(add-hook 'web-mode-hook 'smartparens-mode)
(add-hook 'web-mode-hook 'hs-minor-mode)
(my/set-smartparens-indent 'web-mode)
(with-eval-after-load 'editorconfig
(push
'standard-indent
(alist-get 'web-mode editorconfig-indentation-alist)))
(setq web-mode-auto-pairs nil))
(setq my/web-mode-lsp-extensions
@ -3432,7 +3457,7 @@ With ARG, repeats or can move backward if negative."
(mapcar (lambda (file)
(string-replace (concat org-directory "/") "" file)))
(append
'("inbox.org" "contacts.org")))))
'("inbox.org" "contacts.org" "recurring.org")))))
(find-file
(concat org-directory "/"
(completing-read "Org file: " files)))))
@ -3849,7 +3874,9 @@ With ARG, repeats or can move backward if negative."
(use-package org-attach-screenshot
:commands (org-attach-screenshot)
:straight t)
:straight t
:config
(setq org-attach-screenshot-auto-refresh 'never))
(use-package org-transclusion
:after org
@ -5894,6 +5921,24 @@ Happened to the world:
(start-process "dired-open" nil
"xdg-open" (file-truename file)))))
(defun my/dired-do-async-shell-command (command &optional arg file-list)
(interactive
(let ((files (dired-get-marked-files t current-prefix-arg nil nil t)))
(list
;; Want to give feedback whether this file or marked files are used:
(dired-read-shell-command "& on %s: " current-prefix-arg files)
current-prefix-arg
files)))
(start-process-shell-command
"*Dired Command*" nil
(dired-shell-stuff-it command file-list arg)))
(with-eval-after-load 'dired
(general-define-key
:states '(normal insert)
:keymaps '(dired-mode-map)
"&" #'my/dired-do-async-shell-command))
(defun my/dired-bookmark-open ()
(interactive)
(let ((bookmarks
@ -6006,7 +6051,7 @@ Happened to the world:
(user-error "No (non-directory) files selected"))
(with-current-buffer mastodon-buffer
(dolist (file files)
(mastodon-toot--attach-media
(mastodon-toot-attach-media
file
(read-from-minibuffer (format "Description for %s: " file))))))
@ -7477,15 +7522,15 @@ by the `my/elfeed-youtube-subtitles' function."
(general-define-key
:states '(normal motion)
:keymaps '(mastodon-mode-map)
"J" #'mastodon-tl--goto-next-item
"K" #'mastodon-tl--goto-prev-item
"M-j" #'mastodon-tl--next-tab-item
"M-k" #'mastodon-tl--prev-tab-item
"<tab>" #'mastodon-tl--next-tab-item
"<backtab>" #'mastodon-tl--previous-tab-item
"J" #'mastodon-tl-goto-next-item
"K" #'mastodon-tl-goto-prev-item
"M-j" #'mastodon-tl-next-tab-item
"M-k" #'mastodon-tl-prev-tab-item
"<tab>" #'mastodon-tl-next-tab-item
"<backtab>" #'mastodon-tl-previous-tab-item
"o" #'my/mastodon-toot
"r" 'mastodon-tl--update
"c" #'mastodon-tl--toggle-spoiler-text-in-toot
"r" 'mastodon-tl-update
"c" #'mastodon-tl-toggle-spoiler-text-in-toot
"q" #'kill-current-buffer))
(defvar my/mastodon-mode-string "")
@ -7621,11 +7666,11 @@ by the `my/elfeed-youtube-subtitles' function."
(my/mastodon-tl--get-home
(seq-contains-p args "--hide-replies")
(seq-contains-p args "--hide-boosts"))))
("l" "Local" mastodon-tl--get-local-timeline)
("f" "Federated" mastodon-tl--get-federated-timeline)
("g" "One tag" mastodon-tl--get-tag-timeline)
("a" "Followed tags" mastodon-tl--followed-tags-timeline)
("s" "Some followed tags" mastodon-tl--some-followed-tags-timeline)]
("l" "Local" mastodon-tl-get-local-timeline)
("f" "Federated" mastodon-tl-get-federated-timeline)
("g" "One tag" mastodon-tl-get-tag-timeline)
("a" "Followed tags" mastodon-tl-followed-tags-timeline)
("s" "Some followed tags" mastodon-tl-some-followed-tags-timeline)]
["Misc"
:class transient-row
("q" "Quit" transient-quit-one)]))
@ -7639,26 +7684,26 @@ by the `my/elfeed-youtube-subtitles' function."
("m" "Mastodon" mastodon)
("t" "Timelines" my/mastodon-tl)
("n" "Notifications" mastodon-notifications-get)
("s" "Search query" mastodon-search--query)]
("s" "Search query" mastodon-search-query)]
["Tags"
:class transient-row
("aa" "Followed tags" mastodon-tl--list-followed-tags)
("af" "Follow tag" mastodon-tl--follow-tag)
("aF" "Unfollow tag" mastodon-tl--unfollow-tag)]
("aa" "Followed tags" mastodon-tl-list-followed-tags)
("af" "Follow tag" mastodon-tl-follow-tag)
("aF" "Unfollow tag" mastodon-tl-unfollow-tag)]
["Own profile"
:class transient-row
("c" "Toot" mastodon-toot)
("o" "My profile" mastodon-profile--my-profile)
("u" "Update profile note" mastodon-profile--update-user-profile-note)
("f" "Favourites" mastodon-profile--view-favourites)
("b" "Bookmarks" mastodon-profile--view-bookmarks)]
("o" "My profile" mastodon-profile-my-profile)
("u" "Update profile note" mastodon-profile-update-user-profile-note)
("f" "Favourites" mastodon-profile-view-favourites)
("b" "Bookmarks" mastodon-profile-view-bookmarks)]
["Minor views"
:class transient-row
("F" "Follow requests" mastodon-views--view-follow-requests)
("S" "Scheduled toots" mastodon-views--view-scheduled-toots)
("I" "Filters" mastodon-views--view-filters)
("G" "Follow suggestions" mastodon-views--view-follow-suggestions)
("L" "Lists" mastodon-views--view-lists)]
("F" "Follow requests" mastodon-views-view-follow-requests)
("S" "Scheduled toots" mastodon-views-view-scheduled-toots)
("I" "Filters" mastodon-views-view-filters)
("G" "Follow suggestions" mastodon-views-view-follow-suggestions)
("L" "Lists" mastodon-views-view-lists)]
["Misc"
:class transient-row
("/" "Switch to buffer" mastodon-switch-to-buffer)
@ -7684,53 +7729,53 @@ base toot."
(browse-url url)))
(with-eval-after-load 'mastodon
(my/def-confirmer mastodon-toot--toggle-boost "Toggle boost for this post? ")
(my/def-confirmer mastodon-toot--toggle-favourite "Toggle favourite this post? ")
(my/def-confirmer mastodon-toot--toggle-bookmark "Toggle bookmark this post? ")
(my/def-confirmer mastodon-tl--follow-user "Follow this user? ")
(my/def-confirmer mastodon-tl--unfollow-user "Unfollow this user? ")
(my/def-confirmer mastodon-tl--block-user "Block this user? ")
(my/def-confirmer mastodon-tl--unblock-user "Unblock this user? ")
(my/def-confirmer mastodon-tl--mute-user "Mute this user? ")
(my/def-confirmer mastodon-tl--unmute-user "Unmute this user? ")
(my/def-confirmer mastodon-tl--unmute-user "Unmute this user? ")
(my/def-confirmer mastodon-toot-toggle-boost "Toggle boost for this post? ")
(my/def-confirmer mastodon-toot-toggle-favourite "Toggle favourite this post? ")
(my/def-confirmer mastodon-toot-toggle-bookmark "Toggle bookmark this post? ")
(my/def-confirmer mastodon-tl-follow-user "Follow this user? ")
(my/def-confirmer mastodon-tl-unfollow-user "Unfollow this user? ")
(my/def-confirmer mastodon-tl-block-user "Block this user? ")
(my/def-confirmer mastodon-tl-unblock-user "Unblock this user? ")
(my/def-confirmer mastodon-tl-mute-user "Mute this user? ")
(my/def-confirmer mastodon-tl-unmute-user "Unmute this user? ")
(my/def-confirmer mastodon-tl-unmute-user "Unmute this user? ")
(transient-define-prefix my/mastodon-toot ()
"Mastodon toot actions."
["View"
:class transient-row
("o" "Thread" mastodon-tl--thread)
("o" "Thread" mastodon-tl-thread)
("w" "Browser" my/mastodon-toot--browse)
("le" "List edits" mastodon-toot--view-toot-edits)
("lf" "List favouriters" mastodon-toot--list-favouriters)
("lb" "List boosters" mastodon-toot--list-boosters)]
("le" "List edits" mastodon-toot-view-toot-edits)
("lf" "List favouriters" mastodon-toot-list-favouriters)
("lb" "List boosters" mastodon-toot-list-boosters)]
["Toot Actions"
:class transient-row
("r" "Reply" mastodon-toot--reply)
("v" "Vote" mastodon-tl--poll-vote)
("r" "Reply" mastodon-toot-reply)
("v" "Vote" mastodon-tl-poll-vote)
("b" "Boost" my/mastodon-toot--toggle-boost-confirm)
("f" "Favourite" my/mastodon-toot--toggle-favourite-confirm)
("k" "Bookmark" my/mastodon-toot--toggle-bookmark-confirm)]
["My Toot Actions"
:class transient-row
("md" "Delete" mastodon-toot--delete-toot)
("mD" "Delete and redraft" mastodon-toot--delete-and-redraft-toot)
("mp" "Pin" mastodon-toot--pin-toot-toggle)
("me" "Edit" mastodon-toot--edit-toot-at-point)]
("md" "Delete" mastodon-toot-delete-toot)
("mD" "Delete and redraft" mastodon-toot-delete-and-redraft-toot)
("mp" "Pin" mastodon-toot-pin-toot-toggle)
("me" "Edit" mastodon-toot-edit-toot-at-point)]
["Profile Actions"
:class transient-row
("pp" "Profile" mastodon-profile--show-user)
("pf" "List followers" mastodon-profile--open-followers)
("pF" "List following" mastodon-profile--open-following)
("ps" "List statues (no reblogs)" mastodon-profile--open-statuses-no-reblogs)]
("pp" "Profile" mastodon-profile-show-user)
("pf" "List followers" mastodon-profile-open-followers)
("pF" "List following" mastodon-profile-open-following)
("ps" "List statues (no reblogs)" mastodon-profile-open-statuses-no-reblogs)]
["User Actions"
:class transient-row
("uf" "Follow user" my/mastodon-tl--follow-user-confirm)
("uF" "Unfollow user" my/mastodon-tl--unfollow-user-confirm)
("ub" "Block user" my/mastodon-tl--block-user-confirm)
("uB" "Unblock user" my/mastodon-tl--unblock-user-confirm)
("um" "Mute user" my/mastodon-tl--mute-user-confirm)
("uB" "Unmute user" my/mastodon-tl--unmute-user-confirm)]
("uf" "Follow user" my/mastodon-tl-follow-user-confirm)
("uF" "Unfollow user" my/mastodon-tl-unfollow-user-confirm)
("ub" "Block user" my/mastodon-tl-block-user-confirm)
("uB" "Unblock user" my/mastodon-tl-unblock-user-confirm)
("um" "Mute user" my/mastodon-tl-mute-user-confirm)
("uB" "Unmute user" my/mastodon-tl-unmute-user-confirm)]
["Misc"
:class transient-row
("q" "Quit" transient-quit-one)]))
@ -7916,7 +7961,8 @@ base toot."
(telega-button-active :foreground (my/color-value 'base0)
:background (my/color-value 'cyan))
(telega-webpage-chat-link :foreground (my/color-value 'base0)
:background (my/color-value 'fg)))
:background (my/color-value 'fg))
(telega-entity-type-spoiler :background (my/color-value 'base8)))
:config
(when (file-exists-p "~/.guix-extra-profiles/emacs/emacs/bin/telega-server")
(setq telega-server-command
@ -7925,6 +7971,7 @@ base toot."
(setq telega-emoji-use-images nil)
(setq telega-chat-fill-column 80)
(setq telega-completing-read-function #'completing-read)
(setq telega-sticker-size '(12 . 24))
(add-to-list 'savehist-additional-variables 'telega-msg-add-reaction)
(remove-hook 'telega-chat-mode-hook #'telega-chat-auto-fill-mode)
(general-define-key
@ -8211,8 +8258,8 @@ base toot."
"qwen2.5:32b" "qwen2.5-coder:32b"
"eva-qwen2.5-q4_k_l-32b:latest"
"t-pro-1.0-q4_k_m:latest"
"t-lite-it-1.0-q4_k_m:latest"
(llava-phi3:latest
"qwq:32b"
(gemma3:32b
:capabilities (media)
:mime-types ("image/jpeg" "image/png")))))
(gptel-make-openai "OpenRouter"

182
Emacs.org
View file

@ -2720,6 +2720,33 @@ I don't like how some language servers print the full filename in the progress i
(with-eval-after-load 'lsp-mode
(advice-add 'lsp--progress-status :override #'my/lsp--progress-status))
#+end_src
**** Fix vue-semantic-server
Somehow, for me [[https://github.com/vuejs/language-tools][vue-semantic-server]] sends an empty =textDocument/publishDiagnostics= message a second or two after the real one, causing the diagnostics to disappear.
For now, I've advised this away by ignoring empty messages unless they show up more than 5 seconds after a non-empty message.
#+begin_src emacs-lisp
(setq my/lsp--vue-diagnostics-last-update (make-hash-table :test #'equal))
(defun my/lsp--on-diagnostics (fn workspace params)
(if (equal (gethash 'vue-semantic-server lsp-clients)
(lsp--workspace-client workspace))
(progn
(let* ((is-empty (seq-empty-p (gethash "diagnostics" params)))
(uri (gethash "uri" params))
(last-update (gethash uri my/lsp--vue-diagnostics-last-update))
(current-update (time-convert nil #'integer)))
(unless is-empty
(puthash uri current-update my/lsp--vue-diagnostics-last-update))
(when (or (not is-empty)
(not last-update)
(> (- current-update (or last-update 0)) 5))
(funcall fn workspace params))))
(funcall fn workspace params)))
(with-eval-after-load 'lsp
(advice-add #'lsp--on-diagnostics :around #'my/lsp--on-diagnostics))
#+end_src
*** Flycheck
A syntax checking extension for Emacs. Integrates with LSP-mode, but can also use various standalone checkers.
@ -3254,7 +3281,7 @@ A general-purpose package to run formatters on files. While the most popular for
** Web development
Configs for various web development technologies I'm using.
*** Emmet
[[https://emmet.io/][Emmet]] is a toolkit which greatly speeds up typing HTML & CSS.
[[Https://emmet.io/][Emmet]] is a toolkit which greatly speeds up typing HTML & CSS.
| Type | Note |
|------+---------------------------------------------------|
@ -3395,6 +3422,10 @@ Set =web-mode-auto-pairs= not =nil= because smartparens already fulfills that ro
(add-hook 'web-mode-hook 'smartparens-mode)
(add-hook 'web-mode-hook 'hs-minor-mode)
(my/set-smartparens-indent 'web-mode)
(with-eval-after-load 'editorconfig
(push
'standard-indent
(alist-get 'web-mode editorconfig-indentation-alist)))
(setq web-mode-auto-pairs nil))
#+end_src
@ -4752,7 +4783,7 @@ A function to open a file from =org-directory=, excluding a few directories like
(mapcar (lambda (file)
(string-replace (concat org-directory "/") "" file)))
(append
'("inbox.org" "contacts.org")))))
'("inbox.org" "contacts.org" "recurring.org")))))
(find-file
(concat org-directory "/"
(completing-read "Org file: " files)))))
@ -5356,7 +5387,9 @@ A nice package to make screenshots and insert them to the Org document.
#+begin_src emacs-lisp
(use-package org-attach-screenshot
:commands (org-attach-screenshot)
:straight t)
:straight t
:config
(setq org-attach-screenshot-auto-refresh 'never))
#+end_src
*** Transclusion
A package that implements transclusions in Org Mode, i.e. rendering part of one file inside another file.
@ -8122,6 +8155,28 @@ Open a file with =xdg-open=. I used =dired-open= for this before, but I've had t
"xdg-open" (file-truename file)))))
#+end_src
Run a command on the marked files. Unlike =dired-do-async-shell-command=, this uses =start-process= instead of =shell-command=, which prevents the output buffer from popping up.
#+begin_src emacs-lisp
(defun my/dired-do-async-shell-command (command &optional arg file-list)
(interactive
(let ((files (dired-get-marked-files t current-prefix-arg nil nil t)))
(list
;; Want to give feedback whether this file or marked files are used:
(dired-read-shell-command "& on %s: " current-prefix-arg files)
current-prefix-arg
files)))
(start-process-shell-command
"*Dired Command*" nil
(dired-shell-stuff-it command file-list arg)))
(with-eval-after-load 'dired
(general-define-key
:states '(normal insert)
:keymaps '(dired-mode-map)
"&" #'my/dired-do-async-shell-command))
#+end_src
*** Bookmarks
A simple bookmark list for Dired, mainly to use with TRAMP. I may look into a proper bookmarking system later.
@ -8269,7 +8324,7 @@ Attach files to mastodon.
(user-error "No (non-directory) files selected"))
(with-current-buffer mastodon-buffer
(dolist (file files)
(mastodon-toot--attach-media
(mastodon-toot-attach-media
file
(read-from-minibuffer (format "Description for %s: " file))))))
#+end_src
@ -10328,15 +10383,15 @@ The package also doesn't have evil bindings. I implement a few basic bindings he
(general-define-key
:states '(normal motion)
:keymaps '(mastodon-mode-map)
"J" #'mastodon-tl--goto-next-item
"K" #'mastodon-tl--goto-prev-item
"M-j" #'mastodon-tl--next-tab-item
"M-k" #'mastodon-tl--prev-tab-item
"<tab>" #'mastodon-tl--next-tab-item
"<backtab>" #'mastodon-tl--previous-tab-item
"J" #'mastodon-tl-goto-next-item
"K" #'mastodon-tl-goto-prev-item
"M-j" #'mastodon-tl-next-tab-item
"M-k" #'mastodon-tl-prev-tab-item
"<tab>" #'mastodon-tl-next-tab-item
"<backtab>" #'mastodon-tl-previous-tab-item
"o" #'my/mastodon-toot
"r" 'mastodon-tl--update
"c" #'mastodon-tl--toggle-spoiler-text-in-toot
"r" 'mastodon-tl-update
"c" #'mastodon-tl-toggle-spoiler-text-in-toot
"q" #'kill-current-buffer))
#+end_src
**** Modeline segment
@ -10489,11 +10544,11 @@ And a transient to use it.
(my/mastodon-tl--get-home
(seq-contains-p args "--hide-replies")
(seq-contains-p args "--hide-boosts"))))
("l" "Local" mastodon-tl--get-local-timeline)
("f" "Federated" mastodon-tl--get-federated-timeline)
("g" "One tag" mastodon-tl--get-tag-timeline)
("a" "Followed tags" mastodon-tl--followed-tags-timeline)
("s" "Some followed tags" mastodon-tl--some-followed-tags-timeline)]
("l" "Local" mastodon-tl-get-local-timeline)
("f" "Federated" mastodon-tl-get-federated-timeline)
("g" "One tag" mastodon-tl-get-tag-timeline)
("a" "Followed tags" mastodon-tl-followed-tags-timeline)
("s" "Some followed tags" mastodon-tl-some-followed-tags-timeline)]
["Misc"
:class transient-row
("q" "Quit" transient-quit-one)]))
@ -10513,26 +10568,26 @@ The first dispatches "general" actions:
("m" "Mastodon" mastodon)
("t" "Timelines" my/mastodon-tl)
("n" "Notifications" mastodon-notifications-get)
("s" "Search query" mastodon-search--query)]
("s" "Search query" mastodon-search-query)]
["Tags"
:class transient-row
("aa" "Followed tags" mastodon-tl--list-followed-tags)
("af" "Follow tag" mastodon-tl--follow-tag)
("aF" "Unfollow tag" mastodon-tl--unfollow-tag)]
("aa" "Followed tags" mastodon-tl-list-followed-tags)
("af" "Follow tag" mastodon-tl-follow-tag)
("aF" "Unfollow tag" mastodon-tl-unfollow-tag)]
["Own profile"
:class transient-row
("c" "Toot" mastodon-toot)
("o" "My profile" mastodon-profile--my-profile)
("u" "Update profile note" mastodon-profile--update-user-profile-note)
("f" "Favourites" mastodon-profile--view-favourites)
("b" "Bookmarks" mastodon-profile--view-bookmarks)]
("o" "My profile" mastodon-profile-my-profile)
("u" "Update profile note" mastodon-profile-update-user-profile-note)
("f" "Favourites" mastodon-profile-view-favourites)
("b" "Bookmarks" mastodon-profile-view-bookmarks)]
["Minor views"
:class transient-row
("F" "Follow requests" mastodon-views--view-follow-requests)
("S" "Scheduled toots" mastodon-views--view-scheduled-toots)
("I" "Filters" mastodon-views--view-filters)
("G" "Follow suggestions" mastodon-views--view-follow-suggestions)
("L" "Lists" mastodon-views--view-lists)]
("F" "Follow requests" mastodon-views-view-follow-requests)
("S" "Scheduled toots" mastodon-views-view-scheduled-toots)
("I" "Filters" mastodon-views-view-filters)
("G" "Follow suggestions" mastodon-views-view-follow-suggestions)
("L" "Lists" mastodon-views-view-lists)]
["Misc"
:class transient-row
("/" "Switch to buffer" mastodon-switch-to-buffer)
@ -10569,53 +10624,53 @@ base toot."
And the prefix itself:
#+begin_src emacs-lisp
(with-eval-after-load 'mastodon
(my/def-confirmer mastodon-toot--toggle-boost "Toggle boost for this post? ")
(my/def-confirmer mastodon-toot--toggle-favourite "Toggle favourite this post? ")
(my/def-confirmer mastodon-toot--toggle-bookmark "Toggle bookmark this post? ")
(my/def-confirmer mastodon-tl--follow-user "Follow this user? ")
(my/def-confirmer mastodon-tl--unfollow-user "Unfollow this user? ")
(my/def-confirmer mastodon-tl--block-user "Block this user? ")
(my/def-confirmer mastodon-tl--unblock-user "Unblock this user? ")
(my/def-confirmer mastodon-tl--mute-user "Mute this user? ")
(my/def-confirmer mastodon-tl--unmute-user "Unmute this user? ")
(my/def-confirmer mastodon-tl--unmute-user "Unmute this user? ")
(my/def-confirmer mastodon-toot-toggle-boost "Toggle boost for this post? ")
(my/def-confirmer mastodon-toot-toggle-favourite "Toggle favourite this post? ")
(my/def-confirmer mastodon-toot-toggle-bookmark "Toggle bookmark this post? ")
(my/def-confirmer mastodon-tl-follow-user "Follow this user? ")
(my/def-confirmer mastodon-tl-unfollow-user "Unfollow this user? ")
(my/def-confirmer mastodon-tl-block-user "Block this user? ")
(my/def-confirmer mastodon-tl-unblock-user "Unblock this user? ")
(my/def-confirmer mastodon-tl-mute-user "Mute this user? ")
(my/def-confirmer mastodon-tl-unmute-user "Unmute this user? ")
(my/def-confirmer mastodon-tl-unmute-user "Unmute this user? ")
(transient-define-prefix my/mastodon-toot ()
"Mastodon toot actions."
["View"
:class transient-row
("o" "Thread" mastodon-tl--thread)
("o" "Thread" mastodon-tl-thread)
("w" "Browser" my/mastodon-toot--browse)
("le" "List edits" mastodon-toot--view-toot-edits)
("lf" "List favouriters" mastodon-toot--list-favouriters)
("lb" "List boosters" mastodon-toot--list-boosters)]
("le" "List edits" mastodon-toot-view-toot-edits)
("lf" "List favouriters" mastodon-toot-list-favouriters)
("lb" "List boosters" mastodon-toot-list-boosters)]
["Toot Actions"
:class transient-row
("r" "Reply" mastodon-toot--reply)
("v" "Vote" mastodon-tl--poll-vote)
("r" "Reply" mastodon-toot-reply)
("v" "Vote" mastodon-tl-poll-vote)
("b" "Boost" my/mastodon-toot--toggle-boost-confirm)
("f" "Favourite" my/mastodon-toot--toggle-favourite-confirm)
("k" "Bookmark" my/mastodon-toot--toggle-bookmark-confirm)]
["My Toot Actions"
:class transient-row
("md" "Delete" mastodon-toot--delete-toot)
("mD" "Delete and redraft" mastodon-toot--delete-and-redraft-toot)
("mp" "Pin" mastodon-toot--pin-toot-toggle)
("me" "Edit" mastodon-toot--edit-toot-at-point)]
("md" "Delete" mastodon-toot-delete-toot)
("mD" "Delete and redraft" mastodon-toot-delete-and-redraft-toot)
("mp" "Pin" mastodon-toot-pin-toot-toggle)
("me" "Edit" mastodon-toot-edit-toot-at-point)]
["Profile Actions"
:class transient-row
("pp" "Profile" mastodon-profile--show-user)
("pf" "List followers" mastodon-profile--open-followers)
("pF" "List following" mastodon-profile--open-following)
("ps" "List statues (no reblogs)" mastodon-profile--open-statuses-no-reblogs)]
("pp" "Profile" mastodon-profile-show-user)
("pf" "List followers" mastodon-profile-open-followers)
("pF" "List following" mastodon-profile-open-following)
("ps" "List statues (no reblogs)" mastodon-profile-open-statuses-no-reblogs)]
["User Actions"
:class transient-row
("uf" "Follow user" my/mastodon-tl--follow-user-confirm)
("uF" "Unfollow user" my/mastodon-tl--unfollow-user-confirm)
("ub" "Block user" my/mastodon-tl--block-user-confirm)
("uB" "Unblock user" my/mastodon-tl--unblock-user-confirm)
("um" "Mute user" my/mastodon-tl--mute-user-confirm)
("uB" "Unmute user" my/mastodon-tl--unmute-user-confirm)]
("uf" "Follow user" my/mastodon-tl-follow-user-confirm)
("uF" "Unfollow user" my/mastodon-tl-unfollow-user-confirm)
("ub" "Block user" my/mastodon-tl-block-user-confirm)
("uB" "Unblock user" my/mastodon-tl-unblock-user-confirm)
("um" "Mute user" my/mastodon-tl-mute-user-confirm)
("uB" "Unmute user" my/mastodon-tl-unmute-user-confirm)]
["Misc"
:class transient-row
("q" "Quit" transient-quit-one)]))
@ -10848,7 +10903,8 @@ Or you can load up Element for a moment to see what the mention was, if that's e
(telega-button-active :foreground (my/color-value 'base0)
:background (my/color-value 'cyan))
(telega-webpage-chat-link :foreground (my/color-value 'base0)
:background (my/color-value 'fg)))
:background (my/color-value 'fg))
(telega-entity-type-spoiler :background (my/color-value 'base8)))
:config
(when (file-exists-p "~/.guix-extra-profiles/emacs/emacs/bin/telega-server")
(setq telega-server-command
@ -11203,8 +11259,8 @@ I don't have access to any proprietary APIs, but LLaMA 3.1 8b with [[https://oll
"qwen2.5:32b" "qwen2.5-coder:32b"
"eva-qwen2.5-q4_k_l-32b:latest"
"t-pro-1.0-q4_k_m:latest"
"t-lite-it-1.0-q4_k_m:latest"
(llava-phi3:latest
"qwq:32b"
(gemma3:32b
:capabilities (media)
:mime-types ("image/jpeg" "image/png")))))
(gptel-make-openai "OpenRouter"