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:
parent
7377b8b05a
commit
db39ca181a
5 changed files with 20 additions and 3 deletions
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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"`
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue