Recent changes to this wiki:

search-bg.gif: transparent bg, mid-grey colour
This works in both light and dark modes.
diff --git a/doc/wikiicons/search-bg.gif b/doc/wikiicons/search-bg.gif
index 02f9da4a7..a4fc51b8a 100644
Binary files a/doc/wikiicons/search-bg.gif and b/doc/wikiicons/search-bg.gif differ

attempt to rework openid logo
diff --git a/doc/wikiicons/openidlogin-bg.png b/doc/wikiicons/openidlogin-bg.png
new file mode 100644
index 000000000..8c4c6da37
Binary files /dev/null and b/doc/wikiicons/openidlogin-bg.png differ
diff --git a/themes/lightdark/style.css b/themes/lightdark/style.css
index 9994cfdc4..fdbe42ca4 100644
--- a/themes/lightdark/style.css
+++ b/themes/lightdark/style.css
@@ -46,6 +46,10 @@ pre.hl { color: inherit; background-color: inherit; }
 .hl.sym { color: inherit; }
 .hl.kwc { color: inherit; }
 
+input#openid_identifier {
+  background: url(wikiicons/openidlogin-bg.png) no-repeat;
+}
+
 input#openid_identifier,
 input#searchbox
 {
diff --git a/underlays/login-selector/ikiwiki/login-selector/login-selector.js b/underlays/login-selector/ikiwiki/login-selector/login-selector.js
index a8017e712..15f3aac3a 100644
--- a/underlays/login-selector/ikiwiki/login-selector/login-selector.js
+++ b/underlays/login-selector/ikiwiki/login-selector/login-selector.js
@@ -16,7 +16,7 @@ var selections_email_large = {
 var selections_openid_large = {
     openid: {
         name: 'OpenID',
-	icon: 'wikiicons/openidlogin-bg.gif',
+	icon: 'wikiicons/openidlogin-bg.png',
         label: 'Enter your OpenID:',
         url: null
     }

done
diff --git a/doc/todo/fix_non-HTML5_displaytime_quotes.mdwn b/doc/todo/fix_non-HTML5_displaytime_quotes.mdwn
index 6ebe734cf..a5c679d5e 100644
--- a/doc/todo/fix_non-HTML5_displaytime_quotes.mdwn
+++ b/doc/todo/fix_non-HTML5_displaytime_quotes.mdwn
@@ -29,3 +29,5 @@ index c53be8e01..e0d4e2d31 100644
 -- 
 2.45.2
 ```
+
+[[done]].. Sorry about that! *— [[Jon]], 2024-12-18*

new patch
diff --git a/doc/todo/fix_non-HTML5_displaytime_quotes.mdwn b/doc/todo/fix_non-HTML5_displaytime_quotes.mdwn
new file mode 100644
index 000000000..6ebe734cf
--- /dev/null
+++ b/doc/todo/fix_non-HTML5_displaytime_quotes.mdwn
@@ -0,0 +1,31 @@
+Please apply the attached patch to fix quotes for the non-HTML5 case of the displaytime function:
+
+```
+From cfb96ee56239eedb9fe702b7c2660046f7a8e668 Mon Sep 17 00:00:00 2001
+From: Paul Wise <pabs3@bonedaddy.net>
+Date: Sun, 15 Dec 2024 10:49:21 +0800
+Subject: [PATCH] Remove extra quote character from date spans
+
+This results in invalid HTML due to the duplicate quote character.
+
+Fixes: commit b6edc5ffc523c1775bdde15339f8c760dda4f0ca
+---
+ IkiWiki.pm | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/IkiWiki.pm b/IkiWiki.pm
+index c53be8e01..e0d4e2d31 100644
+--- a/IkiWiki.pm
++++ b/IkiWiki.pm
+@@ -1291,7 +1291,7 @@ sub displaytime ($;$$) {
+        else {
+                return '<span class="date'.
+                        ($_[2] ? ' dt-published' : '').
+-                       '"">'.$time.'</span>';
++                       '">'.$time.'</span>';
+        }
+ }
+ 
+-- 
+2.45.2
+```

follow-up
diff --git a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
index 30730fc87..b47087170 100644
--- a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
+++ b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
@@ -154,6 +154,24 @@ commit `f2e3dc8583f82395313aa6f2cbd4f4c67430fa8f`:
    >> `url_regexp` from the plugin, and just reference `link.pm`'s versions. However
    >> I haven't got that working yet in my review.
    >> *— [[Jon]], 2024-12-03*
+   >>
+   >> ----
+   >> 
+   >> _several hours later…_
+   >> 
+   >> Forgive my enthusiasm, but with the feedback above I've gone past reviewing and
+   >> started bikeshedding the solution. The most important thing is for it to work.
+   >> I managed to miss that the approach for `renamepage` didn't actually work until
+   >> Today. So for me I think the next thing I'd like to see is the beginning of some
+   >> tests. I would suggest a separate test file from `t/linkify.pm`; you could start
+   >> by copying it but I'd look at some other test files to see if there are more
+   >> modern approaches to structuring them (`t/linkify.pm` is probably one of the
+   >> oldest). I'd want to see every routine that's exposed by the plugin be covered
+   >> by a least one test; I think it's also worth testing to confirm that `link.pm`
+   >> and `link_local.pm` are not loaded at the same time (in my local hacking around
+   >> I've ended up with that happening, despite my test config having
+   >> `disable_plugins: [link]`.)
+   >> *— [[Jon]], 2024-12-03*
 
  * Could `if (length $config{contribpage})` ever be false? I don't think so,
    since `checkconfig` sets it. Can we remove that conditional?

more review comments
diff --git a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
index 2d7431f1a..30730fc87 100644
--- a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
+++ b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
@@ -127,6 +127,34 @@ commit `f2e3dc8583f82395313aa6f2cbd4f4c67430fa8f`:
    > variables, and give errors when I use the technique.
    > Do you know how to make it work?
 
+   >> Ah. I see the problem. In fact, `renamepage` is currently broken. The solution
+   >> for that, is to add `use IkiWiki::Plugin::link` to the top, meaning we can
+   >> reference subroutines from that plugin. However a better
+   >> approach than writing the stub `renamepage` function is to reference `link`s
+   >> directly in the hook, like this:
+   >> 
+   >> `hook(type => "renamepage"  , id => "link_local" , call => \&IkiWiki::Plugin::link::renamepage);`
+   >> 
+   >> The same can be done for `scan`, so long as you add a call to `IkiWiki::Plugin::link::checkconfig`
+   >> in your `checkconfig`. Then you can delete your local `scan` subroutine.
+   >>
+   >> That leaves you in a state where both `link` and `link_local` have a variable
+   >> `$link_regexp`. We can get rid of `link_local`s copy _if_ the one in `link.pm`
+   >> is changed from `my $link_regexp` to `our $link_regexp`: this permits accessing
+   >> the variable via `IkiWiki::Plugin::link::link_regexp`, and you can then delete
+   >> the logic to assign a value in `link_local`'s `checkconfig`.
+   >> 
+   >> That now leaves you in a situation where we need to modify `link.pm` as well as
+   >> provide `link_local.pm`. I think that's ok.
+   >>
+   >> I noticed that the `hook` calls have `id => "link"`; they need to be changed to
+   >> match the plugin name, i.e., `id => "link_local"`
+   >> 
+   >> I'd like to get rid of `is_externallink`, `externallink`, `email_regexp` and
+   >> `url_regexp` from the plugin, and just reference `link.pm`'s versions. However
+   >> I haven't got that working yet in my review.
+   >> *— [[Jon]], 2024-12-03*
+
  * Could `if (length $config{contribpage})` ever be false? I don't think so,
    since `checkconfig` sets it. Can we remove that conditional?
 

Add reply to review notes
diff --git a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
index 2726e2d75..2d7431f1a 100644
--- a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
+++ b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
@@ -118,11 +118,19 @@ commit `f2e3dc8583f82395313aa6f2cbd4f4c67430fa8f`:
    the plugin source in its present location, but one of us will need to
    prepare commits for IkiWiki once it's ready.
 
+   > Sure, I could do that.
+
  * Can you use the technique you used for `renamepage` for `is_externallink`,
    `externallink` `scan` and `linkify`?
 
+   > These functions use $link_regexp, $email_regexp and $url_regexp which are local
+   > variables, and give errors when I use the technique.
+   > Do you know how to make it work?
+
  * Could `if (length $config{contribpage})` ever be false? I don't think so,
    since `checkconfig` sets it. Can we remove that conditional?
+
+   > Yes, I've removed it.
  
  * I think we should consider renaming or making more generic the notion of
    the "contributing" page. In your case, you want the destination to be
@@ -130,4 +138,8 @@ commit `f2e3dc8583f82395313aa6f2cbd4f4c67430fa8f`:
    not sure what other terminology we could use, something as simple as
    "broken_link_destination" maybe?
 
+   > I don't know if there's a more concise general term, so I've changed it to
+   > 'broken_link_destination'.
+   _— [[awesomeadam]], 2024-11-23_
+
 *— [[Jon]], 2024-11-04*

a few more things
diff --git a/doc/forum/plans_for_next_release.mdwn b/doc/forum/plans_for_next_release.mdwn
index d11777fa9..ddaaeedd4 100644
--- a/doc/forum/plans_for_next_release.mdwn
+++ b/doc/forum/plans_for_next_release.mdwn
@@ -1,6 +1,8 @@
 I'd like to cut a new release this year, in particular to ship
 
 * [[todo/support for light and dark mode]]
+  * fix actiontabs
+  * fix ikiwiki logo graphic
 * [[todo/add a search plugin that uses duckduckgo]]
 * po.pm: fixes for po4a ≥ 0.70
 * [[todo/admonitions]]

Added a comment
diff --git a/doc/forum/plans_for_next_release/comment_2_fa0ff002747f568374b7c08740a589e4._comment b/doc/forum/plans_for_next_release/comment_2_fa0ff002747f568374b7c08740a589e4._comment
new file mode 100644
index 000000000..feb66cc44
--- /dev/null
+++ b/doc/forum/plans_for_next_release/comment_2_fa0ff002747f568374b7c08740a589e4._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="jmtd"
+ avatar="http://cdn.libravatar.org/avatar/cae0ebd82377a48ef9f1f14ff23b3e0f"
+ subject="comment 2"
+ date="2024-11-19T20:00:25Z"
+ content="""
+Thanks for your kind words. I'll take a look at the patches you've highlighted here. Mentioning Dark Mode I'm reminded that we haven't fixed actiontabs yet, which is probably worthwhile, so I'll add that to the list.
+"""]]

done
diff --git a/doc/bugs/backlinks_onhover_thing_can_go_weird.mdwn b/doc/bugs/backlinks_onhover_thing_can_go_weird.mdwn
index 2a8e2d956..bac6fbc98 100644
--- a/doc/bugs/backlinks_onhover_thing_can_go_weird.mdwn
+++ b/doc/bugs/backlinks_onhover_thing_can_go_weird.mdwn
@@ -80,4 +80,4 @@ Foo Bar Baz
 Baz Bar Foo</details>
 </blockquote>
 
-So that's what I've settled on. *— [[Jon]], 2024-11-19*
+So that's what I've settled on. [[done]]. *— [[Jon]], 2024-11-19*
diff --git a/doc/forum/plans_for_next_release.mdwn b/doc/forum/plans_for_next_release.mdwn
index 83b4541b0..d11777fa9 100644
--- a/doc/forum/plans_for_next_release.mdwn
+++ b/doc/forum/plans_for_next_release.mdwn
@@ -4,7 +4,7 @@ I'd like to cut a new release this year, in particular to ship
 * [[todo/add a search plugin that uses duckduckgo]]
 * po.pm: fixes for po4a ≥ 0.70
 * [[todo/admonitions]]
-* [[bugs/backlinks onhover thing can go weird]] (not fixed yet)
+* [[bugs/backlinks onhover thing can go weird]]
 * [[todo/Make recentchanges CGI more configurable]] (hopefully)
 
 Is there anything else that people are particularly interested in?

new approach: backlink overflow triggers <details> wrapper
diff --git a/doc/bugs/backlinks_onhover_thing_can_go_weird.mdwn b/doc/bugs/backlinks_onhover_thing_can_go_weird.mdwn
index 75055fd87..2a8e2d956 100644
--- a/doc/bugs/backlinks_onhover_thing_can_go_weird.mdwn
+++ b/doc/bugs/backlinks_onhover_thing_can_go_weird.mdwn
@@ -52,3 +52,32 @@ further down the list, but of course then you are outside the hover region.
 
 >>> [[!tag patch]]Patch in my repo, branch `more-backlinks-details-tag`.
 >>> (I must say this looks *much* nicer, IMHO) *—[[Jon]], 2020-10-07*
+
+----
+
+I've refreshed that branch after exploring this a little more. The main
+problem I had with my previous solution (simply substituting the floating
+box for a `details` tag) was how to integrate the overflow links
+nicely with the normal ones. Since `details` is a block-level tag, by
+default it would begin on a line after the existing links, and I couldn't
+settle on something which looked particularly integrated. E.g.:
+
+<blockquote>
+Links: Foo Bar Baz…
+<details>
+  <summary>Continued:</summary>
+Baz Bar Foo
+</details>
+</blockquote>
+
+I decided that, in the event the backlinks list overflowed, it made more
+sense to replace the _whole list_ with a `details` tag, and keep all the
+links together. E.g.
+
+<blockquote>
+<details><summary>Links:</summary>
+Foo Bar Baz
+Baz Bar Foo</details>
+</blockquote>
+
+So that's what I've settled on. *— [[Jon]], 2024-11-19*

Added a comment: my pending patch queue
diff --git a/doc/forum/plans_for_next_release/comment_1_a6ce6c71b98450117c59dfe734fcdb6a._comment b/doc/forum/plans_for_next_release/comment_1_a6ce6c71b98450117c59dfe734fcdb6a._comment
new file mode 100644
index 000000000..ab8aac021
--- /dev/null
+++ b/doc/forum/plans_for_next_release/comment_1_a6ce6c71b98450117c59dfe734fcdb6a._comment
@@ -0,0 +1,20 @@
+[[!comment format=mdwn
+ username="anarcat"
+ avatar="http://cdn.libravatar.org/avatar/825d3c30cb96a053b5335e51b8d0bd49"
+ subject="my pending patch queue"
+ date="2024-11-18T16:18:06Z"
+ content="""
+I reviewed my patch queue and you merged a bunch, so first off, thanks for that and all the work you've done on ikiwiki, this is great!
+
+Those are the patches I have left, I think:
+
+- [[todo/allow_toc_to_skip_entries]]: i'm not sure i want this anymore, but it's something i have on my side... it's a bit messy
+- [[bugs/javascript_resources_placed_after_html_tag]]: trivial compatibility / performance fix
+- [[bugs/footnotes-look-weird]]: style tweak, got tangled up in markdown dialects issues, not sure what the next step is, i have [other tweaks to the base CSS](https://anarc.at/bootstrap.local.css), but some of them are relevant only to my bootstrap theme, unfortunately
+
+There might be other patches flying around my git repo... I had essentially given up on submitting patches here, but once this release goes out, I'll cleanup my house and rebase everything on top to make sure I'm not missing anything.
+
+In general, I'm really excited about the dark mode, and I'm wondering if i should just rebuild my theme on top of the base actiontabs thing now... 
+
+Thanks again!
+"""]]

planning for next release
diff --git a/doc/forum/plans_for_next_release.mdwn b/doc/forum/plans_for_next_release.mdwn
new file mode 100644
index 000000000..83b4541b0
--- /dev/null
+++ b/doc/forum/plans_for_next_release.mdwn
@@ -0,0 +1,12 @@
+I'd like to cut a new release this year, in particular to ship
+
+* [[todo/support for light and dark mode]]
+* [[todo/add a search plugin that uses duckduckgo]]
+* po.pm: fixes for po4a ≥ 0.70
+* [[todo/admonitions]]
+* [[bugs/backlinks onhover thing can go weird]] (not fixed yet)
+* [[todo/Make recentchanges CGI more configurable]] (hopefully)
+
+Is there anything else that people are particularly interested in?
+
+— *[[Jon]], 2024-11-18*

Initial review notes
diff --git a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
index 3504a0eb8..2726e2d75 100644
--- a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
+++ b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
@@ -105,3 +105,29 @@ It's probably better to add the functionality I'm looking for in the editing-rel
 
 >>>>>> absolutely, happy to. I've started to look at it now, and I'll post review comments
 >>>>>> here soon. Thanks!   *— [[Jon]], 2024-10-30*
+
+----
+
+Initial notes from review of
+<https://codeberg.org/AwesomeAdam54321/ikiplugins/src/branch/main/IkiWiki/Plugin/link_local.pm>,
+commit `f2e3dc8583f82395313aa6f2cbd4f4c67430fa8f`:
+
+ * Ultimately, what we need is some commits to Ikiwiki's source repository
+   which introduce the plugin, as well as describe it in a page under
+   `doc/plugins` and probably introduce some tests under `./`. I will review
+   the plugin source in its present location, but one of us will need to
+   prepare commits for IkiWiki once it's ready.
+
+ * Can you use the technique you used for `renamepage` for `is_externallink`,
+   `externallink` `scan` and `linkify`?
+
+ * Could `if (length $config{contribpage})` ever be false? I don't think so,
+   since `checkconfig` sets it. Can we remove that conditional?
+ 
+ * I think we should consider renaming or making more generic the notion of
+   the "contributing" page. In your case, you want the destination to be
+   CONTRIBUTING. But other users might want to point it somewhere else. I'm
+   not sure what other terminology we could use, something as simple as
+   "broken_link_destination" maybe?
+
+*— [[Jon]], 2024-11-04*

yep
diff --git a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
index eebaa8d29..3504a0eb8 100644
--- a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
+++ b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
@@ -102,3 +102,6 @@ It's probably better to add the functionality I'm looking for in the editing-rel
 >>>>> I'll have to rework the plugin to just handle its case and call `htmllink` to handle
 >>>>> everything else(DONE). Can you review the plugin?
 >>>>> _— [[awesomeadam]], 2024-10-18_
+
+>>>>>> absolutely, happy to. I've started to look at it now, and I'll post review comments
+>>>>>> here soon. Thanks!   *— [[Jon]], 2024-10-30*

Request for review
diff --git a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
index 6b26a3523..eebaa8d29 100644
--- a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
+++ b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
@@ -100,5 +100,5 @@ It's probably better to add the functionality I'm looking for in the editing-rel
 
 >>>>> Sorry for the late reply, I'm still interested in you mentoring me writing this plugin.
 >>>>> I'll have to rework the plugin to just handle its case and call `htmllink` to handle
->>>>> everything else(DONE). Is there anything else that's missing in my IkiWiki contribution?
+>>>>> everything else(DONE). Can you review the plugin?
 >>>>> _— [[awesomeadam]], 2024-10-18_

diff --git a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
index 41b77fe91..6b26a3523 100644
--- a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
+++ b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
@@ -99,6 +99,6 @@ It's probably better to add the functionality I'm looking for in the editing-rel
 >>>> to IkiWiki. Let me know! Thanks,  *— [[Jon]], 2024-10-01*
 
 >>>>> Sorry for the late reply, I'm still interested in you mentoring me writing this plugin.
->>>>> I'll have to rework the plugin to just handle its case and call `htmllink` in the else
->>>>> statement to handle everything else.
+>>>>> I'll have to rework the plugin to just handle its case and call `htmllink` to handle
+>>>>> everything else(DONE). Is there anything else that's missing in my IkiWiki contribution?
 >>>>> _— [[awesomeadam]], 2024-10-18_

Add more info to comment
diff --git a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
index dd734ddc2..41b77fe91 100644
--- a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
+++ b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
@@ -99,4 +99,6 @@ It's probably better to add the functionality I'm looking for in the editing-rel
 >>>> to IkiWiki. Let me know! Thanks,  *— [[Jon]], 2024-10-01*
 
 >>>>> Sorry for the late reply, I'm still interested in you mentoring me writing this plugin.
+>>>>> I'll have to rework the plugin to just handle its case and call `htmllink` in the else
+>>>>> statement to handle everything else.
 >>>>> _— [[awesomeadam]], 2024-10-18_

Remove simple question since htmllink in the else statement
diff --git a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
index af53d6182..dd734ddc2 100644
--- a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
+++ b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
@@ -99,7 +99,4 @@ It's probably better to add the functionality I'm looking for in the editing-rel
 >>>> to IkiWiki. Let me know! Thanks,  *— [[Jon]], 2024-10-01*
 
 >>>>> Sorry for the late reply, I'm still interested in you mentoring me writing this plugin.
->>>>> I have a question: Wouldn't calling the original `htmllink` to handle the rest result
->>>>> in some of the checks being repeated/overridden? I don't think there's a way to replace
->>>>> only part of a function, so some of the logic will be duplicated.
 >>>>> _— [[awesomeadam]], 2024-10-18_

Add reply regarding writing this plugin
diff --git a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
index 3ae7ce9bb..af53d6182 100644
--- a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
+++ b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
@@ -97,3 +97,9 @@ It's probably better to add the functionality I'm looking for in the editing-rel
 >>>> you interested in trying to write this? I could either write it myself, or I'd be happy
 >>>> to mentor you and review you doing it instead, if you would like to make a contribution
 >>>> to IkiWiki. Let me know! Thanks,  *— [[Jon]], 2024-10-01*
+
+>>>>> Sorry for the late reply, I'm still interested in you mentoring me writing this plugin.
+>>>>> I have a question: Wouldn't calling the original `htmllink` to handle the rest result
+>>>>> in some of the checks being repeated/overridden? I don't think there's a way to replace
+>>>>> only part of a function, so some of the logic will be duplicated.
+>>>>> _— [[awesomeadam]], 2024-10-18_

add thumbnail size to force a regeneration
diff --git a/doc/themes.mdwn b/doc/themes.mdwn
index 8cede5848..cfaa9b67e 100644
--- a/doc/themes.mdwn
+++ b/doc/themes.mdwn
@@ -28,7 +28,7 @@ based on [[Jon]]'s homepage design.
 
 <br clear="both" />
 
-[[!img lightdark_small.png align=left]] The **lightdark** theme, which honours
+[[!img lightdark_small.png size=192x align=left]] The **lightdark** theme, which honours
 your browser's preference for light or dark mode.
 
 <br clear="both" />

adjust lightdark thumbnail to approx ratio of the others
diff --git a/doc/themes/lightdark_small.png b/doc/themes/lightdark_small.png
index d99c1d31a..744fe1a3a 100644
Binary files a/doc/themes/lightdark_small.png and b/doc/themes/lightdark_small.png differ

use consistent emphasis for each theme name
diff --git a/doc/themes.mdwn b/doc/themes.mdwn
index 62e4a6a54..8cede5848 100644
--- a/doc/themes.mdwn
+++ b/doc/themes.mdwn
@@ -28,7 +28,7 @@ based on [[Jon]]'s homepage design.
 
 <br clear="both" />
 
-[[!img lightdark_small.png align=left]] The *lightdark* theme, which honours
+[[!img lightdark_small.png align=left]] The **lightdark** theme, which honours
 your browser's preference for light or dark mode.
 
 <br clear="both" />

done, notes on ikiwiki.info
diff --git a/doc/todo/support_for_light_and_dark_mode.mdwn b/doc/todo/support_for_light_and_dark_mode.mdwn
index 58967a147..5e4b408c3 100644
--- a/doc/todo/support_for_light_and_dark_mode.mdwn
+++ b/doc/todo/support_for_light_and_dark_mode.mdwn
@@ -144,4 +144,9 @@ is probably the best way to implement this.
 >>>
 >>>> This looks great, really nice to see the `style=` bits being gone, good job! I had a small comment in https://salsa.debian.org/jmtd/ikiwiki/-/commit/1deb739c1503db7831e8bcbd534ef2d78872f454, maybe there's a screenshot missing from the branch? Can't wait to merge this in my bootstrap theme (or could i?)... --[[anarcat]]
 
->>>>> Good catch! I haven't taken one yet :-) — [[Jon]], *2024-10-09*
+>>>>> Good catch! I hadn't taken one yet. Thanks for giving this a look over.
+>>>>> Thumbnail added and theme merged. [[done]].
+>>>>> Once we ship this in a release, I'm going to request [[Joey|users/Joey]]
+>>>>> switch <https://ikiwiki.info> over to it. One thing that will need
+>>>>> adjusting for that, though, is the ikiwiki logo: [[ikiwiki_logo|logo/ikiwiki.png]]  
+>>>>> — [[Jon]], *2024-10-09*

add a lightdark theme thumbnail
diff --git a/doc/themes/lightdark_small.png b/doc/themes/lightdark_small.png
new file mode 100644
index 000000000..d99c1d31a
Binary files /dev/null and b/doc/themes/lightdark_small.png differ

good catch
diff --git a/doc/todo/support_for_light_and_dark_mode.mdwn b/doc/todo/support_for_light_and_dark_mode.mdwn
index 1283d70ca..58967a147 100644
--- a/doc/todo/support_for_light_and_dark_mode.mdwn
+++ b/doc/todo/support_for_light_and_dark_mode.mdwn
@@ -143,3 +143,5 @@ is probably the best way to implement this.
 >>> — [[Jon]], *2024-10-08*
 >>>
 >>>> This looks great, really nice to see the `style=` bits being gone, good job! I had a small comment in https://salsa.debian.org/jmtd/ikiwiki/-/commit/1deb739c1503db7831e8bcbd534ef2d78872f454, maybe there's a screenshot missing from the branch? Can't wait to merge this in my bootstrap theme (or could i?)... --[[anarcat]]
+
+>>>>> Good catch! I haven't taken one yet :-) — [[Jon]], *2024-10-09*

LGTM
diff --git a/doc/todo/support_for_light_and_dark_mode.mdwn b/doc/todo/support_for_light_and_dark_mode.mdwn
index 6bd0284c4..1283d70ca 100644
--- a/doc/todo/support_for_light_and_dark_mode.mdwn
+++ b/doc/todo/support_for_light_and_dark_mode.mdwn
@@ -141,3 +141,5 @@ is probably the best way to implement this.
 >>> I've put it up as a separate branch to gather feedback if anyone wants
 >>> to take a look before I merge it.
 >>> — [[Jon]], *2024-10-08*
+>>>
+>>>> This looks great, really nice to see the `style=` bits being gone, good job! I had a small comment in https://salsa.debian.org/jmtd/ikiwiki/-/commit/1deb739c1503db7831e8bcbd534ef2d78872f454, maybe there's a screenshot missing from the branch? Can't wait to merge this in my bootstrap theme (or could i?)... --[[anarcat]]

first cut done!
diff --git a/doc/todo/support_for_light_and_dark_mode.mdwn b/doc/todo/support_for_light_and_dark_mode.mdwn
index f3a9b09ff..6bd0284c4 100644
--- a/doc/todo/support_for_light_and_dark_mode.mdwn
+++ b/doc/todo/support_for_light_and_dark_mode.mdwn
@@ -114,3 +114,30 @@ is probably the best way to implement this.
 >> could be enabled as part of a transition if we can detect where it
 >> introduces a problem (or perhaps mechanically detecting that is impractical).
 >> — [[Jon]], *2024-04-23*
+
+[[!template id=gitbranch
+  branch=jon/lightdark-theme
+  author="[[Jon]]"
+]]
+
+>>> I completed a first cut of this last night. The changes are not fully
+>>> contained within the new theme: I've adjusted the login JavaScript to
+>>> not inject `style` attributes; adjusted three icons to work better on
+>>> a dark background, although I think the OpenID one needs further work.
+>>>
+>>> I discovered [CSS System Colors](https://developer.mozilla.org/en-US/docs/Web/CSS/system-color)
+>>> whilst working on this: they're colour specifiers which use browser-
+>>> specified values which will change when in light or dark mode. For
+>>> example `Canvas` is the background colour, and `CanvasText` the text
+>>> colour.
+>>>
+>>> The default style uses a lot of different greys which we could probably
+>>> reduce and harmonize a little bit, perhaps by using one of the System
+>>> Colors.
+>>>
+>>> I think we should expect to fold the contents of this theme into the
+>>> default stylesheet in a future IkiWiki major version.
+>>>
+>>> I've put it up as a separate branch to gather feedback if anyone wants
+>>> to take a look before I merge it.
+>>> — [[Jon]], *2024-10-08*

lightdark theme: enable light/dark mode
Override the definitions from the default anti-theme (doc/style.css)
which thwart using the browser's light/dark mode preferences. A
future major version update of IkiWiki will fold these changes into
the default stylesheet.
diff --git a/doc/themes.mdwn b/doc/themes.mdwn
index bc654a39d..62e4a6a54 100644
--- a/doc/themes.mdwn
+++ b/doc/themes.mdwn
@@ -28,6 +28,11 @@ based on [[Jon]]'s homepage design.
 
 <br clear="both" />
 
+[[!img lightdark_small.png align=left]] The *lightdark* theme, which honours
+your browser's preference for light or dark mode.
+
+<br clear="both" />
+
 [[!img none_small.png align=left]] For completeness, ikiwiki's default
 anti-theme.
 
diff --git a/themes/lightdark/style.css b/themes/lightdark/style.css
new file mode 100644
index 000000000..9994cfdc4
--- /dev/null
+++ b/themes/lightdark/style.css
@@ -0,0 +1,172 @@
+/* lightdark theme
+ * Follow browser's preference for light or dark mode
+ * Based on initial work by Joey Hess (doc/todo/support_for_light_and_dark_mode.mdwn)
+ *
+ * floating div backgrounds need a color specified or they are transparent
+ * and might overlap and be obscured by other elements (see
+ * d1cb73cb55ce2ecf185e2554a878a689113a01e4 and
+ * doc/bugs/sidebar_is_obscured_by_recentchanges.mdwn)
+ */
+
+/*
+ * the following will eventually be merged into the anti-theme (doc/style.css)
+ */
+
+html {
+  color-scheme: light dark;
+}
+
+.sidebar {
+  background: inherit;
+  border-color: initial;
+  color: inherit !important; /* antitheme uses !important, so we have to too */
+}
+
+.infobox, .notebox {
+  background: inherit;
+  color: inherit !important;
+}
+
+.pageheader .actions ul {
+  border-bottom-color: inherit;
+}
+#pageinfo {
+  border-top-color: inherit;
+}
+.pageheader #otherlanguages {
+  border-bottom-color: inherit;
+}
+
+.blogform, #blogform {
+    color: inherit !important;
+}
+
+pre.hl { color: inherit; background-color: inherit; }
+.hl.kwa { color: inherit; }
+.hl.sym { color: inherit; }
+.hl.kwc { color: inherit; }
+
+input#openid_identifier,
+input#searchbox
+{
+  background-color: inherit;
+  color: inherit;
+}
+
+.fb_invalid {
+	background: Field !important;
+}
+
+.pagecloud {
+  color: inherit !important;
+  border-color: black; /* XXX? */
+}
+
+.login_large_btn {
+  background-color: Canvas;
+}
+#login_highlight  {
+  background-color: CanvasText;
+}
+
+.feedbutton {
+  color: Canvas !important;
+}
+
+.popup {
+  border-bottom-color: currentColor;
+}
+  .popup:hover .balloon,
+  .popup:focus .balloon {
+     color: CanvasText;
+  }
+
+fieldset {
+  border: 1px solid CanvasText;
+}
+
+/*
+ * the following won't be merged as-is into the anti-theme
+ */
+
+/* recentchanges handling ***************************************************/
+/* XXX: come back to recentchanges, look at 
+ * the structure and see if that provides
+ * insights */
+
+@media (prefers-color-scheme: dark) {
+  div.recentchanges {
+    background: #333; /* light=#eee */
+    color: inherit !important;
+  }
+  .recentchanges .changelog {
+    background: Canvas !important;
+  }
+}
+
+.recentchanges .changelog {
+  color: inherit !important;
+}
+
+/* end recentchanges handling ***********************************************/
+
+@media (prefers-color-scheme: dark) {
+  .pagecloud
+  .comment,
+  .div.poll,
+  .inlinepage,
+  .infobox,
+  .notebox {
+    /* antitheme's value of aaa is intended to be a non-distracting
+     * less-bold choice than black. It's approx 5 notches down from
+     * white, so we choose five notches up from black for dark theme*/
+    border-color: #555;
+  }
+
+  .blogform, #blogform {
+    border-color: #aaa;
+    background: #333; /* light choice was #eee */
+  }
+
+  hr.poll {
+    color: inherit !important;
+    background-color: #555; /* was eee. 333 seems too dark */
+    border-color: inherit;
+  }
+  div.progress {
+    background-color: #333; /* was #eee */
+    color: inherit !important;
+  }
+  div.progress-done {
+    background-color: #996d42 !important; /* same hue, different luminance */
+    color: inherit !important;
+  }
+
+  .popup {
+    color: #5dbbbb; /* #366 + 50% luminance */
+  }
+
+  .popup:hover .balloon,
+  .popup:focus .balloon {
+     background-color: #3f4444; /* #dee -50% luminance */
+  }
+
+  .hl.kwb { color: #d80000; } /* lum+50%. too close ot hl.str/#f00?*/
+  .hl.kwd { color: #8080c0; } /* still to dakr on blcak */
+  .hl.str { color: #aa0000; } /* to differentiate better from #d80000 */
+  .hl.num { color: #9494ff; }
+  .hl.mark { color: black; background:#bbbb88; }
+
+  .pagecloud,
+  .month-calendar-day-this-day,
+  .year-calendar-this-month {
+    background-color: #333;
+  }
+
+  .login-selected,
+  .login_small_btn,
+  .login_large_btn {
+    border-color: #444;
+  }
+
+}

login-selector: move background color to style.css
Don't specify 'style="background: #FFF"' for login buttons in
JavaScript; instead, specify the background color in style.css.
diff --git a/doc/style.css b/doc/style.css
index 9f8289969..7762f8beb 100644
--- a/doc/style.css
+++ b/doc/style.css
@@ -486,6 +486,7 @@ li.L8 { list-style: upper-alpha; }
 	border: 1px solid #DDD;
 	margin: 3px;
 	float: left;
+	background-color: white;
 }
 .login_small_btn {
 	padding: 4px 4px;
diff --git a/underlays/login-selector/ikiwiki/login-selector/login-selector.js b/underlays/login-selector/ikiwiki/login-selector/login-selector.js
index f54a94469..c381b6516 100644
--- a/underlays/login-selector/ikiwiki/login-selector/login-selector.js
+++ b/underlays/login-selector/ikiwiki/login-selector/login-selector.js
@@ -68,7 +68,6 @@ var selector = {
 		this.othersignin_id=othersignin_id;
            	selector_btns.prepend(
         		'<a href="javascript: selector.signin(\'othersignin\');"' +
-        		' style="background: #FFF" ' +
         		'class="othersignin login_large_btn">' +
 			'<img alt="" width="16" height="16" src="favicon.ico" />' +
 			' ' + this.othersignin_label +
@@ -95,7 +94,6 @@ var selector = {
 	}
         var box_id = selection["name"].toLowerCase();
         return '<a' + title +' href="javascript: selector.signin(\''+ box_id +'\');"' +
-        		' style="background: #FFF" ' + 
         		'class="' + box_id + ' login_' + box_size + '_btn">' +
 			'<img alt="" width="16" height="16" src="' + selection["icon"] + '" />' +
 			label +

close semi-dupe light/dark TODO
diff --git a/doc/todo/support_dark_mode_in_antitheme.mdwn b/doc/todo/support_dark_mode_in_antitheme.mdwn
index 968969c20..db77e61ee 100644
--- a/doc/todo/support_dark_mode_in_antitheme.mdwn
+++ b/doc/todo/support_dark_mode_in_antitheme.mdwn
@@ -35,3 +35,6 @@ mode, in my testing, is the styling around [[RecentChanges]].)
 > clear in release notes that this might be a problem, and how to avoid it.
 > 
 > — [[Jon]], *2024-02-26*
+
+>> closing ([[done]]) in favour of the approach outlined in
+>> [[support for light and dark mode]]. — [[Jon]], *2024-XX-XX*

Import Jason Blevins' h1title plugin
diff --git a/IkiWiki/Plugin/h1title.pm b/IkiWiki/Plugin/h1title.pm
new file mode 100644
index 000000000..be2921650
--- /dev/null
+++ b/IkiWiki/Plugin/h1title.pm
@@ -0,0 +1,87 @@
+#!/usr/bin/perl
+
+package IkiWiki::Plugin::h1title;
+
+use warnings;
+use strict;
+use IkiWiki 2.00;
+
+sub import {
+    hook(type => "filter", id => "h1title", call => \&filter);
+}
+
+sub filter(@) {
+    my %params = @_;
+    my $page = $params{page};
+    my $content = $params{content};
+
+    if ($content =~ s/^\#[ \t]+(.*?)[ \t]*\#*\n//) {
+        $pagestate{$page}{meta}{title} = $1;
+    }
+    return $content;
+}
+
+1
+
+__END__
+
+=head1 NAME
+
+ikiwiki Plug-in: h1title
+
+=head1 SYNOPSIS
+
+If there is a level 1 Markdown atx-style (hash mark) header on the first line,
+this plugin uses it to set the page title and removes it from the page body so
+that it won't be rendered twice.  Level 1 headers in the remainder of the page
+will be ignored.
+
+For example, the following page will have title "My Title" and the rendered
+page body will begin with the level two header "Introduction."
+
+    # My Title
+
+    ## Introduction
+    
+    Introductory text with a list:
+    
+     * Item 1
+     * Item 2
+
+    ## Second header
+
+    Second section
+
+This plugin can be used with page templates that use <h1> tags for the page
+title to produce a consistent header hierarchy in rendered pages while keeping
+the Markdown source clean and free of meta directives.
+
+=head1 AUTHOR
+
+Jason Blevins <jrblevin@sdf.lonestar.org>,
+
+=head1 SEE ALSO
+
+ikiwiki Homepage:
+http://ikiwiki.info/
+
+ikiwiki Plugin Documentation:
+http://ikiwiki.info/plugins/write/
+
+=head1 LICENSE
+
+Copyright (C) 2008 Jason Blevins
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along
+with this program; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
diff --git a/debian/copyright b/debian/copyright
index a25660adf..ba0be2d85 100644
--- a/debian/copyright
+++ b/debian/copyright
@@ -155,6 +155,10 @@ Files: IkiWiki/Plugin/trail.pm
 Copyright: 2009-2012 Simon McVittie <http://smcv.pseudorandom.co.uk/>
 License: GPL-2+
 
+Files: IkiWiki/Plugin/h1title.pm
+Copyright: © 2008 Jason Blevins
+License: GPL-2+
+
 Files: doc/logo/*
 Copyright: © 2006 Recai Oktaş <roktas@debian.org>
 License: GPL-2+
diff --git a/doc/plugins/h1title.mdwn b/doc/plugins/h1title.mdwn
new file mode 100644
index 000000000..4f9b165f3
--- /dev/null
+++ b/doc/plugins/h1title.mdwn
@@ -0,0 +1,5 @@
+[[!template id=plugin name=h1title core=0 author="[[jasonblevins]]"]]
+[[!tag type/chrome]]
+
+This plugin uses the leading level 1 Markdown header (if present) to
+set the page title and remove it from the page body.
diff --git a/doc/users/jasonblevins.mdwn b/doc/users/jasonblevins.mdwn
index e4a459e30..b3844dc95 100644
--- a/doc/users/jasonblevins.mdwn
+++ b/doc/users/jasonblevins.mdwn
@@ -16,7 +16,7 @@ more details.
  * [mdwn_itex][] - Works with the [[`mdwn`|plugins/mdwn]] plugin to convert
    inline [[todo/LaTeX]] expressions to MathML using `itex2MML`.
 
- * [h1title][] - If present, use the leading level 1 Markdown header to
+ * [[plugins/h1title]] - If present, use the leading level 1 Markdown header to
    set the page title and remove it from the page body.
 
  * [code][] - Whole file and inline code snippet [[todo/syntax highlighting]]
@@ -36,7 +36,6 @@ more details.
    `IS_HOMEPAGE` and `IN_DIR_SUBDIR`.
 
  [mdwn_itex]: http://jblevins.org/git/ikiwiki/plugins.git/plain/mdwn_itex.pm
- [h1title]: http://jblevins.org/git/ikiwiki/plugins.git/plain/h1title.pm
  [code]: http://jblevins.org/projects/ikiwiki/code
  [metamail]: http://jblevins.org/git/ikiwiki/plugins.git/plain/metamail.pm
  [pandoc]: http://jblevins.org/git/ikiwiki/plugins.git/plain/pandoc.pm

would you like to write this?
diff --git a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
index 063b42b7f..3ae7ce9bb 100644
--- a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
+++ b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
@@ -92,3 +92,8 @@ It's probably better to add the functionality I'm looking for in the editing-rel
 >>>> existing one. Also: in the logic immediately after generating the CONTRIBUTIONS link,
 >>>> we could actually call the real `htmllink` to handle the rest, which would remove the
 >>>> need for some of those utility functions. Great work!  *— [[Jon]], 2024-09-10*
+
+>>>> Hey Adam, I'm in a position now where I could work on this. But I want to check, are
+>>>> you interested in trying to write this? I could either write it myself, or I'd be happy
+>>>> to mentor you and review you doing it instead, if you would like to make a contribution
+>>>> to IkiWiki. Let me know! Thanks,  *— [[Jon]], 2024-10-01*

nice!
diff --git a/doc/forum/paged_feeds___40__RFC_5005__41__.mdwn b/doc/forum/paged_feeds___40__RFC_5005__41__.mdwn
index 8fcd2bb68..4dc91ecf2 100644
--- a/doc/forum/paged_feeds___40__RFC_5005__41__.mdwn
+++ b/doc/forum/paged_feeds___40__RFC_5005__41__.mdwn
@@ -5,3 +5,5 @@ The purpose is to support pagination of feeds: have (say) 5 entries in your most
 This might improve bandwidth for full-text entry/large entry feeds. It also might help with flooding aggregators, assuming the aggregators didn't blindly follow the links.
 
 I've no idea what client support is like. Does this sound interesting to anyone? *— [[Jon]], 2024-09-23*
+
+> Really interesting! Sounds like something we should implement, IMHO, if only as a way to pull "all the articles from this blog" kind of thing in a mechanical way. No idea what client support is either, as a RSS feed reader author myself, I had [no idea this existed in the first place](https://gitlab.com/anarcat/feed2exec/-/issues/33), yet this has been around for almost 20 years at this point, fascinating! (But then again, I've never really done much work trying to support that stuff and assumed the feedresader python module would do everything for me... Unfortunately, it doesn't, particularly with poorly formatted feeds, of course. See also [RSS Podcast Feed Inefficiency](https://www.earth.org.uk/RSS-efficiency.html). --[[anarcat]]

diff --git a/doc/forum/paged_feeds___40__RFC_5005__41__.mdwn b/doc/forum/paged_feeds___40__RFC_5005__41__.mdwn
index e009c45f2..8fcd2bb68 100644
--- a/doc/forum/paged_feeds___40__RFC_5005__41__.mdwn
+++ b/doc/forum/paged_feeds___40__RFC_5005__41__.mdwn
@@ -1,6 +1,6 @@
 I've [just learned](https://pleroma.debian.social/notice/AmEPTRoZiQifOD3hce) about [paged feeds](https://datatracker.ietf.org/doc/html/rfc5005): an RFC proposal for linking separate feed URIs together via `<link rel=prev`, `<link rel=next` etc. to specify an ordering.
 
-The purpose is to support pagination of feeds: have (say) 5 entries in your most recent URI, and then the next 5 (or so) in another file/URI, that a compliant reader could fetch if required (or not, if not desired).
+The purpose is to support pagination of feeds: have (say) 5 entries in your most recent URI, and then the next 5 (or so) in another file/URI, (etc etc) that a compliant reader could fetch if required (or not, if not desired).
 
 This might improve bandwidth for full-text entry/large entry feeds. It also might help with flooding aggregators, assuming the aggregators didn't blindly follow the links.
 

RFC 5005: paged (atom or rss) feeds
diff --git a/doc/forum/paged_feeds___40__RFC_5005__41__.mdwn b/doc/forum/paged_feeds___40__RFC_5005__41__.mdwn
new file mode 100644
index 000000000..e009c45f2
--- /dev/null
+++ b/doc/forum/paged_feeds___40__RFC_5005__41__.mdwn
@@ -0,0 +1,7 @@
+I've [just learned](https://pleroma.debian.social/notice/AmEPTRoZiQifOD3hce) about [paged feeds](https://datatracker.ietf.org/doc/html/rfc5005): an RFC proposal for linking separate feed URIs together via `<link rel=prev`, `<link rel=next` etc. to specify an ordering.
+
+The purpose is to support pagination of feeds: have (say) 5 entries in your most recent URI, and then the next 5 (or so) in another file/URI, that a compliant reader could fetch if required (or not, if not desired).
+
+This might improve bandwidth for full-text entry/large entry feeds. It also might help with flooding aggregators, assuming the aggregators didn't blindly follow the links.
+
+I've no idea what client support is like. Does this sound interesting to anyone? *— [[Jon]], 2024-09-23*

Add Adventure Time wiki shortcut
diff --git a/doc/shortcuts.mdwn b/doc/shortcuts.mdwn
index 7d1f49105..c8fde49fa 100644
--- a/doc/shortcuts.mdwn
+++ b/doc/shortcuts.mdwn
@@ -68,6 +68,7 @@ This page controls what shortcut links the wiki supports.
 * [[!shortcut name=pkgsrc url="http://pkgsrc.se/%S"]]
 * [[!shortcut name=doi url="http://dx.doi.org/%s" desc="doi:%s"]]
 * [[!shortcut name=arxiv url="http://arxiv.org/abs/%s" desc="arXiv:%s"]]
+* [[!shortcut name=adventuretime url="https://breezewiki.com/adventuretime/wiki/%W"]]
 
 To add a new shortcut, use the `shortcut`
 [[ikiwiki/directive]]. In the url, "%s" is replaced with the

call the real htmllink in the tail
diff --git a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
index 57a545a8b..063b42b7f 100644
--- a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
+++ b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
@@ -89,4 +89,6 @@ It's probably better to add the functionality I'm looking for in the editing-rel
 >>>> exports, so, we should review whether to add them to that list. Also, I'd rename the
 >>>> copy of `htmllink` to something unique (`myhtmllink`? you can probably do better than
 >>>> that) and reference that name in `linkify`, to quash a warning about redefining the
->>>> existing one. Great work!  *— [[Jon]], 2024-09-10*
+>>>> existing one. Also: in the logic immediately after generating the CONTRIBUTIONS link,
+>>>> we could actually call the real `htmllink` to handle the rest, which would remove the
+>>>> need for some of those utility functions. Great work!  *— [[Jon]], 2024-09-10*

great work! a "pre-review"
diff --git a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
index cc51b4d79..57a545a8b 100644
--- a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
+++ b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
@@ -77,3 +77,16 @@ It's probably better to add the functionality I'm looking for in the editing-rel
 >>> Thanks, here's my working [[modified link plugin|https://codeberg.org/AwesomeAdam54321/ikiplugins/src/branch/main/IkiWiki/Plugin/link_local.pm]]
 >>> based on your instructions.
 >>> Would the functionality be accepted into ikiwiki's link plugin? I could make adjustments if necessary. _— [[awesomeadam]], 2024-09-10_
+
+>>>> Nice! I think I might use this myself, too: on [my site](https://jmtd.net) I have CGI
+>>>> turned on for comments, but I don't do web-based page editing. I'll do a full review
+>>>> once I'm back at work. For now, I'd say that this works well as an independent plugin
+>>>> from `link.pm`, so it probably makes sense to keep it that way rather than modify
+>>>> `link.pm`, but I'd like to see this as a plugin included in IkiWiki. One quick hint,
+>>>> I noticed after a quick scan over: rather than copy the utility functions from
+>>>> `IkiWiki.pm`, you can reference them with e.g. `IkiWiki::abs2rel`. This wouldn't be
+>>>> necessary if we included those utility functions in the list of things that `IkiWiki.pm`
+>>>> exports, so, we should review whether to add them to that list. Also, I'd rename the
+>>>> copy of `htmllink` to something unique (`myhtmllink`? you can probably do better than
+>>>> that) and reference that name in `linkify`, to quash a warning about redefining the
+>>>> existing one. Great work!  *— [[Jon]], 2024-09-10*

Add missing message author
diff --git a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
index e900149bc..cc51b4d79 100644
--- a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
+++ b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
@@ -76,4 +76,4 @@ It's probably better to add the functionality I'm looking for in the editing-rel
 
 >>> Thanks, here's my working [[modified link plugin|https://codeberg.org/AwesomeAdam54321/ikiplugins/src/branch/main/IkiWiki/Plugin/link_local.pm]]
 >>> based on your instructions.
->>> Would the functionality be accepted into ikiwiki's link plugin? I could make adjustments if necessary.
+>>> Would the functionality be accepted into ikiwiki's link plugin? I could make adjustments if necessary. _— [[awesomeadam]], 2024-09-10_

link_local: a modified link plugin
diff --git a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
index 54191d648..e900149bc 100644
--- a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
+++ b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
@@ -73,3 +73,7 @@ It's probably better to add the functionality I'm looking for in the editing-rel
 >> Then, in the copy of `htmllink`, you can find the chunk of code which generates the links
 >> for missing pages (search for `"<span class=\"createlink\">`) and adjust it to be a static
 >> link to your `CONTRIBUTING` page. *— [[Jon]], 2024-09-09*
+
+>>> Thanks, here's my working [[modified link plugin|https://codeberg.org/AwesomeAdam54321/ikiplugins/src/branch/main/IkiWiki/Plugin/link_local.pm]]
+>>> based on your instructions.
+>>> Would the functionality be accepted into ikiwiki's link plugin? I could make adjustments if necessary.

Add reply to theme vote discussion
diff --git a/doc/users/awesomeadam/discussion.mdwn b/doc/users/awesomeadam/discussion.mdwn
index 39aaf43f6..77a389b80 100644
--- a/doc/users/awesomeadam/discussion.mdwn
+++ b/doc/users/awesomeadam/discussion.mdwn
@@ -1,3 +1,5 @@
 Thanks for participating in the [[forum/theme poll]]! Your vote was for antitheme, with your last commit message reading [Undo my vote for "other" theme, since I use the antitheme with local.css](https://source.ikiwiki.branchable.com/?p=source.git;a=blobdiff;f=doc/forum/theme_poll.mdwn;h=47cafc9369b6ea30c82494a9e3f1735f45e218d5;hp=f86b8e3726bf0f2c301ec6001873392cd6155565;hb=b250476ebe183adeb2eb0973ae800258518ddd8c;hpb=6efba197e496cbfe86fa7fb8ab065cc37e45c642).
 
 The intention of the poll choice was to capture people using the antitheme with only light modifications: if you've done any kind of theming or styling via local.css, the more appropriate poll choice would be "Other". *— [[Jon]], 2024-09-05*
+
+> Thanks for the clarification, I've changed my vote to "other" in [Change my vote from antitheme to "other" theme](http://source.ikiwiki.branchable.com/?p=source.git;a=commit;h=2bfbd13aaa86529ec681dc52b91c662ae650fb15) to better reflect that I customised the antitheme :-).

Change my vote from antitheme to "other" theme
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index 47cafc936..730694300 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,9 +1,9 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
-[[!poll 2 "antitheme (i.e., none)"
+[[!poll 1 "antitheme (i.e., none)"
 1 "actiontabs"
 0 "blueview"
 0 goldtype
 0 monochrome
-4 "other, including heavily modified versions of the above"
+5 "other, including heavily modified versions of the above"
 ]]

approach: override the `link` plugin
diff --git a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
index 3eb34b249..54191d648 100644
--- a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
+++ b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
@@ -65,3 +65,11 @@ It's probably better to add the functionality I'm looking for in the editing-rel
 > in any scenario where you don't want CGI is likely to have some risky corner cases. Cleaner
 > would be CGI off; a separate plugin handles dealing with ?-plugins; and anarcat's changes to
 > make recentchanges work properly with CGI off. *&mdash; [[Jon]], 2024-09-05*
+
+>> you'd need to make a copy of the `link` plugin, explicitly disable `link` and enable your
+>> copy. You'd then need to add a (renamed?) copy of `htmllink` from `IkiWiki.pm` to the copy,
+>> and call that instead, within the `linkify` subroutine.
+>> 
+>> Then, in the copy of `htmllink`, you can find the chunk of code which generates the links
+>> for missing pages (search for `"<span class=\"createlink\">`) and adjust it to be a static
+>> link to your `CONTRIBUTING` page. *— [[Jon]], 2024-09-09*

theme poll vote
diff --git a/doc/users/awesomeadam/discussion.mdwn b/doc/users/awesomeadam/discussion.mdwn
new file mode 100644
index 000000000..39aaf43f6
--- /dev/null
+++ b/doc/users/awesomeadam/discussion.mdwn
@@ -0,0 +1,3 @@
+Thanks for participating in the [[forum/theme poll]]! Your vote was for antitheme, with your last commit message reading [Undo my vote for "other" theme, since I use the antitheme with local.css](https://source.ikiwiki.branchable.com/?p=source.git;a=blobdiff;f=doc/forum/theme_poll.mdwn;h=47cafc9369b6ea30c82494a9e3f1735f45e218d5;hp=f86b8e3726bf0f2c301ec6001873392cd6155565;hb=b250476ebe183adeb2eb0973ae800258518ddd8c;hpb=6efba197e496cbfe86fa7fb8ab065cc37e45c642).
+
+The intention of the poll choice was to capture people using the antitheme with only light modifications: if you've done any kind of theming or styling via local.css, the more appropriate poll choice would be "Other". *— [[Jon]], 2024-09-05*

perhaps a new plugin
diff --git a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
index 35c7fd1c9..3eb34b249 100644
--- a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
+++ b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
@@ -55,3 +55,13 @@ It's probably better to add the functionality I'm looking for in the editing-rel
 >> Yes, I've disabled the CGI before this and the recentchanges page worked as expected. The reason I want to set the cgiurl to `CONTRIBUTING` is so that the `Edit` action and all the wikilinks to nonexistent pages(the ones with '?' prepended) will be shown, since they aren't shown if the CGI is disabled. It's normally better to not show them at all when the CGI is disabled, but it would be useful to link to a contribution guide page instead if there was an option for it.
 >>
 >> I could just use the sidebar plugin instead and link to `CONTRIBUTING` from there, but then the missing pages on the wiki won't be visible from a glance... -- [[awesomeadam]]
+
+> (Let me preface this by first saying that presently I am not able to do any open
+> source work, including IkiWiki, for _reasons_ but I'm hoping that will change within the next few
+> weeks.)
+> Without looking at the code first (which might undermine my assumptions), I feel the cleanest
+> way to achieve what you want would be if it were possible for a plugin to be triggered during
+> link generation (the ? for broken links) and for that plugin to exist. I think enabling CGI
+> in any scenario where you don't want CGI is likely to have some risky corner cases. Cleaner
+> would be CGI off; a separate plugin handles dealing with ?-plugins; and anarcat's changes to
+> make recentchanges work properly with CGI off. *&mdash; [[Jon]], 2024-09-05*

Clarify reply
diff --git a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
index bc87e129b..35c7fd1c9 100644
--- a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
+++ b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
@@ -52,6 +52,6 @@ It's probably better to add the functionality I'm looking for in the editing-rel
 >
 > see also [[plugins/sidebar]]. -- [[anarcat]]
 
->> Yes, I've disabled the CGI before this and the recentchanges page worked as expected. The reason I want to set the cgiurl to `CONTRIBUTING` is so that the `Edit` action and all the wikilinks to nonexistent pages(the ones with '?' prepended) will be shown, since they aren't shown if the CGI is disabled.
+>> Yes, I've disabled the CGI before this and the recentchanges page worked as expected. The reason I want to set the cgiurl to `CONTRIBUTING` is so that the `Edit` action and all the wikilinks to nonexistent pages(the ones with '?' prepended) will be shown, since they aren't shown if the CGI is disabled. It's normally better to not show them at all when the CGI is disabled, but it would be useful to link to a contribution guide page instead if there was an option for it.
 >>
 >> I could just use the sidebar plugin instead and link to `CONTRIBUTING` from there, but then the missing pages on the wiki won't be visible from a glance... -- [[awesomeadam]]

Add ellipsis to reply
diff --git a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
index 552a4fa96..bc87e129b 100644
--- a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
+++ b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
@@ -54,4 +54,4 @@ It's probably better to add the functionality I'm looking for in the editing-rel
 
 >> Yes, I've disabled the CGI before this and the recentchanges page worked as expected. The reason I want to set the cgiurl to `CONTRIBUTING` is so that the `Edit` action and all the wikilinks to nonexistent pages(the ones with '?' prepended) will be shown, since they aren't shown if the CGI is disabled.
 >>
->> I could just use the sidebar plugin instead and link to `CONTRIBUTING` from there, but then the missing pages on the wiki won't be visible from a glance. -- [[awesomeadam]]
+>> I could just use the sidebar plugin instead and link to `CONTRIBUTING` from there, but then the missing pages on the wiki won't be visible from a glance... -- [[awesomeadam]]

Add reply
diff --git a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
index d8a8040b7..552a4fa96 100644
--- a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
+++ b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
@@ -46,8 +46,12 @@ The only problem I encountered was that the `recentchanges` plugin doesn't have
 ```
 [[!tag patch]]
 
-It's probably better to add the functionality I'm looking for in the editing-related plugins like `link` and `editpage`, but I'm not that familiar with Ikiwiki internals yet. Please let me know if that's preferrable. --[[awesomeadam]]
+It's probably better to add the functionality I'm looking for in the editing-related plugins like `link` and `editpage`, but I'm not that familiar with Ikiwiki internals yet. Please let me know if that's preferrable. -- [[awesomeadam]]
 
 > This feels odd to me: if you want to disable CGI (which is, effectively, what linking to CONTRIBUTING would do, no?), just disable CGI, then use the theme or something else to add a link? I have already patched ikiwiki to have recentchanges work properly without CGI, FWIW, in [[todo/proper_links_in_recentchanges_without_CGI]], have you tried that?
 >
 > see also [[plugins/sidebar]]. -- [[anarcat]]
+
+>> Yes, I've disabled the CGI before this and the recentchanges page worked as expected. The reason I want to set the cgiurl to `CONTRIBUTING` is so that the `Edit` action and all the wikilinks to nonexistent pages(the ones with '?' prepended) will be shown, since they aren't shown if the CGI is disabled.
+>>
+>> I could just use the sidebar plugin instead and link to `CONTRIBUTING` from there, but then the missing pages on the wiki won't be visible from a glance. -- [[awesomeadam]]

maybe simpler solutions than a patch?
diff --git a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
index eba78c957..d8a8040b7 100644
--- a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
+++ b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
@@ -47,3 +47,7 @@ The only problem I encountered was that the `recentchanges` plugin doesn't have
 [[!tag patch]]
 
 It's probably better to add the functionality I'm looking for in the editing-related plugins like `link` and `editpage`, but I'm not that familiar with Ikiwiki internals yet. Please let me know if that's preferrable. --[[awesomeadam]]
+
+> This feels odd to me: if you want to disable CGI (which is, effectively, what linking to CONTRIBUTING would do, no?), just disable CGI, then use the theme or something else to add a link? I have already patched ikiwiki to have recentchanges work properly without CGI, FWIW, in [[todo/proper_links_in_recentchanges_without_CGI]], have you tried that?
+>
+> see also [[plugins/sidebar]]. -- [[anarcat]]

Remove unneccessary patch hunk
diff --git a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
index 455e5f9f3..eba78c957 100644
--- a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
+++ b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
@@ -5,10 +5,6 @@ The only problem I encountered was that the `recentchanges` plugin doesn't have
 ```
 --- a/IkiWiki/Plugin/recentchanges.pm	1970-01-01 07:30:01.000000000 +0730
 +++ b/IkiWiki/Plugin/recentchanges.pm	2024-09-03 14:13:29.351231651 +0800
-@@ -1,0 +1,0 @@
- 
- use warnings;
- use strict;
 @@ -40,11 +39,19 @@
  			safe => 1,
  			rebuild => 0,

Add patch tag
diff --git a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
index 00c303485..455e5f9f3 100644
--- a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
+++ b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
@@ -48,5 +48,6 @@ The only problem I encountered was that the `recentchanges` plugin doesn't have
  			do => "goto",
  			page => IkiWiki::userpage($change->{author}),
 ```
+[[!tag patch]]
 
 It's probably better to add the functionality I'm looking for in the editing-related plugins like `link` and `editpage`, but I'm not that familiar with Ikiwiki internals yet. Please let me know if that's preferrable. --[[awesomeadam]]

Add awesomeadam as author of the patch proposal
diff --git a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
index 45a39317b..00c303485 100644
--- a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
+++ b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
@@ -49,4 +49,4 @@ The only problem I encountered was that the `recentchanges` plugin doesn't have
  			page => IkiWiki::userpage($change->{author}),
 ```
 
-It's probably better to add the functionality I'm looking for in the editing-related plugins like `link` and `editpage`, but I'm not that familiar with Ikiwiki internals yet. Please let me know if that's preferrable.
+It's probably better to add the functionality I'm looking for in the editing-related plugins like `link` and `editpage`, but I'm not that familiar with Ikiwiki internals yet. Please let me know if that's preferrable. --[[awesomeadam]]

Remove _local suffix from recentchanges.pm
diff --git a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
index 04386acea..45a39317b 100644
--- a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
+++ b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
@@ -4,7 +4,7 @@ The only problem I encountered was that the `recentchanges` plugin doesn't have
 
 ```
 --- a/IkiWiki/Plugin/recentchanges.pm	1970-01-01 07:30:01.000000000 +0730
-+++ b/IkiWiki/Plugin/recentchanges_local.pm	2024-09-03 14:13:29.351231651 +0800
++++ b/IkiWiki/Plugin/recentchanges.pm	2024-09-03 14:13:29.351231651 +0800
 @@ -1,0 +1,0 @@
  
  use warnings;

Add patch to make recentchanges CGI more configurable
diff --git a/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
new file mode 100644
index 000000000..04386acea
--- /dev/null
+++ b/doc/todo/Make_recentchanges_CGI_more_configurable.mdwn
@@ -0,0 +1,52 @@
+Although my wiki is static, I'd still like all the editing functionality to be visible and link to the contributing guide page. I've achieved this by setting the cgiurl as the link to `CONTRIBUTING` on my wiki, and disabling plugins that define the `Preferences` action since there is no CGI for it to use.
+
+The only problem I encountered was that the `recentchanges` plugin doesn't have a setup option to explicitly disable using the CGI for linking to changed pages when the cgiurl is set. Below is a patch that adds a configuration option for this:
+
+```
+--- a/IkiWiki/Plugin/recentchanges.pm	1970-01-01 07:30:01.000000000 +0730
++++ b/IkiWiki/Plugin/recentchanges_local.pm	2024-09-03 14:13:29.351231651 +0800
+@@ -1,0 +1,0 @@
+ 
+ use warnings;
+ use strict;
+@@ -40,11 +39,19 @@
+ 			safe => 1,
+ 			rebuild => 0,
+ 		},
++		recentchangescgi => {
++			type => "boolean",
++			example => 1,
++			description => "Enable recentchanges CGI?",
++			safe => 1,
++			rebuild => 1,
++		},
+ }
+ 
+ sub checkconfig () {
+ 	$config{recentchangespage}='recentchanges' unless defined $config{recentchangespage};
+ 	$config{recentchangesnum}=100 unless defined $config{recentchangesnum};
++	$config{recentchangescgi}=1 unless defined $config{recentchangescgi};
+ }
+ 
+ sub refresh ($) {
+@@ -168,7 +175,7 @@
+ 	my $has_diffurl=0;
+ 	$change->{pages} = [
+ 		map {
+-			if (length $config{cgiurl}) {
++			if (length $config{cgiurl} && $config{recentchangescgi}) {
+ 				$_->{link} = "<a href=\"".
+ 					IkiWiki::cgiurl(
+ 						do => "goto",
+@@ -210,7 +217,7 @@
+ 		$change->{authorurl}=$change->{user};
+ 		$change->{user}=defined $change->{nickname} ? $change->{nickname} : $oiduser;
+ 	}
+-	elsif (length $config{cgiurl}) {
++	elsif (length $config{cgiurl} && $config{recentchangescgi}) {
+ 		$change->{authorurl} = IkiWiki::cgiurl(
+ 			do => "goto",
+ 			page => IkiWiki::userpage($change->{author}),
+```
+
+It's probably better to add the functionality I'm looking for in the editing-related plugins like `link` and `editpage`, but I'm not that familiar with Ikiwiki internals yet. Please let me know if that's preferrable.

Added a comment
diff --git a/doc/forum/postcommit_errors_during_site_rebuilding_/comment_2_02d8d5fe6dfdc4bb7c016f16ef528ea8._comment b/doc/forum/postcommit_errors_during_site_rebuilding_/comment_2_02d8d5fe6dfdc4bb7c016f16ef528ea8._comment
new file mode 100644
index 000000000..f8037d67a
--- /dev/null
+++ b/doc/forum/postcommit_errors_during_site_rebuilding_/comment_2_02d8d5fe6dfdc4bb7c016f16ef528ea8._comment
@@ -0,0 +1,19 @@
+[[!comment format=mdwn
+ username="jmtd@d79be1606aba831a3b476d5fff7d99f4b321eab2"
+ nickname="jmtd"
+ avatar="http://cdn.libravatar.org/avatar/96f1bc700fdf0fc814f40c90391a6b53"
+ subject="comment 2"
+ date="2024-08-27T10:04:11Z"
+ content="""
+Are you trying to use the configuration options `git_wrapped_backround_command` or `wrapper_background_command`? Those are what are triggering the warning. If you don't need those features, disable them in your setup file to silence the warning.
+
+If you do want them, can you ignore the warnings for now? What are you using them for -- perhaps we can find an alternative way of achieving the same thing.
+
+More detail:
+
+This is the code triggering the warning: <http://source.ikiwiki.branchable.com/?p=source.git;a=blob;f=IkiWiki/Wrapper.pm;h=1b8c558e5a46ae55aa14be4f09e59ef5ad5a504b;hb=HEAD#l283>
+
+If a background command is specified, then this code is generated and run. It uses function `daemon` (from 4.4BSD in 1995, added to glibc at the same time, not part of POSIX) and it seems Apple are going to remove it from a future macOS.
+
+We would have to look into whether their suggested remedy (use `posix_spawn` instead, or maybe we could `fork/exec`) would be appropriate for all the hosts/operating systems that IkiWiki might be run on.
+"""]]

Added a comment
diff --git a/doc/forum/postcommit_errors_during_site_rebuilding_/comment_1_83214cf430e86d09df09521418b8fa6f._comment b/doc/forum/postcommit_errors_during_site_rebuilding_/comment_1_83214cf430e86d09df09521418b8fa6f._comment
new file mode 100644
index 000000000..747c06d68
--- /dev/null
+++ b/doc/forum/postcommit_errors_during_site_rebuilding_/comment_1_83214cf430e86d09df09521418b8fa6f._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="jmtd@d79be1606aba831a3b476d5fff7d99f4b321eab2"
+ nickname="jmtd"
+ avatar="http://cdn.libravatar.org/avatar/96f1bc700fdf0fc814f40c90391a6b53"
+ subject="comment 1"
+ date="2024-08-26T15:38:22Z"
+ content="""
+Give us a bit more information about what you are observing and the environment in which you are running it. It _looks_ like you get two warnings (not errors). Is that the only problem, or does something not work? It also seems you are on macOS. Can you share the macOS version *and* the IkiWiki version you are using?
+"""]]

diff --git a/doc/forum/postcommit_errors_during_site_rebuilding_.mdwn b/doc/forum/postcommit_errors_during_site_rebuilding_.mdwn
new file mode 100644
index 000000000..528cd9f91
--- /dev/null
+++ b/doc/forum/postcommit_errors_during_site_rebuilding_.mdwn
@@ -0,0 +1,12 @@
+```
+generating wrappers..
+/Users/jojo/mysite-workingcopy/.git/hooks/post-commit.c:116:7: warning: 'daemon' is deprecated: first deprecated in macOS 10.5 - Use posix_spawn APIs instead. [-Wdeprecated-declarations]
+                if (daemon(1, 0) == 0) {
+                    ^
+/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/stdlib.h:299:6: note: 'daemon' has been explicitly marked deprecated here
+int      daemon(int, int) __DARWIN_1050(daemon) __OSX_AVAILABLE_BUT_DEPRECATED_MSG(__MAC_10_0, __MAC_10_5, __IPHONE_2_0, __IPHONE_2_0, "Use posix_spawn APIs instead.") __WATCHOS_PROHIBITED __TVOS_PROHIBITED;
+         ^
+1 warning generated.
+```
+
+How can I fix this?

Added a comment
diff --git a/doc/forum/applications_for_htmx_in_ikiwiki/comment_4_c57e3793d2d3c34c4812d6c035c35311._comment b/doc/forum/applications_for_htmx_in_ikiwiki/comment_4_c57e3793d2d3c34c4812d6c035c35311._comment
new file mode 100644
index 000000000..8b8d40bea
--- /dev/null
+++ b/doc/forum/applications_for_htmx_in_ikiwiki/comment_4_c57e3793d2d3c34c4812d6c035c35311._comment
@@ -0,0 +1,19 @@
+[[!comment format=mdwn
+ username="jmtd"
+ avatar="http://cdn.libravatar.org/avatar/cae0ebd82377a48ef9f1f14ff23b3e0f"
+ subject="comment 4"
+ date="2024-08-21T21:11:42Z"
+ content="""
+Some quick notes. the htmx library is tiny: 49567 bytes. To make the \"add comment\" form embed into the current page onclick, instead of a page refresh, requires the following adjustments to the \"add comment\" anchor tag:
+
+```
+<a rel=\"nofollow\" href=\"<TMPL_VAR ADDCOMMENTURL>\"                                                      
+    hx-target=\".addcomment\"                                                                            
+    hx-swap=beforend                                                                                   
+    hx-get=\"<TMPL_VAR ADDCOMMENTURL>\"                                                                  
+    hx-select=\".editcomment form\"                                                                      
+>Add a comment</a>
+```
+
+i.e. the four new attributes. That's it! Obviously some significant refinements could be made, but I'm pretty amazed how little is needed to get something functional working.
+"""]]

Added a comment
diff --git a/doc/forum/applications_for_htmx_in_ikiwiki/comment_3_7f22a3b966590feea87748319da2f8d3._comment b/doc/forum/applications_for_htmx_in_ikiwiki/comment_3_7f22a3b966590feea87748319da2f8d3._comment
new file mode 100644
index 000000000..fc8ffbc57
--- /dev/null
+++ b/doc/forum/applications_for_htmx_in_ikiwiki/comment_3_7f22a3b966590feea87748319da2f8d3._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="jmtd"
+ avatar="http://cdn.libravatar.org/avatar/cae0ebd82377a48ef9f1f14ff23b3e0f"
+ subject="comment 3"
+ date="2024-08-20T17:58:18Z"
+ content="""
+RE Jquery; it would be good to understand and document exactly what options cause it to be pulled in. 
+"""]]

Added a comment
diff --git a/doc/forum/applications_for_htmx_in_ikiwiki/comment_2_39c11cd6b892e6958d262870f5d91c1a._comment b/doc/forum/applications_for_htmx_in_ikiwiki/comment_2_39c11cd6b892e6958d262870f5d91c1a._comment
new file mode 100644
index 000000000..40fbdb607
--- /dev/null
+++ b/doc/forum/applications_for_htmx_in_ikiwiki/comment_2_39c11cd6b892e6958d262870f5d91c1a._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="jmtd"
+ avatar="http://cdn.libravatar.org/avatar/cae0ebd82377a48ef9f1f14ff23b3e0f"
+ subject="comment 2"
+ date="2024-08-20T17:41:54Z"
+ content="""
+I agree, the big locks are a pressing issue and will limit the usefulness of anything like this. 
+
+I’d hope that something like this could be optional, and unless opted in you wouldn’t pay the price (= need to bundle the js)
+
+I’m sure the same could be achieved without htmx, but it might be an especially quick/ergonomic way to achieve it. 
+"""]]

Added a comment: not sure
diff --git a/doc/forum/applications_for_htmx_in_ikiwiki/comment_1_c65cedd0999d876d2921d57ea4b367af._comment b/doc/forum/applications_for_htmx_in_ikiwiki/comment_1_c65cedd0999d876d2921d57ea4b367af._comment
new file mode 100644
index 000000000..aa86c350a
--- /dev/null
+++ b/doc/forum/applications_for_htmx_in_ikiwiki/comment_1_c65cedd0999d876d2921d57ea4b367af._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="anarcat"
+ avatar="http://cdn.libravatar.org/avatar/825d3c30cb96a053b5335e51b8d0bd49"
+ subject="not sure"
+ date="2024-08-20T16:02:05Z"
+ content="""
+I'm not sure. We already have jquery in ikiwiki (or at least it's there in my site) and it's one of those huge blobs i'd like to get rid of.
+
+I'd love to have more \"live\" previews, but the blocker for this right now is not, IMHO, Javascript or browser-level interactivity, it's how *slow* ikiwiki is over CGI. There's a *single* CGI endpoint that has huge lock contention: that's most of where people spend time when doing comments or, frankly, anything, through the web interface.
+
+Unless we fix that *first*, i doubt any live thing like this will be anywhere near useful... I'm also not convinced we *need* htmx to do the things you're refering to here, but i'm not a frontend developer and i'm old, so i could very well be wrong about that. :) -- [[anarcat]]
+"""]]

fix link
diff --git a/doc/forum/applications_for_htmx_in_ikiwiki.mdwn b/doc/forum/applications_for_htmx_in_ikiwiki.mdwn
index 47acb7ca4..af2861f88 100644
--- a/doc/forum/applications_for_htmx_in_ikiwiki.mdwn
+++ b/doc/forum/applications_for_htmx_in_ikiwiki.mdwn
@@ -11,4 +11,4 @@ One thing I’m not sure about is the principle of graceful degradation. That’
 
 Thoughts?
 
-—[Jon]], 2024-08-20
+—[[Jon]], 2024-08-20

Thoughts about htmx enhancing ikiwiki
diff --git a/doc/forum/applications_for_htmx_in_ikiwiki.mdwn b/doc/forum/applications_for_htmx_in_ikiwiki.mdwn
new file mode 100644
index 000000000..47acb7ca4
--- /dev/null
+++ b/doc/forum/applications_for_htmx_in_ikiwiki.mdwn
@@ -0,0 +1,14 @@
+I’ve been reading a little about [htmx](https://htmx.org/): a JavaScript library which lets you declaratively define actions on page elements that call web API endpoints (without a page refresh), those return HTML snippets, and the snippets are inserted into the live page at defined points. 
+
+I thought that was pretty interesting and I wonders if there are opportunities to deploy it to enhance ikiwiki. What do you think? Examples:
+
+ * edit page. Could generate and populate the edit form within the loaded page without a full refresh 
+ * edit preview. Could be on demand within the edit page, or even automatic
+ * comment moderation. Handle deleting spam, approving comments and rebuilds etc asynchronously
+ * posting comments without leaving the parent page 
+
+One thing I’m not sure about is the principle of graceful degradation. That’s something we probanly want in ikiwiki: no JavaScript, things work as normal. I’m fairly sure this isn’t something modern web developers are interested in, so I don’t know to what extent it’s possible with htmx. 
+
+Thoughts?
+
+—[Jon]], 2024-08-20

+debian enhancement proposals
diff --git a/doc/ikiwikiusers.mdwn b/doc/ikiwikiusers.mdwn
index 27dfbf4ce..c0b987b82 100644
--- a/doc/ikiwikiusers.mdwn
+++ b/doc/ikiwikiusers.mdwn
@@ -109,6 +109,7 @@ Projects & Organizations
 * [[coido architects|http://coido.de]] architectural company, located in Hamburg, Germany and Rotterdam, Netherlands (also rather complex build adding masonry and gallery scripts and some pjaxing to the picture, providing CGI access for the customer)
 * [[guppy|http://guppy.branchable.com/index.en.html]] an internationalized modular Python IRC bot
 * [[ChessWOB|https://www.chesswob.org]] Chess Without Boundaries
+* [[Debian Enhancement Proposals|https://dep-team.pages.debian.net/]]
 
 Personal sites and blogs
 ========================

Add Guix to list of package managers that have ikiwiki
diff --git a/doc/download.mdwn b/doc/download.mdwn
index 602715d10..91f9749dc 100644
--- a/doc/download.mdwn
+++ b/doc/download.mdwn
@@ -48,3 +48,5 @@ The [openSUSE Build Service](http://software.opensuse.org/search?baseproject=ALL
 A [PKGBUILD for Arch Linux](https://aur.archlinux.org/packages/ikiwiki/) is in the AUR.
 
 A basic [Homebrew](https://brew.sh) Tap is available at <https://github.com/naosnz/homebrew-ikiwiki> ([[discussion|forum/Can someone add Ikiwiki in Homebrew?]])
+
+Guix has an [ikiwiki package](https://packages.guix.gnu.org/packages/ikiwiki).

Undo my vote for "other" theme, since I use the antitheme with local.css
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index f86b8e372..47cafc936 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -5,5 +5,5 @@ Existing IkiWiki users: which [[themes]] do you use on your site?
 0 "blueview"
 0 goldtype
 0 monochrome
-5 "other, including heavily modified versions of the above"
+4 "other, including heavily modified versions of the above"
 ]]

poll vote (antitheme (i.e., none))
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index 730694300..f86b8e372 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,6 +1,6 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
-[[!poll 1 "antitheme (i.e., none)"
+[[!poll 2 "antitheme (i.e., none)"
 1 "actiontabs"
 0 "blueview"
 0 goldtype

poll vote (other, including heavily modified versions of the above)
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index 185b5ced7..730694300 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -5,5 +5,5 @@ Existing IkiWiki users: which [[themes]] do you use on your site?
 0 "blueview"
 0 goldtype
 0 monochrome
-4 "other, including heavily modified versions of the above"
+5 "other, including heavily modified versions of the above"
 ]]

Use full username
diff --git a/doc/todo/support_mdwn_front_matter.mdwn b/doc/todo/support_mdwn_front_matter.mdwn
index d6e2b1a79..00291aea7 100644
--- a/doc/todo/support_mdwn_front_matter.mdwn
+++ b/doc/todo/support_mdwn_front_matter.mdwn
@@ -36,4 +36,4 @@ References:
 *— [[Jon]], 2021-10-15*
 
 > Alternatively, a new plugin with a [[filter|plugins/write]] hook would be able to do the necessary key translations to `meta` definitions.
-> _-- [[adam|awesomeadam]], 2024-07-31_
+> _-- [[awesomeadam]], 2024-07-31_

Use full username
diff --git a/doc/bugs/wiki_links_still_processed_inside_code_blocks.mdwn b/doc/bugs/wiki_links_still_processed_inside_code_blocks.mdwn
index 70b5318f0..1ea8bb1b9 100644
--- a/doc/bugs/wiki_links_still_processed_inside_code_blocks.mdwn
+++ b/doc/bugs/wiki_links_still_processed_inside_code_blocks.mdwn
@@ -70,6 +70,6 @@ and have it render like:
 >>> should fix it.
 >>> Nevermind, it generally seems that footnotes aren't allowed in tables
 >>> and footnotes can't be referred to more than once in Markdown.
->>> --[[adam|awesomeadam]]
+>>> --[[awesomeadam]]
 
 [[!debbug 487397]]

Add comment
diff --git a/doc/todo/support_mdwn_front_matter.mdwn b/doc/todo/support_mdwn_front_matter.mdwn
index 804139230..d6e2b1a79 100644
--- a/doc/todo/support_mdwn_front_matter.mdwn
+++ b/doc/todo/support_mdwn_front_matter.mdwn
@@ -34,3 +34,6 @@ References:
  * [Jekyll 'front matter'](https://jekyllrb.com/docs/front-matter/)
 
 *— [[Jon]], 2021-10-15*
+
+> Alternatively, a new plugin with a [[filter|plugins/write]] hook would be able to do the necessary key translations to `meta` definitions.
+> _-- [[adam|awesomeadam]], 2024-07-31_

Add Summer Camp Island wiki
diff --git a/doc/ikiwikiusers.mdwn b/doc/ikiwikiusers.mdwn
index 4915b57ac..27dfbf4ce 100644
--- a/doc/ikiwikiusers.mdwn
+++ b/doc/ikiwikiusers.mdwn
@@ -227,3 +227,4 @@ Personal sites and blogs
 * [Coyote Works](http://coyote.works/) - Work In Progress site of Stephen Michael Kellat
 * [cat.chessmuse.com](https://cat.chessmuse.com) - alip's chess blog
 * [wesl.ee](https://wesl.ee)'s personal wiki
+* [Summer Camp Island wiki](https://sumcamisl.neocities.org) (no CGI)

Added a comment: Success! Thanks!
diff --git a/doc/forum/Can__39__t_get_ikiwiki_to_display_more_than_10_posts./comment_2_08fd791519e8abb4ddfb1835387f797c._comment b/doc/forum/Can__39__t_get_ikiwiki_to_display_more_than_10_posts./comment_2_08fd791519e8abb4ddfb1835387f797c._comment
new file mode 100644
index 000000000..c663dcdd1
--- /dev/null
+++ b/doc/forum/Can__39__t_get_ikiwiki_to_display_more_than_10_posts./comment_2_08fd791519e8abb4ddfb1835387f797c._comment
@@ -0,0 +1,18 @@
+[[!comment format=mdwn
+ username="afc54"
+ avatar="http://cdn.libravatar.org/avatar/52d07197a05a068033c9ba45f2681ae7"
+ subject="Success! Thanks!"
+ date="2024-07-08T22:16:23Z"
+ content="""
+Ok, thanks.  I know next to nothing about ikiwiki, but it appears that the FreedomBox places the blog files in /var/lib/ikiwiki/<name-of-blog>.  From there:
+
+    find . -type f -exec grep 'show=\"10\"' {} \; -print
+    [[!inline pages=\"page(./posts/*) and !*/Discussion\" show=\"10\"
+    ./index.mdwn
+    grep: ./.ikiwiki/sessions.db: Permission denied
+    grep: ./.ikiwiki/userdb: Permission denied
+
+so replaced the show=\"10\" with show=\"100\" but no change.  Turns out that change doesn't propagate until a blog rebuild is done.  So, changed the numbacklinks to 100 from the ikiwiki interface and after the rebuild was done, I now see all posts.
+
+The ikiwiki version on the FreedomBox is 3.20200202.3-1 (per aptitude).  Not sure if newer versiona have this variable settable from the \"setup\" page, but it would be a good idea.
+"""]]

Added a comment
diff --git a/doc/forum/Can__39__t_get_ikiwiki_to_display_more_than_10_posts./comment_1_e550b47f7a01b62d54c508b473694745._comment b/doc/forum/Can__39__t_get_ikiwiki_to_display_more_than_10_posts./comment_1_e550b47f7a01b62d54c508b473694745._comment
new file mode 100644
index 000000000..75ce297dc
--- /dev/null
+++ b/doc/forum/Can__39__t_get_ikiwiki_to_display_more_than_10_posts./comment_1_e550b47f7a01b62d54c508b473694745._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="j@000101868664dfd137e5c70844b577c209cb6be6"
+ nickname="j"
+ avatar="http://cdn.libravatar.org/avatar/3eba91441afbd8b8c56aa6ea4e0c577f"
+ subject="comment 1"
+ date="2024-07-03T03:49:41Z"
+ content="""
+[[backlinks]] are links from other pages back to the current page, that are shown at the bottom of a page by default. It's not related to the blog listing.
+
+The blog listing is generated with an [[ikiwiki/directive/inline]] directive.
+
+Go to the page that contains your blog listing and edit it. You will see the inline directive with a parameter `limit=\"10\"` (or `show=\"10\"`, which is outdated but still works).
+"""]]

diff --git a/doc/forum/Can__39__t_get_ikiwiki_to_display_more_than_10_posts..mdwn b/doc/forum/Can__39__t_get_ikiwiki_to_display_more_than_10_posts..mdwn
new file mode 100644
index 000000000..8eb257a1e
--- /dev/null
+++ b/doc/forum/Can__39__t_get_ikiwiki_to_display_more_than_10_posts..mdwn
@@ -0,0 +1,13 @@
+Trying to figure out why ikiwiki never displays more than 10 posts no matter what the value of the numbacklinks variable says.  I have tried 0 (to show all) and 100 (I only have 22 posts) but it always displays 10.
+
+The /var/lib/ikiwiki/<name-of-blog>.setup variable:
+
+numbacklinks: 0
+
+whose description says:
+
+    how many backlinks to show before hiding excess (0 to show all)
+
+properly reflects the changes made with the ikiwiki setup interface.  I'm running ikiwiki on a FreedomBox.
+
+Maybe I'm not understanding what this variable is supposed to do, but it seems to be the only one that has anything to do with how many posts to show.  I would like to show all the posts, not just the most recent 10 when entering the blog.  Can anyone tell me why this is not working?  Thanks. 

diff --git a/doc/bugs/Commonmark_support.mdwn b/doc/bugs/Commonmark_support.mdwn
index c2f66c200..ddf8cf48a 100644
--- a/doc/bugs/Commonmark_support.mdwn
+++ b/doc/bugs/Commonmark_support.mdwn
@@ -52,3 +52,11 @@ Patch: <https://github.com/jmtd/ikiwiki/commit/c76eeac8152604ce3d7d1672fe404c8ee
 > > 5. as far as I can tell from my [magic script](https://gitlab.com/anarcat/scripts/-/blob/a6dbda602d8d8e9c0ef810d308e35a09ff538836/in-debian), neither `libcmark` or `libperl-commonmark` are packaged. There isn't even a WNPP bug. I do wonder if that's a criteria for inclusion though; I wouldn't keep code away merely because it's not in Debian. (What *is* our criterion, actually? I'd say "unit tests and integration in CI", but, while we have the former, we don't have the latter, and not having Debian package might make testing this harder.... )
 > > 
 > > -- anarcat
+
+> I tried this patch on Fedora 39 (which has perl-commonmark 0.290000 and libcmark 0.30.3 packaged),
+> but immediately encountered a problem where all wikilinks and directives stopped working.
+> `\[[foo]]` in the source page becomes simply `foo` in the generated HTML, as if CommonMark ate the double brackets.
+>
+> I don't have a different system to compare if it's specific to the Fedora packages. Did you face this problem?
+>
+> -- j@ustink.org 2024-06-29

poll vote (antitheme (i.e., none))
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index 9f4309f33..185b5ced7 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,6 +1,6 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
-[[!poll 0 "antitheme (i.e., none)"
+[[!poll 1 "antitheme (i.e., none)"
 1 "actiontabs"
 0 "blueview"
 0 goldtype

Add mention of Alpine Linux package.
diff --git a/doc/setup.mdwn b/doc/setup.mdwn
index 2d3b54139..2a0ef3889 100644
--- a/doc/setup.mdwn
+++ b/doc/setup.mdwn
@@ -8,6 +8,8 @@ If you're using Debian or Ubuntu, ikiwiki is an <code><a href="http://www.debian
 
 For those using Fedora, [IkiWiki is available as Fedora package](https://packages.fedoraproject.org/pkgs/ikiwiki/ikiwiki/).
 
+For those using Alpine Linux, [IkiWiki is available as an Alpine package](https://pkgs.alpinelinux.org/package/edge/community/x86_64/ikiwiki), thus installable via <code>apk add ikiwiki</code>.
+
 Otherwise, see the [[download]] and [[install]] pages.
 
 You may also want to try out IkiWiki in a [[container|containers]].

Add reply
diff --git a/doc/sandbox.mdwn b/doc/sandbox.mdwn
index 33fab4f23..606c8d6f8 100644
--- a/doc/sandbox.mdwn
+++ b/doc/sandbox.mdwn
@@ -280,6 +280,7 @@ If you're using Debian or Ubuntu, ikiwiki is an apt-get install ikiwiki away. If
 You may also want to try out IkiWiki in a container.
 
 This line was added using the web interface
+> Indeed
 
 [[!table data="""
 Table|

Add table to sandbox
diff --git a/doc/sandbox.mdwn b/doc/sandbox.mdwn
index 98f41593a..33fab4f23 100644
--- a/doc/sandbox.mdwn
+++ b/doc/sandbox.mdwn
@@ -280,3 +280,10 @@ If you're using Debian or Ubuntu, ikiwiki is an apt-get install ikiwiki away. If
 You may also want to try out IkiWiki in a container.
 
 This line was added using the web interface
+
+[[!table data="""
+Table|
+Wiki|Ikiwiki
+Compiler?|Yes
+Cool?|Indubitably
+"""]]

Pass image value as-is
diff --git a/doc/templates/episode.mdwn b/doc/templates/episode.mdwn
index 8be69c6ea..b18d32b21 100644
--- a/doc/templates/episode.mdwn
+++ b/doc/templates/episode.mdwn
@@ -2,7 +2,7 @@
 <div class="infobox">
 [[!table data="""
 **<TMPL_VAR title>**|
-[[!img img/<TMPL_VAR image> size=425x caption="<TMPL_VAR imagecaption>"]]|
+[[!img img/<TMPL_VAR raw_image> size=425x caption="<TMPL_VAR imagecaption>"]]|
 Season|<TMPL_VAR partOfSeason>
 Episode|<TMPL_VAR episodeNumber>
 Air date|<TMPL_VAR airDate>

Update comment
diff --git a/doc/bugs/wiki_links_still_processed_inside_code_blocks.mdwn b/doc/bugs/wiki_links_still_processed_inside_code_blocks.mdwn
index 18901383a..70b5318f0 100644
--- a/doc/bugs/wiki_links_still_processed_inside_code_blocks.mdwn
+++ b/doc/bugs/wiki_links_still_processed_inside_code_blocks.mdwn
@@ -68,6 +68,8 @@ and have it render like:
 >>> (both the table plugin and markdown) because the markup isn't processed
 >>> in the page context. What you describe regarding the processing order
 >>> should fix it.
+>>> Nevermind, it generally seems that footnotes aren't allowed in tables
+>>> and footnotes can't be referred to more than once in Markdown.
 >>> --[[adam|awesomeadam]]
 
 [[!debbug 487397]]

Clarify location of images
diff --git a/doc/templates/character.mdwn b/doc/templates/character.mdwn
index 971b51258..0cd230124 100644
--- a/doc/templates/character.mdwn
+++ b/doc/templates/character.mdwn
@@ -26,7 +26,7 @@ This template is used to create an infobox for a character of a TV show. It uses
 these parameters:
 
 * name - the name of the character
-* image - the file path of an image in the wiki
+* image - the file path of an image in the wiki, under the img directory
 * imagecaption - the image caption
 * aliases - the aliases of the character
 * relatives - the relatives of the character

Keep images in img directory
diff --git a/doc/templates/episode.mdwn b/doc/templates/episode.mdwn
index a82cff4cb..8be69c6ea 100644
--- a/doc/templates/episode.mdwn
+++ b/doc/templates/episode.mdwn
@@ -2,7 +2,7 @@
 <div class="infobox">
 [[!table data="""
 **<TMPL_VAR title>**|
-[[!img <TMPL_VAR image> size=425x caption="<TMPL_VAR imagecaption>"]]|
+[[!img img/<TMPL_VAR image> size=425x caption="<TMPL_VAR imagecaption>"]]|
 Season|<TMPL_VAR partOfSeason>
 Episode|<TMPL_VAR episodeNumber>
 Air date|<TMPL_VAR airDate>
@@ -19,7 +19,7 @@ This template is used to create an infobox for an episode of a TV show. It uses
 these parameters:
 
 * title - the title of the episode
-* image - the file path of an image in the wiki
+* image - the file path of an image in the wiki, under the img directory
 * imagecaption - the image caption
 * partOfSeason - the season number
 * episodeNumber - notes about the episode number

Add comment
diff --git a/doc/bugs/wiki_links_still_processed_inside_code_blocks.mdwn b/doc/bugs/wiki_links_still_processed_inside_code_blocks.mdwn
index 9f0a1d102..18901383a 100644
--- a/doc/bugs/wiki_links_still_processed_inside_code_blocks.mdwn
+++ b/doc/bugs/wiki_links_still_processed_inside_code_blocks.mdwn
@@ -64,4 +64,10 @@ and have it render like:
 >>
 >> --[[isbear]]
 
+>>> I found a bug where footnotes can't be added inside tables
+>>> (both the table plugin and markdown) because the markup isn't processed
+>>> in the page context. What you describe regarding the processing order
+>>> should fix it.
+>>> --[[adam|awesomeadam]]
+
 [[!debbug 487397]]

Add character template
diff --git a/doc/templates/character.mdwn b/doc/templates/character.mdwn
new file mode 100644
index 000000000..971b51258
--- /dev/null
+++ b/doc/templates/character.mdwn
@@ -0,0 +1,44 @@
+[[!templatebody <<ENDBODY
+<div class="infobox">
+[[!table data="""
+**<TMPL_VAR name>**|
+[[!img img/<TMPL_VAR image> size=265x caption="<TMPL_VAR imagecaption>"]]|
+Aliases|<TMPL_VAR aliases>
+Relatives|<TMPL_VAR relatives>
+Affiliation|<TMPL_VAR affiliation>
+Occupation|<TMPL_VAR occupation>
+**Biographical Information**|
+Marital status|<TMPL_VAR marital>
+Date of birth|<TMPL_VAR birthDate>
+Place of birth|<TMPL_VAR birthPlace>
+**Physical Description**|
+Species|<TMPL_VAR species>
+Gender|<TMPL_VAR gender>
+**Appearances**|
+Portrayed by|<TMPL_VAR portrayedby>
+Appears in|<TMPL_VAR raw_appearsin>
+Debut|[[<TMPL_VAR raw_debut>]]
+"""]]
+</div>
+ENDBODY]]
+
+This template is used to create an infobox for a character of a TV show. It uses
+these parameters:
+
+* name - the name of the character
+* image - the file path of an image in the wiki
+* imagecaption - the image caption
+* aliases - the aliases of the character
+* relatives - the relatives of the character
+* affiliation - the affiliation of the character
+* occupation - the character's occupation
+* marital - the character's marital status
+* birthDate - the character's birth date
+* birthPlace - the character's birth place
+* species - the species of the character
+* gender - the gender of the character
+* portrayedby - the actors that portray the character
+* appearsin - notes about the episodes the character appears in
+* debut - the episode that debuts the character
+
+This template uses the [[table|plugins/table]] and [[img|plugins/img]] directives.

Fix HTML mangling of previous and next episode names
diff --git a/doc/templates/episode.mdwn b/doc/templates/episode.mdwn
index 0650a096c..a82cff4cb 100644
--- a/doc/templates/episode.mdwn
+++ b/doc/templates/episode.mdwn
@@ -10,7 +10,7 @@ Writer|<TMPL_VAR writer>
 Director|<TMPL_VAR director>
 Episode guide|
 Previous|Next
-[[<TMPL_VAR previousEpisode>]]|[[<TMPL_VAR nextEpisode>]]
+[[<TMPL_VAR raw_previousEpisode>]]|[[<TMPL_VAR raw_nextEpisode>]]
 """]]
 </div>
 ENDBODY]]

Remove extraneous space
diff --git a/doc/templates/episode.mdwn b/doc/templates/episode.mdwn
index a056128b8..0650a096c 100644
--- a/doc/templates/episode.mdwn
+++ b/doc/templates/episode.mdwn
@@ -4,7 +4,7 @@
 **<TMPL_VAR title>**|
 [[!img <TMPL_VAR image> size=425x caption="<TMPL_VAR imagecaption>"]]|
 Season|<TMPL_VAR partOfSeason>
-Episode|<TMPL_VAR episodeNumber> 
+Episode|<TMPL_VAR episodeNumber>
 Air date|<TMPL_VAR airDate>
 Writer|<TMPL_VAR writer>
 Director|<TMPL_VAR director>

Add links to used directives
diff --git a/doc/templates/episode.mdwn b/doc/templates/episode.mdwn
index 6c1a91911..a056128b8 100644
--- a/doc/templates/episode.mdwn
+++ b/doc/templates/episode.mdwn
@@ -29,4 +29,4 @@ these parameters:
 * previousEpisode - name of previous episode
 * nextEpisode - name of next episode
 
-This template uses the table and img directives.
+This template uses the [[plugins/table]] and [[plugins/img]] directives.

Add episode template
diff --git a/doc/templates/episode.mdwn b/doc/templates/episode.mdwn
new file mode 100644
index 000000000..6c1a91911
--- /dev/null
+++ b/doc/templates/episode.mdwn
@@ -0,0 +1,32 @@
+[[!templatebody <<ENDBODY
+<div class="infobox">
+[[!table data="""
+**<TMPL_VAR title>**|
+[[!img <TMPL_VAR image> size=425x caption="<TMPL_VAR imagecaption>"]]|
+Season|<TMPL_VAR partOfSeason>
+Episode|<TMPL_VAR episodeNumber> 
+Air date|<TMPL_VAR airDate>
+Writer|<TMPL_VAR writer>
+Director|<TMPL_VAR director>
+Episode guide|
+Previous|Next
+[[<TMPL_VAR previousEpisode>]]|[[<TMPL_VAR nextEpisode>]]
+"""]]
+</div>
+ENDBODY]]
+
+This template is used to create an infobox for an episode of a TV show. It uses
+these parameters:
+
+* title - the title of the episode
+* image - the file path of an image in the wiki
+* imagecaption - the image caption
+* partOfSeason - the season number
+* episodeNumber - notes about the episode number
+* airDate - the date the episode aired
+* writer - list of writers involved
+* director - list of directors involved
+* previousEpisode - name of previous episode
+* nextEpisode - name of next episode
+
+This template uses the table and img directives.

Add comment
diff --git a/doc/forum/Why_does_ikiwiki_refer_to_markdown_files_as___34__mdwn__34__.mdwn b/doc/forum/Why_does_ikiwiki_refer_to_markdown_files_as___34__mdwn__34__.mdwn
index ba4ddc558..50bb37c34 100644
--- a/doc/forum/Why_does_ikiwiki_refer_to_markdown_files_as___34__mdwn__34__.mdwn
+++ b/doc/forum/Why_does_ikiwiki_refer_to_markdown_files_as___34__mdwn__34__.mdwn
@@ -1 +1,3 @@
 I am going through the ikiwiki docs on this website, and I get confused by the docs' insistence of referring to markdown as "mdwn" files.  Mdwn files are normal markdown files, am I right?  Can ikiwiki understand and work with .md files, instead of mdwn?
+> Yes, ikiwiki can work with .md files just fine. The file extension is conventionally named after the plugin that parses the markup so that it's trivial to find it's name.
+> *&mdash; [[awesomeadam]], 2023-06-13*

Add placeholder page
diff --git a/doc/users/awesomeadam.mdwn b/doc/users/awesomeadam.mdwn
new file mode 100644
index 000000000..e965047ad
--- /dev/null
+++ b/doc/users/awesomeadam.mdwn
@@ -0,0 +1 @@
+Hello

linebreaks
diff --git a/doc/bugs/po_plugin_broken_with_po4a_0.70.mdwn b/doc/bugs/po_plugin_broken_with_po4a_0.70.mdwn
index 2bbc38ec5..111e55f6f 100644
--- a/doc/bugs/po_plugin_broken_with_po4a_0.70.mdwn
+++ b/doc/bugs/po_plugin_broken_with_po4a_0.70.mdwn
@@ -9,6 +9,8 @@ I think this patch is sufficient: <https://salsa.debian.org/jmtd/ikiwiki/-/commi
 *— [[Jon]], 2024-06-11*
 
 > I've pushed a Debian package update with a slightly more involved patch:
+>
 > <https://salsa.debian.org/debian/ikiwiki/-/blob/debian/master/debian/patches/0001-Adjustments-for-po4a-0.7.0.patch?ref_type=heads>
+>
 > I'm unavailable for a couple of weeks so I'll let it "soak" in Debian before committing it here.
 > *— [[Jon]], 2024-06-12*

patch (in Debian)
diff --git a/doc/bugs/po_plugin_broken_with_po4a_0.70.mdwn b/doc/bugs/po_plugin_broken_with_po4a_0.70.mdwn
index 5cc5d5597..2bbc38ec5 100644
--- a/doc/bugs/po_plugin_broken_with_po4a_0.70.mdwn
+++ b/doc/bugs/po_plugin_broken_with_po4a_0.70.mdwn
@@ -7,3 +7,8 @@ I think this patch is sufficient: <https://salsa.debian.org/jmtd/ikiwiki/-/commi
 [[!tag patch]]
 
 *— [[Jon]], 2024-06-11*
+
+> I've pushed a Debian package update with a slightly more involved patch:
+> <https://salsa.debian.org/debian/ikiwiki/-/blob/debian/master/debian/patches/0001-Adjustments-for-po4a-0.7.0.patch?ref_type=heads>
+> I'm unavailable for a couple of weeks so I'll let it "soak" in Debian before committing it here.
+> *— [[Jon]], 2024-06-12*

tag patch
diff --git a/doc/bugs/po_plugin_broken_with_po4a_0.70.mdwn b/doc/bugs/po_plugin_broken_with_po4a_0.70.mdwn
index 299a54d93..5cc5d5597 100644
--- a/doc/bugs/po_plugin_broken_with_po4a_0.70.mdwn
+++ b/doc/bugs/po_plugin_broken_with_po4a_0.70.mdwn
@@ -4,5 +4,6 @@ po plugin is broken.
 This was reported as a FTBFS bug in Debian: <https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1072760>
 
 I think this patch is sufficient: <https://salsa.debian.org/jmtd/ikiwiki/-/commit/65f13f08901806a3b458cd625369e27bf19722e0>
+[[!tag patch]]
 
 *— [[Jon]], 2024-06-11*

debian ftbfs, upstream api, patch
diff --git a/doc/bugs/po_plugin_broken_with_po4a_0.70.mdwn b/doc/bugs/po_plugin_broken_with_po4a_0.70.mdwn
new file mode 100644
index 000000000..299a54d93
--- /dev/null
+++ b/doc/bugs/po_plugin_broken_with_po4a_0.70.mdwn
@@ -0,0 +1,8 @@
+po4a version 0.70 and newer appear to have changed the API enough that the IkiWiki
+po plugin is broken.
+
+This was reported as a FTBFS bug in Debian: <https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1072760>
+
+I think this patch is sufficient: <https://salsa.debian.org/jmtd/ikiwiki/-/commit/65f13f08901806a3b458cd625369e27bf19722e0>
+
+*— [[Jon]], 2024-06-11*

page.tmpl: don't generate an empty parentlinks span
Guard span id=parentlinks gen with HAS_PARENTLINKS.
diff --git a/doc/todo/don__39__t_generate_an_empty_parentlink_span.mdwn b/doc/todo/don__39__t_generate_an_empty_parentlink_span.mdwn
index ceadfca5e..7332e0488 100644
--- a/doc/todo/don__39__t_generate_an_empty_parentlink_span.mdwn
+++ b/doc/todo/don__39__t_generate_an_empty_parentlink_span.mdwn
@@ -6,4 +6,6 @@ This was reported in Debian in 2009 <https://bugs.debian.org/cgi-bin/bugreport.c
 
 I actually closed it recently, because I disagreed with the suggested patch. However, there's a more agreeable fix: just wrap the parentlinks section in a test of HAS_PARENTLINKS. [[!tag patch]]
 
+[[done]].
+
 *&mdash; [[Jon]], 2024-03-29*
diff --git a/templates/page.tmpl b/templates/page.tmpl
index a1991f6e4..ce84e5d56 100644
--- a/templates/page.tmpl
+++ b/templates/page.tmpl
@@ -45,11 +45,15 @@
 <TMPL_IF HTML5><section class="pageheader"><TMPL_ELSE><div class="pageheader"></TMPL_IF>
 <TMPL_IF HTML5><header class="header"><TMPL_ELSE><div class="header"></TMPL_IF>
 <span>
+
+<TMPL_IF HAS_PARENTLINKS>
 <span class="parentlinks">
 <TMPL_LOOP PARENTLINKS>
 <a href="<TMPL_VAR URL>"><TMPL_VAR PAGE></a>/ 
 </TMPL_LOOP>
 </span>
+</TMPL_IF>
+
 <span class="title">
 <TMPL_VAR TITLE>
 <TMPL_IF ISTRANSLATION>

DuckDuckGo plugin for site searching
Adds a search form to the wiki, powered by DuckDuckGo. The quality of
results will depend on if/when DuckDuckGo have indexed your site, and
how recently.
DuckDuckGo market themselves as privacy-concious and claim to not track
your searches or purchases.
This is an alternative to the Google plugin (and is derived from it).
diff --git a/IkiWiki/Plugin/duckduckgo.pm b/IkiWiki/Plugin/duckduckgo.pm
new file mode 100644
index 000000000..71b235463
--- /dev/null
+++ b/IkiWiki/Plugin/duckduckgo.pm
@@ -0,0 +1,53 @@
+#!/usr/bin/perl
+package IkiWiki::Plugin::duckduckgo;
+
+use warnings;
+use strict;
+use IkiWiki 3.00;
+use URI;
+
+sub import {
+	hook(type => "getsetup", id => "duckduckgo", call => \&getsetup);
+	hook(type => "checkconfig", id => "duckduckgo", call => \&checkconfig);
+	hook(type => "pagetemplate", id => "duckduckgo", call => \&pagetemplate);
+}
+
+sub getsetup () {
+	return
+		plugin => {
+			safe => 1,
+			rebuild => 1,
+			section => "web",
+		},
+}
+
+sub checkconfig () {
+	if (! length $config{url}) {
+		error(sprintf(gettext("Must specify %s when using the %s plugin"), "url", "duckduckgo"));
+	}
+
+	# This is a mass dependency, so if the search form template
+	# changes, every page is rebuilt.
+	add_depends("", "templates/duckduckgoform.tmpl");
+}
+
+my $form;
+sub pagetemplate (@) {
+	my %params=@_;
+	my $page=$params{page};
+	my $template=$params{template};
+
+	# Add search box to page header.
+	if ($template->query(name => "searchform")) {
+		if (! defined $form) {
+			my $searchform = template("duckduckgoform.tmpl", blind_cache => 1);
+			$searchform->param(url => $config{url});
+			$searchform->param(html5 => $config{html5});
+			$form=$searchform->output;
+		}
+
+		$template->param(searchform => $form);
+	}
+}
+
+1
diff --git a/doc/plugins/duckduckgo.mdwn b/doc/plugins/duckduckgo.mdwn
new file mode 100644
index 000000000..5bca58332
--- /dev/null
+++ b/doc/plugins/duckduckgo.mdwn
@@ -0,0 +1,11 @@
+[[!template id=plugin name=duckduckgo author="[[Jon]]"]]
+[[!tag type/web]]
+
+This plugin adds a search form to the wiki, using DuckDuckGo's site search.
+
+DuckDuckGo is asked to search for pages in the domain specified in the wiki's
+`url` configuration parameter. Results will depend on whether DuckDuckGo has
+indexed the site, and how recently.
+
+By comparison the [[search]] plugin offers full text search of only the wiki,
+but requires that a search engine be installed on your site.
diff --git a/templates/duckduckgoform.tmpl b/templates/duckduckgoform.tmpl
new file mode 100644
index 000000000..e2c5f521c
--- /dev/null
+++ b/templates/duckduckgoform.tmpl
@@ -0,0 +1,6 @@
+<form action="https://duckduckgo.com/" id=searchform>
+  <div>
+    <input type="text" autocomplete="off" name="q" id="searchbox" value="" size=16 placeholder="Search with DuckDuckGo" />
+    <input type="hidden" name="sites" value="<TMPL_VAR URL>" />
+  </div>
+</form>