diff options
author | Koni Marti <koni.marti@gmail.com> | 2022-02-21 00:18:42 +0100 |
---|---|---|
committer | Robin Jarry <robin@jarry.cc> | 2022-02-23 21:09:01 +0100 |
commit | 454606a9cd85923cc98e4d43ea8b8972de6a5e9c (patch) | |
tree | ced698391543007f9ed1b3e752ee40a44a62a197 /widgets/dirlist.go | |
parent | 5eac8d603e8807f7d4be58a4a7b03862a8c90df2 (diff) | |
download | aerc-454606a9cd85923cc98e4d43ea8b8972de6a5e9c.tar.gz |
dirtree: implement foldable tree for directory list
implement a foldable tree for the directory list. Expand all parent
directories when a hidden directory is selected with the change-folder
command.
folders-sort considers the top-level directories only. The folders and
foldersexclude filters work with the full directory path.
Enable tree view by adding 'dirlist-tree=true' to the config file.
Implements: https://todo.sr.ht/~sircmpwn/aerc2/228
Signed-off-by: Koni Marti <koni.marti@gmail.com>
Diffstat (limited to 'widgets/dirlist.go')
-rw-r--r-- | widgets/dirlist.go | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/widgets/dirlist.go b/widgets/dirlist.go index 6f8869d5..9535c694 100644 --- a/widgets/dirlist.go +++ b/widgets/dirlist.go @@ -4,6 +4,7 @@ import ( "fmt" "log" "math" + "os" "regexp" "sort" "time" @@ -19,6 +20,25 @@ import ( "git.sr.ht/~rjarry/aerc/worker/types" ) +type DirectoryLister interface { + ui.Drawable + + Selected() string + Select(string) + + UpdateList(func([]string)) + List() []string + + NextPrev(int) + + CollapseFolder() + ExpandFolder() + + SelectedMsgStore() (*lib.MessageStore, bool) + MsgStore(string) (*lib.MessageStore, bool) + SetMsgStore(string, *lib.MessageStore) +} + type DirectoryList struct { ui.Invalidatable aercConf *config.AercConfig @@ -35,7 +55,7 @@ type DirectoryList struct { } func NewDirectoryList(conf *config.AercConfig, acctConf *config.AccountConfig, - logger *log.Logger, worker *types.Worker) *DirectoryList { + logger *log.Logger, worker *types.Worker) DirectoryLister { dirlist := &DirectoryList{ aercConf: conf, @@ -51,6 +71,11 @@ func NewDirectoryList(conf *config.AercConfig, acctConf *config.AccountConfig, dirlist.Invalidate() }) dirlist.spinner.Start() + + if uiConf.DirListTree { + return NewDirectoryTree(dirlist, string(os.PathSeparator)) + } + return dirlist } @@ -88,6 +113,14 @@ func (dirlist *DirectoryList) UpdateList(done func(dirs []string)) { }) } +func (dirlist *DirectoryList) CollapseFolder() { + // no effect for the DirectoryList +} + +func (dirlist *DirectoryList) ExpandFolder() { + // no effect for the DirectoryList +} + func (dirlist *DirectoryList) Select(name string) { dirlist.selecting = name |