From b288d7b0184425ca709976726ea6a8f755374ca2 Mon Sep 17 00:00:00 2001 From: Evie Litherland-Smith Date: Tue, 6 Aug 2024 07:29:30 +0100 Subject: [PATCH] Move mu4e config into README.org Start to rearrange some things to appropriate headings Add an empty diary file to stop complaining about file not being found --- README.org | 391 +++++++++++++++++++++++++++++++++++++++++---- diary | 0 modules/my-mu4e.el | 298 ---------------------------------- 3 files changed, 357 insertions(+), 332 deletions(-) create mode 100644 diary delete mode 100644 modules/my-mu4e.el diff --git a/README.org b/README.org index 554ba0d..ac6b76b 100644 --- a/README.org +++ b/README.org @@ -2,24 +2,17 @@ #+author: Evie Litherland-Smith #+email: evie@xenia.me.uk #+filetags: :emacs:config:org: -Personal Emacs config. - -Clone to =~/.config/emacs/= (or =~/.emacs.d/=). - +Personal Emacs configuration. Clone to =~/.config/emacs/= (or +=~/.emacs.d/=) and install specified plugins. * Config +Customise =use-package= first, configuration must be set before first +time it's used. -** Initial copy from =init.el= #+begin_src emacs-lisp - ;; Customise `use-package' behaviour, must be set before first time - ;; it's used. Configure packages archives with priority + ;; Configure packages archives with priority (setopt use-package-check-before-init t use-package-enable-imenu-support t) - (setq custom-file (locate-user-emacs-file "custom.el")) - (when (and custom-file - (file-exists-p custom-file)) - (load custom-file nil 'nomessage)) - (use-package package :custom (package-archive-priorities '(("melpa" . 4) ("stable" . 3) ("nongnu" . 2) ("gnu" . 1))) @@ -50,25 +43,53 @@ Clone to =~/.config/emacs/= (or =~/.emacs.d/=). :config (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/")) (add-to-list 'package-archives '("stable" . "https://stable.melpa.org/packages/")) - (package-initialize) + (package-initialize)) +#+end_src - (defun my/package-ensure () - "Update package archives and ensure packages are installed." - (interactive) - (package-refresh-contents) - (package-install-selected-packages) - (package-autoremove))) +Add custom function to ensure required packages are installed and +updated. - (set-default-coding-systems 'utf-8) +#+begin_src emacs-lisp + (defun my/package-ensure () + "Ensure packages are installed and updated." + (interactive) + (require 'use-package) + (package-refresh-contents) + (package-install-selected-packages) + (package-autoremove) + (package-upgrade-all)) +#+end_src +Load =custom.el= if file exists in default location. + +#+begin_src emacs-lisp + (setq custom-file (locate-user-emacs-file "custom.el")) + (when (and custom-file (file-exists-p custom-file)) + (load custom-file nil 'nomessage)) +#+end_src +** Defaults +Set some useful defaults. Some of these should be moved to relevant +section of config. + +#+begin_src emacs-lisp (setq user-full-name "Evie Litherland-Smith" user-mail-address "evie@xenia.me.uk" - inhibit-splash-screen t use-short-answers t - tab-always-indent 'complete - completion-cycle-threshold nil - completions-detailed t - kill-do-not-save-duplicates t + kill-do-not-save-duplicates t) + + (set-default-coding-systems 'utf-8) + (global-auto-revert-mode +1) + (delete-selection-mode +1) + + ;; Bind normal forward/back buttons on mouse to next/previous buffer respectively + (keymap-global-set "" #'previous-buffer) + (keymap-global-set "" #'next-buffer) +#+end_src +** UI and Appearance +Configure the look and feel of Emacs + +#+begin_src emacs-lisp + (setq inhibit-splash-screen t initial-frame-alist nil default-frame-alist nil) @@ -80,12 +101,321 @@ Clone to =~/.config/emacs/= (or =~/.emacs.d/=). compilation-scroll-output t) (global-prettify-symbols-mode +1) - (global-auto-revert-mode +1) - (delete-selection-mode +1) (which-function-mode +1) (tool-bar-mode -1) (scroll-bar-mode -1) +#+end_src +** Completion +#+begin_src emacs-lisp + (setq tab-always-indent 'complete + completion-cycle-threshold nil + completions-detailed t) +#+end_src +** Org Mode +** Email and Messaging +*** MU4E +Configure email with iCalendar event support, to integrate with +=org-agenda=. +#+begin_src emacs-lisp + (use-package sendmail + :custom + (sendmail-program (executable-find "msmtp")) + (send-mail-function #'sendmail-send-it)) + + (use-package message + :custom + (message-send-mail-function #'message-send-mail-with-sendmail) + (message-sendmail-f-is-evil t) + (message-sendmail-extra-arguments '("--read-envelope-from")) + (message-auto-save-directory nil) + (message-kill-buffer-on-exit t)) + + (setq mail-user-agent 'mu4e-user-agent + read-mail-command 'mu4e) + + (use-package mm-decode + :custom + (mm-discouraged-alternatives '("text/html"))) + + (use-package mu4e + :if (package-installed-p 'mu4e) + :bind + (("C-c m" . mu4e) + :map mu4e-view-mode-map + ("o n" . mu4e-org-store-and-capture)) + :custom + (mu4e-read-option-use-builtin nil) + (mu4e-completing-read-function #'completing-read) + (mu4e-split-view 'horizontal) + (mu4e-attachment-dir "~/Downloads") + (mu4e-get-mail-command "mbsync -a") + (mu4e-update-interval (* 5 60)) ; Every 5 minutes + (mu4e-headers-auto-update nil) + (mu4e-sent-messages-behavior 'sent) + (mu4e-change-filenames-when-moving t) + (mu4e-context-policy 'pick-first) + (mu4e-compose-context-policy 'ask) + (mu4e-compose-signature-auto-include nil) + (mu4e-compose-complete-only-personal nil) + (mu4e-eldoc-support t) + (mu4e-search-full nil) + (mu4e-search-include-related t) + (mu4e-search-threads t) + (mu4e-search-skip-duplicates t) + (mu4e-maildir-shortcuts '((:maildir "/Proton/Inbox/" :key ?p) + (:maildir "/iCloud/Inbox/" :key ?i) + (:maildir "/Outlook/Inbox/" :key ?w))) + (mu4e-bookmarks '((:name "Inbox" :query "maildir:/inbox/" :key ?i :favorite t) + (:name "Today" :query "date:today..now AND maildir:/inbox/" :key ?t) + (:name "Drafts" :query "flag:draft AND NOT flag:trashed" :key ?d :hide-unread t) + (:name "Unread" :query "flag:unread AND maildir:/inbox/" :key ?u :hide-unread t) + (:name "Flagged" :query "flag:flagged AND NOT flag:trashed" :key ?f :hide-unread t) + (:name "Spam" :query "maildir:/spam/ OR maildir:/junk/" :key ?s :hide-unread t))) + (mu4e-headers-visible-lines 3) + (mu4e-headers-fields + '((:human-date . 8) + (:flags . 10) + (:from . 22) + (:subject))) + (mu4e-headers-visible-flags + '(draft + flagged + unread + passed + replied + trashed + attach + calendar + encrypted + signed + list + personal)) + :config + (setq mu4e-use-fancy-chars t) + + ) + + (with-eval-after-load 'mu4e + (require 'mu4e-context) + (setq mu4e-contexts + (list + (make-mu4e-context + :name "Personal" + :match-func (lambda (msg) (when msg (string-prefix-p "/Proton" (mu4e-message-field msg :maildir)))) + :vars '( + (user-mail-address . "e.litherlandsmith@proton.me") + (mu4e-sent-folder . "/Proton/Sent") + (mu4e-trash-folder . "/Proton/Trash") + (mu4e-refile-folder . "/Proton/Archive") + (message-cite-style . message-cite-style-thunderbird) + (message-signature . (concat "Evelyn Litherland-Smith (she/they)\n")) + )) + (make-mu4e-context + :name "Alternate" + :match-func (lambda (msg) (when msg (string-prefix-p "/iCloud" (mu4e-message-field msg :maildir)))) + :vars '( + (user-mail-address . "e.litherlandsmith@icloud.com") + (mu4e-sent-folder . "/iCloud/Sent Messages") + (mu4e-trash-folder . "/iCloud/Deleted Messages") + (mu4e-refile-folder . "/iCloud/Archive") + (message-cite-style . message-cite-style-thunderbird) + (message-signature . (concat "Evelyn Litherland-Smith (she/they)\n")) + )) + (make-mu4e-context + :name "Work" + :match-func (lambda (msg) (when msg (string-prefix-p "/Outlook" (mu4e-message-field msg :maildir)))) + :vars '( + (user-mail-address . "evie.litherland-smith@ukaea.uk") + (mu4e-sent-folder . "/Outlook/Sent") + (mu4e-trash-folder . "/Outlook/Trash") + (mu4e-refile-folder . "/Outlook/Archive") + (message-cite-style . message-cite-style-outlook) + (message-signature . (concat "Evelyn Litherland-Smith (she/they)\n" + "Spectroscopy Diagnostic Physicist\n" + "Plasma Science and Fusion Operations\n" + "UK Atomic Energy Authority")) + ))))) + + (with-eval-after-load 'mu4e + (require 'mu4e-modeline) + (setq mu4e-modeline-all-read '("R:" . " ") + mu4e-modeline-all-clear '("C:" . " ") + mu4e-modeline-new-items '("N:" . " ") + mu4e-modeline-unread-items '("U:" . " ")) + (mu4e-modeline-mode +1)) + + (with-eval-after-load 'mu4e + (setq mu4e-search-full-label '("F" . " ") + mu4e-search-hide-label '("H" . " ") + mu4e-search-related-label '("R" . " ") + mu4e-search-skip-duplicates-label '("D" . " ") + mu4e-search-threaded-label'("T" . " ") + mu4e-headers-draft-mark '("D" . " ") + mu4e-headers-flagged-mark '("F" . " ") + mu4e-headers-unread-mark '("u" . " ") + mu4e-headers-passed-mark '("P" . " ") + mu4e-headers-replied-mark '("R" . " ") + mu4e-headers-trashed-mark '("T" . " ") + mu4e-headers-attach-mark '("a" . " ") + mu4e-headers-calendar-mark '("c" . " ") + mu4e-headers-encrypted-mark '("x" . " ") + mu4e-headers-signed-mark '("s" . " ") + mu4e-headers-list-mark '("l" . " ") + mu4e-headers-personal-mark '("p" . " ") + mu4e-headers-seen-mark '("S" . " ") + mu4e-headers-new-mark '("N" . " ") + mu4e-headers-from-or-to-prefix '(" " . "To ") + mu4e-headers-thread-root-prefix '("* " . "* ") + mu4e-headers-thread-duplicate-prefix '("= " . "= ") + mu4e-headers-thread-blank-prefix '(" " . " ") + mu4e-headers-thread-single-orphan-prefix '("─>" . "─>") + mu4e-headers-thread-orphan-prefix '("┬>" . "┬>") + mu4e-headers-thread-connection-prefix '("│ " . "│ ") + mu4e-headers-thread-first-child-prefix '("├>" . "├>") + mu4e-headers-thread-child-prefix '("├>" . "├>") + mu4e-headers-thread-last-child-prefix '("└>" . "╰>"))) + + (with-eval-after-load 'mu4e + (setq mu4e-marks '((refile :char + ("r" . " ") + :prompt "refile" :dyn-target + (lambda + (target msg) + (mu4e-get-refile-folder msg)) + :action + (lambda + (docid msg target) + (mu4e--server-move docid + (mu4e--mark-check-target target) + "-N"))) + (delete :char + ("D" . " ") + :prompt "Delete" :show-target + (lambda + (target) + "delete") + :action + (lambda + (docid msg target) + (mu4e--server-remove docid))) + (flag :char + ("+" . " ") + :prompt "+flag" :show-target + (lambda + (target) + "flag") + :action + (lambda + (docid msg target) + (mu4e--server-move docid nil "+F-u-N"))) + (move :char + ("m" . " ") + :prompt "move" :ask-target mu4e--mark-get-move-target :action + (lambda + (docid msg target) + (mu4e--server-move docid + (mu4e--mark-check-target target) + "-N"))) + (read :char + ("!" . " ") + :prompt "!read" :show-target + (lambda + (target) + "read") + :action + (lambda + (docid msg target) + (mu4e--server-move docid nil "+S-u-N"))) + (trash :char + ("d" . " ") + :prompt "dtrash" :dyn-target + (lambda + (target msg) + (mu4e-get-trash-folder msg)) + :action + (lambda + (docid msg target) + (mu4e--server-move docid + (mu4e--mark-check-target target) + "+T-N"))) + (unflag :char + ("-" . " ") + :prompt "-unflag" :show-target + (lambda + (target) + "unflag") + :action + (lambda + (docid msg target) + (mu4e--server-move docid nil "-F-N"))) + (untrash :char + ("=" . " ") + :prompt "=untrash" :show-target + (lambda + (target) + "untrash") + :action + (lambda + (docid msg target) + (mu4e--server-move docid nil "-T"))) + (unread :char + ("?" . " ") + :prompt "?unread" :show-target + (lambda + (target) + "unread") + :action + (lambda + (docid msg target) + (mu4e--server-move docid nil "-S+u-N"))) + (unmark :char " " :prompt "unmark" :action + (mu4e-error "No action for unmarking")) + (action :char + ("a" . " ") + :prompt "action" :ask-target + (lambda nil + (mu4e-read-option "Action: " mu4e-headers-actions)) + :action + (lambda + (docid msg actionfunc) + (save-excursion + (when + (mu4e~headers-goto-docid docid) + (mu4e-headers-action actionfunc))))) + (something :char + ("*" . " ") + :prompt "*something" :action + (mu4e-error "No action for deferred mark"))))) + + (with-eval-after-load 'mu4e + (require 'mu4e-notification) + (setq mu4e-notification-support t)) + + (use-package gnus-icalendar + :after (org-agenda) + :custom + (gnus-icalendar-org-capture-file (expand-file-name "calendar/email.org.gpg" org-directory)) + (gnus-icalendar-org-capture-headline '("Inbox")) + :config + (require 'org-agenda) + (require 'org-capture) + (gnus-icalendar-org-setup)) + + (use-package mu4e-icalendar + :after (mu4e org-agenda) + :custom + (mu4e-icalendar-trash-after-reply nil) + :config + (require 'gnus-icalendar) + (mu4e-icalendar-setup) + (gnus-icalendar-org-setup)) +#+end_src +*** IRC +** Development Tools +** Other +** Initial copy from =init.el= +#+begin_src emacs-lisp (use-package pixel-scroll :init (pixel-scroll-precision-mode +1)) @@ -96,10 +426,6 @@ Clone to =~/.config/emacs/= (or =~/.emacs.d/=). (mouse-wheel-progressive-speed nil) (mouse-wheel-follow-mouse t)) - ;; Bind normal forward/back buttons on mouse to next/previous buffer respectively - (keymap-global-set "" #'previous-buffer) - (keymap-global-set "" #'next-buffer) - ;; Quick bind for calling `git-sync-all' (defun my/git-sync-all () "Run shell command `git-sync-all' asynchronously." @@ -1119,9 +1445,6 @@ Clone to =~/.config/emacs/= (or =~/.emacs.d/=). :after (markdown-mode) :hook (markdown-mode . conditionally-turn-on-pandoc)) - (if (package-installed-p 'mu4e) - (load-file (locate-user-emacs-file "modules/my-mu4e.el"))) - (use-package bbdb :bind (("M-g b" . bbdb-display-all-records)) :custom diff --git a/diary b/diary new file mode 100644 index 0000000..e69de29 diff --git a/modules/my-mu4e.el b/modules/my-mu4e.el deleted file mode 100644 index 3c42f0e..0000000 --- a/modules/my-mu4e.el +++ /dev/null @@ -1,298 +0,0 @@ -;;; my-mu4e.el -- mu4e -*- lexical-binding: t -*- -;;; Commentary: -;;; Code: - -(use-package sendmail - :custom - (sendmail-program (executable-find "msmtp")) - (send-mail-function #'sendmail-send-it)) - -(use-package message - :custom - (message-send-mail-function #'message-send-mail-with-sendmail) - (message-sendmail-f-is-evil t) - (message-sendmail-extra-arguments '("--read-envelope-from")) - (message-auto-save-directory nil) - (message-kill-buffer-on-exit t)) - -(setq mail-user-agent 'mu4e-user-agent - read-mail-command 'mu4e) - -(use-package mm-decode - :custom - (mm-discouraged-alternatives '("text/html"))) - -(use-package mu4e - :bind - (("C-c m" . mu4e) - :map mu4e-view-mode-map - ("o n" . mu4e-org-store-and-capture)) - :custom - (mu4e-read-option-use-builtin nil) - (mu4e-completing-read-function #'completing-read) - (mu4e-split-view 'horizontal) - (mu4e-attachment-dir "~/Downloads") - (mu4e-get-mail-command "mbsync -a") - (mu4e-update-interval (* 5 60)) ; Every 5 minutes - (mu4e-headers-auto-update nil) - (mu4e-sent-messages-behavior 'sent) - (mu4e-change-filenames-when-moving t) - (mu4e-context-policy 'pick-first) - (mu4e-compose-context-policy 'ask) - (mu4e-compose-signature-auto-include nil) - (mu4e-compose-complete-only-personal nil) - (mu4e-eldoc-support t) - (mu4e-search-full nil) - (mu4e-search-include-related t) - (mu4e-search-threads t) - (mu4e-search-skip-duplicates t) - (mu4e-maildir-shortcuts '((:maildir "/Proton/Inbox/" :key ?p) - (:maildir "/iCloud/Inbox/" :key ?i) - (:maildir "/Outlook/Inbox/" :key ?w))) - (mu4e-bookmarks '((:name "Inbox" :query "maildir:/inbox/" :key ?i :favorite t) - (:name "Today" :query "date:today..now AND maildir:/inbox/" :key ?t) - (:name "Drafts" :query "flag:draft AND NOT flag:trashed" :key ?d :hide-unread t) - (:name "Unread" :query "flag:unread AND maildir:/inbox/" :key ?u :hide-unread t) - (:name "Flagged" :query "flag:flagged AND NOT flag:trashed" :key ?f :hide-unread t) - (:name "Spam" :query "maildir:/spam/ OR maildir:/junk/" :key ?s :hide-unread t))) - (mu4e-headers-visible-lines 3) - (mu4e-headers-fields - '((:human-date . 8) - (:flags . 10) - (:from . 22) - (:subject))) - (mu4e-headers-visible-flags - '(draft - flagged - unread - passed - replied - trashed - attach - calendar - encrypted - signed - list - personal)) - :config - (setq mu4e-use-fancy-chars t) - - ) - -(with-eval-after-load 'mu4e - (require 'mu4e-context) - (setq mu4e-contexts - (list - (make-mu4e-context - :name "Personal" - :match-func (lambda (msg) (when msg (string-prefix-p "/Proton" (mu4e-message-field msg :maildir)))) - :vars '( - (user-mail-address . "e.litherlandsmith@proton.me") - (mu4e-sent-folder . "/Proton/Sent") - (mu4e-trash-folder . "/Proton/Trash") - (mu4e-refile-folder . "/Proton/Archive") - (message-cite-style . message-cite-style-thunderbird) - (message-signature . (concat "Evelyn Litherland-Smith (she/they)\n")) - )) - (make-mu4e-context - :name "Alternate" - :match-func (lambda (msg) (when msg (string-prefix-p "/iCloud" (mu4e-message-field msg :maildir)))) - :vars '( - (user-mail-address . "e.litherlandsmith@icloud.com") - (mu4e-sent-folder . "/iCloud/Sent Messages") - (mu4e-trash-folder . "/iCloud/Deleted Messages") - (mu4e-refile-folder . "/iCloud/Archive") - (message-cite-style . message-cite-style-thunderbird) - (message-signature . (concat "Evelyn Litherland-Smith (she/they)\n")) - )) - (make-mu4e-context - :name "Work" - :match-func (lambda (msg) (when msg (string-prefix-p "/Outlook" (mu4e-message-field msg :maildir)))) - :vars '( - (user-mail-address . "evie.litherland-smith@ukaea.uk") - (mu4e-sent-folder . "/Outlook/Sent") - (mu4e-trash-folder . "/Outlook/Trash") - (mu4e-refile-folder . "/Outlook/Archive") - (message-cite-style . message-cite-style-outlook) - (message-signature . (concat "Evelyn Litherland-Smith (she/they)\n" - "Spectroscopy Diagnostic Physicist\n" - "Plasma Science and Fusion Operations\n" - "UK Atomic Energy Authority")) - ))))) - -(with-eval-after-load 'mu4e - (require 'mu4e-modeline) - (setq mu4e-modeline-all-read '("R:" . " ") - mu4e-modeline-all-clear '("C:" . " ") - mu4e-modeline-new-items '("N:" . " ") - mu4e-modeline-unread-items '("U:" . " ")) - (mu4e-modeline-mode +1)) - -(with-eval-after-load 'mu4e - (setq mu4e-search-full-label '("F" . " ") - mu4e-search-hide-label '("H" . " ") - mu4e-search-related-label '("R" . " ") - mu4e-search-skip-duplicates-label '("D" . " ") - mu4e-search-threaded-label'("T" . " ") - mu4e-headers-draft-mark '("D" . " ") - mu4e-headers-flagged-mark '("F" . " ") - mu4e-headers-unread-mark '("u" . " ") - mu4e-headers-passed-mark '("P" . " ") - mu4e-headers-replied-mark '("R" . " ") - mu4e-headers-trashed-mark '("T" . " ") - mu4e-headers-attach-mark '("a" . " ") - mu4e-headers-calendar-mark '("c" . " ") - mu4e-headers-encrypted-mark '("x" . " ") - mu4e-headers-signed-mark '("s" . " ") - mu4e-headers-list-mark '("l" . " ") - mu4e-headers-personal-mark '("p" . " ") - mu4e-headers-seen-mark '("S" . " ") - mu4e-headers-new-mark '("N" . " ") - mu4e-headers-from-or-to-prefix '(" " . "To ") - mu4e-headers-thread-root-prefix '("* " . "* ") - mu4e-headers-thread-duplicate-prefix '("= " . "= ") - mu4e-headers-thread-blank-prefix '(" " . " ") - mu4e-headers-thread-single-orphan-prefix '("─>" . "─>") - mu4e-headers-thread-orphan-prefix '("┬>" . "┬>") - mu4e-headers-thread-connection-prefix '("│ " . "│ ") - mu4e-headers-thread-first-child-prefix '("├>" . "├>") - mu4e-headers-thread-child-prefix '("├>" . "├>") - mu4e-headers-thread-last-child-prefix '("└>" . "╰>"))) - -(with-eval-after-load 'mu4e - (setq mu4e-marks '((refile :char - ("r" . " ") - :prompt "refile" :dyn-target - (lambda - (target msg) - (mu4e-get-refile-folder msg)) - :action - (lambda - (docid msg target) - (mu4e--server-move docid - (mu4e--mark-check-target target) - "-N"))) - (delete :char - ("D" . " ") - :prompt "Delete" :show-target - (lambda - (target) - "delete") - :action - (lambda - (docid msg target) - (mu4e--server-remove docid))) - (flag :char - ("+" . " ") - :prompt "+flag" :show-target - (lambda - (target) - "flag") - :action - (lambda - (docid msg target) - (mu4e--server-move docid nil "+F-u-N"))) - (move :char - ("m" . " ") - :prompt "move" :ask-target mu4e--mark-get-move-target :action - (lambda - (docid msg target) - (mu4e--server-move docid - (mu4e--mark-check-target target) - "-N"))) - (read :char - ("!" . " ") - :prompt "!read" :show-target - (lambda - (target) - "read") - :action - (lambda - (docid msg target) - (mu4e--server-move docid nil "+S-u-N"))) - (trash :char - ("d" . " ") - :prompt "dtrash" :dyn-target - (lambda - (target msg) - (mu4e-get-trash-folder msg)) - :action - (lambda - (docid msg target) - (mu4e--server-move docid - (mu4e--mark-check-target target) - "+T-N"))) - (unflag :char - ("-" . " ") - :prompt "-unflag" :show-target - (lambda - (target) - "unflag") - :action - (lambda - (docid msg target) - (mu4e--server-move docid nil "-F-N"))) - (untrash :char - ("=" . " ") - :prompt "=untrash" :show-target - (lambda - (target) - "untrash") - :action - (lambda - (docid msg target) - (mu4e--server-move docid nil "-T"))) - (unread :char - ("?" . " ") - :prompt "?unread" :show-target - (lambda - (target) - "unread") - :action - (lambda - (docid msg target) - (mu4e--server-move docid nil "-S+u-N"))) - (unmark :char " " :prompt "unmark" :action - (mu4e-error "No action for unmarking")) - (action :char - ("a" . " ") - :prompt "action" :ask-target - (lambda nil - (mu4e-read-option "Action: " mu4e-headers-actions)) - :action - (lambda - (docid msg actionfunc) - (save-excursion - (when - (mu4e~headers-goto-docid docid) - (mu4e-headers-action actionfunc))))) - (something :char - ("*" . " ") - :prompt "*something" :action - (mu4e-error "No action for deferred mark"))))) - -(with-eval-after-load 'mu4e - (require 'mu4e-notification) - (setq mu4e-notification-support t)) - -(use-package gnus-icalendar - :after (mu4e org-agenda) - :custom - (gnus-icalendar-org-capture-file (expand-file-name "calendar/email.org.gpg" org-directory)) - (gnus-icalendar-org-capture-headline '("Inbox")) - :config - (require 'org-agenda) - (require 'org-capture) - (gnus-icalendar-org-setup)) - -(use-package mu4e-icalendar - :after mu4e - :custom - (mu4e-icalendar-trash-after-reply nil) - :config - (require 'gnus-icalendar) - (mu4e-icalendar-setup) - (gnus-icalendar-org-setup)) - -(provide 'my-mu4e) -;;; my-mu4e.el ends here