shithub: hell

Download patch

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--
 	}
 }
 
--