The [[ikiwiki/directive/listdirectives]]` directive doesn't register a link between the page and the subpages. This is a problem because then the [[ikiwiki/directive/orphans]] directive then marks the directives as orphans... Maybe it is a but with the orphans directive however... A simple workaround is to exclude those files from the orphans call... --[[anarcat]] > There's a distinction between wikilinks (matched by `link()`, > `backlink()` etc.) and other constructs that produce a > hyperlink. Some directives count as a wikilink (like `tag`) > but many don't (notably `inline`, `map`, `listdirectives`, > and `orphans` itself). As documented in > [[ikiwiki/directive/orphans]], orphans will tend to list > pages that are only matched by inlines/maps, too. > > The rule of thumb seems to be that a link to a particular > page counts as a wikilink, but a directive that lists > pages matching some pattern does not; so I think > `listdirectives` is working as intended here. > `orphans` itself obviously shouldn't count as a wikilink, > because that would defeat the point of it :-) > > Anything that uses a [[ikiwiki/pagespec]] to generate links, > like `inline` and `map`, can't generate wikilinks, because > wikilinks are gathered during the scan phase, and pagespecs > can't be matched until after the scan phase has finished > (otherwise, it'd be non-deterministic whether all wikilinks > had been seen yet, and `link()` in pagespecs wouldn't work > predictably). > > I suggest just using something like: > > \[[!orphans pages="* and !blog/* and !ikiwiki/directive/*"]] > > This wiki's example of listing [[plugins/orphans]] has a > more elaborate pagespec, which avoids bugs, todo items etc. > as well. > > --[[smcv]] > No follow-up or objection for a while, so considering this to > be working as designed. --[[smcv]] > > Seems I'm a bit late to butt in, but would it be possible to have two > > further phases after the scan phase, the first running map and inline > > and the second orphan? Then map and inline could log or register their > > links (obviously somewhere were it won't change the result of the link function) > > and orphan could take them into account. This logging could be > > turned on by parameter to not waste time for users not needing this and > > make it tunable (i.e. so that the user can decide which map directives count and which don't) > > > > For someone using map and especially autoindex the output of the orphans directive > > is simply wrong/useless (at least it is for me). And there is no easy workaround like for listdirectives > > -- [[holger]] >>> Hmm. I think this can be done without introducing any "phases", >>> even, but it would require each plugin that generates links according >>> to a pagespec to have either a conditional call into the orphans plugin, >>> or a call to a new core function in ikiwiki that exists solely to >>> support the orphans plugin. Something like this, maybe: >>> >>> # in map.pm, inline.pm, pagestats.pm etc., at scan time >>> if (IkiWiki::Plugin::orphans->can("add_reachable")) { >>> IkiWiki::Plugin::orphans::add_reachable($page, $pagespec); >>> } >>> >>> # in orphans.pm (pseudocode; note that this does not *evaluate* >>> # $pagespec, only stores it, so it's OK to do this at scan time) >>> sub needsbuild ($pages) >>> for each page in $pages >>> clear $pagestate{location}{orphans}{reachable} >>> sub reachable ($location, $pagespec) >>> add $pagespec to @{$pagestate{location}{orphans}{reachable}} >>> >>> # in preprocess function in orphans.pm (pseudocode) >>> # executed at build time, not at scan time, so pagespecs work >>> >>> for each maybe_orphan with no links to it >>> for each location with a list of reachable pagespecs >>> make the page with the orphans directive depend on \ >>> the page that is the location >>> for each of those pagespecs >>> if pagespec matches orphan >>> take orphan off the list >>> go to next orphan >>> output list of orphans >>> >>> (Maybe parentlinks should also annotate the parent/ancestors of >>> each page as reachable from that page.) >>> >>> Do other people (mainly Joey) think that'd be acceptable, or >>> too intrusive? >>> >>> Taking this off the list of resolved bugs again while we think about it. >>> >>> I suspect that in the presence of autoindex, what you really want might >>> be less "there's a link to it" and more "there's a path to it from >>> the root of the wiki", which is why I called the proposed function >>> "add_reachable". On the other hand, maybe that's too computationally >>> intensive to actually do; I haven't tried it. >>> --[[smcv]]