|
|
after toggling showing new feeds or when reloading feeds try to select the same feed - 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 0cd539155ae12983a7ff1febd14b8c56774a85e7 |
|
|
 |
parent 47e37f53d05797b18d2c6d2567187c28ac3f23ab |
|
|
 |
Author: Hiltjo Posthuma <hiltjo@codemadness.org> (mailto://) |
application/vnd.lotus-organizer |
|
|
Date: Mon, 29 Mar 2021 19:56:16 +0200 |
|
|
|
|
|
|
|
after toggling showing new feeds or when reloading feeds try to select the same feed |
|
|
|
|
|
|
|
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': |
|