Edbrowse, a Command Line Editor Browser
I use Edbrowse all the time, including to read Hacker News. You can add custom functions into ~&#x2F;.ebrc, and I have one to search for the next post on an HN page, or the &quot;More&quot; link, if there are no more posts on the current page.<p><pre><code>    function:hnn {
        &#x2F;^\({} \|{More}\)
    }

</code></pre>
Edbrowse supports JavaScript, but it doesn&#x27;t work very well, so I turn it off at startup, and only turn it on if I think it might make a page work better (it usually doesn&#x27;t). Here&#x27;s a bit of my config:<p><pre><code>    # I use certifi to provide the trusted root certificate authorities
    certfile=&#x2F;usr&#x2F;local&#x2F;lib&#x2F;python3.8&#x2F;site-packages&#x2F;certifi&#x2F;cacert.pem
    jar=&#x2F;Users&#x2F;ncarpenter&#x2F;.config&#x2F;edbrowse&#x2F;cookiejar
    downdir = &#x2F;Users&#x2F;ncarpenter&#x2F;Downloads
    # Disable cache, so each Edbrowse session doesn&#x27;t cache where I&#x27;ve been to disk.
    # It doesn&#x27;t have persistent history anyways.
    cachesize=0
    
    # User agents (type ua0 for edbrowse, ua1 for Lynx, etc)
    agent = Lynx&#x2F;2.8.4rel.1 libwww-FM&#x2F;2.14
    agent = Mozilla&#x2F;4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90)
    agent = Mozilla&#x2F;4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident&#x2F;5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)
    agent=Mozilla&#x2F;5.0 (Windows NT 10.0; Win64; x64) AppleWebKit&#x2F;537.36 (KHTML, like Gecko) Chrome&#x2F;72.0.3112.113 Safari&#x2F;537.36
    
    # Automatically convert Markdown, Epub, PDF to HTML
    plugin {
        type = markdown
        desc = markdown file
        suffix = md
        program = pandoc --toc -f markdown %i
        outtype = H
        down_url
    }
    
    plugin {
        type = epub
        desc = epub file
        suffix = epub
        content = application&#x2F;epub+zip
        #  %o is the temp output file generated by the program
        program = pandoc -f epub %i
        outtype = H
        down_url
    }
    
    plugin {
        type = pdf
        desc = pdf file
        suffix = pdf
        content = application&#x2F;pdf
        #  file must be local
        down_url
        program = pdftohtml -i -noframes %i %o &gt;&#x2F;dev&#x2F;null
        outtype = H
    }
    
    # Play links to audio with mpv
    plugin {
        type = audio
        desc = streaming audio
        protocol = rtsp,pnm,sdp,pls
        suffix = rm,ra,ram,ogg,mp3,mp4,m3u,m3u8,opus,flac
        content = audio&#x2F;x-scpls,audio&#x2F;mpeg,application&#x2F;pls+xml
        program = mpv --really-quiet --no-audio-display --no-ytdl --af=scaletempo=stride=20:overlap=1 %i
    }
    
    # Use mps-youtube to handle Youtube URLs
    plugin {
        type = audio&#x2F;youtube
        desc = streaming audio from Youtube
        suffix=mpeg # Doesn&#x27;t matter, but needed for edbrowse not to complain
        urlmatch = .youtube.com&#x2F;watch?
        program = mpsyt url %i
    }
    
    # These commands run when Edbrowse starts
    # See the user&#x27;s guide for what these commands mean, but I&#x27;m basically setting up startup preferences
    function:init {
        db0
        js-
        sg+
        ci+
        dx
        endm+
        rl+
        z37
        db1
    }
    
    function:b {
        b ~&#x2F;.config&#x2F;edbrowse&#x2F;bookmarks
    }
    
    function+atb {
    db0
    A
        ,j
        w+ ~&#x2F;.config&#x2F;edbrowse&#x2F;bookmarks
        ^
        db1
    }
    
    # Typing &lt;hs some.domain.tld is easier than typing
    # b https:&#x2F;&#x2F;some.domain.tld
    function:hs {
        b https:&#x2F;&#x2F;~0
    }
    
    # Because I read RFCs enough to make use of this
    function+rfc {
        b https:&#x2F;&#x2F;tools.ietf.org&#x2F;html&#x2F;rfc~1
    }
    
    # Open the current page in the default browser,
    # when it just isn&#x27;t working right in Edbrowse.
    function+o {
        db0
        ub
        !open &quot;&#x27;_&quot;
        b
        db1
    }
    
    # Copy the current URL to the clipboard
    function:cpp {
        !printf &#x27;%s&#x27; &quot;&#x27;_&quot; | sed &#x27; s`^\([a-zA-Z0-9]\{1,\}:&#x2F;&#x2F;.*\)\(\.browse\)$`\1`&#x27; | tr -d &#x27;\n&#x27; | pbcopy
    }
</code></pre>
I left a few functions out, like ones to search Google and DuckDuckGo, because  I store the search forms locally, but can include those in a separate comment, if anyone&#x27;s interested.