rename screenshot image filename
[mu4e-marker-icons.git] / mu4e-marker-icons.el
blob0a07d62047a5f2437e3237426d26886318f7011c
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"))
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 'nerd-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 "Prefer to use unicode icons over nerd-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" . ,(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))
114 ;;;###autoload
115 (define-minor-mode mu4e-marker-icons-mode
116 "Display icons for mu4e markers."
117 :require 'mu4e-marker-icons-mode
118 :init-value nil
119 :global t
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