Update mu4e stuff

This commit is contained in:
2026-06-04 21:23:23 -07:00
parent 527c24e6cb
commit 5eaf81d9fe
2 changed files with 132 additions and 32 deletions
+103
View File
@@ -36,6 +36,10 @@ does.")
(symbol-function 'mu4e-compose-mode) (symbol-function 'mu4e-compose-mode)
"The `message-mode' (or derived mode) used by `org-mu4e-compose-mode'.") "The `message-mode' (or derived mode) used by `org-mu4e-compose-mode'.")
(defvar org-mu4e--old-mail-user-agent nil
"Previous value of `mail-user-agent'.
Set by `org-mu4e-mode'.")
(defvar-local org-mu4e--preview-message-buffer nil (defvar-local org-mu4e--preview-message-buffer nil
"The message buffer that backs this preview buffer.") "The message buffer that backs this preview buffer.")
@@ -432,6 +436,12 @@ WIDE is the same as `mu4e-compose-reply'."
(interactive "P") (interactive "P")
(org-mu4e-compose-reply-to nil wide)) (org-mu4e-compose-reply-to nil wide))
;;;###autoload
(defun org-mu4e-compose-wide-reply ()
"`org-mu4e-compose-mode' version of `mu4e-compose-wide-reply'."
(interactive)
(org-mu4e-compose-reply-to nil t))
;;;###autoload ;;;###autoload
(defun org-mu4e-compose-edit () (defun org-mu4e-compose-edit ()
"This is like `mu4e-compose-edit', but utilizes `org-mu4e-compose-mode'." "This is like `mu4e-compose-edit', but utilizes `org-mu4e-compose-mode'."
@@ -439,6 +449,13 @@ WIDE is the same as `mu4e-compose-reply'."
(org-mu4e--with-replaced-compse-func (org-mu4e--with-replaced-compse-func
(mu4e-compose-edit))) (mu4e-compose-edit)))
;;;###autoload
(defun org-mu4e-compose-forward ()
"`org-mu4e-compose-mode' version of `mu4e-compose-forward'."
(interactive)
(org-mu4e--with-replaced-compse-func
(mu4e-compose-forward)))
;;;###autoload ;;;###autoload
(defvar-keymap org-mu4e-compose-mode-map (defvar-keymap org-mu4e-compose-mode-map
:parent org-mode-map :parent org-mode-map
@@ -558,5 +575,91 @@ This is derived from `org-mode', but it also essentially runs
"Return `org-mu4e-user-agent'." "Return `org-mu4e-user-agent'."
'org-mu4e-user-agent) 'org-mu4e-user-agent)
;; ########################
;; # Global override mode #
;; ########################
(defun org-mu4e--make-override-keymap (parent)
"Create and return new override keymap for PARENT.
An override keymap is the same as PARENT except that it remaps certain mu4e
functions to their org-mu4e equivalents."
(let ((map (make-sparse-keymap)))
(set-keymap-parent map parent)
(define-key map [remap mu4e-compose-new] #'org-mu4e-compose-new)
(define-key map [remap mu4e-compose-forward] #'org-mu4e-compose-forward)
(define-key map [remap mu4e-compose-reply] #'org-mu4e-compose-reply)
(define-key map [remap mu4e-compose-reply-to] #'org-mu4e-compose-reply-to)
(define-key map [remap mu4e-compose-wide-reply]
#'org-mu4e-compose-wide-reply)
(define-key map [remap mu4e-compose-edit] #'org-mu4e-compose-edit)
map))
(define-minor-mode org-mu4e--main-override-mode
"Minor mode to replace key bindings in `mu4e-headers-mode'."
:interactive nil
:keymap (org-mu4e--make-override-keymap mu4e-main-mode-map))
(define-minor-mode org-mu4e--headers-override-mode
"Minor mode to replace key bindings in `mu4e-headers-mode'."
:interactive nil
:keymap (org-mu4e--make-override-keymap mu4e-headers-mode-map))
(define-minor-mode org-mu4e--view-override-mode
"Minor mode to replace key bindings in `mu4e-headers-mode'."
:interactive nil
:keymap (org-mu4e--make-override-keymap mu4e-view-mode-map))
(defun org-mu4e--enable-override-mode ()
"Enable `org-mu4e-override-mode'."
(setq org-mu4e--old-mail-user-agent mail-user-agent)
(setopt mail-user-agent 'org-mu4e-user-agent)
(add-hook 'mu4e-main-mode-hook #'org-mu4e--main-override-mode)
(add-hook 'mu4e-headers-mode-hook #'org-mu4e--headers-override-mode)
(add-hook 'mu4e-view-mode-hook #'org-mu4e--view-override-mode)
(dolist (buffer (buffer-list))
(with-current-buffer buffer
(cond
((derived-mode-p 'mu4e-main-mode)
(org-mu4e--main-override-mode))
((derived-mode-p 'mu4e-headers-mode)
(org-mu4e--headers-override-mode))
((derived-mode-p 'mu4e-view-mode)
(org-mu4e--view-override-mode))))))
(defun org-mu4e--disable-override-mode ()
"Disable `org-mu4e-override-mode'."
(setopt mail-user-agent org-mu4e--old-mail-user-agent)
(remove-hook 'mu4e-main-mode-hook #'org-mu4e--main-override-mode)
(remove-hook 'mu4e-headers-mode-hook #'org-mu4e--headers-override-mode)
(remove-hook 'mu4e-view-mode-hoook #'org-mu4e--view-override-mode)
(dolist (buffer (buffer-list))
(with-current-buffer buffer
(org-mu4e--main-override-mode -1)
(org-mu4e--headers-override-mode -1)
(org-mu4e--view-override-mode -1))))
;;;###autoload
(define-minor-mode org-mu4e-override-mode
"Minor mode to replace all mu4e commands with their org-mu4e variant.
This also sets `mail-user-agent'."
:global t
:group 'org-mu4e
(if org-mu4e-override-mode
(org-mu4e--enable-override-mode)
(org-mu4e--disable-override-mode)))
;;;###autoload
(defun org-mu4e-install-evil-bindings ()
"Convenience function to install useful evil keybindings for org-mu4e.
Note that this mutates some org-mu4e keymaps (but not any mu4e keymaps)."
(require 'evil)
(evil-define-key '(normal visual) org-mu4e-compose-mode-map
"G" #'mu4e-compose-goto-bottom
"gg" #'mu4e-compose-goto-top)
(evil-define-key 'normal org-mu4e-compose-mode-map
"ZZ" #'message-send-and-exit
"ZD" #'message-dont-send
"ZQ" #'message-kill-buffer
"ZF" #'mml-attach-file))
(provide 'org-mu4e-compose) (provide 'org-mu4e-compose)
;;; org-mu4e-compose.el ends here ;;; org-mu4e-compose.el ends here
+29 -32
View File
@@ -3414,38 +3414,35 @@ This is the same as `evil-ret' except that it works for links in
;; mu4e compose HTML messages ;; mu4e compose HTML messages
(use-package org-mime) (use-package org-mime)
(require 'org-mu4e-compose) (require 'org-mu4e-compose)
(setq mail-user-agent 'org-mu4e-user-agent (with-eval-after-load 'org-mu4e-compose
org-mime-org-html-with-latex-default 'dvisvgm (org-mu4e-override-mode))
org-mime-export-options '(:with-latex dvisvgm :with-footnotes t)) (setq ;; mail-user-agent 'org-mu4e-user-agent
(evil-define-key '(normal visual) org-mu4e-compose-mode-map org-mime-org-html-with-latex-default 'dvisvgm
"G" #'mu4e-compose-goto-bottom org-mime-export-options '(:with-latex dvisvgm :with-footnotes t))
"gg" #'mu4e-compose-goto-top) ;; (evil-define-key '(normal visual) org-mu4e-compose-mode-map
(evil-define-key 'normal org-mu4e-compose-mode-map ;; "G" #'mu4e-compose-goto-bottom
"ZZ" #'message-send-and-exit ;; "gg" #'mu4e-compose-goto-top)
"ZD" #'message-dont-send ;; (evil-define-key 'normal org-mu4e-compose-mode-map
"ZQ" #'message-kill-buffer ;; "ZZ" #'message-send-and-exit
"ZF" #'mml-attach-file) ;; "ZD" #'message-dont-send
(evil-define-key 'normal mu4e-view-mode-map ;; "ZQ" #'message-kill-buffer
"R" #'org-mu4e-compose-reply ;; "ZF" #'mml-attach-file)
"cr" #'org-mu4e-compose-reply ;; (evil-define-key 'normal mu4e-view-mode-map
"ce" #'org-mu4e-compose-edit ;; "R" #'org-mu4e-compose-reply
"C" #'org-mu4e-compose-new) ;; "cr" #'org-mu4e-compose-reply
(evil-define-key 'normal mu4e-headers-mode-map ;; "ce" #'org-mu4e-compose-edit
"R" #'org-mu4e-compose-reply ;; "C" #'org-mu4e-compose-new
"cr" #'org-mu4e-compose-reply ;; "cc" #'org-mu4e-compose-new
"E" #'org-mu4e-compose-edit ;; "cw" #'org-mu4e-compose-wide-reply)
"ce" #'org-mu4e-compose-edit ;; (evil-define-key 'normal mu4e-headers-mode-map
"C" #'org-mu4e-compose-new) ;; "R" #'org-mu4e-compose-reply
(evil-define-key 'normal mu4e-main-mode-map ;; "cr" #'org-mu4e-compose-reply
"C" #'compose-mail ;; "E" #'org-mu4e-compose-edit
"cc" #'compose-mail) ;; "ce" #'org-mu4e-compose-edit
(defun my/-setup-org-mu4e-compose-mode () ;; "C" #'org-mu4e-compose-new)
"Setup up stuff in `org-mu4e-compose' buffers." ;; (evil-define-key 'normal mu4e-main-mode-map
(setq-local ltex-eglot-variable-save-method 'file) ;; "C" #'compose-mail
;; this should come last so it can pick up the above ;; "cc" #'compose-mail)
;; (my/eglot-if-trusted)
)
(add-hook 'org-mu4e-compose-mode-hook #'my/-setup-org-mu4e-compose-mode)
(setopt mu4e-compose-switch 'display-buffer) (setopt mu4e-compose-switch 'display-buffer)
(defun my/-match-mu4e-message-buffer (buffer _action) (defun my/-match-mu4e-message-buffer (buffer _action)
"Matcher for mu4e message buffers for `display-buffer-alist'. "Matcher for mu4e message buffers for `display-buffer-alist'.