about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorbptato <nincsnevem662@gmail.com>2024-09-02 20:39:11 +0200
committerbptato <nincsnevem662@gmail.com>2024-09-02 20:46:07 +0200
commitf73926306811359c47b589bf860ddccb0a1ceb14 (patch)
tree1dd00feb7e50a085839ea6666a9451c31a677888
parent410951c56ad856954874463a1ad14432cad42149 (diff)
downloadchawan-f73926306811359c47b589bf860ddccb0a1ceb14.tar.gz
doc: update manpages
-rw-r--r--Makefile3
-rw-r--r--doc/cha-api.520
-rw-r--r--doc/cha-config.557
-rw-r--r--doc/cha-image.5148
-rw-r--r--doc/cha-localcgi.52
-rw-r--r--doc/cha-mailcap.510
-rw-r--r--doc/cha-mime.types.52
-rw-r--r--doc/cha-protocols.517
-rw-r--r--doc/cha-troubleshooting.5136
-rw-r--r--doc/cha-urimethodmap.52
-rw-r--r--doc/cha.14
-rw-r--r--doc/config.md2
-rw-r--r--doc/image.md10
-rw-r--r--doc/troubleshooting.md4
14 files changed, 387 insertions, 30 deletions
diff --git a/Makefile b/Makefile
index 6093c1f6..870382bd 100644
--- a/Makefile
+++ b/Makefile
@@ -163,7 +163,8 @@ distclean: clean
 
 manpages1 = cha.1 mancha.1
 manpages5 = cha-config.5 cha-mailcap.5 cha-mime.types.5 cha-localcgi.5 \
-	cha-urimethodmap.5 cha-protocols.5 cha-api.5
+	cha-urimethodmap.5 cha-protocols.5 cha-api.5 cha-troubleshooting.5 \
+	cha-image.5
 
 manpages = $(manpages1) $(manpages5)
 
diff --git a/doc/cha-api.5 b/doc/cha-api.5
index 66088fa9..45b37d61 100644
--- a/doc/cha-api.5
+++ b/doc/cha-api.5
@@ -1,5 +1,5 @@
 '\" t
-.\" Automatically generated by Pandoc 3.2
+.\" Automatically generated by Pandoc 3.3
 .\"
 .TH "cha\-api" "5" "" "" "Chawan\[cq]s command API"
 .SH Chawan\[cq]s command API
@@ -124,16 +124,32 @@ Same as \f[CR]pager.load(url + \[dq]n\[dq])\f[R].
 T}@T{
 T}
 T{
-\f[CR]gotoURL(url)\f[R]
+\f[CR]gotoURL(url, options = {replace: null, contentType: null})\f[R]
 T}@T{
 Go to the specified URL immediately (without a prompt).
 This differs from \f[CR]load\f[R] and \f[CR]loadSubmit\f[R] in that it
 \f[I]does not\f[R] try to correct the URL.
+When \f[CR]replace\f[R] is set, the new buffer may replace the old one
+if it loads successfully.
+When \f[CR]contentType\f[R] is set, the new buffer\[cq]s content type is
+forcefully set to that string.
 Use this for loading automatically retrieved (i.e.\ non\-user\-provided)
 URLs.
 T}@T{
 T}
 T{
+\f[CR]nextBuffer()\f[R], \f[CR]prevBuffer()\f[R],
+\f[CR]nextSiblingBufer()\f[R], \f[CR]prevSiblingBuffer()\f[R],
+\f[CR]parentBuffer()\f[R]
+T}@T{
+Traverse the buffer tree.
+\f[CR]nextBuffer()\f[R], \f[CR]prevBuffer()\f[R] do a depth\-first
+traversal; \[ga]\f[CR]nextSiblingBufer()\f[R],
+\f[CR]prevSiblingBuffer()\f[R] cycle through siblings, and
+\f[CR]parentBuffer()\f[R] returns to the parent.
+T}@T{
+T}
+T{
 \f[CR]dupeBuffer()\f[R]
 T}@T{
 Duplicate the current buffer by loading its source to a new buffer.
diff --git a/doc/cha-config.5 b/doc/cha-config.5
index 57e9348f..dd086807 100644
--- a/doc/cha-config.5
+++ b/doc/cha-config.5
@@ -1,5 +1,5 @@
 '\" t
-.\" Automatically generated by Pandoc 3.2
+.\" Automatically generated by Pandoc 3.3
 .\"
 .TH "cha\-config" "5" "" "" "Configuration of Chawan"
 .SH Configuration of Chawan
@@ -142,8 +142,8 @@ boolean
 T}@T{
 Enable/disable cookies on sites.
 Defaults to false.
-Note that in Chawan, each website gets a separate cookie jar, so some
-websites relying on cross\-site cookies may not work as expected.
+Note: in Chawan, each website gets a separate cookie jar, so websites
+relying on cross\-site cookies may not work as expected.
 You may use the \f[CR][[siteconf]]\f[R] \[lq]cookie\-jar\[rq] and
 \[lq]third\-party\-cookie\[rq] settings to adjust this behavior for
 specific sites.
@@ -168,7 +168,19 @@ boolean
 T}@T{
 When set to true, elements with an \[lq]autofocus\[rq] attribute are
 focused on automatically after the buffer is loaded.
-Defaults to false
+Defaults to false.
+T}@T{
+T}
+T{
+meta\-refresh
+T}@T{
+\[lq]never\[rq] / \[lq]always\[rq] / \[lq]ask\[rq]
+T}@T{
+Whether or not \f[CR]http\-equiv=refresh\f[R] meta tags should be
+respected.
+\[lq]never\[rq] completely disables them, \[lq]always\[rq] automatically
+accepts all of them, \[lq]ask\[rq] brings up a pop\-up menu.
+Defaults to \[lq]ask\[rq].
 T}@T{
 T}
 .TE
@@ -825,6 +837,7 @@ boolean
 T}@T{
 Whether loading cookies should be allowed for this URL.
 By default, this is false for all websites.
+Overrides \f[CR]buffer.cookie\f[R].
 T}@T{
 T}
 T{
@@ -858,7 +871,6 @@ Simplified example: if you click a link on a.com that refers to b.com,
 and referer\-from is true, b.com is sent \[lq]a.com\[rq] as the Referer
 header.
 Overrides \f[CR]buffer.referer\-from\f[R].
-Defaults to false.
 T}@T{
 T}
 T{
@@ -894,7 +906,7 @@ T}@T{
 charset label string
 T}@T{
 Specify the default encoding for this site.
-Overrides \f[CR]document\-charset\f[R] in \f[CR][encoding]\f[R].
+Overrides \f[CR]encoding.document\-charset\f[R].
 T}@T{
 T}
 T{
@@ -915,7 +927,7 @@ T}@T{
 URL
 T}@T{
 Specify a proxy for network requests fetching contents of this buffer.
-Overrides \f[CR]proxy\f[R] in \f[CR][network]\f[R].
+Overrides \f[CR]network.proxy\f[R].
 T}@T{
 T}
 T{
@@ -925,7 +937,7 @@ table
 T}@T{
 Specify a list of default headers for HTTP(S) network requests to this
 buffer.
-Overrides \f[CR]default\-headers\f[R] in \f[CR][network]\f[R].
+Overrides \f[CR]network.default\-headers\f[R].
 T}@T{
 T}
 T{
@@ -949,7 +961,19 @@ boolean
 T}@T{
 When set to true, elements with an \[lq]autofocus\[rq] attribute are
 focused on automatically after the buffer is loaded.
-Overrides buffer.autofocus.
+Overrides \f[CR]buffer.autofocus\f[R].
+T}@T{
+T}
+T{
+meta\-refresh
+T}@T{
+\[lq]never\[rq] / \[lq]always\[rq] / \[lq]ask\[rq]
+T}@T{
+Whether or not \f[CR]http\-equiv=refresh\f[R] meta tags should be
+respected.
+\[lq]never\[rq] completely disables them, \[lq]always\[rq] automatically
+accepts all of them, \[lq]ask\[rq] brings up a pop\-up menu.
+Overrides \f[CR]buffer.meta\-refresh\f[R].
 T}@T{
 T}
 .TE
@@ -1184,6 +1208,21 @@ company or their product in any way.)
 T}@T{
 T}
 T{
+\f[CR]cmd.pager.nextBuffer\f[R], \f[CR]cmd.pager.prevBuffer\f[R],
+\f[CR]cmd.pager.prevSiblingBuffer\f[R],
+\f[CR]cmd.pager.nextSiblingBufer\f[R], \f[CR]cmd.pager.parentBuffer\f[R]
+T}@T{
+Traverse the buffer tree.
+\f[CR]nextBuffer\f[R] and \f[CR]prevBuffer\f[R] are the most intuitive,
+traversing the tree as if it were a linked list.
+\f[CR]prevSiblingBuffer\f[R] and \f[CR]nextSiblingBuffer\f[R] cycle
+through the buffers opened from the same buffer.
+Finally, \f[CR]parentBuffer\f[R] always returns to the buffer the
+current buffer was opened from, even if e.g.\ the user returns and opens
+another page \[lq]in between\[rq].
+T}@T{
+T}
+T{
 \f[CR]cmd.pager.dupeBuffer\f[R]
 T}@T{
 Duplicate the current buffer by loading its source to a new buffer.
diff --git a/doc/cha-image.5 b/doc/cha-image.5
new file mode 100644
index 00000000..764079c1
--- /dev/null
+++ b/doc/cha-image.5
@@ -0,0 +1,148 @@
+.\" Automatically generated by Pandoc 3.3
+.\"
+.TH "cha\-image" "5" "" "" "Image support in Chawan"
+.SH Inline images
+On terminals that support images, Chawan can display various bit\-mapped
+image formats.
+.PP
+Warning: both this document and the implementation is very much WIP.
+Anything described in this document may change in the near future.
+.SS Enabling images
+There are actually two switches for images in the config:
+.IP \[bu] 2
+buffer.images: this enables downloading images, \f[I]even if they cannot
+be displayed\f[R].
+.IP \[bu] 2
+display.image\-mode: sets the inline image display method.
+Defaults to \[lq]auto\[rq], but may also be set to \[lq]sixel\[rq] or
+\[lq]kitty\[rq] manually.
+.PP
+In most cases, all you need to do is to set \[lq]buffer.images\[rq] to
+true; with the default image\-mode, Chawan will find the best image
+display method supported by your terminal.
+.PP
+However, there are terminals (such as yaft) that support an image output
+method but do not advertise it (and are therefore left undetected).
+For such terminals, you also have to set \[lq]display.image\-mode\[rq]
+appropriately.
+.SS Output formats
+Supported output formats are:
+.IP \[bu] 2
+The DEC SIXEL format
+.IP \[bu] 2
+The Kitty terminal graphics protocol
+.PP
+The former is supported because it\[cq]s ubiquitiously adopted; the
+latter because it is technically superior to all existing alternatives.
+.PP
+Support for other protocols (iTerm, MLTerm, etc.)
+is not planned.
+(To my knowledge, all image\-capable terminals support at least one of
+the above two anyways.)
+.PP
+Support for hacks such as w3mimgdisplay, ueberzug, etc.
+is not planned.
+.SS Input formats
+Currently, the supported input formats are:
+.IP \[bu] 2
+BMP, PNG, JPEG, GIF (through stb_image)
+.IP \[bu] 2
+WebP (through JebP)
+.PP
+More formats may be added in the future, provided there exists a
+reasonably small implementation, preferably in the public domain.
+(I do not want to depend on external image decoding libraries, but
+something like stbi is OK to vendor.)
+.SS Codec module system
+All image codec implementations are specified by the URL scheme
+\[lq]img\-codec+name:\[rq], where \[lq]name\[rq] is the MIME subtype.
+e.g.\ for image/png, it is \[lq]img\-codec+png:\[rq].
+Like all schemes, these are defined (and overridable) in the
+urimethodmap file, and are implemented as local CGI programs.
+These programs take an encoded image on stdin, and dump the decoded RGBA
+data to stdout \- when encoding, vice versa.
+.PP
+This means that it is possible (although rarely practical) for users to
+define image decoders for their preferred formats, or even override the
+built\-in ones.
+(If you actually end up doing this for some reason, please shoot me a
+mail so I can add it to the bonus directory.)
+.PP
+A codec can have one of, or both, \[lq]decode\[rq] and \[lq]encode\[rq]
+instructions; these are set in the path name.
+So \[lq]img\-codec+png:decode\[rq] is called for decoding PNGs, and
+\[lq]img\-codec+png:encode\[rq] for encoding them.
+.PP
+Headers are used for transferring metadata (like image dimensions), both
+from the browser (input) and to the browser (output).
+Detailed description of the decoder & encoder interfaces follows.
+.SS decoding
+When the path equals \[lq]decode\[rq], a codec CGI script must take a
+binary stream of an encoded image on its standard input and print the
+equivalent binary stream of big\-endian 8\-bit (per component) RGBA
+values to stdout.
+.PP
+If specified, it also has to resize said image first.
+.PP
+Input headers:
+.IP \[bu] 2
+Cha\-Image\-Info\-Only: 1
+.PP
+This tells the image decoder to only send image metadata (i.e.\ size).
+Technically, the decoder is free to actually decode the image too, but
+the browser will ignore any output after headers.
+.IP \[bu] 2
+Cha\-Image\-Target\-Dimensions: {width}x{height}
+.PP
+Mutually exclusive with Cha\-Image\-Info\-Only; this instructs the
+decoder to also resize the output image.
+The dimension format is such that for e.g.\ 123x456, 123 is width and
+456 is height.
+.PP
+(Readers of good taste might consider this header to be a questionable
+design decision, but remember that both the decoder and encoder
+effectively require copying the output image (thru stdio).
+Combined with the current file loader implementation, this means that
+in\-browser image resizing would require at least two unnecessary
+copies.
+.PP
+A future design might solve this problem better through shared memory.)
+.PP
+Output headers:
+.IP \[bu] 2
+Cha\-Image\-Dimensions: {width}x{height}
+.PP
+The final size of the decoded image.
+If the image was resized through Cha\-Image\-Target\-Dimensions, then
+this header\[cq]s value will match the value specified there.
+.PP
+Again, the dimension format is such that e.g.\ for 123x456, 123 is width
+and 456 is height.
+.SS encoding
+When the path equals \[lq]encode\[rq], a codec CGI script must take a
+binary stream of big\-endian 8\-bit (per component) RGBA values on its
+standard input and print the equivalent encoded image to its standard
+output.
+.PP
+Input headers:
+.IP \[bu] 2
+Cha\-Image\-Dimensions: {width}x{height}
+.PP
+Specifies the dimensions of the input RGBA image.
+This means that {width} * {height} * 4 == {size of data received on
+stdin}.
+.PP
+The format is the same as above; in fact, the design is such that you
+could directly pipe the output of decode to encode (and vice versa).
+.IP \[bu] 2
+Cha\-Image\-Quality: {number}
+.PP
+The requested encoding quality, ranging from 1 to 100 inclusive
+(i.e.\ 1..100).
+It is up to the encoder to interpret this number.
+.PP
+(The stb_image JPEG encoder uses this.)
+.PP
+Output headers:
+.PP
+Currently, no output headers are defined for encoders.
diff --git a/doc/cha-localcgi.5 b/doc/cha-localcgi.5
index 138ac00a..85129618 100644
--- a/doc/cha-localcgi.5
+++ b/doc/cha-localcgi.5
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pandoc 3.2
+.\" Automatically generated by Pandoc 3.3
 .\"
 .TH "cha\-localcgi" "5" "" "" "Local CGI support in Chawan"
 .SH Local CGI support in Chawan
diff --git a/doc/cha-mailcap.5 b/doc/cha-mailcap.5
index b83c6ff9..77fc7759 100644
--- a/doc/cha-mailcap.5
+++ b/doc/cha-mailcap.5
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pandoc 3.2
+.\" Automatically generated by Pandoc 3.3
 .\"
 .TH "cha\-mailcap" "5" "" "" "Mailcap support in Chawan"
 .SH Mailcap
@@ -129,12 +129,16 @@ audio/*; mpv \-; needsterminal
 video/*; mpv \-
 
 # Open docx files using LibreOffice Writer.
-application/vnd.openxmlformats\-officedocument.wordprocessingml.document;lowriter %s
+application/vnd.openxmlformats\-officedocument.wordprocessingml.document; lowriter %s
 # (Wow that was ugly.)
 
 # Display manpages using pandoc. (Make sure the mime type matches the one
 # set in your mime.types file for extensions .1, .2, .3, ...)
-application/x\-troff\-man;pandoc \- \-f man \-t html \-o \-; x\-htmloutput
+application/x\-troff\-man; pandoc \- \-f man \-t html \-o \-; x\-htmloutput
+
+# epub \-> HTML using pandoc. (Again, don\[aq]t forget to adjust mime.types.)
+# We set http_proxy to keep it from downloading whatever through http/s.
+application/epub+zip; http_proxy=localhost:0 pandoc \- \-f epub \-\-embed\-resources \-\-standalone; x\-htmloutput
 
 # Following entry will be ignored, as text/html is supported natively by Chawan.
 text/html; cha \-dT text/html \-I %{charset}; copiousoutput
diff --git a/doc/cha-mime.types.5 b/doc/cha-mime.types.5
index ffe7d1cc..d00d1803 100644
--- a/doc/cha-mime.types.5
+++ b/doc/cha-mime.types.5
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pandoc 3.2
+.\" Automatically generated by Pandoc 3.3
 .\"
 .TH "cha\-config" "5" "" "" "MIME type detection in Chawan"
 .SH mime.types
diff --git a/doc/cha-protocols.5 b/doc/cha-protocols.5
index 1f75b4f4..de44247e 100644
--- a/doc/cha-protocols.5
+++ b/doc/cha-protocols.5
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pandoc 3.2
+.\" Automatically generated by Pandoc 3.3
 .\"
 .TH "cha\-protocols" "5" "" "" "Protocol support in Chawan"
 .SH Protocols
@@ -99,7 +99,7 @@ protocol\-specific line type.
 This is sort of supported through a sed filter for gemtext outputs in
 the CGI script (in other words, no modification to gmi2html was done to
 support this).
-.SS Local schemes: file:, about:, man:, data:
+.SS Local schemes: file:, about:, man:
 While these are not necessarily \f[I]protocols\f[R], they are
 implemented similarly to the protocols listed above (and thus can also
 be replaced, if the user wishes; see below).
@@ -122,11 +122,9 @@ A wrapper command \f[CR]mancha\f[R] also exists; this has an interface
 similar to \f[CR]man\f[R].
 Note: this used to be based on w3mman2html.cgi, but it has been
 rewritten in Nim (and therefore no longer depends on Perl either).
-.PP
-\f[CR]data:\f[R] decodes a data URL as defined in RFC 2397.
-.SS Internal schemes: cgi\-bin:, stream:, cache:
-Three internal protocols exist: \f[CR]cgi\-bin:\f[R], \f[CR]stream:\f[R]
-and \f[CR]cache:\f[R].
+.SS Internal schemes: cgi\-bin:, stream:, cache:, data:
+Four internal protocols exist: \f[CR]cgi\-bin:\f[R], \f[CR]stream:\f[R],
+\f[CR]cache:\f[R] and \f[CR]data:\f[R].
 These are the basic building blocks for the implementation of every
 protocol mentioned above; for this reason, these can \f[I]not\f[R] be
 replaced, and are implemented in the main browser binary.
@@ -158,6 +156,11 @@ downloaded.
 Note that this is not a real cache; files are deterministically loaded
 from the \[lq]cache\[rq] upon certain actions, and from the network upon
 others, but neither is used as a fallback to the other.
+.PP
+\f[CR]data:\f[R] decodes a data URL as defined in RFC 2397.
+This used to be a CGI module, but has been moved back into the loader
+process because these URLs can get so long that they no longer fit into
+the environment.
 .SS Custom protocols
 Chawan is protocol\-agnostic.
 This means that the \f[CR]cha\f[R] binary itself does not know much
diff --git a/doc/cha-troubleshooting.5 b/doc/cha-troubleshooting.5
new file mode 100644
index 00000000..8f205664
--- /dev/null
+++ b/doc/cha-troubleshooting.5
@@ -0,0 +1,136 @@
+.\" Automatically generated by Pandoc 3.3
+.\"
+.TH "cha\-troubleshooting" "5" "" "" "Troubleshooting Chawan"
+.SH Troubleshooting Chawan
+This document lists common problems you may run into when using Chawan.
+.SS I can\[cq]t select/copy text with my mouse?
+Your options are:
+.IP \[bu] 2
+Use \f[CR]v\f[R] (and copy with \f[CR]y\f[R]).
+Drawback: requires keyboard
+.IP \[bu] 2
+Hold down the shift key while selecting.
+Drawback: can only select text currently on the screen
+.IP \[bu] 2
+Disable mouse support (\f[CR]input.use\-mouse = false\f[R] in
+config.toml).
+Drawback: see above (plus now you can\[cq]t use the mouse to move on the
+screen)
+.SS Why do I get strange/incorrect/ugly colors?
+Chawan\[cq]s display capabilities depend on what your terminal reports.
+In particular:
+.IP \[bu] 2
+if the \f[CR]$COLORTERM\f[R] variable is not set, then it may fall back
+to 8\-bit or ANSI colors
+.IP \[bu] 2
+if it does not respond to querying the background color, then
+Chawan\[cq]s color contrast correction will likely malfunction
+.PP
+You can fix this manually by exporting \f[CR]COLORTERM=truecolor\f[R]
+and
+\f[CR]display.default\-background\-color\f[R]/\f[CR]display.default\-foreground\-color\f[R]
+variables.
+See config.md for details.
+.SS Can I view Markdown files using Chawan?
+Yes; Chawan now has a built\-in markdown converter.
+If you don\[cq]t like it, you can always replace it with e.g.\ pandoc.
+.SS I set my \f[CR]$PAGER\f[R] to \f[CR]cha\f[R] and now man pages are unreadable.
+Most \f[CR]man\f[R] implementations print formatted manual pages by
+default, which Chawan \f[I]can\f[R] parse if they are passed through
+standard input.
+.PP
+Unfortunately, mandoc passes us the formatted document as a
+\f[I]file\f[R], which Chawan reasonably interprets as plain text without
+formatting.
+.PP
+At this point you have two options:
+.IP \[bu] 2
+\f[CR]export PAGER=\[aq]cha \-T text/x\-ansi\[aq]\f[R] and see that man
+suddenly works as expected.
+.IP \[bu] 2
+\f[CR]alias man=mancha\f[R] and see that man suddenly works better than
+expected.
+.PP
+Ideally you should do both, to deal with cases like git help which
+shells out to man directly.
+.SS Where are the keybindings?
+Please run \f[CR]cha about:chawan\f[R] for a list of default
+keybindings.
+Users familiar with \f[I]vi\f[R], \f[I]vim\f[R], etc.
+should find these defaults familiar.
+.PP
+A w3m\-like keymap also exists at bonus/w3m.toml.
+Note that not every w3m feature is implemented yet, so it\[cq]s not 100%
+compatible.
+.SS How do I view text files with wrapping?
+By default, text files are not auto\-wrapped, so viewing plain text
+files that were not wrapped properly by the authors is somewhat
+annoying.
+.PP
+A workaround is to add this to your config\[cq]s \f[CR][page]\f[R]
+section:
+.IP
+.EX
+\[aq] f\[aq] = \[dq]pager.externFilterSource(\[aq]fmt\[aq])\[dq]
+.EE
+.PP
+and then press \f[CR]<space> f\f[R] to view a wrapped version of the
+current text file.
+(This assumes your system has an \f[CR]fmt\f[R] program \- if not,
+\f[CR]fold \-s\f[R] may be an alternative.)
+.PP
+To always automatically wrap, you can add this to your user style:
+.IP
+.EX
+plaintext { \f[B]white\-space\f[R]: pre\-wrap }
+.EE
+.PP
+To do the same for HTML and ANSI text, use \f[CR]plaintext, pre\f[R].
+.SS Why does \f[CR]$WEBSITE\f[R] look awful?
+Usually, this is because it uses some CSS features that are not yet
+implemented in Chawan.
+The most common offenders are grid and CSS variables.
+.PP
+There are three ways of dealing with this:
+.IP "1." 3
+If the website\[cq]s contents are mostly text, install \c
+.UR https://github.com/eafer/rdrview
+rdrview
+.UE \c
+\&.
+Then bind the following command to a key of your choice in the config
+(e.g.\ \f[CR]<space> r\f[R]):
+\f[CR]\[aq] r\[aq] = \[dq]pager.externFilterSource(\[aq]rdrview \-H \-u \[dq]$CHA_URL\[dq]\[aq])\[dq]\f[R]
+This does not fix the core problem, but will significantly improve your
+reading experience anyway.
+.IP "2." 3
+Complain \c
+.UR https://todo.sr.ht/~bptato/chawan
+here
+.UE \c
+, and wait until the problem goes away.
+.IP "3." 3
+Write a patch to fix the problem, and send it \c
+.UR https://lists.sr.ht/~bptato/chawan-devel
+here
+.UE \c
+\&.
+.SS \f[CR]$WEBSITE\f[R]\[cq]s interactive features don\[cq]t work!
+Some potential fixes:
+.IP \[bu] 2
+Logging in to websites requires cookies.
+Some websites also require cookie sharing across domains.
+For security reasons, Chawan does not allow any of this by default, so
+you will have to fiddle with siteconf to fix it.
+See config.md#siteconf for details.
+.IP \[bu] 2
+Set the \f[CR]referer\-from\f[R] siteconf value to true; this will cause
+Chawan to send a \f[CR]Referer\f[R] header when navigating to other URLs
+from the target URL.
+.IP \[bu] 2
+Enable JavaScript.
+If something broke, type M\-c M\-c to check the browser console, then
+follow step 3.
+of the previous answer.
+Warning: remote JavaScript execution is inherently unsafe.
+Please only enable JavaScript on websites you trust.
diff --git a/doc/cha-urimethodmap.5 b/doc/cha-urimethodmap.5
index df03b508..0cdb5c37 100644
--- a/doc/cha-urimethodmap.5
+++ b/doc/cha-urimethodmap.5
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pandoc 3.2
+.\" Automatically generated by Pandoc 3.3
 .\"
 .TH "cha\-urimethodmap" "5" "" "" "URI method map support in Chawan"
 .SH URI method map support in Chawan
diff --git a/doc/cha.1 b/doc/cha.1
index 5af4319d..12ba2236 100644
--- a/doc/cha.1
+++ b/doc/cha.1
@@ -129,4 +129,6 @@ Configuration options are described in \fBcha-config\fR(5).
 .SH SEE ALSO
 \fBmancha\fR(1), \fBcha-mailcap\fR(5), \fBcha-mime.types\fR(5), \fBcha-config\fR(5),
 .br
-\fBcha-localcgi\fR(5), \fBcha-urimethodmap\fR(5), \fBcha-protocols\fR(5)
+\fBcha-localcgi\fR(5), \fBcha-urimethodmap\fR(5), \fBcha-protocols\fR(5),
+.br
+\fBcha-image\fR(5), \fBcha-troubleshooting\fR(5)
diff --git a/doc/config.md b/doc/config.md
index 91894911..4b42cd7a 100644
--- a/doc/config.md
+++ b/doc/config.md
@@ -164,7 +164,7 @@ option disabled, only enabling it for specific sites in `[[siteconf]]`.
 <td>boolean</td>
 <td>When set to true, elements with an "autofocus" attribute are focused on
 automatically after the buffer is loaded.<br>
-Defaults to false</td>
+Defaults to false.</td>
 </tr>
 
 <tr>
diff --git a/doc/image.md b/doc/image.md
index 119f7e3c..14f8f124 100644
--- a/doc/image.md
+++ b/doc/image.md
@@ -1,4 +1,8 @@
-# Image support in Chawan
+<!-- MANON
+% cha-image(5) | Image support in Chawan
+MANOFF -->
+
+# Inline images
 
 On terminals that support images, Chawan can display various bit-mapped
 image formats.
@@ -12,8 +16,8 @@ There are actually two switches for images in the config:
 
 * buffer.images: this enables downloading images, *even if they cannot
   be displayed*.
-* display.image-mode: sets the "image mode". Defaults to "auto", but may
-  also be set to "sixel" or "kitty" manually.
+* display.image-mode: sets the inline image display method. Defaults to
+  "auto", but may also be set to "sixel" or "kitty" manually.
 
 In most cases, all you need to do is to set "buffer.images" to true;
 with the default image-mode, Chawan will find the best image display
diff --git a/doc/troubleshooting.md b/doc/troubleshooting.md
index eea64aff..b94769a8 100644
--- a/doc/troubleshooting.md
+++ b/doc/troubleshooting.md
@@ -1,3 +1,7 @@
+<!-- MANON
+% cha-troubleshooting(5) | Troubleshooting Chawan
+MANOFF -->
+
 # Troubleshooting Chawan
 
 This document lists common problems you may run into when using Chawan.