make a feeds_row_get function to find the position - sfeed_curses - sfeed curses UI (now part of sfeed, development is in sfeed)
(HTM) git clone git://git.codemadness.org/sfeed_curses
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit 0ca6c8a990047b290fec8fb201a18253fda4bde7
(DIR) parent 65f7223309e929522ca4e3762604f10653db5aca
(HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date: Mon, 29 Mar 2021 20:07:10 +0200
make a feeds_row_get function to find the position
Diffstat:
M sfeed_curses.c | 38 ++++++++++++++++---------------
1 file changed, 20 insertions(+), 18 deletions(-)
---
(DIR) diff --git a/sfeed_curses.c b/sfeed_curses.c
@@ -1460,21 +1460,22 @@ feeds_load(struct feed *feeds, size_t nfeeds)
}
}
-void
-feeds_select_feed(struct pane *p, struct feed *f)
+/* find row position of the feed if visible, else return -1 */
+off_t
+feeds_row_get(struct pane *p, struct feed *f)
{
struct row *row;
struct feed *fr;
- off_t off;
+ off_t pos;
- for (off = 0; off < p->nrows; off++) {
- if (!(row = pane_row_get(p, off)))
+ for (pos = 0; pos < p->nrows; pos++) {
+ if (!(row = pane_row_get(p, pos)))
continue;
fr = row->data;
if (!strcmp(fr->name, f->name))
- break;
+ return pos;
}
- pane_setpos(p, off >= p->nrows ? 0 : off);
+ return -1;
}
void
@@ -1500,8 +1501,8 @@ feeds_reloadall(void)
updatetitle();
/* try to find the same feed in the pane */
- if (row && f)
- feeds_select_feed(p, f);
+ if (row && f && (pos = feeds_row_get(p, f)) != -1)
+ pane_setpos(p, pos);
else
pane_setpos(p, 0);
}
@@ -2071,7 +2072,7 @@ main(int argc, char *argv[])
char *name, *tmp;
char *search = NULL; /* search text */
int button, ch, fd, keymask, release, x, y;
- off_t off;
+ off_t pos;
#ifdef __OpenBSD__
if (pledge("stdio rpath tty proc exec", NULL) == -1)
@@ -2320,17 +2321,17 @@ nextpage:
if (ch == '/' || ch == 'n') {
/* forward */
- for (off = p->pos + 1; off < p->nrows; off++) {
- if (pane_row_match(p, pane_row_get(p, off), search)) {
- pane_setpos(p, off);
+ for (pos = p->pos + 1; pos < p->nrows; pos++) {
+ if (pane_row_match(p, pane_row_get(p, pos), search)) {
+ pane_setpos(p, pos);
break;
}
}
} else {
/* backward */
- for (off = p->pos - 1; off >= 0; off--) {
- if (pane_row_match(p, pane_row_get(p, off), search)) {
- pane_setpos(p, off);
+ for (pos = p->pos - 1; pos >= 0; pos--) {
+ if (pane_row_match(p, pane_row_get(p, pos), search)) {
+ pane_setpos(p, pos);
break;
}
}
@@ -2369,8 +2370,9 @@ nextpage:
updatesidebar();
/* try to find the same feed in the pane */
- if (row && f && f->totalnew)
- feeds_select_feed(p, f);
+ if (row && f && f->totalnew &&
+ (pos = feeds_row_get(p, f)) != -1)
+ pane_setpos(p, pos);
else
pane_setpos(p, 0);
break;