diff --git a/mu4e/mu4e-compose.el b/mu4e/mu4e-compose.el index 3c8cd7af..16f4c442 100644 --- a/mu4e/mu4e-compose.el +++ b/mu4e/mu4e-compose.el @@ -354,25 +354,32 @@ Just after saving we restore it; thus, the separator should never appear on disk. Also update the Date and ensure we have a Message-ID." (add-hook 'before-save-hook - (lambda() - ;; replace the date - (save-excursion - (message-remove-header "Date") - (message-generate-headers '(Date Message-ID)) - (save-match-data - (mu4e~draft-remove-mail-header-separator)))) nil t) + #'mu4e~compose-before-save-hook-fn + nil t) (add-hook 'after-save-hook - (lambda () - (save-match-data - (mu4e~compose-set-friendly-buffer-name) - (mu4e~draft-insert-mail-header-separator) - ;; hide some headers again - (widen) - (mu4e~compose-hide-headers) - (set-buffer-modified-p nil) - (mu4e-message "Saved (%d lines)" (count-lines (point-min) (point-max))) - ;; update the file on disk -- ie., without the separator - (mu4e~proc-add (buffer-file-name)))) nil t)) + #'mu4e~compose-after-save-hook-fn + nil t)) + +(defun mu4e~compose-before-save-hook-fn () + ;; replace the date + (save-excursion + (message-remove-header "Date") + (message-generate-headers '(Date Message-ID)) + (save-match-data + (mu4e~draft-remove-mail-header-separator)))) + +(defun mu4e~compose-after-save-hook-fn () + (save-match-data + (mu4e~compose-set-friendly-buffer-name) + (mu4e~draft-insert-mail-header-separator) + ;; hide some headers again + (widen) + (mu4e~compose-hide-headers) + (set-buffer-modified-p nil) + (mu4e-message "Saved (%d lines)" (count-lines (point-min) (point-max))) + ;; update the file on disk -- ie., without the separator + (mu4e~proc-add (buffer-file-name)))) + ;;; address completion @@ -563,26 +570,34 @@ buffers; lets remap its faces so it uses the ones for mu4e." ;; setup the fcc-stuff, if needed (add-hook 'message-send-hook - (lambda () ;; mu4e~compose-save-before-sending - ;; when in-reply-to was removed, remove references as well. - (when (eq mu4e-compose-type 'reply) - (mu4e~remove-refs-maybe)) - (when use-hard-newlines - (mu4e-send-harden-newlines)) - ;; for safety, always save the draft before sending - (set-buffer-modified-p t) - (save-buffer) - (mu4e~compose-setup-fcc-maybe) - (widen)) nil t) + #'mu4e~setup-fcc-message-sent-hook-fn + nil t) ;; when the message has been sent. (add-hook 'message-sent-hook - (lambda () ;; mu4e~compose-mark-after-sending - (setq mu4e-sent-func 'mu4e-sent-handler) - (mu4e~proc-sent (buffer-file-name))) nil t)) + #'mu4e~set-sent-handler-message-sent-hook-fn + nil t)) ;; mark these two hooks as permanent-local, so they'll survive mode-changes ;; (put 'mu4e~compose-save-before-sending 'permanent-local-hook t) (put 'mu4e~compose-mark-after-sending 'permanent-local-hook t)) +(defun mu4e~setup-fcc-message-sent-hook-fn () + ;; mu4e~compose-save-before-sending + ;; when in-reply-to was removed, remove references as well. + (when (eq mu4e-compose-type 'reply) + (mu4e~remove-refs-maybe)) + (when use-hard-newlines + (mu4e-send-harden-newlines)) + ;; for safety, always save the draft before sending + (set-buffer-modified-p t) + (save-buffer) + (mu4e~compose-setup-fcc-maybe) + (widen)) + +(defun mu4e~set-sent-handler-message-sent-hook-fn () + ;; mu4e~compose-mark-after-sending + (setq mu4e-sent-func 'mu4e-sent-handler) + (mu4e~proc-sent (buffer-file-name))) + (defun mu4e-send-harden-newlines () "Set the hard property to all newlines." (save-excursion diff --git a/mu4e/mu4e-contrib.el b/mu4e/mu4e-contrib.el index 9ce3b244..663176f4 100644 --- a/mu4e/mu4e-contrib.el +++ b/mu4e/mu4e-contrib.el @@ -59,16 +59,18 @@ ;; ;; Allow bookmarking a mu4e buffer in regular emacs bookmarks. +(defun mu4e~view-set-bookmark-make-record-fn () + (set (make-local-variable 'bookmark-make-record-function) + 'mu4e-view-bookmark-make-record)) + +(defun mu4e~headers-set-bookmark-make-record-fn () + (set (make-local-variable 'bookmark-make-record-function) + 'mu4e-view-bookmark-make-record)) + ;; Probably this can be moved to mu4e-view.el. -(add-hook 'mu4e-view-mode-hook - (lambda () - (set (make-local-variable 'bookmark-make-record-function) - 'mu4e-view-bookmark-make-record))) +(add-hook 'mu4e-view-mode-hook #'mu4e~view-set-bookmark-make-record-fn) ;; And this can be moved to mu4e-headers.el. -(add-hook 'mu4e-headers-mode-hook - (lambda () - (set (make-local-variable 'bookmark-make-record-function) - 'mu4e-view-bookmark-make-record))) +(add-hook 'mu4e-headers-mode-hook #'mu4e~headers-set-bookmark-make-record-fn) (defun mu4e-view-bookmark-make-record () "Make a bookmark entry for a mu4e buffer. Note that this is an diff --git a/mu4e/mu4e-headers.el b/mu4e/mu4e-headers.el index fb367edd..fb36cd9d 100644 --- a/mu4e/mu4e-headers.el +++ b/mu4e/mu4e-headers.el @@ -1136,7 +1136,8 @@ no user-interaction ongoing." ;; maybe update the current headers upon indexing changes (add-hook 'mu4e-index-updated-hook 'mu4e~headers-maybe-auto-update) (add-hook 'mu4e-index-updated-hook - (lambda() (run-hooks 'mu4e-message-changed-hook)) t) + #'mu4e~headers-index-updated-hook-fn + t) (setq truncate-lines t buffer-undo-list t ;; don't record undo information @@ -1146,6 +1147,9 @@ no user-interaction ongoing." (mu4e~mark-initialize) ;; initialize the marking subsystem (hl-line-mode 1)) +(defun mu4e~headers-index-updated-hook-fn () + (run-hooks 'mu4e-message-changed-hook)) + ;;; Highlighting (defvar mu4e~highlighted-docid nil diff --git a/mu4e/mu4e-icalendar.el b/mu4e/mu4e-icalendar.el index f02e04ea..3ac2015a 100644 --- a/mu4e/mu4e-icalendar.el +++ b/mu4e/mu4e-icalendar.el @@ -163,10 +163,12 @@ response in icalendar format." ;; also trash the message (thus must be appended to hooks). (add-hook 'message-sent-hook - (lambda () (setq mu4e-sent-func - (mu4e~icalendar-trash-message original-msg))) + #'mu4e~icalendar-setup-sent-hook-fn t t)))) +(defun mu4e~icalendar-setup-sent-hook-fn () + (setq mu4e-sent-func + (mu4e~icalendar-trash-message original-msg))) (defun mu4e~icalendar-insert-diary (event reply-status filename) "Insert a diary entry for the EVENT in file named FILENAME. diff --git a/mu4e/mu4e-speedbar.el b/mu4e/mu4e-speedbar.el index 8ef6d5e5..7ab61a16 100644 --- a/mu4e/mu4e-speedbar.el +++ b/mu4e/mu4e-speedbar.el @@ -55,11 +55,7 @@ (defun mu4e-speedbar-install-variables () "Install those variables used by speedbar to enhance mu4e." (add-hook 'mu4e-context-changed-hook - (lambda() - (when (buffer-live-p speedbar-buffer) - (with-current-buffer speedbar-buffer - (let ((inhibit-read-only t)) - (mu4e-speedbar-buttons)))))) + #'mu4e~speedbar-context-changed-hook-fn) (dolist (keymap '( mu4e-main-speedbar-key-map mu4e-headers-speedbar-key-map @@ -69,6 +65,12 @@ (define-key keymap "RET" 'speedbar-edit-line) (define-key keymap "e" 'speedbar-edit-line)))) +(defun mu4e~speedbar-context-changed-hook-fn () + (when (buffer-live-p speedbar-buffer) + (with-current-buffer speedbar-buffer + (let ((inhibit-read-only t)) + (mu4e-speedbar-buttons))))) + ;; Make sure our special speedbar major mode is loaded (if (featurep 'speedbar) (mu4e-speedbar-install-variables) diff --git a/mu4e/mu4e-view.el b/mu4e/mu4e-view.el index 259ab00a..413fc04a 100644 --- a/mu4e/mu4e-view.el +++ b/mu4e/mu4e-view.el @@ -407,13 +407,15 @@ article-mode." (mu4e-view-mode) (setq gnus-article-decoded-p gnus-article-decode-hook) (set-buffer-modified-p nil) - (add-hook 'kill-buffer-hook - (lambda() ;; cleanup the mm-* buffers that the view spawns - (when mu4e~gnus-article-mime-handles - (mm-destroy-parts mu4e~gnus-article-mime-handles) - (setq mu4e~gnus-article-mime-handles nil)))) + (add-hook 'kill-buffer-hook #'mu4e~view-kill-buffer-hook-fn) (read-only-mode))) +(defun mu4e~view-kill-buffer-hook-fn () + ;; cleanup the mm-* buffers that the view spawns + (when mu4e~gnus-article-mime-handles + (mm-destroy-parts mu4e~gnus-article-mime-handles) + (setq mu4e~gnus-article-mime-handles nil))) + (defun mu4e~view-gnus-display-mime (msg) "Same as `gnus-display-mime' but add a mu4e headers to MSG." (lambda (&optional ihandles) diff --git a/mu4e/org-mu4e.el b/mu4e/org-mu4e.el index 6b62de73..25a6389d 100644 --- a/mu4e/org-mu4e.el +++ b/mu4e/org-mu4e.el @@ -185,8 +185,7 @@ or org-mode (when in the body)." ((and (> (point) sepapoint) (eq major-mode 'mu4e-compose-mode)) (org-mode) (add-hook 'before-save-hook - (lambda () - (mu4e-error "Switch to mu4e-compose-mode (M-m) before saving")) + #'org~mu4e-error-before-save-hook-fn nil t) (org~mu4e-mime-decorate-headers) (local-set-key (kbd "M-m") @@ -203,6 +202,9 @@ or org-mode (when in the body)." ;; and add the hook (add-hook 'post-command-hook 'org~mu4e-mime-switch-headers-or-body t t)))) +(defun org~mu4e-error-before-save-hook-fn () + (mu4e-error "Switch to mu4e-compose-mode (M-m) before saving")) + (defun org-mu4e-compose-org-mode () "Defines a pseudo-minor mode for mu4e-compose-mode. Edit the message body using org mode. DEPRECATED."