Skip to content

Commit 81cbb14

Browse files
akshaychhajedwagoodman
authored andcommittedOct 31, 2018
Add page functions for FileTreeView (#53)
1 parent f3f2ec9 commit 81cbb14

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed
 

‎ui/filetreeview.go

+56
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,12 @@ func (view *FileTreeView) Setup(v *gocui.View, header *gocui.View) error {
7676
if err := view.gui.SetKeybinding(view.Name, gocui.KeyArrowRight, gocui.ModNone, func(*gocui.Gui, *gocui.View) error { return view.CursorRight() }); err != nil {
7777
return err
7878
}
79+
if err := view.gui.SetKeybinding(view.Name, gocui.KeyPgdn, gocui.ModNone, func(*gocui.Gui, *gocui.View) error { return view.PageDown() }); err != nil {
80+
return err
81+
}
82+
if err := view.gui.SetKeybinding(view.Name, gocui.KeyPgup, gocui.ModNone, func(*gocui.Gui, *gocui.View) error { return view.PageUp() }); err != nil {
83+
return err
84+
}
7985
if err := view.gui.SetKeybinding(view.Name, gocui.KeySpace, gocui.ModNone, func(*gocui.Gui, *gocui.View) error { return view.toggleCollapse() }); err != nil {
8086
return err
8187
}
@@ -283,6 +289,56 @@ func (view *FileTreeView) CursorRight() error {
283289
return view.Render()
284290
}
285291

292+
// PageDown moves to next page putting the cursor on top
293+
func (view *FileTreeView) PageDown() error {
294+
nextBufferIndexLowerBound := view.bufferIndexLowerBound + view.height()
295+
nextBufferIndexUpperBound := view.bufferIndexUpperBound + view.height()
296+
297+
treeString := view.ViewTree.StringBetween(nextBufferIndexLowerBound, nextBufferIndexUpperBound, true)
298+
lines := strings.Split(treeString, "\n")
299+
300+
newLines := uint(len(lines)) - 1
301+
if view.height() >= newLines {
302+
nextBufferIndexLowerBound = view.bufferIndexLowerBound + newLines
303+
nextBufferIndexUpperBound = view.bufferIndexUpperBound + newLines
304+
}
305+
view.bufferIndexLowerBound = nextBufferIndexLowerBound
306+
view.bufferIndexUpperBound = nextBufferIndexUpperBound
307+
308+
if view.TreeIndex < nextBufferIndexLowerBound {
309+
view.bufferIndex = 0
310+
view.TreeIndex = nextBufferIndexLowerBound
311+
} else {
312+
view.bufferIndex = view.bufferIndex - newLines
313+
}
314+
return view.Render()
315+
}
316+
317+
// PageUp moves to previous page putting the cursor on top
318+
func (view *FileTreeView) PageUp() error {
319+
nextBufferIndexLowerBound := view.bufferIndexLowerBound - view.height()
320+
nextBufferIndexUpperBound := view.bufferIndexUpperBound - view.height()
321+
322+
treeString := view.ViewTree.StringBetween(nextBufferIndexLowerBound, nextBufferIndexUpperBound, true)
323+
lines := strings.Split(treeString, "\n")
324+
325+
newLines := uint(len(lines)) - 2
326+
if view.height() >= newLines {
327+
nextBufferIndexLowerBound = view.bufferIndexLowerBound - newLines
328+
nextBufferIndexUpperBound = view.bufferIndexUpperBound - newLines
329+
}
330+
view.bufferIndexLowerBound = nextBufferIndexLowerBound
331+
view.bufferIndexUpperBound = nextBufferIndexUpperBound
332+
333+
if view.TreeIndex > (nextBufferIndexUpperBound - 1) {
334+
view.bufferIndex = 0
335+
view.TreeIndex = nextBufferIndexLowerBound
336+
} else {
337+
view.bufferIndex = view.bufferIndex + newLines
338+
}
339+
return view.Render()
340+
}
341+
286342
// getAbsPositionNode determines the selected screen cursor's location in the file tree, returning the selected FileNode.
287343
func (view *FileTreeView) getAbsPositionNode() (node *filetree.FileNode) {
288344
var visitor func(*filetree.FileNode) error

0 commit comments

Comments
 (0)