#!/usr/bin/env osh
shopt -s strict:all; shopt --unset strict_errexit
DEP="w3m netsurf-framebuffer tslib"
DEC="Select a website and browse via w3m or netsurf"
DOC="
Browse the web via w3m (text) or netsurf (graphical) setting fbp hotkeys
to helpful hotkeys.
Quirks - starts w3m in mode that respects C-c.
For netsurf, has to be run as root (so runs via sudo).
Set \$F_WEB_SITES to customize sites shown to user
"
VAR="
F_WEB_SITES='
npr text.npr.org
ddg duck.com
hn news.ycombinator.com
lbtr lobste.rs
cnn lite.cnn.com
pmos postmarketos.org
'
F_WEB_NETSURF_FBPRATIO='2 / 3'
F_WEB_NETSURF_YRES='1440'
F_WEB_NETSURF_XRES='720'
"
netsurflaunch() {
local XRES YRES URL INPUTDEV
URL="$1"
env | grep -q "^$(basename "$0" | tr '[a-z]' '[A-Z]')=" || eval "$VAR"
XRES="$(echo "$F_WEB_NETSURF_XRES" | bc)"
YRES="$(echo "$F_WEB_NETSURF_YRES * $F_WEB_NETSURF_FBPRATIO" | bc)"
fbset -yres "$YRES"
export SDL_MOUSEDRV=TSLIB
# Interferes with fbp VT switching
export DFBARGS="system=fbdev,no-cursor,disable-module=linux_input,no-vt,no-vt-switch,bg-none"
INPUTDEV="$(ts_uinput -d -v)"
export TSLIB_TSDEVICE="$INPUTDEV"
ts_calibrate
mkdir -p $HOME/.netsurf
echo "fb_toolbar_size: 70" > $HOME/.netsurf/Choices
echo "fb_toolbar_layout:blfsruct" >> $HOME/.netsurf/Choices
[ -p /tmp/fbp.fifo ] && echo -e "\a" > /tmp/fbp.fifo
netsurf-fb -f sdl -w "$XRES" -h "$YRES" "$URL"
fbset -yres "$F_WEB_NETSURF_YRES"
[ -p /tmp/fbp.fifo ] && echo -e "\v" > /tmp/fbp.fifo
}
w3mlaunch() {
local URL
URL="$1"
w3msetfbp
w3m -o keymap_file="$(w3mcfg)" "$URL"
[ -p /tmp/fbp.fifo ] && echo -e "\r" > /tmp/fbp.fifo
}
w3msetfbp() {
[ -p /tmp/fbp.fifo ] && {
echo -e "\b\f\e";
echo "g + - j k w b B \\t \\n u v Q" | tr " " "\n"
} > /tmp/fbp.fifo
}
w3mcfg() {
local FILE
# By default C-c just stops loading; fbp sends C-c
FILE="$(mktemp)"
echo "keymap C-c EXIT" > "$FILE"
echo "$FILE"
}
main() {
env | grep -q "^$(basename "$0" | tr '[a-z]' '[A-Z]')=" || eval "$VAR"
local HANDLE URL MODE
echo "f_web:"
echo "graphical = netsurf"
echo "text = w3m"
OPTS="graphical text"
[ -p /tmp/fbp.fifo ] && { echo -e "\b\r\f"; echo "$OPTS" | tr " " "\n"; } > /tmp/fbp.fifo
read -p "Mode ($OPTS)" MODE
while true; do
clear
echo "$F_WEB_SITES"
echo "Or your custom site, just type!"
HANDLEOPTS="$(echo "$F_WEB_SITES" | awk '{$1=$1};1' | cut -d' ' -f1 | tr "\n" " ")"
[ -p /tmp/fbp.fifo ] && { echo -e "\b\r\f"; echo "$HANDLEOPTS" | tr " " "\n"; } > /tmp/fbp.fifo
read -p "Handle ($HANDLEOPTS): " HANDLE
URL="$(
echo "$F_WEB_SITES" |
sed '/^[[:space:]]*$/d' |
awk '{$1=$1};1' |
grep "$HANDLE" |
cut -d ' ' -f2
)"
[ "$MODE" = text ] && w3mlaunch "$URL"
[ "$MODE" = graphical ] && {
[ -p /tmp/fbp.fifo ] && echo -e "\a" > /tmp/fbp.fifo
sudo "$0" netsurflaunch "$URL"
}
done
}
if [ -n "$1" ]; then "$@"; else main; fi