1 ;;; mu4e-marker-icons.el --- Display icons for mu4e markers -*- lexical-binding: t; -*-
2 ;; -*- coding: utf-8 -*-
4 ;; Authors: stardiviner <numbchild@gmail.com>
5 ;; Package-Requires: ((emacs "26.1") (all-the-icons "4.0.0"))
8 ;; homepage: https://repo.or.cz/mu4e-marker-icons.git
10 ;; Copyright (C) 2020-2021 Free Software Foundation, Inc.
12 ;; mu4e-marker-icons is free software; you can redistribute it and/or modify it
13 ;; under the terms of the GNU General Public License as published by
14 ;; the Free Software Foundation; either version 3, or (at your option)
17 ;; mu4e-marker-icons is distributed in the hope that it will be useful, but WITHOUT
18 ;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
19 ;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
20 ;; License for more details.
23 ;; You should have received a copy of the GNU General Public License
24 ;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
30 ;; (mu4e-marker-icons-mode 1)
34 (require 'mu4e-headers
)
35 (require 'all-the-icons
)
37 (defgroup mu4e-marker-icons nil
38 "Display icons for mu4e markers."
39 :group
'mu4e-marker-icons
)
41 (defcustom mu4e-marker-icons-use-unicode nil
42 "Whether use unicode icons instead of all-the-icons."
46 (defvar mu4e-marker-icons-marker-alist
47 '((mu4e-headers-seen-mark . mu4e-marker-icons-saved-headers-seen-mark
)
48 (mu4e-headers-new-mark . mu4e-marker-icons-saved-headers-new-mark
)
49 (mu4e-headers-unread-mark . mu4e-marker-icons-saved-headers-unread-mark
)
50 (mu4e-headers-signed-mark . mu4e-marker-icons-saved-headers-signed-mark
)
51 (mu4e-headers-encrypted-mark . mu4e-marker-icons-saved-headers-encrypted-mark
)
52 (mu4e-headers-draft-mark . mu4e-marker-icons-saved-headers-draft-mark
)
53 (mu4e-headers-attach-mark . mu4e-marker-icons-saved-headers-attach-mark
)
54 (mu4e-headers-passed-mark . mu4e-marker-icons-saved-headers-passed-mark
)
55 (mu4e-headers-flagged-mark . mu4e-marker-icons-saved-headers-flagged-mark
)
56 (mu4e-headers-replied-mark . mu4e-marker-icons-saved-headers-replied-mark
)
57 (mu4e-headers-trashed-mark . mu4e-marker-icons-saved-headers-trashed-mark
))
58 "An alist of markers used in mu4e.")
60 (defun mu4e-marker-icons--store (l)
61 "Store mu4e header markers value from L."
62 (mapcar (lambda (x) (set (cdr x
) (symbol-value (car x
)))) l
))
64 (defun mu4e-marker-icons--restore (l)
65 "Restore mu4e header markers value from L."
66 (let ((lrev (mapcar (lambda (x) (cons (cdr x
) (car x
))) l
)))
67 (mu4e-marker-icons--store lrev
)))
70 (defun mu4e-marker-icons-enable ()
71 "Enable mu4e-marker-icons."
72 (mu4e-marker-icons--store mu4e-marker-icons-marker-alist
)
73 (setq mu4e-use-fancy-chars t
)
74 (setq mu4e-headers-precise-alignment t
)
75 (if mu4e-marker-icons-use-unicode
76 ;; The unicode icons is totally from http://xenodium.com/mu4e-icons, Thanks, Alvaro Ramirez.
77 (setq mu4e-headers-unread-mark
'("u" .
"📩")
78 mu4e-headers-draft-mark
'("D" .
"🚧")
79 mu4e-headers-flagged-mark
'("F" .
"🚩")
80 mu4e-headers-new-mark
'("N" .
"✨")
81 mu4e-headers-passed-mark
'("P" .
"🆗")
82 mu4e-headers-replied-mark
'("R" .
"📧")
83 mu4e-headers-seen-mark
'("S" .
" ")
84 mu4e-headers-trashed-mark
'("T" .
"❎")
85 mu4e-headers-attach-mark
'("a" .
"📎")
86 mu4e-headers-encrypted-mark
'("x" .
"🔐")
87 mu4e-headers-signed-mark
'("s" .
"🔑")
88 mu4e-headers-thread-duplicate-prefix
'("Ⓓ" .
"♊") ; ("=" . "≡ ")
89 mu4e-headers-list-mark
'("s" .
"📬")
90 mu4e-headers-personal-mark
'("p" .
"🙍")
91 mu4e-headers-calendar-mark
'("c" .
"📅")
94 mu4e-headers-seen-mark
`("S" .
,(propertize
95 (all-the-icons-material "mail_outline")
96 'face
`(:family
,(all-the-icons-material-family)
97 :foreground
,(face-background 'default
))))
98 mu4e-headers-new-mark
`("N" .
,(propertize
99 (all-the-icons-material "markunread")
100 'face
`(:family
,(all-the-icons-material-family)
101 :foreground
,(face-background 'default
))))
102 mu4e-headers-unread-mark
`("u" .
,(propertize
103 (all-the-icons-material "notifications_none")
104 'face
'mu4e-unread-face
))
105 mu4e-headers-signed-mark
`("s" .
,(propertize
106 (all-the-icons-material "check")
107 'face
`(:family
,(all-the-icons-material-family)
108 :foreground
"DarkCyan")))
109 mu4e-headers-encrypted-mark
`("x" .
,(propertize
110 (all-the-icons-material "enhanced_encryption")
111 'face
`(:family
,(all-the-icons-material-family)
112 :foreground
"CornflowerBlue")))
113 mu4e-headers-draft-mark
`("D" .
,(propertize
114 (all-the-icons-material "drafts")
115 'face
'mu4e-draft-face
))
116 mu4e-headers-attach-mark
`("a" .
,(propertize
117 (all-the-icons-material "attachment")
118 'face
'mu4e-attach-number-face
))
119 mu4e-headers-passed-mark
`("P" .
,(propertize ; ❯ (I'm participated in thread)
120 (all-the-icons-material "center_focus_weak")
121 'face
`(:family
,(all-the-icons-material-family)
122 :foreground
"yellow")))
123 mu4e-headers-flagged-mark
`("F" .
,(propertize
124 (all-the-icons-material "flag")
125 'face
'mu4e-flagged-face
))
126 mu4e-headers-replied-mark
`("R" .
,(propertize
127 (all-the-icons-material "reply_all")
128 'face
'mu4e-replied-face
))
129 mu4e-headers-trashed-mark
`("T" .
,(propertize
130 (all-the-icons-material "delete_forever")
131 'face
'mu4e-trashed-face
))
132 mu4e-headers-thread-duplicate-prefix
`("=" .
,(propertize
133 (all-the-icons-faicon "bars")
134 'face
'mu4e-warning-face
))
135 mu4e-headers-list-mark
`("s" .
,(propertize
136 (all-the-icons-faicon "list-ul")
137 'face
'mu4e-warning-face
))
138 mu4e-headers-personal-mark
`("p" .
,(propertize
139 (all-the-icons-faicon "user")
140 'face
'mu4e-warning-face
))
141 mu4e-headers-calendar-mark
`("c" .
,(propertize
142 (all-the-icons-faicon "calendar")
143 'face
'mu4e-warning-face
)))))
145 (defun mu4e-marker-icons-disable ()
146 "Disable mu4e-marker-icons."
147 (mu4e-marker-icons--restore mu4e-marker-icons-marker-alist
))
150 (define-minor-mode mu4e-marker-icons-mode
151 "Display icons for mu4e markers."
152 :require
'mu4e-marker-icons-mode
155 (if mu4e-marker-icons-mode
156 (mu4e-marker-icons-enable)
157 (mu4e-marker-icons-disable)))
161 (provide 'mu4e-marker-icons
)
163 ;;; mu4e-marker-icons.el ends here