mirror of https://github.com/djcb/mu.git
mu4e: more support for fancy-chars
Re-simplify `mu4e-use-fancy-chars` to a boolean again; add some extra mark-chars (big character, so they are easily visible). Document it.
This commit is contained in:
parent
3cf96899ef
commit
ddcd2f39b5
|
@ -170,28 +170,26 @@ Field must be a symbol, one of: :date, :subject, :size, :prio,
|
||||||
"Direction to sort by; a symbol either `descending' (sorting
|
"Direction to sort by; a symbol either `descending' (sorting
|
||||||
Z->A) or `ascending' (sorting A->Z).")
|
Z->A) or `ascending' (sorting A->Z).")
|
||||||
|
|
||||||
|
|
||||||
;; marks for headers of the form; each is a cons-cell (basic . fancy)
|
;; marks for headers of the form; each is a cons-cell (basic . fancy)
|
||||||
;; each of which is basic ascii char and something fancy, respectively
|
;; each of which is basic ascii char and something fancy, respectively
|
||||||
(defvar mu4e-headers-draft-mark '("D" . "⚒") "Draft.")
|
(defvar mu4e-headers-draft-mark '("D" . "⚒") "Draft.")
|
||||||
(defvar mu4e-headers-flagged-mark '("F" . "⚑") "Flagged.")
|
(defvar mu4e-headers-flagged-mark '("F" . "✚") "Flagged.")
|
||||||
(defvar mu4e-headers-new-mark '("N" . "⭑") "New.")
|
(defvar mu4e-headers-new-mark '("N" . "✱") "New.")
|
||||||
(defvar mu4e-headers-passed-mark '("P" . "❯") "Passed (fwd).")
|
(defvar mu4e-headers-passed-mark '("P" . "❯") "Passed (fwd).")
|
||||||
(defvar mu4e-headers-replied-mark '("R" . "❮") "Replied.")
|
(defvar mu4e-headers-replied-mark '("R" . "❮") "Replied.")
|
||||||
(defvar mu4e-headers-seen-mark '("S" . "✔") "Seen.")
|
(defvar mu4e-headers-seen-mark '("S" . "✔") "Seen.")
|
||||||
(defvar mu4e-headers-trashed-mark '("T" . "♻") "Trashed.")
|
(defvar mu4e-headers-trashed-mark '("T" . "✀") "Trashed.")
|
||||||
(defvar mu4e-headers-attach-mark '("a" . "⚓") "W/ attachments.")
|
(defvar mu4e-headers-attach-mark '("a" . "⚓") "W/ attachments.")
|
||||||
(defvar mu4e-headers-encrypted-mark '("x" . "⚴") "Encrypted.")
|
(defvar mu4e-headers-encrypted-mark '("x" . "⚴") "Encrypted.")
|
||||||
(defvar mu4e-headers-signed-mark '("s" . "☡") "Signed.")
|
(defvar mu4e-headers-signed-mark '("s" . "☡") "Signed.")
|
||||||
(defvar mu4e-headers-unread-mark '("u" . "☐") "Unread.")
|
(defvar mu4e-headers-unread-mark '("u" . "🖂") "Unread.")
|
||||||
|
|
||||||
;; thread prefix marks
|
;; thread prefix marks
|
||||||
(defvar mu4e-headers-has-child-prefix '("+" . "◼") "Parent.")
|
(defvar mu4e-headers-has-child-prefix '("+" . "◼") "Parent.")
|
||||||
(defvar mu4e-headers-empty-parent-prefix '("-" . "◽") "Orphan.")
|
(defvar mu4e-headers-empty-parent-prefix '("-" . "◽") "Orphan.")
|
||||||
(defvar mu4e-headers-first-child-prefix '("\\" . "┗▶") "First child.")
|
(defvar mu4e-headers-first-child-prefix '("\\" . "┗▶") "First child.")
|
||||||
(defvar mu4e-headers-duplicate-prefix '("=" . "⚌") "Duplicate.")
|
(defvar mu4e-headers-duplicate-prefix '("=" . "≡") "Duplicate.")
|
||||||
(defvar mu4e-headers-default-prefix '("|" . "┃") "Default.")
|
(defvar mu4e-headers-default-prefix '("|" . "│") "Default.")
|
||||||
|
|
||||||
|
|
||||||
(defvar mu4e-headers-actions
|
(defvar mu4e-headers-actions
|
||||||
'( ("capture message" . mu4e-action-capture-message)
|
'( ("capture message" . mu4e-action-capture-message)
|
||||||
|
@ -354,8 +352,7 @@ into a string."
|
||||||
"Calculate the thread prefix based on thread info THREAD."
|
"Calculate the thread prefix based on thread info THREAD."
|
||||||
(when thread
|
(when thread
|
||||||
(let ((get-prefix
|
(let ((get-prefix
|
||||||
(lambda (cell) (if (or (eq mu4e-use-fancy-chars t)
|
(lambda (cell) (if mu4e-use-fancy-chars (cdr cell) (car cell)))))
|
||||||
(eq mu4e-use-fancy-chars 'threads)) (cdr cell) (car cell)))))
|
|
||||||
(concat
|
(concat
|
||||||
(make-string (* (if (plist-get thread :empty-parent) 0 1)
|
(make-string (* (if (plist-get thread :empty-parent) 0 1)
|
||||||
(plist-get thread :level)) ?\s)
|
(plist-get thread :level)) ?\s)
|
||||||
|
@ -380,9 +377,7 @@ internally, the Maildir spec determines what the flags look like,
|
||||||
while our display may be different)."
|
while our display may be different)."
|
||||||
(let ((str "")
|
(let ((str "")
|
||||||
(get-prefix
|
(get-prefix
|
||||||
(lambda (cell) (if (or (eq mu4e-use-fancy-chars t)
|
(lambda (cell) (if mu4e-use-fancy-chars (cdr cell) (car cell)))))
|
||||||
(eq mu4e-use-fancy-chars 'marks)) (cdr cell) (car cell)))))
|
|
||||||
|
|
||||||
(dolist (flag mu4e-headers-visible-flags)
|
(dolist (flag mu4e-headers-visible-flags)
|
||||||
(when (member flag flags)
|
(when (member flag flags)
|
||||||
(setq str
|
(setq str
|
||||||
|
|
|
@ -120,14 +120,79 @@ is either a headers or view buffer."
|
||||||
,@body)
|
,@body)
|
||||||
(progn (mu4e-message "%S" major-mode) ,@body))))))
|
(progn (mu4e-message "%S" major-mode) ,@body))))))
|
||||||
|
|
||||||
(defvar mu4e-marks nil
|
(defvar mu4e-marks
|
||||||
|
'((refile
|
||||||
|
:char ("r" . "▶")
|
||||||
|
:prompt "refile"
|
||||||
|
:dyn-target (lambda (target msg) (mu4e-get-refile-folder msg))
|
||||||
|
:action (lambda (docid msg target) (mu4e~proc-move docid
|
||||||
|
(mu4e~mark-check-target target) "-N")))
|
||||||
|
(delete
|
||||||
|
:char ("D" . "🗙")
|
||||||
|
:prompt "Delete"
|
||||||
|
:show-target (lambda (target) "delete")
|
||||||
|
:action (lambda (docid msg target) (mu4e~proc-remove docid)))
|
||||||
|
(flag
|
||||||
|
:char ("+" . "✚")
|
||||||
|
:prompt "+flag"
|
||||||
|
:show-target (lambda (target) "flag")
|
||||||
|
:action (lambda (docid msg target) (mu4e~proc-move docid nil "+F-u-N")))
|
||||||
|
(move
|
||||||
|
:char ("m" . "▷")
|
||||||
|
:prompt "move"
|
||||||
|
:ask-target mu4e~mark-get-move-target
|
||||||
|
:action (lambda (docid msg target) (mu4e~proc-move docid
|
||||||
|
(mu4e~mark-check-target target) "-N")))
|
||||||
|
(read
|
||||||
|
:char ("!" . "☑")
|
||||||
|
:prompt "!read"
|
||||||
|
:show-target (lambda (target) "read")
|
||||||
|
:action (lambda (docid msg target) (mu4e~proc-move docid nil "+S-u-N")))
|
||||||
|
(trash
|
||||||
|
:char ("d" . "✀")
|
||||||
|
:prompt "dtrash"
|
||||||
|
:dyn-target (lambda (target msg) (mu4e-get-trash-folder msg))
|
||||||
|
:action (lambda (docid msg target) (mu4e~proc-move docid
|
||||||
|
(mu4e~mark-check-target target) "+T-N")))
|
||||||
|
(unflag
|
||||||
|
:char ("-" . "➖")
|
||||||
|
:prompt "-unflag"
|
||||||
|
:show-target (lambda (target) "unflag")
|
||||||
|
:action (lambda (docid msg target) (mu4e~proc-move docid nil "-F-N")))
|
||||||
|
(untrash
|
||||||
|
:char ("=" . "🡸")
|
||||||
|
:prompt "=untrash"
|
||||||
|
:show-target (lambda (target) "untrash")
|
||||||
|
:action (lambda (docid msg target) (mu4e~proc-move docid nil "-T")))
|
||||||
|
(unread
|
||||||
|
:char ("?" . "☐")
|
||||||
|
:prompt "?unread"
|
||||||
|
:show-target (lambda (target) "unread")
|
||||||
|
:action (lambda (docid msg target) (mu4e~proc-move docid nil "-S+u-N")))
|
||||||
|
(unmark
|
||||||
|
:char " "
|
||||||
|
:prompt "unmark"
|
||||||
|
:action (mu4e-error "No action for unmarking"))
|
||||||
|
(action
|
||||||
|
:char ( "a" . "🗲")
|
||||||
|
:prompt "action"
|
||||||
|
:ask-target (lambda () (mu4e-read-option "Action: " mu4e-headers-actions))
|
||||||
|
:action (lambda (docid msg actionfunc)
|
||||||
|
(save-excursion
|
||||||
|
(when (mu4e~headers-goto-docid docid)
|
||||||
|
(mu4e-headers-action actionfunc)))))
|
||||||
|
(something
|
||||||
|
:char ("*" . "✱")
|
||||||
|
:prompt "*something"
|
||||||
|
:action (mu4e-error "No action for deferred mark")))
|
||||||
|
|
||||||
"The list of all the possible marks.
|
"The list of all the possible marks.
|
||||||
This is an alist mapping mark symbols to their properties. The
|
This is an alist mapping mark symbols to their properties. The
|
||||||
properties are:
|
properties are:
|
||||||
:char (string) or (basic . fancy) The character to display in
|
:char (string) or (basic . fancy) The character to display in
|
||||||
the headers view. Either a single-character string, or a
|
the headers view. Either a single-character string, or a
|
||||||
dotted-pair cons cell where the second item will be used if
|
dotted-pair cons cell where the second item will be used if
|
||||||
`mu4e-use-fancy-chars' is `t' or `marks', otherwise we'll use
|
`mu4e-use-fancy-chars' is `t', otherwise we'll use
|
||||||
the first one. It can also be a plain string for backwards
|
the first one. It can also be a plain string for backwards
|
||||||
compatibility since we didn't always support
|
compatibility since we didn't always support
|
||||||
`mu4e-use-fancy-chars' here.
|
`mu4e-use-fancy-chars' here.
|
||||||
|
@ -142,73 +207,7 @@ properties are:
|
||||||
:show-target (function from TARGET to string) How to display
|
:show-target (function from TARGET to string) How to display
|
||||||
the target.
|
the target.
|
||||||
:action (function taking (DOCID MSG TARGET)). The action to
|
:action (function taking (DOCID MSG TARGET)). The action to
|
||||||
apply on the message.
|
apply on the message.")
|
||||||
")
|
|
||||||
|
|
||||||
(unless mu4e-marks
|
|
||||||
(setq mu4e-marks
|
|
||||||
'((refile
|
|
||||||
:char "r"
|
|
||||||
:prompt "refile"
|
|
||||||
:dyn-target (lambda (target msg) (mu4e-get-refile-folder msg))
|
|
||||||
:action (lambda (docid msg target) (mu4e~proc-move docid (mu4e~mark-check-target target) "-N")))
|
|
||||||
(delete
|
|
||||||
:char ("D" . "🗙")
|
|
||||||
:prompt "Delete"
|
|
||||||
:show-target (lambda (target) "delete")
|
|
||||||
:action (lambda (docid msg target) (mu4e~proc-remove docid)))
|
|
||||||
(flag
|
|
||||||
:char "+"
|
|
||||||
:prompt "+flag"
|
|
||||||
:show-target (lambda (target) "flag")
|
|
||||||
:action (lambda (docid msg target) (mu4e~proc-move docid nil "+F-u-N")))
|
|
||||||
(move
|
|
||||||
:char "m"
|
|
||||||
:prompt "move"
|
|
||||||
:ask-target mu4e~mark-get-move-target
|
|
||||||
:action (lambda (docid msg target) (mu4e~proc-move docid (mu4e~mark-check-target target) "-N")))
|
|
||||||
(read
|
|
||||||
:char "!"
|
|
||||||
:prompt "!read"
|
|
||||||
:show-target (lambda (target) "read")
|
|
||||||
:action (lambda (docid msg target) (mu4e~proc-move docid nil "+S-u-N")))
|
|
||||||
(trash
|
|
||||||
:char ("d" . "🗑")
|
|
||||||
:prompt "dtrash"
|
|
||||||
:dyn-target (lambda (target msg) (mu4e-get-trash-folder msg))
|
|
||||||
:action (lambda (docid msg target) (mu4e~proc-move docid (mu4e~mark-check-target target) "+T-N")))
|
|
||||||
(unflag
|
|
||||||
:char "-"
|
|
||||||
:prompt "-unflag"
|
|
||||||
:show-target (lambda (target) "unflag")
|
|
||||||
:action (lambda (docid msg target) (mu4e~proc-move docid nil "-F-N")))
|
|
||||||
(untrash
|
|
||||||
:char "="
|
|
||||||
:prompt "=untrash"
|
|
||||||
:show-target (lambda (target) "untrash")
|
|
||||||
:action (lambda (docid msg target) (mu4e~proc-move docid nil "-T")))
|
|
||||||
(unread
|
|
||||||
:char "?"
|
|
||||||
:prompt "?unread"
|
|
||||||
:show-target (lambda (target) "unread")
|
|
||||||
:action (lambda (docid msg target) (mu4e~proc-move docid nil "-S+u-N")))
|
|
||||||
(unmark
|
|
||||||
:char " "
|
|
||||||
:prompt "unmark"
|
|
||||||
:action (mu4e-error "No action for unmarking"))
|
|
||||||
(action
|
|
||||||
:char "a"
|
|
||||||
:prompt "action"
|
|
||||||
:ask-target (lambda () (mu4e-read-option "Action: " mu4e-headers-actions))
|
|
||||||
:action (lambda (docid msg actionfunc)
|
|
||||||
(save-excursion
|
|
||||||
(when (mu4e~headers-goto-docid docid)
|
|
||||||
(mu4e-headers-action actionfunc)))))
|
|
||||||
(something
|
|
||||||
:char "*"
|
|
||||||
:prompt "*something"
|
|
||||||
:action (mu4e-error "No action for deferred mark"))
|
|
||||||
)))
|
|
||||||
|
|
||||||
|
|
||||||
(defun mu4e-mark-at-point (mark target)
|
(defun mu4e-mark-at-point (mark target)
|
||||||
|
@ -244,9 +243,7 @@ The following marks are available, and the corresponding props:
|
||||||
(get-markkar
|
(get-markkar
|
||||||
(lambda (char)
|
(lambda (char)
|
||||||
(if (listp char)
|
(if (listp char)
|
||||||
(if (or (eq mu4e-use-fancy-chars t)
|
(if mu4e-use-fancy-chars (cdr char) (car char))
|
||||||
(eq mu4e-use-fancy-chars 'marks))
|
|
||||||
(cdr char) (car char))
|
|
||||||
char)))
|
char)))
|
||||||
(markkar (funcall get-markkar (plist-get markdesc :char)))
|
(markkar (funcall get-markkar (plist-get markdesc :char)))
|
||||||
(target (mu4e~mark-get-dyn-target mark target))
|
(target (mu4e~mark-get-dyn-target mark target))
|
||||||
|
|
|
@ -141,11 +141,11 @@ as per RFC531."
|
||||||
'mu4e-user-mail-address-list "0.9.9.x")
|
'mu4e-user-mail-address-list "0.9.9.x")
|
||||||
|
|
||||||
(defcustom mu4e-use-fancy-chars nil
|
(defcustom mu4e-use-fancy-chars nil
|
||||||
"Whether to use fancy (non-ascii) characters for marks and/or threads."
|
"Whether to use fancy (Unicode) characters for marks and
|
||||||
:type '(choice (const :tag "Do not use fancy chars" nil)
|
threads. You can customize the exact fancy characters used with
|
||||||
(const :tag "Use fancy chars everywhere" t)
|
`mu4e-marks' and various `mu4e-headers-..-mark' and
|
||||||
(const :tag "Use fancy chars only for threads" threads)
|
`mu4e-headers..-prefix' variables."
|
||||||
(const :tag "Use fancy chars only for marks" marks))
|
:type 'boolean
|
||||||
:group 'mu4e)
|
:group 'mu4e)
|
||||||
|
|
||||||
(defcustom mu4e-date-format-long "%c"
|
(defcustom mu4e-date-format-long "%c"
|
||||||
|
|
|
@ -3445,8 +3445,10 @@ should take you to the right place in this manual.
|
||||||
See @ref{Setting the default emacs mail program}.
|
See @ref{Setting the default emacs mail program}.
|
||||||
@item @emph{Can @t{mu4e} use some fancy Unicode characters instead of these
|
@item @emph{Can @t{mu4e} use some fancy Unicode characters instead of these
|
||||||
boring plain-ASCII ones?} Glad you asked! Yes, if you set
|
boring plain-ASCII ones?} Glad you asked! Yes, if you set
|
||||||
@code{mu4e-use-fancy-chars} to @t{t}, @t{mu4e} uses such fancy characters in a
|
@code{mu4e-use-fancy-chars} to @t{t}, @t{mu4e} uses such fancy
|
||||||
number of places.
|
characters in a number of places. Since not all fonts include all
|
||||||
|
characters, you may want to install the @t{unifont} and/or @t{symbola}
|
||||||
|
fonts on your system.
|
||||||
@item @emph{Can I start @t{mu4e} in the background?} Yes - if you provide a
|
@item @emph{Can I start @t{mu4e} in the background?} Yes - if you provide a
|
||||||
prefix-argument (@key{C-u}), @t{mu4e} starts, but does not show the
|
prefix-argument (@key{C-u}), @t{mu4e} starts, but does not show the
|
||||||
main-window.
|
main-window.
|
||||||
|
@ -3935,8 +3937,8 @@ slightly off; the reason for this issue is that Inconsolata does not
|
||||||
contain the glyphs for the 'fancy' arrows and the glyphs that are used
|
contain the glyphs for the 'fancy' arrows and the glyphs that are used
|
||||||
as replacements are too high.
|
as replacements are too high.
|
||||||
|
|
||||||
To fix this, you can use something like the following workaround (in your
|
To fix this, you can use something like the following workaround (in
|
||||||
@t{.emacs}-file):
|
your @t{.emacs}-file):
|
||||||
@lisp
|
@lisp
|
||||||
(if (equal window-system 'x)
|
(if (equal window-system 'x)
|
||||||
(progn
|
(progn
|
||||||
|
@ -3944,6 +3946,9 @@ To fix this, you can use something like the following workaround (in your
|
||||||
(set-face-font 'default "Inconsolata-10")))
|
(set-face-font 'default "Inconsolata-10")))
|
||||||
@end lisp
|
@end lisp
|
||||||
|
|
||||||
|
Other fonts with good support for Unicode are @t{unifont} and
|
||||||
|
@t{symbola}.
|
||||||
|
|
||||||
@node Confirmation before sending
|
@node Confirmation before sending
|
||||||
@section Confirmation before sending
|
@section Confirmation before sending
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue