|
|
make a function for the common code for opening/plumbing a feed or item - 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 263fecaf915f6ae1ea2b2fea1f599502c9500b20 |
|
|
 |
parent 031a577c39cdd4fcf518569d2ca7e869e646313f |
|
|
 |
Author: Hiltjo Posthuma <hiltjo@codemadness.org> (mailto://) |
application/vnd.lotus-organizer |
|
|
Date: Thu, 25 Mar 2021 22:38:21 +0100 |
|
|
|
|
|
|
|
make a function for the common code for opening/plumbing a feed or item |
|
|
|
|
|
|
|
The common code was in the mouse handling and key handling and it is large |
|
|
|
enough to be a separate function also. |
|
|
|
|
|
|
|
Diffstat: |
|
|
|
M sfeed_curses.c | 92 +++++++++++++++---------------- |
|
|
|
|
|
|
|
1 file changed, 44 insertions(+), 48 deletions(-) |
|
|
|
--- |
|
|
 |
diff --git a/sfeed_curses.c b/sfeed_curses.c |
|
|
|
@@ -1476,6 +1476,41 @@ feeds_reloadall(void) |
|
|
|
updatetitle(); |
|
|
|
} |
|
|
|
|
|
|
|
+void |
|
|
|
+feed_open_selected(struct pane *p) |
|
|
|
+{ |
|
|
|
+ struct feed *f; |
|
|
|
+ struct row *row; |
|
|
|
+ |
|
|
|
+ row = pane_row_get(p, p->pos); |
|
|
|
+ f = (struct feed *)row->data; |
|
|
|
+ feeds_set(f); |
|
|
|
+ urls_read(); |
|
|
|
+ if (f->fp) |
|
|
|
+ feed_load(f, f->fp); |
|
|
|
+ urls_free(); |
|
|
|
+ /* redraw row: counts could be changed */ |
|
|
|
+ updatesidebar(); |
|
|
|
+ updatetitle(); |
|
|
|
+ |
|
|
|
+ if (layout == LayoutMonocle) { |
|
|
|
+ selpane = PaneItems; |
|
|
|
+ updategeom(); |
|
|
|
+ } |
|
|
|
+} |
|
|
|
+ |
|
|
|
+void |
|
|
|
+feed_plumb_selected_item(struct pane *p) |
|
|
|
+{ |
|
|
|
+ struct row *row; |
|
|
|
+ struct item *item; |
|
|
|
+ |
|
|
|
+ row = pane_row_get(p, p->pos); |
|
|
|
+ item = (struct item *)row->data; |
|
|
|
+ markread(p, p->pos, p->pos, 1); |
|
|
|
+ forkexec((char *[]) { plumbercmd, item->fields[FieldLink], NULL }, plumberia); |
|
|
|
+} |
|
|
|
+ |
|
|
|
/* calculate optimal (default) size */ |
|
|
|
int |
|
|
|
getsidebarsizedefault(void) |
|
|
|
@@ -1670,7 +1705,6 @@ void |
|
|
|
mousereport(int button, int release, int keymask, int x, int y) |
|
|
|
{ |
|
|
|
struct pane *p; |
|
|
|
- struct feed *f; |
|
|
|
struct row *row; |
|
|
|
struct item *item; |
|
|
|
size_t i; |
|
|
|
@@ -1718,30 +1752,10 @@ mousereport(int button, int release, int keymask, int x, int y) |
|
|
|
if (!p->nrows || pos >= p->nrows) |
|
|
|
break; |
|
|
|
pane_setpos(p, pos); |
|
|
|
- if (i == PaneFeeds) { |
|
|
|
- row = pane_row_get(p, p->pos); |
|
|
|
- f = (struct feed *)row->data; |
|
|
|
- feeds_set(f); |
|
|
|
- urls_read(); |
|
|
|
- if (f->fp) |
|
|
|
- feed_load(f, f->fp); |
|
|
|
- urls_free(); |
|
|
|
- /* redraw row: counts could be changed */ |
|
|
|
- updatesidebar(); |
|
|
|
- updatetitle(); |
|
|
|
- |
|
|
|
- if (layout == LayoutMonocle) { |
|
|
|
- selpane = PaneItems; |
|
|
|
- updategeom(); |
|
|
|
- } |
|
|
|
- } else if (i == PaneItems) { |
|
|
|
- if (dblclick && !changedpane) { |
|
|
|
- row = pane_row_get(p, p->pos); |
|
|
|
- item = (struct item *)row->data; |
|
|
|
- markread(p, p->pos, p->pos, 1); |
|
|
|
- forkexec((char *[]) { plumbercmd, item->fields[FieldLink], NULL }, plumberia); |
|
|
|
- } |
|
|
|
- } |
|
|
|
+ if (i == PaneFeeds) |
|
|
|
+ feed_open_selected(&panes[PaneFeeds]); |
|
|
|
+ else if (i == PaneItems && dblclick && !changedpane) |
|
|
|
+ feed_plumb_selected_item(&panes[PaneItems]); |
|
|
|
break; |
|
|
|
case 2: /* right-click */ |
|
|
|
if (!p->nrows || pos >= p->nrows) |
|
|
|
@@ -2300,29 +2314,11 @@ nextpage: |
|
|
|
break; |
|
|
|
case 'o': /* feeds: load, items: plumb URL */ |
|
|
|
case '\n': |
|
|
|
- p = &panes[selpane]; |
|
|
|
- if (selpane == PaneFeeds && panes[selpane].nrows) { |
|
|
|
- row = pane_row_get(p, p->pos); |
|
|
|
- f = (struct feed *)row->data; |
|
|
|
- feeds_set(f); |
|
|
|
- urls_read(); |
|
|
|
- if (f->fp) |
|
|
|
- feed_load(f, f->fp); |
|
|
|
- urls_free(); |
|
|
|
- /* redraw row: counts could be changed */ |
|
|
|
- updatesidebar(); |
|
|
|
- updatetitle(); |
|
|
|
- |
|
|
|
- if (layout == LayoutMonocle) { |
|
|
|
- selpane = PaneItems; |
|
|
|
- updategeom(); |
|
|
|
- } |
|
|
|
- } else if (selpane == PaneItems && panes[selpane].nrows) { |
|
|
|
- row = pane_row_get(p, p->pos); |
|
|
|
- item = (struct item *)row->data; |
|
|
|
- markread(p, p->pos, p->pos, 1); |
|
|
|
- forkexec((char *[]) { plumbercmd, item->fields[FieldLink], NULL }, plumberia); |
|
|
|
- } |
|
|
|
+openitem: |
|
|
|
+ if (selpane == PaneFeeds && panes[selpane].nrows) |
|
|
|
+ feed_open_selected(&panes[PaneFeeds]); |
|
|
|
+ else if (selpane == PaneItems && panes[selpane].nrows) |
|
|
|
+ feed_plumb_selected_item(&panes[PaneItems]); |
|
|
|
break; |
|
|
|
case 'c': /* items: pipe TSV line to program */ |
|
|
|
case 'p': |
|