diff --git a/ui/filetreeview.go b/ui/filetreeview.go index cc7d916..dad88e4 100644 --- a/ui/filetreeview.go +++ b/ui/filetreeview.go @@ -73,6 +73,9 @@ func (view *FileTreeView) Setup(v *gocui.View, header *gocui.View) error { if err := view.gui.SetKeybinding(view.Name, gocui.KeyArrowLeft, gocui.ModNone, func(*gocui.Gui, *gocui.View) error { return view.CursorLeft() }); err != nil { return err } + if err := view.gui.SetKeybinding(view.Name, gocui.KeyArrowRight, gocui.ModNone, func(*gocui.Gui, *gocui.View) error { return view.CursorRight() }); err != nil { + return err + } if err := view.gui.SetKeybinding(view.Name, gocui.KeySpace, gocui.ModNone, func(*gocui.Gui, *gocui.View) error { return view.toggleCollapse() }); err != nil { return err } @@ -252,6 +255,34 @@ func (view *FileTreeView) CursorLeft() error { return view.Render() } +//CursorRight descends into directory expanding it if needed +func (view *FileTreeView) CursorRight() error { + node := view.getAbsPositionNode() + if node == nil { + return nil + } + if !node.Data.FileInfo.TarHeader.FileInfo().IsDir() { + return nil + } + if len(node.Children) == 0 { + return nil + } + if node.Data.ViewInfo.Collapsed { + node.Data.ViewInfo.Collapsed = false + } + view.TreeIndex++ + if view.TreeIndex > view.bufferIndexUpperBound { + view.bufferIndexUpperBound++ + view.bufferIndexLowerBound++ + } + view.bufferIndex++ + if view.bufferIndex > view.height() { + view.bufferIndex = view.height() + } + view.Update() + return view.Render() +} + // getAbsPositionNode determines the selected screen cursor's location in the file tree, returning the selected FileNode. func (view *FileTreeView) getAbsPositionNode() (node *filetree.FileNode) { var visitor func(*filetree.FileNode) error