Introduction
Introduction Statistics Contact Development Disclaimer Help
after toggling showing new feeds or when reloading feeds try to select the same…
git clone git://git.codemadness.org/sfeed_curses
Log
Files
Refs
README
LICENSE
---
commit 0cd539155ae12983a7ff1febd14b8c56774a85e7
parent 47e37f53d05797b18d2c6d2567187c28ac3f23ab
Author: Hiltjo Posthuma <[email protected]>
Date: Mon, 29 Mar 2021 19:56:16 +0200
after toggling showing new feeds or when reloading feeds try to select the same…
Before this would go back to the first position, which can be a little
inconvenient when there are a lot of feeds.
Diffstat:
M sfeed_curses.c | 45 +++++++++++++++++++++++++++++…
1 file changed, 42 insertions(+), 3 deletions(-)
---
diff --git a/sfeed_curses.c b/sfeed_curses.c
@@ -1461,19 +1461,49 @@ feeds_load(struct feed *feeds, size_t nfeeds)
}
void
+feeds_select_feed(struct pane *p, struct feed *f)
+{
+ struct row *row;
+ struct feed *fr;
+ off_t off;
+
+ for (off = 0; off < p->nrows; off++) {
+ if (!(row = pane_row_get(p, off)))
+ continue;
+ fr = row->data;
+ if (!strcmp(fr->name, f->name))
+ break;
+ }
+ pane_setpos(p, off >= p->nrows ? 0 : off);
+}
+
+void
feeds_reloadall(void)
{
+ struct pane *p;
+ struct feed *f;
+ struct row *row;
off_t pos;
- pos = panes[PaneItems].pos; /* store numeric position */
+ p = &panes[PaneFeeds];
+ if ((row = pane_row_get(p, p->pos)))
+ f = row->data;
+
+ pos = panes[PaneItems].pos; /* store numeric item position */
feeds_set(curfeed); /* close and reopen feed if possible */
urls_read();
feeds_load(feeds, nfeeds);
urls_free();
- /* restore numeric position */
+ /* restore numeric item position */
pane_setpos(&panes[PaneItems], pos);
updatesidebar();
updatetitle();
+
+ /* try to find the same feed in the pane */
+ if (row && f)
+ feeds_select_feed(p, f);
+ else
+ pane_setpos(p, 0);
}
void
@@ -2315,9 +2345,18 @@ nextpage:
updategeom();
break;
case 't': /* toggle showing only new in sidebar */
+ p = &panes[PaneFeeds];
+ if ((row = pane_row_get(p, p->pos)))
+ f = row->data;
+
onlynew = !onlynew;
- pane_setpos(&panes[PaneFeeds], 0);
updatesidebar();
+
+ /* try to find the same feed in the pane */
+ if (row && f && f->totalnew)
+ feeds_select_feed(p, f);
+ else
+ pane_setpos(p, 0);
break;
case 'o': /* feeds: load, items: plumb URL */
case '\n':
You are viewing proxied material from codemadness.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.