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 <me@sijman.nl>
Acked-by: Koni Marti <koni.marti@gmail.com>
This commit is contained in:
Sijmen 2022-08-13 01:44:44 +02:00 committed by Robin Jarry
parent 7377b8b05a
commit db39ca181a
5 changed files with 20 additions and 3 deletions

View file

@ -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`. - Run `check-mail-cmd` with `:check-mail`.
- Display active key binds with `:help keys` (bound to `?` by default). - Display active key binds with `:help keys` (bound to `?` by default).
- Multiple visual selections with `:mark -V`. - Multiple visual selections with `:mark -V`.
- Set default collapse depth of directory tree with `dirlist-collapse`.
### Changed ### Changed

View file

@ -103,6 +103,12 @@ dirlist-delay=200ms
# Default: false # Default: false
dirlist-tree=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* # List of space-separated criteria to sort the messages by, see *sort*
# command in *aerc*(1) for reference. Prefixing a criterion with "-r " # command in *aerc*(1) for reference. Prefixing a criterion with "-r "
# reverses that criterion. # reverses that criterion.

View file

@ -61,6 +61,7 @@ type UIConfig struct {
DirListFormat string `ini:"dirlist-format"` DirListFormat string `ini:"dirlist-format"`
DirListDelay time.Duration `ini:"dirlist-delay"` DirListDelay time.Duration `ini:"dirlist-delay"`
DirListTree bool `ini:"dirlist-tree"` DirListTree bool `ini:"dirlist-tree"`
DirListCollapse int `ini:"dirlist-collapse"`
Sort []string `delim:" "` Sort []string `delim:" "`
NextMessageOnDelete bool `ini:"next-message-on-delete"` NextMessageOnDelete bool `ini:"next-message-on-delete"`
CompletionDelay time.Duration `ini:"completion-delay"` CompletionDelay time.Duration `ini:"completion-delay"`

View file

@ -207,6 +207,12 @@ These options are configured in the *[ui]* section of aerc.conf.
Default: false 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* *next-message-on-delete*
Moves to next message when the current message is deleted Moves to next message when the current message is deleted

View file

@ -327,7 +327,7 @@ func (dt *DirectoryTree) buildTree() {
copy(dt.treeDirs, dt.dirs) copy(dt.treeDirs, dt.dirs)
root := &types.Thread{Uid: 0} root := &types.Thread{Uid: 0}
buildTree(root, sTree, 0xFFFFFF) dt.buildTreeNode(root, sTree, 0xFFFFFF, 1)
threads := make([]*types.Thread, 0) 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) m := make(map[string][][]string)
for _, branch := range stree { for _, branch := range stree {
if len(branch) > 1 { if len(branch) > 1 {
@ -398,7 +398,10 @@ func buildTree(node *types.Thread, stree [][]string, defaultUid uint32) {
} }
nextNode := &types.Thread{Uid: uid} nextNode := &types.Thread{Uid: uid}
node.AddChild(nextNode) 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)
} }
} }