From e1ae7b80cc49bf28d93943438ac4e68d22ee7ada Mon Sep 17 00:00:00 2001 From: Koni Marti Date: Thu, 28 Apr 2022 22:09:53 +0200 Subject: 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 Tested-by: Tim Culverhouse --- lib/format/format.go | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'lib/format') diff --git a/lib/format/format.go b/lib/format/format.go index 59b5c479..ca90ac4a 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 -- cgit