summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMoritz Poldrack <git@moritz.sh>2022-06-22 12:19:39 +0200
committerRobin Jarry <robin@jarry.cc>2022-06-24 21:44:02 +0200
commitecf47542cb5ec5da7d699b36cf8b8af2cbf0a7a6 (patch)
tree3cd1de3a955f1bd31c8ab806c625516a909cbf2d
parent15a07e589201a3c748835747760a1b41e054ccc0 (diff)
downloadaerc-ecf47542cb5ec5da7d699b36cf8b8af2cbf0a7a6.zip
pgp: add customizable icons
Signed-off-by: Moritz Poldrack <git@moritz.sh> Tested-by: Tim Culverhouse <tim@timculverhouse.com>
-rw-r--r--config/aerc.conf10
-rw-r--r--config/config.go12
-rw-r--r--doc/aerc-config.5.scd33
-rw-r--r--widgets/pgpinfo.go20
4 files changed, 71 insertions, 4 deletions
diff --git a/config/aerc.conf b/config/aerc.conf
index 588cc7a..2f7597c 100644
--- a/config/aerc.conf
+++ b/config/aerc.conf
@@ -156,6 +156,16 @@ completion-delay=250ms
# Default: true
completion-popovers=true
+# Uncomment to use UTF-8 symbols to indicate PGP status of messages
+#
+# Default: ASCII
+#icon-unencrypted=
+#icon-encrypted=✔
+#icon-signed=✔
+#icon-signed-encrypted=✔
+#icon-unknown=✘
+#icon-invalid=⚠
+
#[ui:account=foo]
#
# Enable threading in the ui. Only works with notmuch:// and imap:// accounts
diff --git a/config/config.go b/config/config.go
index 941a726..a6ee578 100644
--- a/config/config.go
+++ b/config/config.go
@@ -50,6 +50,12 @@ type UIConfig struct {
NewMessageBell bool `ini:"new-message-bell"`
Spinner string `ini:"spinner"`
SpinnerDelimiter string `ini:"spinner-delimiter"`
+ IconUnencrypted string `ini:"icon-unencrypted"`
+ IconEncrypted string `ini:"icon-encrypted"`
+ IconSigned string `ini:"icon-signed"`
+ IconSignedEncrypted string `ini:"icon-signed-encrypted"`
+ IconUnknown string `ini:"icon-unknown"`
+ IconInvalid string `ini:"icon-invalid"`
DirListFormat string `ini:"dirlist-format"`
DirListDelay time.Duration `ini:"dirlist-delay"`
DirListTree bool `ini:"dirlist-tree"`
@@ -702,6 +708,12 @@ func LoadConfigFromFile(root *string, logger *log.Logger) (*AercConfig, error) {
FuzzyComplete: false,
Spinner: "[..] , [..] , [..] , [..] , [..], [..] , [..] , [..] ",
SpinnerDelimiter: ",",
+ IconUnencrypted: "",
+ IconSigned: "[s]",
+ IconEncrypted: "[e]",
+ IconSignedEncrypted: "",
+ IconUnknown: "[s?]",
+ IconInvalid: "[s!]",
DirListFormat: "%n %>r",
DirListDelay: 200 * time.Millisecond,
NextMessageOnDelete: true,
diff --git a/doc/aerc-config.5.scd b/doc/aerc-config.5.scd
index 9f61b94..d13587c 100644
--- a/doc/aerc-config.5.scd
+++ b/doc/aerc-config.5.scd
@@ -253,6 +253,39 @@ These options are configured in the *[ui]* section of aerc.conf.
Have a look at *aerc-stylesets*(7) as to how a styleset looks like.
+*icon-unencrypted*
+ The icon to display for unencrypted mails.
+
+ Default: ""
+
+*icon-encrypted*
+ The icon to display for encrypted mails.
+
+ Default: [e]
+
+*icon-signed*
+ The icon to display for signed mails where the signature was
+ successfully validated.
+
+ Default: [s]
+
+*icon-signed-encrypted*
+ The icon to display for signed and encrypted mails where the signature
+ was successfully verified.
+
+ Default: [s|e]
+
+*icon-unknown*
+ The icon to display for signed mails which could not be verified due to
+ the key being unknown.
+
+ Default: [s?]
+
+*icon-invalid*
+ The icon to display for signed mails where verification failed.
+
+ Default: [s!]
+
*fuzzy-complete*
When typing a command or option, the popover will now show not only the
items /starting/ with the string input by the user, but it will also show
diff --git a/widgets/pgpinfo.go b/widgets/pgpinfo.go
index 05e2053..38118b7 100644
--- a/widgets/pgpinfo.go
+++ b/widgets/pgpinfo.go
@@ -1,6 +1,9 @@
package widgets
import (
+ "strings"
+ "unicode/utf8"
+
"git.sr.ht/~rjarry/aerc/config"
"git.sr.ht/~rjarry/aerc/lib/ui"
"git.sr.ht/~rjarry/aerc/models"
@@ -26,17 +29,21 @@ func (p *PGPInfo) DrawSignature(ctx *ui.Context) {
if p.details.SignatureValidity == models.UnknownEntity ||
p.details.SignedBy == "" {
- x := ctx.Printf(0, 0, warningStyle, "*")
+ x := ctx.Printf(0, 0, warningStyle, "%s unknown", p.uiConfig.IconUnknown)
x += ctx.Printf(x, 0, defaultStyle,
" Signed with unknown key (%8X); authenticity unknown",
p.details.SignedByKeyId)
} else if p.details.SignatureValidity != models.Valid {
- x := ctx.Printf(0, 0, errorStyle, "Invalid signature!")
+ x := ctx.Printf(0, 0, errorStyle, "%s Invalid signature!", p.uiConfig.IconInvalid)
x += ctx.Printf(x, 0, errorStyle,
" This message may have been tampered with! (%s)",
p.details.SignatureError)
} else {
- x := ctx.Printf(0, 0, validStyle, "✓ Authentic ")
+ icon := p.uiConfig.IconSigned
+ if p.details.IsEncrypted {
+ icon = p.uiConfig.IconSignedEncrypted
+ }
+ x := ctx.Printf(0, 0, validStyle, "%s Authentic ", icon)
x += ctx.Printf(x, 0, defaultStyle,
"Signature from %s (%8X)",
p.details.SignedBy, p.details.SignedByKeyId)
@@ -48,7 +55,12 @@ func (p *PGPInfo) DrawEncryption(ctx *ui.Context, y int) {
validStyle := p.uiConfig.GetStyle(config.STYLE_SUCCESS)
defaultStyle := p.uiConfig.GetStyle(config.STYLE_DEFAULT)
- x := ctx.Printf(0, y, validStyle, "✓ Encrypted ")
+ icon := p.uiConfig.IconEncrypted
+ if p.details.IsSigned && p.details.SignatureValidity == models.Valid {
+ icon = strings.Repeat(" ", utf8.RuneCountInString(p.uiConfig.IconSignedEncrypted))
+ }
+
+ x := ctx.Printf(0, y, validStyle, "%s Encrypted ", icon)
x += ctx.Printf(x, y, defaultStyle,
"To %s (%8X) ", p.details.DecryptedWith, p.details.DecryptedWithKeyId)
if !p.details.IsSigned {