From 72449419eec248865b531eb104f8055bac38d61b Mon Sep 17 00:00:00 2001 From: Sijmen Date: Wed, 10 Aug 2022 20:09:15 +0200 Subject: [PATCH] dirtree: add dirtree-collapse config setting Adds a setting to the configuration to configure at which level the folders in the dirtree are collapsed by default. In my case, this is useful because my organisation has some rather deep nesting in the folder structure, and a _lot_ of folders, and this way I can keep my dirtree uncluttered while still having all folders there if I need them. Signed-off-by: Sijmen --- CHANGELOG.md | 1 + config/aerc.conf | 6 ++++++ config/config.go | 1 + widgets/dirtree.go | 9 ++++++--- 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 735d39e..b9c9957 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Import/Export mbox files with `:import-mbox` and `:export-mbox`. - `address-book-cmd` can now also be specified in `accounts.conf`. - Run `check-mail-cmd` with `:check-mail`. +- Configurable default collapse depth for directory tree. ### Changed diff --git a/config/aerc.conf b/config/aerc.conf index fc6479a..c60f4b0 100644 --- a/config/aerc.conf +++ b/config/aerc.conf @@ -103,6 +103,12 @@ dirlist-delay=200ms # Default: false dirlist-tree=false +# If dirlist-tree is enabled, set level at which folders are collapsed by +# default. Set to 0 to disable. +# +# Default: 0 +dirlist-collapse=0 + # List of space-separated criteria to sort the messages by, see *sort* # command in *aerc*(1) for reference. Prefixing a criterion with "-r " # reverses that criterion. diff --git a/config/config.go b/config/config.go index 66c6dd1..e25f1a7 100644 --- a/config/config.go +++ b/config/config.go @@ -62,6 +62,7 @@ type UIConfig struct { DirListFormat string `ini:"dirlist-format"` DirListDelay time.Duration `ini:"dirlist-delay"` DirListTree bool `ini:"dirlist-tree"` + DirListCollapse int `ini:"dirlist-collapse"` Sort []string `delim:" "` NextMessageOnDelete bool `ini:"next-message-on-delete"` CompletionDelay time.Duration `ini:"completion-delay"` diff --git a/widgets/dirtree.go b/widgets/dirtree.go index c3b8077..ae466ee 100644 --- a/widgets/dirtree.go +++ b/widgets/dirtree.go @@ -327,7 +327,7 @@ func (dt *DirectoryTree) buildTree() { copy(dt.treeDirs, dt.dirs) root := &types.Thread{Uid: 0} - buildTree(root, sTree, 0xFFFFFF) + dt.buildTreeNode(root, sTree, 0xFFFFFF, 1) threads := make([]*types.Thread, 0) @@ -373,7 +373,7 @@ func (dt *DirectoryTree) buildTree() { } } -func buildTree(node *types.Thread, stree [][]string, defaultUid uint32) { +func (dt *DirectoryTree) buildTreeNode(node *types.Thread, stree [][]string, defaultUid uint32, depth int) { m := make(map[string][][]string) for _, branch := range stree { if len(branch) > 1 { @@ -398,7 +398,10 @@ func buildTree(node *types.Thread, stree [][]string, defaultUid uint32) { } nextNode := &types.Thread{Uid: uid} node.AddChild(nextNode) - buildTree(nextNode, next, defaultUid) + if dt.UiConfig().DirListCollapse != 0 { + node.Hidden = depth > dt.UiConfig().DirListCollapse + } + dt.buildTreeNode(nextNode, next, defaultUid, depth+1) } }