aboutsummaryrefslogtreecommitdiff
path: root/emacs/settings/init-mu4e.el
diff options
context:
space:
mode:
authorMiquel Sabaté Solà <msabate@suse.com>2016-11-22 20:20:16 +0100
committerMiquel Sabaté Solà <msabate@suse.com>2016-11-22 20:20:16 +0100
commit893fed9cfaaee85b27be247df3cbd21badc4b3b5 (patch)
tree12bd80374db4b221bb854ccd219419b0ec2af67c /emacs/settings/init-mu4e.el
parentc58884a6de81f856a8943a3a72719f6f63a1691a (diff)
downloaddotfiles-893fed9cfaaee85b27be247df3cbd21badc4b3b5.tar.gz
dotfiles-893fed9cfaaee85b27be247df3cbd21badc4b3b5.zip
emacs: minor improvements
Signed-off-by: Miquel Sabaté Solà <msabate@suse.com>
Diffstat (limited to 'emacs/settings/init-mu4e.el')
-rw-r--r--emacs/settings/init-mu4e.el89
1 files changed, 50 insertions, 39 deletions
diff --git a/emacs/settings/init-mu4e.el b/emacs/settings/init-mu4e.el
index 90702cb..bf4c515 100644
--- a/emacs/settings/init-mu4e.el
+++ b/emacs/settings/init-mu4e.el
@@ -20,22 +20,12 @@
;;; Code:
-;; TODO: refile
-;;; http://comments.gmane.org/gmane.mail.mu.general/631
-;;; https://www.djcbsoftware.nl/code/mu/mu4e/Refiling-messages.html
-;;; https://www.djcbsoftware.nl/code/mu/mu4e/Smart-refiling.html
-;;; http://www.djcbsoftware.nl/code/mu/mu4e/Retrieval-and-indexing.html
-;; TODO: gmail flags
-
; I'm using an RPM that I've built on OBS which installs mu4e globally. See:
; https://build.opensuse.org/package/show/home:mssola/mu
(add-to-list 'load-path "/usr/share/emacs/site-lisp/mu4e")
(require 'mu4e)
(when (featurep 'mu4e)
- ; Define a proper shortcut.
- (global-set-key (kbd "C-c m") 'mu4e)
-
;; Diferent SMTP options that will be used for each context.
(setq message-send-mail-function 'smtpmail-send-it
@@ -67,6 +57,21 @@
;; Define the different accounts that I'm using. This is only available since
;; mu 0.9.16.
+ ; https://www.reddit.com/r/emacs/comments/47t9ec/share_your_mu4econtext_configs/d0fsih6
+ (defun mu4e-message-maildir-matches (msg rx)
+ (when rx
+ (if (listp rx)
+ ;; if rx is a list, try each one for a match
+ (or (mu4e-message-maildir-matches msg (car rx))
+ (mu4e-message-maildir-matches msg (cdr rx)))
+ ;; not a list, check rx
+ (string-match rx (mu4e-message-field msg :maildir)))))
+
+ (defun suse-refile-folder (key)
+ "Returns the refile folder for the given SUSE account in the KEY arg"
+ (concat "/" key "/Archives/"
+ (format-time-string "%Y" (current-time))))
+
(setq mu4e-contexts
`(
;; GMail
@@ -77,14 +82,14 @@
(mssola-gmail-smtp))
:match-func (lambda (msg)
(when msg
- (mu4e-message-contact-field-matches
- msg :to "mikisabate@gmail.com")))
+ (mu4e-message-maildir-matches msg "^/gmail")))
:vars '(
(user-mail-address . "mikisabate@gmail.com")
(user-full-name . "Miquel Sabaté Solà")
(mu4e-reply-to-address . "mikisabate@gmail.com")
(mu4e-drafts-folder . "/gmail/Drafts")
(mu4e-sent-folder . "/gmail/Sent")
+ (mu4e-refile-folder . "/gmail/All")
(mu4e-trash-folder . "/gmail/Trash")))
;; suse.com
@@ -95,14 +100,14 @@
(mssola-suse-smtp))
:match-func (lambda (msg)
(when msg
- (mu4e-message-contact-field-matches
- msg :to "msabate@suse.com")))
- :vars '(
+ (mu4e-message-maildir-matches msg "^/susecom")))
+ :vars `(
(user-mail-address . "msabate@suse.com")
(user-full-name . "Miquel Sabaté Solà")
(mu4e-reply-to-address . "msabate@suse.com")
(mu4e-drafts-folder . "/susecom/Drafts")
(mu4e-sent-folder . "/susecom/Sent")
+ (mu4e-refile-folder . ,(suse-refile-folder "susecom"))
(mu4e-trash-folder . "/susecom/Trash")))
;; suse.de
@@ -113,14 +118,14 @@
(mssola-suse-smtp))
:match-func (lambda (msg)
(when msg
- (mu4e-message-contact-field-matches
- msg :to "msabate@suse.de")))
- :vars '(
+ (mu4e-message-maildir-matches msg "^/susede")))
+ :vars `(
(user-mail-address . "msabate@suse.de")
(user-full-name . "Miquel Sabaté Solà")
(mu4e-reply-to-address . "msabate@suse.de")
(mu4e-drafts-folder . "/susede/Drafts")
(mu4e-sent-folder . "/susede/Sent")
+ (mu4e-refile-folder . ,(suse-refile-folder "susede"))
(mu4e-trash-folder . "/susede/Trash")))))
; If mu4e cannot figure things out, ask me.
@@ -136,18 +141,22 @@
(mu4e-context-vars context)))))
mu4e-contexts)))
- ; Signature.
+ ; Setting my bookmarks
+ (setq mu4e-bookmarks
+ '(("maildir:/gmail/inbox OR maildir:/susecom/inbox OR maildir:/susede/inbox" "Inbox Folders" ?n)
+ ("flag:unread AND NOT flag:trashed" "Unread messages" ?u)
+ ("date:today..now" "Today's messages" ?t)))
+
+ ; Signature. This signature looks alright regardless of whether the client
+ ; supports format=flowed or not.
(setq mu4e-compose-signature
(concat
- "Miquel Sabaté Solà\n"
+ "Miquel Sabaté Solà,\n"
"PGP: 4096R / 1BA5 3C7A C93D CA2A CFDF DA97 96BE 8C6F D89D 6565\n"))
; Sign outgoing emails
(add-hook 'message-send-hook 'mml-secure-message-sign-pgpmime)
- ; Don't save message to Sent Messages, mbsync will take care of that.
- (setq mu4e-sent-messages-behavior 'delete)
-
;; To avoid UID clashes. See:
;; http://pragmaticemacs.com/emacs/fixing-duplicate-uid-errors-when-using-mbsync-and-mu4e/
(setq mu4e-change-filenames-when-moving t)
@@ -160,7 +169,7 @@
message-citation-line-function 'message-insert-formatted-citation-line
message-kill-buffer-on-exit t
mu4e-get-mail-command "mbsync -aqV"
- mu4e-update-interval 120
+ mu4e-update-interval 600
mu4e-compose-dont-reply-to-self t
mu4e-headers-skip-duplicates t
mu4e-headers-include-related t
@@ -212,33 +221,33 @@
(add-to-list 'mu4e-view-actions
'("xViewXWidget" . my-mu4e-action-view-with-xwidget) t)
- ; Spell check
+ ; Spell check and format=flowed
(add-hook 'mu4e-compose-mode-hook
(lambda ()
"My settings for message composition."
- (set-fill-column 99999)
+ (set-fill-column 80)
+ (use-hard-newlines t 'guess)
(flyspell-mode)))
- ; Restore some of my evil config.
- ; TODO: doesn't work
- (dolist (imap '(mu4e-main-mode-map mu4e-headers-mode-map mu4e-view-mode-map))
- (evil-define-key 'evil-mu4e-state imap
- "\C-h" 'evil-window-left
- "\C-l" 'evil-window-right
- "\C-j" 'evil-window-down
- "\C-k" 'evil-window-up
- "\M-p" 'helm-projectile-switch-project))
+ (add-hook 'mu4e-view-mode-hook (lambda () (visual-line-mode 1)))
+
+ ; Enter insert mode automatically when writing a new email.
+ (with-eval-after-load 'evil
+ (evil-set-initial-state 'mu4e-compose-mode 'insert))
; Desktop notifications
(use-package mu4e-alert
:ensure t
:config
+ ; Notify me for unread emails from my inbox.
(mu4e-alert-set-default-style 'libnotify)
(add-hook 'after-init-hook #'mu4e-alert-enable-notifications)
(add-hook 'after-init-hook #'mu4e-alert-enable-mode-line-display)
(setq mu4e-alert-interesting-mail-query
- "flag:unread AND NOT flag:trashed")
+ (concat
+ "(maildir:/gmail/inbox OR maildir:/susecom/inbox OR maildir:/susede/inbox) "
+ "AND flag:unread AND NOT flag:trashed"))
(setq mu4e-alert-email-notification-types '(count)))
; Evil mode in mu4e
@@ -250,13 +259,15 @@
; Idea taken from evil-mu4e.el
(defvar mssola-evil-mu4e-mode-map-bindings
`((,evil-mu4e-state mu4e-headers-mode-map "\C-u" evil-scroll-up)
- (,evil-mu4e-state mu4e-main-mode-map "\C-u" evil-scroll-up)))
+ (,evil-mu4e-state mu4e-main-mode-map "\C-u" evil-scroll-up)
+ (,evil-mu4e-state mu4e-view-mode-map "h" evil-backward-char)))
(dolist (binding mssola-evil-mu4e-mode-map-bindings)
(evil-define-key
- (nth 0 binding) (nth 1 binding) (nth 2 binding) (nth 3 binding))))))
+ (nth 0 binding) (nth 1 binding) (nth 2 binding) (nth 3 binding)))))
-(setq mu4e-update-interval 120)
+ ; Define a proper shortcut.
+ (global-set-key (kbd "C-c m") 'mu4e))
(provide 'init-mu4e)
;;; init-mu4e.el ends here