sfeed/README.curses

177 lines
4.5 KiB
Plaintext

sfeed_curses
------------
sfeed_curses is a curses UI front-end for sfeed.
It shows the TAB-separated feed items in a graphical command-line UI. The
interface has a look inspired by the mutt mail client. It has a sidebar panel
for the feeds, a panel with a listing of the items and a small statusbar for
the selected item/URL. Some functions like searching and scrolling are
integrated in the interface itself.
Build and install
-----------------
$ make
# make install
Usage
-----
Like the format programs included in sfeed you can run it like this:
sfeed_curses ~/.sfeed/feeds/*
... or by reading from stdin:
sfeed_curses < ~/.sfeed/feeds/xkcd
By default sfeed_curses marks the items of the last day as new/bold. To manage
read/unread items in a different way a plain-text file with a list of the read
URLs can be used. To enable this behaviour the path to this file can be
specified by setting the environment variable $SFEED_URL_FILE to the URL file:
export SFEED_URL_FILE="$HOME/.sfeed/urls"
[ -f "$SFEED_URL_FILE" ] || touch "$SFEED_URL_FILE"
sfeed_curses ~/.sfeed/feeds/*
There is a shellscript "sfeed_markread" to process the read and unread items.
See the man page for more detailed information.
Dependencies
------------
- C compiler (C99).
- libc (recommended: C99 and POSIX >= 200809).
- curses (typically ncurses), optional but recommended: but see minicurses.h.
Optional dependencies
---------------------
- POSIX make(1) for Makefile.
- mandoc for documentation: https://mdocml.bsd.lv/
Run-time dependencies
---------------------
- A (POSIX) shell.
- A terminal (emulator) supporting UTF-8 and the used capabilities.
Optional run-time dependencies
------------------------------
- xclip for yanking the URL or enclosure. See $SFEED_YANKER to change it.
- xdg-open, used as a plumber by default. See $SFEED_PLUMBER to change it.
- awk, used by the sfeed_content and sfeed_markread script.
See the ENVIRONMENT VARIABLES section in the man page to change it.
- lynx, used by the sfeed_content script to convert HTML content.
See the ENVIRONMENT VARIABLES section in the man page to change it.
OS tested
---------
- Linux (compilers: clang, gcc, tcc, libc: glibc, musl).
- OpenBSD (clang, gcc).
- NetBSD
- FreeBSD
- DragonFlyBSD
- Illumos (OpenIndiana).
- Windows (cygwin gcc + mintty).
- HaikuOS
Known terminal issues
---------------------
Below lists some bugs or missing features in terminals that are found while
testing. Some of them might be fixed already upstream:
- cygwin + mintty: the xterm mouse-encoding of the mouse position is broken for
scrolling.
- HaikuOS terminal: the xterm mouse-encoding of the mouse button number of the
middle-button, right-button is incorrect / reversed.
- putty: the full reset attribute (ESC c, typically `rs1`) does not reset the
window title.
Color themes
------------
To change the default theme you can set SFEED_THEME using make or in the
Makefile or include the a header file in sfeed_curses.c. See also the themes/
directory.
Running custom commands inside the program
------------------------------------------
Running commands inside the program can be useful for example to sync items or
mark all items across all feeds as read. It can be comfortable to have a
keybind for this inside the program to perform a scripted action and then
reload the feeds by sending the signal SIGHUP.
In the input handling code you can then add a case:
case 'M':
forkexec((char *[]) { "markallread.sh", NULL }, 0);
break;
or
case 'S':
forkexec((char *[]) { "syncnews.sh", NULL }, 1);
break;
The specified script should be in $PATH or an absolute path.
Example of a `markallread.sh` shellscript to mark all URLs as read:
#!/bin/sh
# mark all items/URLs as read.
tmp=$(mktemp)
(cat ~/.sfeed/urls; cut -f 3 ~/.sfeed/feeds/*) | \
awk '!x[$0]++' > "$tmp" &&
mv "$tmp" ~/.sfeed/urls &&
pkill -SIGHUP sfeed_curses # reload feeds.
Example of a `syncnews.sh` shellscript to update the feeds and reload them:
#!/bin/sh
sfeed_update && pkill -SIGHUP sfeed_curses
Open an URL directly in the same terminal
-----------------------------------------
To open an URL directly in the same terminal using the text-mode lynx browser:
SFEED_PLUMBER=lynx SFEED_PLUMBER_INTERACTIVE=1 sfeed_curses ~/.sfeed/feeds/*
Yank to tmux buffer
-------------------
This changes the yank command to set the tmux buffer, instead of X11 xclip:
SFEED_YANKER="tmux set-buffer \`cat\`"
License
-------
ISC, see LICENSE file.
Author
------
Hiltjo Posthuma <hiltjo@codemadness.org>