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)
"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
"The message buffer that backs this preview buffer.")
@@ -432,6 +436,12 @@ WIDE is the same as `mu4e-compose-reply'."
(interactive "P")
(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
(defun org-mu4e-compose-edit ()
"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
(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
(defvar-keymap org-mu4e-compose-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'."
'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)
;;; org-mu4e-compose.el ends here
+27 -30
View File
@@ -3414,38 +3414,35 @@ This is the same as `evil-ret' except that it works for links in
;; mu4e compose HTML messages
(use-package org-mime)
(require 'org-mu4e-compose)
(setq mail-user-agent 'org-mu4e-user-agent
(with-eval-after-load 'org-mu4e-compose
(org-mu4e-override-mode))
(setq ;; mail-user-agent 'org-mu4e-user-agent
org-mime-org-html-with-latex-default 'dvisvgm
org-mime-export-options '(:with-latex dvisvgm :with-footnotes t))
(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)
(evil-define-key 'normal mu4e-view-mode-map
"R" #'org-mu4e-compose-reply
"cr" #'org-mu4e-compose-reply
"ce" #'org-mu4e-compose-edit
"C" #'org-mu4e-compose-new)
(evil-define-key 'normal mu4e-headers-mode-map
"R" #'org-mu4e-compose-reply
"cr" #'org-mu4e-compose-reply
"E" #'org-mu4e-compose-edit
"ce" #'org-mu4e-compose-edit
"C" #'org-mu4e-compose-new)
(evil-define-key 'normal mu4e-main-mode-map
"C" #'compose-mail
"cc" #'compose-mail)
(defun my/-setup-org-mu4e-compose-mode ()
"Setup up stuff in `org-mu4e-compose' buffers."
(setq-local ltex-eglot-variable-save-method 'file)
;; this should come last so it can pick up the above
;; (my/eglot-if-trusted)
)
(add-hook 'org-mu4e-compose-mode-hook #'my/-setup-org-mu4e-compose-mode)
;; (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)
;; (evil-define-key 'normal mu4e-view-mode-map
;; "R" #'org-mu4e-compose-reply
;; "cr" #'org-mu4e-compose-reply
;; "ce" #'org-mu4e-compose-edit
;; "C" #'org-mu4e-compose-new
;; "cc" #'org-mu4e-compose-new
;; "cw" #'org-mu4e-compose-wide-reply)
;; (evil-define-key 'normal mu4e-headers-mode-map
;; "R" #'org-mu4e-compose-reply
;; "cr" #'org-mu4e-compose-reply
;; "E" #'org-mu4e-compose-edit
;; "ce" #'org-mu4e-compose-edit
;; "C" #'org-mu4e-compose-new)
;; (evil-define-key 'normal mu4e-main-mode-map
;; "C" #'compose-mail
;; "cc" #'compose-mail)
(setopt mu4e-compose-switch 'display-buffer)
(defun my/-match-mu4e-message-buffer (buffer _action)
"Matcher for mu4e message buffers for `display-buffer-alist'.