mu4e-transient: update

Still experimental, but a few improvements.
This commit is contained in:
Dirk-Jan C. Binnema
2025-01-23 21:36:02 +02:00
parent 8e33657cc7
commit 82fd77c3ed

View File

@ -4,17 +4,52 @@
;;; Commentary:
;;;
;;; Define "transients" for some mu4e menus.
;;; Define "transients" for some mu4e functionality.
;;; Code:
(require 'mu4e)
(require 'mu4e-bookmarks)
(require 'mu4e-compose)
(require 'mu4e-draft)
(require 'mu4e-headers)
(require 'mu4e-helpers)
(require 'transient)
(transient-define-prefix mu4e-transient-menu-docs-links()
;; Helpers.
(defun mu4e--toggle-description(name val)
"Return a string for a transient toggle with NAME.
Show On/Off based on value VAL."
(concat name " "
(propertize (if val "On " "Off")
'face 'transient-value)))
(defmacro mu4e--define-toggle-suffix (name symbol &optional toggle-func)
"Define a transient suffix to toggle some value.
Show the suffix with NAME. SYMBOL is the symbol for the value to
toggle.
TOGGLE-FUNC is the function to do the toggling. If nil, a simple
toggle-function is created."
(let* ((symname (symbol-name symbol))
(ifname (intern (format "mu4e--suffix-toggle-%s" symname)))
(docstring (format "Toggle the value of `%s'" symname))
(toggle-func (or toggle-func
`(lambda ()
(interactive)
(setq ,symbol (not ,symbol))))))
`(progn
(transient-define-suffix ,ifname () ,docstring
:transient t
:if (lambda () (boundp (quote ,symbol)))
:description (lambda () (mu4e--toggle-description ,name ,symbol))
(interactive)
(call-interactively ,toggle-func)))))
;; Transients
(transient-define-prefix mu4e--prefix-docs-links()
"Mu4e documentation menu."
[["Documentation"
("A" "About mu4e" mu4e-about)
@ -33,13 +68,58 @@
("o" "Mu Issues" (lambda () (interactive)
(browse-url "https://github.com/djcb/mu/issues")))]])
(transient-define-prefix mu4e-transient-menu-debug()
"Mu4e debugging menu."
[["Debugging"
("$" "Toggle logging" mu4e-toggle-logging)
(mu4e--define-toggle-suffix "Debug client" mu4e-debug #'mu4e-toggle-logging)
(mu4e--define-toggle-suffix "Debug server" mu4e-mu-debug)
(mu4e--define-toggle-suffix "Report render-time" mu4e-headers-report-render-time)
(mu4e--define-toggle-suffix "Temp-file optimization" mu4e-mu-allow-temp-file)
(transient-define-prefix mu4e--prefix-debug-tweaks()
"Mu4e debugging and tweaks menu."
[["Debug"
("$" mu4e--suffix-toggle-mu4e-debug)
("r" mu4e--suffix-toggle-mu4e-headers-report-render-time)
("L" "Toggle logging" mu4e-toggle-logging)
("l" "Log buffer" mu4e-show-log)]
["Info"
("," "Message sexp" mu4e-sexp-at-point
:inapt-if-not (lambda () (mu4e-message-at-point 'nowarn)))
("l" "Last query sexp" mu4e-analyze-last-query)]])
("a" "Analyze query" mu4e-analyze-last-query)
("c" "Known contacts" mu4e-contacts-info)]
["Server (needs restart)"
("d" mu4e--suffix-toggle-mu4e-mu-debug)
("t" mu4e--suffix-toggle-mu4e-mu-allow-temp-file)]])
(mu4e--define-toggle-suffix "format=flowed" mu4e-compose-format-flowed)
(mu4e--define-toggle-suffix "Forward as MIME" message-forward-as-mime)
;; (transient-define-suffix mu4e--suffix-message-forward-show-mml (args)
;; "Show MML when forwarding?
;; See `message-forward-show-mml' for details."
;; :transient t
;; :description (lambda ()
;; (let ((val (pcase message-forward-as-mime
;; ('nil "Off")
;; ('best "Best")
;; (_ "On")))))
;; (concat "Show MML "
;; (propertize val 'face 'transient-value)))
;; ;;:choices '("On" "Off" "Best")
;; )
;;(setq message-forward-as-mime 'best)
;;(mu4e--define-toggle-suffix "Show MML" message-forward-show-mml)
(transient-define-prefix mu4e--prefix-compose-options()
"Mu4e debugging menu."
[["Formatting"
("f" mu4e--suffix-toggle-mu4e-compose-format-flowed)]
["Forwarding"
("m" mu4e--suffix-toggle-message-forward-as-mime)
;; handle 'best'
;;("M" mu4e--suffix-toggle-message-forward-show-mml)
]])
(transient-define-prefix mu4e-transient-menu()
"Mu4e main menu."
@ -53,12 +133,16 @@
("b" "Bookmark" mu4e-search-bookmark)
("j" "Maildir" mu4e-search-maildir)
("c" "Choose query" mu4e-search-query)
("s" "Search" mu4e-search-query)]
("s" "Search" mu4e-search)]
["Composition"
("C" "New mail" mu4e-compose-new)]
("C" "New mail" mu4e-compose-new)
("o" "Options..." mu4e--prefix-compose-options)
]
["" ;; composition that requires an existing message
:if (lambda () (memq major-mode '(mu4e-headers-mode mu4e-view-mode)))
:inapt-if-not (lambda () (mu4e-message-at-point 'nowarn))
:if (lambda ()
(memq major-mode '(mu4e-headers-mode mu4e-view-mode)))
:inapt-if-not (lambda ()
(mu4e-message-at-point 'nowarn))
("R" "Reply" mu4e-compose-reply)
("W" "Reply-to-all" mu4e-compose-wide-reply)
("F" "Forward" mu4e-compose-forward)
@ -73,8 +157,8 @@
:inapt-if-not mu4e--message-is-yours-p)
("X" "Resend" mu4e-compose-resend)]
["Misc"
("d" "Docs & links" mu4e-transient-menu-docs-links)
("D" "Debugging" mu4e-transient-menu-debug)]])
("d" "Docs & links" mu4e--prefix-docs-links)
("D" "Debug/tweaks..." mu4e--prefix-debug-tweaks)]])
(provide 'mu4e-transient)
;;; mu4e-transient.el ends here