Fix wrong property text, https://github.com/djcb/mu/issues/2294
[mu4e-marker-icons.git] / mu4e-marker-icons.el
blob6003bdd9fcb65d5c103020e4496087c221adf726
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"))
6 ;; Version: 0.1.0
7 ;; Keywords: mail
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)
15 ;; any later version.
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/>.
26 ;;; Commentary:
28 ;; Usage
30 ;; (mu4e-marker-icons-mode 1)
32 ;;; Code:
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."
43 :type 'boolean
44 :safe #'booleanp)
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" . "📅")
93 (setq
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))
149 ;;;###autoload
150 (define-minor-mode mu4e-marker-icons-mode
151 "Display icons for mu4e markers."
152 :require 'mu4e-marker-icons-mode
153 :init-value nil
154 :global t
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