Contents

Archlinux 小记-010 实用软件——newsboat

Newsboat 是 TUI 下的 Rss 阅读器。

RSS ,即 RDF Site Summary,中文翻译是 聚合内容,其目的是将新闻标题、摘要、内容按照要求向用户推送,如此一来,用户既可以快速摄取重要信息,还不再需要手动查看更新。

Newsboat 就是为 Unix 和类 Unix 系统的用户在终端上浏览 Rss 而设计的,好比一艘来往各网站与用户终端间的货船,为用户载来信息,恰如其名 News Boat

安装


1. 从源码编译安装


1.1. 下载源码

最新源码可从仓库中下载:

1
git clone https://github.com/newsboat/newsboat.git

也可以从官网 下载。

1.2. 安装依赖包

Newsboat 的源码需要一些依赖包才可正常编译:

  • GNU Make 4.0 及以上
  • GCC 5.0 及以上/Clang 3.6 及以上
  • Rust 和 Cargo,1.64 及以上
  • STFL 0.21 或以上,超链是 fork 版本,原版不再维护
  • SQLite3 3.5 及以上
  • libcurl 7.32.0 及以上
  • GNU gettext
  • pkg-config
  • libxml2
  • josn-c 0.11 及以上
  • Asciidoctor 1.5.3 及以上
  • GNU AWKNAWK

1.3. 编译安装

有以下方法可供参考:

  • 在 Docker 中编译
  • 在 Chroot 中编译
  • 从源码编译:
1
sudo make install       # 将所有文件安装进目录 /usr/local/ 下

若要安装进不同目录,可通过prefix实现,比如:

1
sudo make prefix=/opt/newsboat install

2. 下载安装已编译好的软件


2.1. Aur

Arch 用户可从 Aur 下载安装:

1
sudo pacman -S newsboat

2.2. 软件仓库

  • 各 Linux、BSD、和其他系统发行版的下载方式可参考此清单
  • Snap 下载安装
1
sudo snap install newsboat

使用


安装完成后,执行命令newsboat即可获得帮助信息。

1. 配置 Rss 源


关于如何寻找有趣的Feeds,可以参考 RssHubRss 订阅源推荐 。 此外,搭配 RssHub Radar 插件,浏览器将自动识别所访问网站提供的Rss Feed

1. 添加

Newsboat 须要设置 Rss 源才可正常使用。

  • 编辑$XDG_CONFIG_HOME/newsboat/urls来添加 Rss 源(也可以按快捷键E),一行一个,比如:
1
2
https://archlinux.org/feeds/news
http://www.archdaily.cn/cn/feed
  • 导入 OPML 文件:
1
newsboat -i blogroll.opml

2. 整理

当 Rss feeds 达到一定数量后,若不加以整理,会十分混乱,可以编辑$XDG_CONFIG_HOME/newsboat/urls,其中,以#开头的字符会被注释,方便分类管理Feeds,比如:

https://blogpics-1309094537.cos.ap-guangzhou.myqcloud.com/blogpics/A10-content-newsboat_url.png
Newsboat url 整理

2.1. 添加标签

Feed添加标签:

1
2
3
# Linux
https://archlinux.org/feeds/news/     "Arch"  "linux"
...

在每条 Feed 后添加的、双引号内字符会被视为标签,Newsboat中,可使用快捷键t浏览

2.2. 重命名

Feed重命名:

1
2
3
# Linux
https://archlinux.org/feeds/news/      "Arch"  "linux" ~Arch_News
...

在每条 Feed 后添加的、~后的字符会被视为此FeedNewsboat中所显示的名称

2. 配置 UI 界面


编辑$XDG_CONFIG_HOME/newsboat/colour,在其中写入配色代码,并在$XDG_CONFIG_HOME/newsboat/config中引用:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 编辑 $XDG_CONFIG_HOME/newsboat/colour

#                        Font         Block
color background         default    default
color listnormal         color2     default
color listnormal_unread  color9     default  bold
color listfocus          color10    color4
color listfocus_unread   color1     color4   bold
color info               color8     default
color article            color15    default  bold

# highlights
highlight article "^(Title):.*$" blue default
highlight article "https?://[^ ]+" red default
highlight article "\\[image\\ [0-9]+\\]" green default

highlight all "---.*---" blue
highlight feedlist ".*(0/0))" black
highlight article "(^Feed:.*|^Title:.*|^Author:.*)" color2 default bold
highlight article "(^Link:.*|^Date:.*)" color1 default bold
highlight article "https?://[^ ]+" color4 default
highlight article "^(Title):.*$" color1 default bold
highlight article "\\[[0-9][0-9]*\\]" magenta default bold
highlight article "\\[image\\ [0-9]+\\]" green default bold
highlight article "\\[embedded flash: [0-9][0-9]*\\]" green default bold
highlight article ":.*\\(link\\)$" color1 default
highlight article ":.*\\(image\\)$" color2 default
highlight article ":.*\\(embedded flash\\)$" magenta default

feedlist-format "%?T?║%n %12u %t &╠ %t?"
highlight feedlist "[║│]" color3 default
highlight feedlist "╠.*" color3 default

$XDG_CONFIG_HOME/newsboat/config中引用:

1
2
include ~/.config/newsboat/colour
...

https://blogpics-1309094537.cos.ap-guangzhou.myqcloud.com/blogpics/A10-content-newsboat_view.png
Dracula 主题的 Newsboat
主题配色最好与系统一致

3. 配置联动程序


仅有Newsboat本身是无法满足需求的,比如浏览图片、观看视频等等,这需要我们为各类型内容配置打开方式,比如:

  • 图片:sxiv
  • 视频:mpv
  • 动图:mpv
  • 其他:chromium

为此,需要编辑$XDG_CONFIG_HOME/newsboat/config

1
2
3
4
5
6
7
8
9
include ~/.config/newsboat/dracula
...
browser linkhandler
macro , open-in-browser
macro t set browser "qndl" ; open-in-browser ; set browser linkhandler
macro a set browser "tsp yt-dlp --embed-metadata -xic -f bestaudio/best --restrict-filenames" ; open-in-browser ; set browser linkhandler
macro v set browser "setsid -f mpv" ; open-in-browser ; set browser linkhandler
macro w set browser "lynx" ; open-in-browser ; set browser linkhandler
macro c set browser "echo %u | xclip -r -sel c" ; open-in-browser ; set browser linkhandler

代码解释:

  • linkhandler 为判断脚本,我的判断脚本如下文所示,其位于用户的可执行文件基本目录下(~/.local/bin/)
  • 绑定不同快捷键手动指定浏览

我的 linkhandler 脚本:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
if [ -z "$1" ]; then
    url="$(xsel -o)"
else
    url="$1"
fi

case "$url" in
    *mkv|*webm|*mp4|*youtube.com/watch*|*youtube.com/playlist*|*youtube.com/shorts*|*youtu.be*|*hooktube.com*|*bitchute.com*|*videos.lukesmith.xyz*|*odysee.com*|*bilibili.com*)
        setsid -f mpv -quiet "$url" >/dev/null 2>&1 ;;
    *png|*jpg|*jpe|*jpeg|*gif)
        curl -sL "$url" > "/tmp/$(echo "$url" | sed "s/.*\///;s/%20/ /g")" && sxiv -a "/tmp/$(echo "$url" | sed "s/.*\///;s/%20/ /g")"  >/dev/null 2>&1 & ;;
    *pdf|*cbz|*cbr)
        curl -sL "$url" > "/tmp/$(echo "$url" | sed "s/.*\///;s/%20/ /g")" && zathura "/tmp/$(echo "$url" | sed "s/.*\///;s/%20/ /g")"  >/dev/null 2>&1 & ;;
    *mp3|*flac|*opus|*mp3?source*)
        qndl "$url" 'curl -LO'  >/dev/null 2>&1 ;;
    *)
        if [ -f "$url" ]; then
            setsid -f "$TERMINAL" -e "$EDITOR" "$url" >/dev/null 2>&1
        else
            setsid -f "$BROWSER" "$url" >/dev/null 2>&1
        fi
esac

4. 配置定时任务


可以将定时更新加入定时任务中,并使用dunst发送更新通知(需要为dunst设置开机自启),我的定时任务脚本位于$HOME/.local/bin/cron下。

  • 创建定时任务脚本:
1
nvim $HOME/.local/bin/cron/newsup
  • 编辑脚本:
1
2
3
4
#!/bin/sh
dunstify -i terminal " Updating RSS..."
/usr/bin/newsboat -x reload
dunstify -i terminal " RSS update complete."
  • 执行crontab -e,将脚本加入定时任务,每半小时执行一次更新:
1
*/30 * * * * /bin/bash ~/.local/bin/cron/newsup
参考链接

  1. Newsboat
  2. Wiki RSS