|
|
make a feeds_row_get function to find the position - sfeed_curses - sfeed curses UI (now part of sfeed, development is in sfeed) |
|
|
 |
git clone git://git.codemadness.org/sfeed_curses (git://git.codemadness.org) |
|
|
 |
Log |
|
|
 |
Files |
|
|
 |
Refs |
|
|
 |
README |
|
|
 |
LICENSE |
|
|
|
--- |
|
|
 |
commit 0ca6c8a990047b290fec8fb201a18253fda4bde7 |
|
|
 |
parent 65f7223309e929522ca4e3762604f10653db5aca |
|
|
 |
Author: Hiltjo Posthuma <hiltjo@codemadness.org> (mailto://) |
application/vnd.lotus-organizer |
|
|
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(-) |
|
|
|
--- |
|
|
 |
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; |
|