From: Amin Bandali Date: Sun, 22 Feb 2015 04:21:43 +0000 (-0500) Subject: [spacemacs] add my mu4e contrib layer X-Git-Url: https://git.shemshak.org/~bandali/configs/commitdiff_plain/a067821153b3cfb72517ea8b252dce9ee128d803?ds=inline [spacemacs] add my mu4e contrib layer --- diff --git a/spacemacs/.emacs.d/private/mu4e/extensions.el b/spacemacs/.emacs.d/private/mu4e/extensions.el new file mode 100644 index 0000000..a6adea8 --- /dev/null +++ b/spacemacs/.emacs.d/private/mu4e/extensions.el @@ -0,0 +1,33 @@ +;;; extensions.el --- mu4e Layer extensions File for Spacemacs +;; +;; Copyright (c) 2012-2014 Sylvain Benner +;; Copyright (c) 2014-2015 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defvar mu4e-pre-extensions + '( + ;; pre extension mu4es go here + ) + "List of all extensions to load before the packages.") + +(defvar mu4e-post-extensions + '( + ;; post extension mu4es go here + ) + "List of all extensions to load after the packages.") + +;; For each extension, define a function mu4e/init- +;; +;; (defun mu4e/init-my-extension () +;; "Initialize my extension" +;; ) +;; +;; Often the body of an initialize function uses `use-package' +;; For more info on `use-package', see readme: +;; https://github.com/jwiegley/use-package diff --git a/spacemacs/.emacs.d/private/mu4e/packages.el b/spacemacs/.emacs.d/private/mu4e/packages.el new file mode 100644 index 0000000..8d9f5fd --- /dev/null +++ b/spacemacs/.emacs.d/private/mu4e/packages.el @@ -0,0 +1,139 @@ +;;; packages.el --- mu4e Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2014 Sylvain Benner +;; Copyright (c) 2014-2015 Sylvain Benner & Contributors +;; Copyright (c) 2015 Amin Bandali +;; +;; Authors: Amin Bandali +;; Sylvain Benner +;; URL: https://github.com/aminb/dotfiles +;; +;; This file is not part of GNU Emacs; nor that of spacemacs. +;; +;;; License: GPLv3 + +(defvar mu4e-packages + '( + ;; mu4e is not in any repos, so it's commented + ;; mu4e + smtpmail + ) + "List of all packages to install and/or initialize. Built-in packages +which require an initialization must be listed explicitly in the list.") + +(defvar mu4e-excluded-packages '() + "List of packages to exclude.") + +(defun get-string-from-file (filePath) + "Return filePath's file content." + (with-temp-buffer + (insert-file-contents filePath) + (buffer-string))) +;; thanks to “Pascal J Bourguignon” and “TheFlyingDutchman +;; 〔zzbba…@aol.com〕”. 2010-09-02 + +(defun get-passwd-file (name) + "Return name's passwd file content" + (get-string-from-file (concat "/home/amin/.passwd/" name))) + +(require 'mu4e) +(require 'smtpmail) +(setq + mu4e-get-mail-command "offlineimap" ;; or fetchmail, or ... + mu4e-update-interval 300 ;; update every 5 minutes + mu4e-sent-folder "/aminb/Sent" + mu4e-drafts-folder "/aminb/Drafts" + mu4e-trash-folder "/aminb/Trash" + user-mail-address (get-passwd-file "aminb-mail") + smtpmail-default-smtp-server "mail.aminb.org" + smtpmail-local-domain "aminb.org" + smtpmail-smtp-server "mail.aminb.org" + smtpmail-stream-type 'ssl + smtpmail-smtp-service 465) + +(defvar my-mu4e-account-alist + '(("aminb" + (mu4e-sent-folder "/aminb/Sent") + (mu4e-drafts-folder "/aminb/Drafts") + (mu4e-trash-folder "/aminb/Trash") + (user-mail-address (get-passwd-file "aminb-mail")) + (user-full-name "Amin Bandali") + (smtpmail-default-smtp-server "mail.aminb.org") + (smtpmail-local-domain "aminb.org") + (smtpmail-smtp-user (get-passwd-file "aminb-user")) + (smtpmail-smtp-server "mail.aminb.org") + (smtpmail-stream-type ssl) + (smtpmail-smtp-service 465)) + ("Gmail" + (mu4e-sent-folder "/Gmail/[Gmail].Sent Mail") + (mu4e-drafts-folder "/Gmail/[Gmail].Drafts") + (mu4e-trash-folder "/Gmail/[Gmail].Trash") + (user-mail-address (get-passwd-file "gmail-mail")) + (user-full-name "Amin Bandali") + (smtpmail-default-smtp-server "smtp.gmail.com") + (smtpmail-local-domain "gmail.com") + (smtpmail-smtp-user (get-passwd-file "gmail-mail")) + (smtpmail-smtp-server "smtp.gmail.com") + (smtpmail-stream-type ssl) + (smtpmail-smtp-service 465)))) + +(defun my-mu4e-set-account () + "Set the account for composing a message." + (let* ((account + (if mu4e-compose-parent-message + (let ((maildir (mu4e-message-field mu4e-compose-parent-message :maildir))) + (string-match "/\\(.*?\\)/" maildir) + (match-string 1 maildir)) + (completing-read (format "Compose with account: (%s) " + (mapconcat #'(lambda (var) (car var)) + my-mu4e-account-alist "/")) + (mapcar #'(lambda (var) (car var)) my-mu4e-account-alist) + nil t nil nil (caar my-mu4e-account-alist)))) + (account-vars (cdr (assoc account my-mu4e-account-alist)))) + (if account-vars + (mapc #'(lambda (var) + (set (car var) (cadr var))) + account-vars) + (error "No email account found")))) + +(add-hook 'mu4e-compose-pre-hook 'my-mu4e-set-account) + + +;; Shortcut for mu4e. +(global-set-key (kbd "C-c m") 'mu4e) +(evil-leader/set-key "am" 'mu4e) + + +;; A special version of the gnus-dired-mail-buffers function +;; that understands mu4e buffers as well +(require 'gnus-dired) +;; make the `gnus-dired-mail-buffers' function also work on +;; message-mode derived modes, such as mu4e-compose-mode +(defun gnus-dired-mail-buffers () + "Return a list of active message buffers." + (let (buffers) + (save-current-buffer + (dolist (buffer (buffer-list t)) + (set-buffer buffer) + (when (and (derived-mode-p 'message-mode) + (null message-sent-message-via)) + (push (buffer-name buffer) buffers)))) + (nreverse buffers))) + +(setq gnus-dired-mail-mode 'mu4e-user-agent) +(add-hook 'dired-mode-hook 'turn-on-gnus-dired-mode) + +(require 'mu4e-contrib) +(setq mu4e-html2text-command 'mu4e-shr2text + mu4e-view-html-plaintext-ratio-heuristic 10 + mu4e-view-prefer-html t) + +;; For each package, define a function mu4e/init- +;; +;; (defun mu4e/init-my-package () +;; "Initialize my package" +;; ) +;; +;; Often the body of an initialize function uses `use-package' +;; For more info on `use-package', see readme: +;; https://github.com/jwiegley/use-package