~sircmpwn/aerc

c655afa32bea3208885386cc3e600d19c934dd39 — Srivathsan Murali 1 year, 2 months ago 4bdef7d
Complete the F rune.

%F now shows the auth name or recepient name/address if the
message is from you.
4 files changed, 27 insertions(+), 6 deletions(-)

M config/triggers.go
M doc/aerc-config.5.scd
M lib/format/format.go
M widgets/msglist.go
M config/triggers.go => config/triggers.go +3 -1
@@ 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

M doc/aerc-config.5.scd => doc/aerc-config.5.scd +3 -2
@@ 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

M lib/format/format.go => lib/format/format.go +20 -3
@@ 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 {

M widgets/msglist.go => widgets/msglist.go +1 -0
@@ 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 {