Giving w3m a try over lynx browser. - dotfiles - These are my dotfiles. There are many like it, but these are mine.
 (HTM) git clone git://jay.scot/dotfiles
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
       ---
 (DIR) commit 66115a683f5837f349a98b68c6303438c368fe02
 (DIR) parent bb5259bfef8dc33826d4c835465fa7d95c510baf
 (HTM) Author: Jay Scott <me@jay.scot>
       Date:   Fri,  7 Feb 2025 20:42:28 +0000
       
       Giving w3m a try over lynx browser.
       
       Diffstat:
         M README                              |       2 +-
         M bin/link-handler                    |       2 +-
         A bin/open-w3m-bookmarks              |      21 +++++++++++++++++++++
         M bootstrap.sh                        |       3 +++
         M isync/mbsyncrc                      |       2 +-
         M kshrc                               |       8 ++++++--
         M mutt/mailcap                        |       1 -
         M mutt/muttrc                         |       1 +
         A w3m/bookmark.html                   |      39 +++++++++++++++++++++++++++++++
         A w3m/cgi-bin/gemini.cgi              |      28 ++++++++++++++++++++++++++++
         A w3m/config                          |     165 +++++++++++++++++++++++++++++++
         A w3m/keymap                          |      12 ++++++++++++
         A w3m/urimethodmap                    |       1 +
       
       13 files changed, 279 insertions(+), 6 deletions(-)
       ---
 (DIR) diff --git a/README b/README
       @@ -16,7 +16,7 @@ main desktop OS and are forever evolving.
          window manager : cwm
          terminal       : xterm
          email          : neomutt / isync / smtpd
       -  browser        : firefox / lynx
       +  browser        : firefox / w3m
          media          : mpv
          password mgmt  : pass
          vpn            : mullvad
 (DIR) diff --git a/bin/link-handler b/bin/link-handler
       @@ -3,7 +3,7 @@
        # applications
        player="mpv --autofit=30% --really-quiet --no-terminal"
        gemini="xterm -e amfora"
       -gopher="xterm -e lynx"
       +gopher="xterm -e w3m"
        pdf="mupdf"
        images="feh"
        torrent="qbittorrent"
 (DIR) diff --git a/bin/open-w3m-bookmarks b/bin/open-w3m-bookmarks
       @@ -0,0 +1,21 @@
       +#!/bin/sh
       +
       +HTML_FILE="$HOME/.w3m/bookmark.html"
       +
       +if [ ! -f "$HTML_FILE" ]; then
       +  echo "File not found: $HTML_FILE"
       +  exit 1
       +fi
       +
       +# Extract links from <li> elements
       +LINKS=$(sed -n 's/.*<li[^>]*>\s*<a href="\([^"]*\)".*/\1/p' "$HTML_FILE")
       +
       +if [ -z "$LINKS" ]; then
       +  echo "No links found in <li> elements."
       +  exit 1
       +fi
       +
       +# Use fzf to select a link
       +SELECTED_LINK=$(echo "$LINKS" | fzf --height 40% --reverse)
       +
       +w3m "$SELECTED_LINK"
 (DIR) diff --git a/bootstrap.sh b/bootstrap.sh
       @@ -4,17 +4,20 @@ DOTFILES=$(pwd)
        
        FILES='cwmrc kshrc profile Xdefaults xsession'
        ROOT='bin'
       +ROOT_HIDDEN='w3m'
        CONFIG='git lynx mpd mutt ncmpcpp nvim isync'
        
        link() {
                for f in $FILES; do ln -sfn "$DOTFILES/$f" "$HOME/.$f"; done
                for f in $ROOT; do ln -sfn "$DOTFILES/$f" "$HOME/$f"; done
       +        for f in $ROOT_HIDDEN; do ln -sfn "$DOTFILES/$f" "$HOME/.$f"; done
                for f in $CONFIG; do ln -sfn "$DOTFILES/$f" "$HOME/.config/$f"; done
        }
        
        unlink() {
                for f in $FILES; do unlink "$HOME/.$f"; done
                for f in $ROOT; do unlink "$HOME/$f"; done
       +        for f in $ROOT_HIDDEN; do unlink "$HOME/.$f"; done
                for f in $CONFIG; do unlink "$HOME/.config/$f"; done
        }
        
 (DIR) diff --git a/isync/mbsyncrc b/isync/mbsyncrc
       @@ -7,7 +7,7 @@ SyncState *
        IMAPAccount jay
        Host imap.mailbox.org
        User me@jay.scot
       -PassCmd "pass tech/mailbox.org | head -n1"
       +PassCmd "gopass show -o tech/mailbox.org"
        TLSType IMAPS
        
        IMAPStore jay-remote
 (DIR) diff --git a/kshrc b/kshrc
       @@ -27,6 +27,8 @@ alias rm='rm -i'
        
        # random alias
        alias weather='curl wttr.in/?1QF'
       +alias ls='colorls -G'
       +alias pass='gopass'
        
        # git alias
        alias ga='git add -A'
       @@ -35,6 +37,10 @@ alias gl="git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %
        alias gd='git diff'
        alias gma='git commit -am'
        
       +# browser
       +alias sr='sr -browser=w3m'
       +alias b='open-w3m-bookmarks'
       +
        # neo
        alias vim='nvim'
        alias mutt='neomutt'
       @@ -52,6 +58,4 @@ export PS1="\[\e[00;34m\]▶▶▶ \W \[\e[0m\]"
        export HISTFILE=/home/jay/.cache/sh_history
        export HISTSIZE=1000
        
       -alias ls='colorls -G'
        set -o emacs
       -
 (DIR) diff --git a/mutt/mailcap b/mutt/mailcap
       @@ -1,2 +1 @@
       -#text/html; lynx -assume_charset=%{charset} -display_charset=utf-8 -collapse_br_tags -dump %s; nametemplate=%s.html; copiousoutput
        text/html; w3m -I %{charset} -T text/html; copiousoutput;
 (DIR) diff --git a/mutt/muttrc b/mutt/muttrc
       @@ -64,6 +64,7 @@ macro index o "<shell-escape>mbsync -a -c \"$XDG_CONFIG_HOME\"/isync/mbsyncrc<en
        macro index C "<copy-message>?<toggle-mailboxes>" "copy a message to a mailbox"
        macro index A "<save-message>=jay/archive<enter><enter><sync-mailbox><enter>" "save to archive"
        macro index M "<save-message>?<toggle-mailboxes>" "move a message to a mailbox"
       +macro index,pager O "<pipe-message>urlscan -c<Enter>" "call urlscan to extract URLs out of a message"
        
        # sorting
        set sort                                = threads
 (DIR) diff --git a/w3m/bookmark.html b/w3m/bookmark.html
       @@ -0,0 +1,39 @@
       +<head>
       +<META http-equiv="content-type" content="text/html;charset=utf-8">
       +<title>Bookmark file</title>
       +</head>
       +
       +<h1>Bookmarks</h1>
       +
       +<h2>Gopher</h2>
       +<ul>
       +<li><a href="gopher://jay.scot/">jay.scot</a>
       +<li><a href="gopher://1436.ninja/1/Port70News">Port 70 News</a>
       +<li><a href="gopher://gopher.metafilter.com/1/MetaFilter">Metafilter</a>
       +<li><a href="gopher://hngopher.com">Hacker News</a>
       +<li><a href="gopher://gopherpedia.com/">gopherpedia</a>
       +<li><a href="gopher://bitreich.org/1/lawn">The Gopher Lawn</a>
       +<li><a href="gopher://gopher.black/1/moku-pona">Aggregator of phlog</a>
       +<li><a href="gopher://i-logout.cz/1/bongusta/">Bongusta</a>
       +<li><a href="gopher://gopher.icu/">Ian J</a>
       +<li><a href="gopher://floodgap.com/">Floodgap</a>
       +<!--End of section (do not delete this comment)-->
       +</ul>
       +<h2>Web</h2>
       +<ul>
       +<li><a href="https://text.npr.org/">NPR</a>
       +<li><a href="https://neuters.de/">Reuters</a>
       +<li><a href="http://lite.cnn.com/">CNN</a>
       +<!--End of section (do not delete this comment)-->
       +</ul>
       +<h2>Search</h2>
       +<ul>
       +<li><a href="https://lite.duckduckgo.com/lite/">DuckDuckGo</a>
       +<!--End of section (do not delete this comment)-->
       +</ul>
       +<h2>Gemini</h2>
       +<ul>
       +<li><a href="https://portal.mozz.us/gemini/calcuode.com/gmisub-aggregate.gmi">gmisub aggregate</a>
       +<!--End of section (do not delete this comment)-->
       +</ul>
       +</body>
 (DIR) diff --git a/w3m/cgi-bin/gemini.cgi b/w3m/cgi-bin/gemini.cgi
       @@ -0,0 +1,28 @@
       +#!/usr/bin/env sh
       +# AUTHOR: gotbletu (@gmail|twitter|youtube|github|lbry)
       +#         https://www.youtube.com/user/gotbletu
       +# DESC:   gemini proxy to connect over http with w3m web browser
       +# DEMO:   https://youtu.be/mfnCqn4qhL0
       +# DEPEND: coreutils curl grep
       +# REQD:   1. touch ~/.w3m/urimethodmap
       +#         2. echo "gemini: file:/cgi-bin/gemini.cgi?%s" >> ~/.w3m/urimethodmap
       +#         3. chmod +x ~/.w3m/cgi-bin/gemini.cgi
       +#         4. sed -i 's@cgi_bin.*@cgi_bin ~/.w3m/cgi-bin:/usr/lib/w3m/cgi-bin:/usr/local/libexec/w3m/cgi-bin@g' ~/.w3m/config
       +#         5. sed -i 's@urimethodmap.*@urimethodmap ~/.w3m/urimethodmap, /usr/etc/w3m/urimethodmap@g' ~/.w3m/config
       +# CLOG:
       +#         2021-07-30 use curl instead of ping
       +
       +# gemini://gempaper.strangled.net/mirrorlist/
       +# gemini://simplynews.metalune.xyz
       +# gemini://geminispace.info/search?tmux
       +
       +# remove gemini:// header
       +QUERY_STRING=$(echo "$QUERY_STRING" | cut -d '/' -f3-)
       +
       +if [ "$(curl --connect-timeout 1 -s -I "https://portal.mozz.us/about" | head -n1 | grep 200 > /dev/null && echo $? )" = 0 ]; then
       +  echo "W3m-control: GOTO https://portal.mozz.us/gemini/$QUERY_STRING"
       +elif [ "$(curl --connect-timeout 1 -s -I "https://proxy.vulpes.one" | head -n1 | grep 200 > /dev/null && echo $? )" = 0 ]; then
       +  echo "W3m-control: GOTO https://proxy.vulpes.one/gemini/$QUERY_STRING"
       +else
       +  echo "W3m-control: GOTO https://gemproxy.koyu.space/$QUERY_STRING"
       +fi
 (DIR) diff --git a/w3m/config b/w3m/config
       @@ -0,0 +1,165 @@
       +tabstop 8
       +indent_incr 4
       +pixel_per_char 11
       +pixel_per_line 23
       +frame 0
       +target_self 0
       +open_tab_blank 0
       +open_tab_dl_list 0
       +display_link 1
       +display_link_number 1
       +decode_url 1
       +display_lineinfo 1
       +ext_dirlist 1
       +dirlist_cmd file:///$LIB/dirlist.cgi
       +use_dictcommand 1
       +dictcommand file:///$LIB/w3mdict.cgi
       +multicol 0
       +alt_entity 0
       +graphic_char 0
       +display_borders 0
       +disable_center 0
       +fold_textarea 0
       +display_ins_del 1
       +ignore_null_img_alt 1
       +view_unseenobject 0
       +display_image 0
       +pseudo_inlines 1
       +auto_image 1
       +max_load_image 4
       +ext_image_viewer 1
       +image_scale 100
       +inline_img_protocol 0
       +imgdisplay w3mimgdisplay
       +image_map_list 1
       +fold_line 0
       +show_lnum 0
       +show_srch_str 1
       +label_topline 0
       +nextpage_topline 0
       +color 1
       +high-intensity 0
       +basic_color terminal
       +anchor_color blue
       +image_color green
       +form_color red
       +mark_color cyan
       +bg_color terminal
       +active_style 0
       +active_color cyan
       +visited_anchor 0
       +visited_color magenta
       +pagerline 10000
       +use_history 1
       +history 100
       +save_hist 0
       +confirm_qq 1
       +close_tab_back 0
       +mark 0
       +emacs_like_lineedit 0
       +space_autocomplete 0
       +vi_prec_num 0
       +mark_all_pages 0
       +wrap_search 0
       +ignorecase_search 1
       +use_mouse 1
       +reverse_mouse 0
       +relative_wheel_scroll 0
       +relative_wheel_scroll_ratio 30
       +fixed_wheel_scroll_count 5
       +clear_buffer 1
       +decode_cte 0
       +auto_uncompress 0
       +preserve_timestamp 1
       +keymap_file keymap
       +document_root 
       +personal_document_root 
       +cgi_bin ~/.w3m/cgi-bin:/usr/lib/w3m/cgi-bin:/usr/local/libexec/w3m/cgi-bin
       +index_file 
       +tmp_dir 
       +mime_types ~/.mime.types, /etc/mime.types
       +mailcap ~/.w3m/mailcap, /etc/w3m/mailcap
       +urimethodmap ~/.w3m/urimethodmap, /usr/etc/w3m/urimethodmap
       +editor /usr/bin/vi
       +mailto_options 1
       +mailer 
       +extbrowser link-handler
       +extbrowser2
       +extbrowser3 
       +extbrowser4 
       +extbrowser5 
       +extbrowser6 
       +extbrowser7 
       +extbrowser8 
       +extbrowser9 
       +bgextviewer 1
       +use_lessopen 0
       +passwd_file ~/.w3m/passwd
       +disable_secret_security_check 0
       +ftppasswd 
       +ftppass_hostnamegen 1
       +pre_form_file ~/.w3m/pre_form
       +siteconf_file ~/.w3m/siteconf
       +user_agent 
       +no_referer 0
       +cross_origin_referer 1
       +accept_language en;q=1.0
       +accept_encoding gzip, compress, bzip, bzip2, deflate, br
       +accept_media text/html, text/*;q=0.5, image/*
       +argv_is_url 1
       +retry_http 1
       +default_url 1
       +follow_redirection 10
       +meta_refresh 0
       +localhost_only 0
       +dns_order 0
       +nntpserver 
       +nntpmode 
       +max_news 50
       +use_proxy 1
       +http_proxy 
       +https_proxy 
       +gopher_proxy 
       +ftp_proxy 
       +no_proxy 
       +noproxy_netaddr 1
       +no_cache 1
       +ssl_forbid_method 2, 3, t, 5
       +ssl_min_version 
       +ssl_cipher DEFAULT:!LOW:!RC4:!EXP
       +ssl_verify_server 1
       +ssl_cert_file 
       +ssl_key_file 
       +ssl_ca_path 
       +ssl_ca_file 
       +ssl_ca_default 1
       +use_cookie 0
       +show_cookie 0
       +accept_cookie 1
       +accept_bad_cookie 0
       +cookie_reject_domains 
       +cookie_accept_domains 
       +cookie_avoid_wrong_number_of_dots 
       +display_charset UTF-8
       +document_charset UTF-8
       +auto_detect 2
       +system_charset UTF-8
       +follow_locale 1
       +ext_halfdump 0
       +use_wide 1
       +use_combining 1
       +east_asian_width 0
       +use_language_tag 1
       +ucs_conv 1
       +pre_conv 0
       +search_conv 1
       +fix_width_conv 1
       +use_gb12345_map 0
       +use_jisx0201 0
       +use_jisc6226 0
       +use_jisx0201k 0
       +use_jisx0212 0
       +use_jisx0213 0
       +strict_iso2022 1
       +gb18030_as_ucs 0
       +simple_preserve_space 0
 (DIR) diff --git a/w3m/keymap b/w3m/keymap
       @@ -0,0 +1,12 @@
       +# clean page
       +keymap C COMMAND "READ_SHELL 'rdrview $W3M_URL -H 2> /dev/null 1> /tmp/readable.html' ; LOAD /tmp/readable.html"
       +
       +# hide/show images
       +keymap i COMMAND "SET_OPTION display_image=toggle ; RESHAPE"
       +
       +# hints
       +keymap f COMMAND "RESHAPE ; LINK_BEGIN ; GOTO_LINK"
       +keymap F COMMAND "RESHAPE ; LINK_BEGIN ; TAB_LINK"
       +
       +# external
       +keymap o EXTERN_LINK
 (DIR) diff --git a/w3m/urimethodmap b/w3m/urimethodmap
       @@ -0,0 +1 @@
       +gemini: file:/cgi-bin/gemini.cgi?%s