dirlist: add format specifier to compact folder name

Add the format specifier %N to the dirlist-format to display compacted
folder names.

A folder such as INBOX/WORK/PROJECT will be compacted to I/W/PROJECT in
the directoy list.

Signed-off-by: Koni Marti <koni.marti@gmail.com>
Tested-by: Tim Culverhouse <tim@timculverhouse.com>
This commit is contained in:
Koni Marti 2022-04-28 22:09:53 +02:00 committed by Robin Jarry
parent 8f976af17b
commit e1ae7b80cc
3 changed files with 33 additions and 0 deletions

View file

@ -187,6 +187,8 @@ These options are configured in the *[ui]* section of aerc.conf.
: literal %
| %n
: directory name
| %N
: compacted directory name
| %r
: recent/unseen/total message count
| %>X

View file

@ -39,6 +39,33 @@ func FormatAddresses(l []*mail.Address) string {
return strings.Join(formatted, ", ")
}
// CompactPath reduces a directory path into a compact form. The directory
// name will be split with the provided separator and each part will be reduced
// to the first letter in its name: INBOX/01_WORK/PROJECT will become
// I/W/PROJECT.
func CompactPath(name string, sep rune) (compact string) {
parts := strings.Split(name, string(sep))
for i, part := range parts {
if i == len(parts)-1 {
compact += part
} else {
if len(part) != 0 {
r := part[0]
for i := 0; i < len(part)-1; i++ {
if unicode.IsLetter(rune(part[i])) {
r = part[i]
break
}
}
compact += fmt.Sprintf("%c%c", r, sep)
} else {
compact += fmt.Sprintf("%c", sep)
}
}
}
return
}
type Ctx struct {
FromAddress string
AccountName string

View file

@ -15,6 +15,7 @@ import (
"git.sr.ht/~rjarry/aerc/config"
"git.sr.ht/~rjarry/aerc/lib"
"git.sr.ht/~rjarry/aerc/lib/format"
libsort "git.sr.ht/~rjarry/aerc/lib/sort"
"git.sr.ht/~rjarry/aerc/lib/ui"
"git.sr.ht/~rjarry/aerc/logging"
@ -206,6 +207,9 @@ func (dirlist *DirectoryList) getDirString(name string, width int, recentUnseen
if percent {
rightJustify = true
}
case 'N':
name = format.CompactPath(name, os.PathSeparator)
fallthrough
case 'n':
if percent {
if rightJustify {