ref: ddd85ec876eb5cd2c76548f00f3746dd050297bb
parent: 1f03cd5a5c5f2b2a351c7169c149f87ac1ec1730
author: penny <penny@limitedideas.org>
date: Fri Sep 26 07:29:12 EDT 2025
dynamic pagination based on window size
--- a/main.go
+++ b/main.go
@@ -123,12 +123,13 @@
return
case "next":
hc.page.Next()
- fmt.Printf(hc.page.String())
+ fmt.Print(hc.page.String())
return
case "bookmarks":
+ hc.pause(true)
hc.page = &Page{} hc.page.loader = &StatusPages{hc: hc}- fmt.Printf(hc.page.String())
+ fmt.Print(hc.page.String())
return
case "notice":
defer hc.updatePrompt()
@@ -143,7 +144,7 @@
hc.page.loader = &NotificationPages{hc: hc}fmt.Print(hc.page.String())
if err != nil {- fmt.Println(err)
+ fmt.Print(err)
}
return
case "pause":
--- a/pages.go
+++ b/pages.go
@@ -42,7 +42,7 @@
}
func makePageItem(renderedtext string) (page PageItem) {- page.lines = strings.Count(renderedtext, "\n") + 1
+ page.lines = strings.Count(renderedtext, "\n")
page.itemtext = renderedtext
return
}
@@ -84,7 +84,7 @@
noticeArray := noticeData.hc.RenderNotificationsArray(notices)
var itemArray []PageItem
for i, _ := range noticeArray {- item := makePageItem(noticeArray[i])
+ item := makePageItem(noticeArray[i] + "\n")
itemArray = append(itemArray, item)
}
noticeData.page.MinID = ""
@@ -91,25 +91,43 @@
return &itemArray
}
+func findIndex(height int, items []PageItem) (index int) {+ linecount := 5
+ for i, _ := range items {+ linecount = linecount + items[i].lines
+ if i != 0 && linecount > height {+ return
+ }
+ index++
+ }
+ return
+}
+
+func (page *Page) findIndexStart() {+ _, windowheight, err := term.GetSize(int(0))
+ if err != nil {+ //Not a tty? Dunno, here's 25 lines for a standard terminal
+ windowheight = 25
+ }
+ var items []PageItem
+ items = (*page.itembuffer)[:page.index]
+ items = reverseArray(items)
+ page.index = page.index - findIndex(windowheight, items)
+ return
+}
+
func (page *Page) findIndexEnd() {_, windowheight, err := term.GetSize(int(0))
if err != nil {- page.indexend = page.index + 5
- return
+ //Not a tty? Dunno, here's 25 lines for a standard terminal
+ windowheight = 25
}
- page.indexend = page.index - 1
+ page.indexend = page.index
var items []PageItem
if len(*page.itembuffer) >= page.index {items = (*page.itembuffer)[page.index:]
+ page.indexend = page.indexend + findIndex(windowheight, items)
}
- var linecount int
- for i, _ := range items {- if ((*page.itembuffer)[i].lines + linecount > windowheight) {- return
- }
- linecount = linecount + (*page.itembuffer)[i].lines
- page.indexend++
- }
return
}
@@ -149,9 +167,9 @@
}
func (page *Page) Prev() {- if(page.index -5 ) >= 0 {- page.index = page.index - 5
- page.page--
+ page.findIndexStart()
+ if page.page > 0 {+ page.page--
}
}
--
⑨