Introduction
Introduction Statistics Contact Development Disclaimer Help
make plumb, pipe, yank a function and reuse them for keybinds and mouse actions…
git clone git://git.codemadness.org/sfeed_curses
Log
Files
Refs
README
LICENSE
---
commit 65f7223309e929522ca4e3762604f10653db5aca
parent edcbb556469e5381e61f0d733b95b472d55ecf44
Author: Hiltjo Posthuma <[email protected]>
Date: Mon, 29 Mar 2021 20:00:36 +0200
make plumb, pipe, yank a function and reuse them for keybinds and mouse actions
Diffstat:
M sfeed_curses.c | 78 +++++++++++++++++------------…
1 file changed, 43 insertions(+), 35 deletions(-)
---
diff --git a/sfeed_curses.c b/sfeed_curses.c
@@ -1531,15 +1531,41 @@ feed_open_selected(struct pane *p)
}
void
-feed_plumb_selected_item(struct pane *p)
+feed_plumb_selected_item(struct pane *p, int field)
{
struct row *row;
struct item *item;
- row = pane_row_get(p, p->pos);
- item = (struct item *)row->data;
+ if (!(row = pane_row_get(p, p->pos)))
+ return;
+ item = row->data;
+ markread(p, p->pos, p->pos, 1);
+ forkexec((char *[]) { plumbercmd, item->fields[field], NULL }, plumber…
+}
+
+void
+feed_pipe_selected_item(struct pane *p)
+{
+ struct row *row;
+ struct item *item;
+
+ if (!(row = pane_row_get(p, p->pos)))
+ return;
+ item = row->data;
markread(p, p->pos, p->pos, 1);
- forkexec((char *[]) { plumbercmd, item->fields[FieldLink], NULL }, plu…
+ pipeitem(pipercmd, item, -1, piperia);
+}
+
+void
+feed_yank_selected_item(struct pane *p, int field)
+{
+ struct row *row;
+ struct item *item;
+
+ if (!(row = pane_row_get(p, p->pos)))
+ return;
+ item = row->data;
+ pipeitem(yankercmd, item, field, yankeria);
}
/* calculate optimal (default) size */
@@ -1736,8 +1762,6 @@ void
mousereport(int button, int release, int keymask, int x, int y)
{
struct pane *p;
- struct row *row;
- struct item *item;
size_t i;
int changedpane, dblclick, pos;
@@ -1786,18 +1810,14 @@ mousereport(int button, int release, int keymask, int x…
if (i == PaneFeeds)
feed_open_selected(&panes[PaneFeeds]);
else if (i == PaneItems && dblclick && !changedpane)
- feed_plumb_selected_item(&panes[PaneItems]);
+ feed_plumb_selected_item(&panes[PaneItems], Fi…
break;
case 2: /* right-click */
if (!p->nrows || pos >= p->nrows)
break;
pane_setpos(p, pos);
- if (i == PaneItems) {
- row = pane_row_get(p, p->pos);
- item = (struct item *)row->data;
- markread(p, p->pos, p->pos, 1);
- pipeitem(pipercmd, item, -1, piperia);
- }
+ if (i == PaneItems)
+ feed_pipe_selected_item(&panes[PaneItems]);
break;
case 3: /* scroll up */
case 4: /* scroll down */
@@ -2047,7 +2067,6 @@ main(int argc, char *argv[])
struct pane *p;
struct feed *f;
struct row *row;
- struct item *item;
size_t i;
char *name, *tmp;
char *search = NULL; /* search text */
@@ -2326,12 +2345,8 @@ nextpage:
case 'a': /* attachment */
case 'e': /* enclosure */
case '@':
- if (selpane == PaneItems && panes[selpane].nrows) {
- p = &panes[selpane];
- row = pane_row_get(p, p->pos);
- item = (struct item *)row->data;
- forkexec((char *[]) { plumbercmd, item->fields…
- }
+ if (selpane == PaneItems)
+ feed_plumb_selected_item(&panes[selpane], Fiel…
break;
case 'm': /* toggle mouse mode */
usemouse = !usemouse;
@@ -2363,28 +2378,21 @@ nextpage:
case '\n':
openitem:
if (selpane == PaneFeeds && panes[selpane].nrows)
- feed_open_selected(&panes[PaneFeeds]);
+ feed_open_selected(&panes[selpane]);
else if (selpane == PaneItems && panes[selpane].nrows)
- feed_plumb_selected_item(&panes[PaneItems]);
+ feed_plumb_selected_item(&panes[selpane], Fiel…
break;
case 'c': /* items: pipe TSV line to program */
case 'p':
case '|':
+ if (selpane == PaneItems)
+ feed_pipe_selected_item(&panes[selpane]);
+ break;
case 'y': /* yank: pipe TSV field to yank URL to clipboard */
case 'E': /* yank: pipe TSV field to yank enclosure to clipboa…
- if (selpane == PaneItems && panes[selpane].nrows) {
- p = &panes[selpane];
- row = pane_row_get(p, p->pos);
- item = (struct item *)row->data;
- switch (ch) {
- case 'y': pipeitem(yankercmd, item, FieldLink,…
- case 'E': pipeitem(yankercmd, item, FieldEnclo…
- default:
- markread(p, p->pos, p->pos, 1);
- pipeitem(pipercmd, item, -1, piperia);
- break;
- }
- }
+ if (selpane == PaneItems)
+ feed_yank_selected_item(&panes[selpane],
+ ch == 'y' ? FieldLink …
break;
case 'f': /* mark all read */
case 'F': /* mark all unread */
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.