summaryrefslogtreecommitdiffstats
path: root/pkg/gui/global_handlers.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/gui/global_handlers.go')
-rw-r--r--pkg/gui/global_handlers.go73
1 files changed, 54 insertions, 19 deletions
diff --git a/pkg/gui/global_handlers.go b/pkg/gui/global_handlers.go
index c8c567fd1..cea8be8b0 100644
--- a/pkg/gui/global_handlers.go
+++ b/pkg/gui/global_handlers.go
@@ -68,6 +68,21 @@ func (gui *Gui) scrollUpView(view *gocui.View) error {
func (gui *Gui) scrollDownView(view *gocui.View) error {
ox, oy := view.Origin()
+ scrollHeight := gui.linesToScrollDown(view)
+ if scrollHeight > 0 {
+ if err := view.SetOrigin(ox, oy+scrollHeight); err != nil {
+ return err
+ }
+ }
+
+ if manager, ok := gui.viewBufferManagerMap[view.Name()]; ok {
+ manager.ReadLines(scrollHeight)
+ }
+ return nil
+}
+
+func (gui *Gui) linesToScrollDown(view *gocui.View) int {
+ _, oy := view.Origin()
y := oy
canScrollPastBottom := gui.Config.GetUserConfig().Gui.ScrollPastBottom
if !canScrollPastBottom {
@@ -76,27 +91,29 @@ func (gui *Gui) scrollDownView(view *gocui.View) error {
}
scrollHeight := gui.Config.GetUserConfig().Gui.ScrollHeight
scrollableLines := view.ViewLinesHeight() - y
- if scrollableLines > 0 {
- // margin is about how many lines must still appear if you scroll
- // all the way down. In practice every file ends in a newline so it will really
- // just show a single line
- margin := 1
- if canScrollPastBottom {
- margin = 2
- }
- if scrollableLines-margin < scrollHeight {
- scrollHeight = scrollableLines - margin
- }
- if oy+scrollHeight >= 0 {
- if err := view.SetOrigin(ox, oy+scrollHeight); err != nil {
- return err
- }
- }
+ if scrollableLines < 0 {
+ return 0
}
- if manager, ok := gui.viewBufferManagerMap[view.Name()]; ok {
- manager.ReadLines(scrollHeight)
+
+ // margin is about how many lines must still appear if you scroll
+ // all the way down. In practice every file ends in a newline so it will really
+ // just show a single line
+ margin := 1
+ if canScrollPastBottom {
+ margin = 2
+ }
+ if scrollableLines-margin < scrollHeight {
+ scrollHeight = scrollableLines - margin
+ }
+ if oy+scrollHeight < 0 {
+ return 0
+ } else {
+ return scrollHeight
}
- return nil
+}
+
+func (gui *Gui) atScrollBottom(view *gocui.View) bool {
+ return gui.linesToScrollDown(view) > 0
}
func (gui *Gui) scrollUpMain() error {
@@ -123,6 +140,24 @@ func (gui *Gui) scrollDownSecondary() error {
return gui.scrollDownView(gui.Views.Secondary)
}
+func (gui *Gui) scrollUpExtra() error {
+ gui.Views.Extras.Autoscroll = false
+
+ return gui.scrollUpView(gui.Views.Extras)
+}
+
+func (gui *Gui) scrollDownExtra() error {
+ if err := gui.scrollDownView(gui.Views.Extras); err != nil {
+ return err
+ }
+
+ if gui.atScrollBottom(gui.Views.Extras) {
+ gui.Views.Extras.Autoscroll = true
+ }
+
+ return nil
+}
+
func (gui *Gui) scrollUpConfirmationPanel() error {
if gui.Views.Confirmation.Editable {
return nil