0c51514b56
When purpose mode is enabled, Spacemacs fails to assign correct mu4e buffers to correct windows when we're in headers view and select an e-mail from the list. Since `*mu4e-headers*` and `*mu4e-view*` buffers have the same purpose name (`mail`), and `*mu4e-loading*` buffer is either `fundamental` (or with a recent version of upstream mu4e `mu4e-loading-mode`) which has the purpose `general`. So what happens is, when we select an e-mail from the list, e-mail opens up at the headers' window, and loading opens up in the lower window which should have displayed the actual email content. With this commit, there will be two purpose names which will prevent this issue from happening.
163 lines
5.6 KiB
EmacsLisp
163 lines
5.6 KiB
EmacsLisp
;;; packages.el --- mu4e Layer packages File for Spacemacs
|
|
;;
|
|
;; Copyright (c) 2012-2018 Sylvain Benner & Contributors
|
|
;;
|
|
;; Author: Sylvain Benner <sylvain.benner@gmail.com>
|
|
;; URL: https://github.com/syl20bnr/spacemacs
|
|
;;
|
|
;; This file is not part of GNU Emacs.
|
|
;;
|
|
;;; License: GPLv3
|
|
|
|
(setq mu4e-packages
|
|
'(
|
|
(mu4e :location site)
|
|
mu4e-alert
|
|
mu4e-maildirs-extension
|
|
(helm-mu :requires helm)
|
|
org
|
|
persp-mode
|
|
window-purpose
|
|
))
|
|
|
|
(defun mu4e/post-init-persp-mode ()
|
|
(spacemacs|define-custom-layout mu4e-spacemacs-layout-name
|
|
:binding mu4e-spacemacs-layout-binding
|
|
:body
|
|
(progn
|
|
(defun spacemacs-layouts/add-mu4e-buffer-to-persp ()
|
|
(persp-add-buffer (current-buffer)
|
|
(persp-get-by-name
|
|
mu4e-spacemacs-layout-name)))
|
|
(spacemacs/add-to-hooks 'spacemacs-layouts/add-mu4e-buffer-to-persp
|
|
'(mu4e-main-mode-hook
|
|
mu4e-headers-mode-hook
|
|
mu4e-view-mode-hook
|
|
mu4e-compose-mode-hook))
|
|
(call-interactively 'mu4e)
|
|
(call-interactively 'mu4e-update-index)
|
|
|
|
(define-advice mu4e~stop (:after nil kill-mu4e-layout-after-mu4e~stop)
|
|
(when mu4e-spacemacs-kill-layout-on-exit
|
|
(persp-kill mu4e-spacemacs-layout-name))))))
|
|
|
|
(defun mu4e/init-mu4e ()
|
|
(use-package mu4e
|
|
:commands (mu4e mu4e-compose-new)
|
|
:init
|
|
(progn
|
|
(spacemacs/set-leader-keys "a M" 'mu4e)
|
|
(global-set-key (kbd "C-x m") 'mu4e-compose-new)
|
|
(setq mu4e-completing-read-function 'completing-read
|
|
mu4e-use-fancy-chars 't
|
|
mu4e-view-show-images 't
|
|
message-kill-buffer-on-exit 't)
|
|
(let ((dir "~/Downloads"))
|
|
(when (file-directory-p dir)
|
|
(setq mu4e-attachment-dir dir))))
|
|
|
|
:config
|
|
(progn
|
|
(evilified-state-evilify-map mu4e-main-mode-map
|
|
:mode mu4e-main-mode
|
|
:bindings
|
|
(kbd "j") 'mu4e~headers-jump-to-maildir
|
|
(kbd "C-j") 'next-line
|
|
(kbd "C-k") 'previous-line)
|
|
|
|
(evilified-state-evilify-map
|
|
mu4e-headers-mode-map
|
|
:mode mu4e-headers-mode
|
|
:bindings
|
|
(kbd "C-j") 'mu4e-headers-next
|
|
(kbd "C-k") 'mu4e-headers-prev
|
|
(kbd "J") (lambda ()
|
|
(interactive)
|
|
(mu4e-headers-mark-thread nil '(read))))
|
|
|
|
(evilified-state-evilify-map
|
|
mu4e-view-mode-map
|
|
:mode mu4e-view-mode
|
|
:bindings
|
|
(kbd "C-j") 'mu4e-view-headers-next
|
|
(kbd "C-k") 'mu4e-view-headers-prev
|
|
(kbd "J") (lambda ()
|
|
(interactive)
|
|
(mu4e-view-mark-thread '(read)))
|
|
(kbd "gu") 'mu4e-view-go-to-url)
|
|
|
|
(spacemacs/set-leader-keys-for-major-mode 'mu4e-compose-mode
|
|
dotspacemacs-major-mode-leader-key 'message-send-and-exit
|
|
"c" 'message-send-and-exit
|
|
"k" 'message-kill-buffer
|
|
"a" 'message-kill-buffer
|
|
"s" 'message-dont-send ; saves as draft
|
|
"f" 'mml-attach-file)
|
|
|
|
(when mu4e-enable-async-operations
|
|
(require 'smtpmail-async)
|
|
(setq send-mail-function 'async-smtpmail-send-it
|
|
message-send-mail-function 'async-smtpmail-send-it))
|
|
|
|
(when (fboundp 'imagemagick-register-types)
|
|
(imagemagick-register-types))
|
|
|
|
(add-to-list 'mu4e-view-actions
|
|
'("View in browser" . mu4e-action-view-in-browser) t)
|
|
|
|
(add-hook 'mu4e-compose-mode-hook
|
|
(lambda () (use-hard-newlines t 'guess)))
|
|
|
|
;; from http://www.djcbsoftware.nl/code/mu/mu4e/Attaching-files-with-dired.html
|
|
(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))))
|
|
|
|
(defun mu4e/init-mu4e-alert ()
|
|
(use-package mu4e-alert
|
|
:defer t
|
|
:init (with-eval-after-load 'mu4e
|
|
(when mu4e-enable-notifications
|
|
(mu4e-alert-enable-notifications))
|
|
(when mu4e-enable-mode-line
|
|
(mu4e-alert-enable-mode-line-display)))))
|
|
|
|
(defun mu4e/init-helm-mu ()
|
|
(use-package helm-mu
|
|
:defer t
|
|
:init (dolist (m mu4e-modes)
|
|
(spacemacs/set-leader-keys-for-major-mode m
|
|
"S" 'helm-mu
|
|
"/" 'helm-mu
|
|
"C" 'helm-mu-contacts))))
|
|
|
|
(defun mu4e/init-mu4e-maildirs-extension ()
|
|
"If mu4e-use-maildirs-extension is non-nil, set
|
|
mu4e-use-maildirs-extension-load to be evaluated after mu4e has been loaded."
|
|
(use-package mu4e-maildirs-extension
|
|
:if mu4e-use-maildirs-extension
|
|
:init (with-eval-after-load 'mu4e (mu4e-maildirs-extension-load))))
|
|
|
|
(defun mu4e/pre-init-org ()
|
|
;; load org-mu4e when org is actually loaded
|
|
(with-eval-after-load 'org (require 'org-mu4e nil 'noerror)))
|
|
|
|
(defun mu4e/pre-init-window-purpose ()
|
|
(spacemacs|use-package-add-hook window-purpose
|
|
:pre-config
|
|
(dolist (mode mu4e-list-modes)
|
|
(add-to-list 'purpose-user-mode-purposes (cons mode 'mail)))
|
|
(dolist (mode mu4e-view-modes)
|
|
(add-to-list 'purpose-user-mode-purposes (cons mode 'mail-view)))))
|