# 2021-01-24 19:00:00.133769 UTC (+0000)

sfeed 0.9.21 and sfeed_curses 0.9.8 was released.

sfeed is a tool to convert RSS or Atom feeds from XML to a TAB-separated file.

It can be found at:
 * git://git.codemadness.org/sfeed
 * gopher://codemadness.org/1/git/sfeed
 * https://codemadness.org/releases/sfeed/
 * gopher://codemadness.org/1/releases/sfeed/


sfeed_curses is a curses UI front-end for sfeed.

It can be found at:
 * git://git.codemadness.org/sfeed_curses
 * gopher://codemadness.org/1/git/sfeed_curses
 * https://codemadness.org/releases/sfeed_curses/
 * gopher://codemadness.org/1/releases/sfeed_curses/


sfeed has the following changes:

* sfeed: fix 2 regressions in parsing content fields:
 * It ignored other tags such as link field after parsing content fields.
 * It incorrectly set the content-type of a lesser priority field.
   Thanks to pazz0 for reporting it!

* XML parser: do not allow UTF-16 surrogate pair in numeric entity code-points
 to prevent an invalid UTF-8 stream.

* sfeed_update:
 * If baseurl is empty then use the path from the feed by default.
   Feeds should contain absolute urls, but if it does not have it then this
   makes it more convenient to configure such broken feeds in the sfeedrc file.
 * Improve consistency of feed creation and merging
     * Improve feed creation with empty results and new feed files.
       Always make sure the file is created even when it is new and there are also no
       items (after filtering).
     * Consistency: always use the same feed file for merging.
       Do not use "/dev/null" when it is a new file. This works using sort, but is
       ugly when the merge() function is overridden and does something else. It should
       be the feed file always.
 * Make convertencoding() consistent with other overridable functions
   This adds the name as the first parameter for the convertencoding() function,
   like filter, merge, order, etc.
   This can be useful to make an exception rule for text decoding in a more clean
   way.
 ! This may require to change your configuration file if this function was overridden!

* sfeed_plain:
 * printutf8pad: fix byte-seek issue with negative width codepoints.
   For example: "\xef\xbf\xb7" (codepoint 0xfff7), returns wcwidth(wc) == -1.
   The next byte was incorrected seeked, but the codepoint itself was valid
   (mbtowc). This now uses the unicode replacement symbol.
 * printutf8pad: improve padding when the codepoint is invalid.

* sfeed_gopher:
 * Tighten filesystem permissions on OpenBSD using unveil(2).
   Prompted by a suggestion from vejetaryenvampir, thanks!

* Testing:
 * sfeed compiles with lacc: a simple, self-hosting C compiler:
   https://github.com/larmel/lacc .
 * Tested on an old Debian install on Malta MIPS32 big-endian (this found an
   endianness issue in sfeed_curses before, but not in sfeed).
 * Ran a local test-suite (not public yet) on Clang ASAN and found no issues.

* Documentation:
 * Man pages: add more real world examples to the man pages: sfeed_gopher,
   sfeed_opml_import, sfeed_ opml_export.
 * newsboat sqlite3 export script
   * Export the read/unread state also to a plain-text urls file. This can be
     used for sfeed_curses.
   * Escape white-space and control-characters in reverse, just like sfeed
     processes the data.
 * Document behaviour of handling page redirects.
   Prompted by a question via e-mail from Aleksei, thanks!

* Optimizations:
 * Optimize converting UNIX timestamp to localtime. This makes a huge difference
   on glibc. Affects: sfeed_frames, sfeed_gopher, sfeed_html and sfeed_plain.
 * Micro-optimization: use putc instead of fputc, which can be optimized to an
   inline macro.
 * Optimize printutf8pad for the typical ASCII-case. Affects sfeed_plain and
   glibc (no difference on musl).

* Misc:
 * Fixed various small typos, code-style and documentation improvements.


sfeed_curses has the following changes compared to 0.9.7:

 * Fix byte-seek issue with negative width codepoints.
   For example: "\xef\xbf\xb7" (codepoint 0xfff7), returns wcwidth(wc) == -1.
   The next byte was incorrected seeked, but the codepoint itself was valid
   (mbtowc). This now uses the unicode replacement symbol.
 * Improve padded printing when the codepoint is invalid.
 * Micro-optimization: using putc (macro) vs fputc (function).

 * Notable changes compared to the previous newspost are:
   * Easier theme support (compile-time using make SFEED_THEME=newsboat).
   * Resizable sidebar: keybinds <, > and = (thanks to adc and surrounder).
   * Fixes for serial consoles (such as qemu -nographic).
   * Fixes for minicurses (useful for systems not having [n]curses).
   * Endianness fix (found on Malta MIPS32BE) when searching using /.
   * sfeed_content script improvements and cleanup.

--
bob
FAKE NEWS manager