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 <me@sijman.nl>
This commit is contained in:
parent
1b91b68e73
commit
72449419ee
4 changed files with 14 additions and 3 deletions
|
@ -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
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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"`
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue