diff options
author | Koni Marti <koni.marti@gmail.com> | 2022-04-28 22:09:53 +0200 |
---|---|---|
committer | Robin Jarry <robin@jarry.cc> | 2022-04-29 13:41:38 +0200 |
commit | e1ae7b80cc49bf28d93943438ac4e68d22ee7ada (patch) | |
tree | a0172d2931a5fe97aef72a13461c5a1adab810ee | |
parent | 8f976af17bdb049dab21bd4f7d24f352a54c9ba0 (diff) | |
download | aerc-e1ae7b80cc49bf28d93943438ac4e68d22ee7ada.zip |
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>
-rw-r--r-- | doc/aerc-config.5.scd | 2 | ||||
-rw-r--r-- | lib/format/format.go | 27 | ||||
-rw-r--r-- | widgets/dirlist.go | 4 |
3 files changed, 33 insertions, 0 deletions
diff --git a/doc/aerc-config.5.scd b/doc/aerc-config.5.scd index 6f5c50a..314aa57 100644 --- a/doc/aerc-config.5.scd +++ b/doc/aerc-config.5.scd @@ -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 diff --git a/lib/format/format.go b/lib/format/format.go index 59b5c47..ca90ac4 100644 --- a/lib/format/format.go +++ b/lib/format/format.go @@ -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 diff --git a/widgets/dirlist.go b/widgets/dirlist.go index 5ddb136..412ed06 100644 --- a/widgets/dirlist.go +++ b/widgets/dirlist.go @@ -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 { |