From db39ca181adf61ebb5a89fe5eb7a1e0d6836be56 Mon Sep 17 00:00:00 2001 From: Sijmen Date: Sat, 13 Aug 2022 01:44:44 +0200 Subject: [PATCH] dirtree: add dirtree-collapse config setting Adds a setting to the configuration to choose 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 Acked-by: Koni Marti --- CHANGELOG.md | 1 + config/aerc.conf | 6 ++++++ config/config.go | 1 + doc/aerc-config.5.scd | 6 ++++++ widgets/dirtree.go | 9 ++++++--- 5 files changed, 20 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3328c0f..6dedbef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Run `check-mail-cmd` with `:check-mail`. - Display active key binds with `:help keys` (bound to `?` by default). - Multiple visual selections with `:mark -V`. +- Set default collapse depth of directory tree with `dirlist-collapse`. ### 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 c6fe70e..f0a7474 100644 --- a/config/config.go +++ b/config/config.go @@ -61,6 +61,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/doc/aerc-config.5.scd b/doc/aerc-config.5.scd index aaf15b8..f9a8758 100644 --- a/doc/aerc-config.5.scd +++ b/doc/aerc-config.5.scd @@ -207,6 +207,12 @@ These options are configured in the *[ui]* section of aerc.conf. Default: false +*dirlist-collapse* + If dirlist-tree is enabled, set level at which folders are collapsed + by default. Set to 0 to disable. + + Default: 0 + *next-message-on-delete* Moves to next message when the current message is deleted diff --git a/widgets/dirtree.go b/widgets/dirtree.go index 65fb311..eb0af6e 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) } }