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") (nerd-icons "0.0.1"))
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
)
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 "Prefer to use unicode icons over nerd-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" .
,(nerd-icons-mdicon "nf-md-email_open_outline" :face
'nerd-icons-dsilver
))
95 mu4e-headers-new-mark
`("N" .
,(nerd-icons-mdicon "nf-md-email_mark_as_unread" :face
'nerd-icons-lgreen
))
96 mu4e-headers-unread-mark
`("u" .
,(nerd-icons-mdicon "nf-md-email_outline" :face
'nerd-icons-green
))
97 mu4e-headers-signed-mark
`("s" .
,(nerd-icons-mdicon "nf-md-email_seal_outline" :face
'nerd-icons-blue
)) ; "nf-md-email_check_outline"
98 mu4e-headers-encrypted-mark
`("x" .
,(nerd-icons-mdicon "nf-md-email_lock" :face
'nerd-icons-purple
))
99 mu4e-headers-draft-mark
`("D" .
,(nerd-icons-mdicon "nf-md-email_edit_outline" :face
'nerd-icons-orange
))
100 mu4e-headers-attach-mark
`("a" .
,(nerd-icons-mdicon "nf-md-email_plus_outline" :face
'nerd-icons-lorange
))
101 mu4e-headers-passed-mark
`("P" .
,(nerd-icons-mdicon "nf-md-email_fast_outline" :face
'nerd-icons-lpink
)) ; ❯ (I'm participated in thread) / Forward
102 mu4e-headers-flagged-mark
`("F" .
,(nerd-icons-mdicon "nf-md-email_alert_outline" :face
'nerd-icons-lred
))
103 mu4e-headers-replied-mark
`("R" .
,(nerd-icons-mdicon "nf-md-reply" :face
'nerd-icons-silver
))
104 mu4e-headers-trashed-mark
`("T" .
,(nerd-icons-mdicon "nf-md-trash_can_outline" :face
'nerd-icons-dsilver
))
105 mu4e-headers-thread-duplicate-prefix
`("=" .
,(nerd-icons-mdicon "nf-md-content_duplicate" :face
'nerd-icons-dorange
))
106 mu4e-headers-list-mark
`("s" .
,(nerd-icons-codicon "nf-cod-list_tree" :face
'nerd-icons-silver
))
107 mu4e-headers-personal-mark
`("p" .
,(nerd-icons-codicon "nf-cod-person" :face
'nerd-icons-cyan-alt
))
108 mu4e-headers-calendar-mark
`("c" .
,(nerd-icons-mdicon "nf-md-calendar_import" :face
'nerd-icons-lorange
)))))
110 (defun mu4e-marker-icons-disable ()
111 "Disable mu4e-marker-icons."
112 (mu4e-marker-icons--restore mu4e-marker-icons-marker-alist
))
115 (define-minor-mode mu4e-marker-icons-mode
116 "Display icons for mu4e markers."
117 :require
'mu4e-marker-icons-mode
120 (if mu4e-marker-icons-mode
121 (mu4e-marker-icons-enable)
122 (mu4e-marker-icons-disable)))
126 (provide 'mu4e-marker-icons
)
128 ;;; mu4e-marker-icons.el ends here