From c655afa32bea3208885386cc3e600d19c934dd39 Mon Sep 17 00:00:00 2001 From: Srivathsan Murali Date: Tue, 12 Nov 2019 12:50:00 +0100 Subject: [PATCH] Complete the F rune. %F now shows the auth name or recepient name/address if the message is from you. --- config/triggers.go | 4 +++- doc/aerc-config.5.scd | 5 +++-- lib/format/format.go | 23 ++++++++++++++++++++--- widgets/msglist.go | 1 + 4 files changed, 27 insertions(+), 6 deletions(-) diff --git a/config/triggers.go b/config/triggers.go index d31f267..f68cb58 100644 --- a/config/triggers.go +++ b/config/triggers.go @@ -36,7 +36,9 @@ func (trig *TriggersConfig) ExecNewEmail(account *AccountConfig, conf *AercConfig, msg *models.MessageInfo) { err := trig.ExecTrigger(trig.NewEmail, func(part string) (string, error) { - formatstr, args, err := format.ParseMessageFormat(part, + formatstr, args, err := format.ParseMessageFormat( + account.From, + part, conf.Ui.TimestampFormat, account.Name, 0, msg) if err != nil { return "", err diff --git a/doc/aerc-config.5.scd b/doc/aerc-config.5.scd index 0cde160..02fe4d6 100644 --- a/doc/aerc-config.5.scd +++ b/doc/aerc-config.5.scd @@ -57,11 +57,12 @@ These options are configured in the *[ui]* section of aerc.conf. | %f : sender name and address | %F -: sender name, or sender address if none +: author name, or recipient name if the message is from you. + The adderss is shown if no name part. | %i : message id | %n -: same as %F +: sender name, or sender address if none | %r : comma-separated list of formatted recipient names and addresses | %R diff --git a/lib/format/format.go b/lib/format/format.go index b403f2d..a070bc9 100644 --- a/lib/format/format.go +++ b/lib/format/format.go @@ -3,18 +3,32 @@ package format import ( "errors" "fmt" + gomail "net/mail" "strings" "unicode" "git.sr.ht/~sircmpwn/aerc/models" ) -func ParseMessageFormat(format string, timestampformat string, +func parseAddress(address string) *gomail.Address { + addrs, err := gomail.ParseAddress(address) + if err != nil { + return nil + } + + return addrs +} + +func ParseMessageFormat( + fromAddress string, + format string, timestampformat string, accountName string, number int, msg *models.MessageInfo) (string, []interface{}, error) { retval := make([]byte, 0, len(format)) var args []interface{} + accountFromAddress := parseAddress(fromAddress) + var c rune for i, ni := 0, 0; i < len(format); { ni = strings.IndexByte(format[i:], '%') @@ -109,9 +123,12 @@ func ParseMessageFormat(format string, timestampformat string, errors.New("found no address for sender") } addr := msg.Envelope.From[0] - // TODO: handle case when sender is current user. Then - // use recipient's name var val string + + if addr.Name == accountFromAddress.Name { + addr = msg.Envelope.To[0] + } + if addr.Name != "" { val = addr.Name } else { diff --git a/widgets/msglist.go b/widgets/msglist.go index 5c2d2f4..aed3ed5 100644 --- a/widgets/msglist.go +++ b/widgets/msglist.go @@ -107,6 +107,7 @@ func (ml *MessageList) Draw(ctx *ui.Context) { ctx.Fill(0, row, ctx.Width(), 1, ' ', style) fmtStr, args, err := format.ParseMessageFormat( + ml.aerc.SelectedAccount().acct.From, ml.conf.Ui.IndexFormat, ml.conf.Ui.TimestampFormat, "", i, msg) if err != nil {