X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/4e54fa1144065b7ff99e88e6c61ff1fdcf6175c9..575af4266797ed0be671630b62c5324d79c863ff:/doc/todo/pagespec_aliases.mdwn diff --git a/doc/todo/pagespec_aliases.mdwn b/doc/todo/pagespec_aliases.mdwn index 748444a2f..54e252956 100644 --- a/doc/todo/pagespec_aliases.mdwn +++ b/doc/todo/pagespec_aliases.mdwn @@ -1,3 +1,4 @@ +[[!tag reviewed]] [[!template id=gitbranch branch=jon/pagespec_alias author="[[Jon]]"]] [[!tag patch wishlist]]I quite often find myself repeating a boiler-plate [[ikiwiki/pagespec]] chunk, e.g. @@ -167,3 +168,76 @@ Unfortunately I haven't figured out how to do the dependencies - I'd really appr >>>>> Do you mean that you want them to work in any pagespec, or that you *don't* want them to work in any pagespec? -- [[KathrynAndersen]] >>>>>> I mean I would want them to work in any pagespec. — [[Jon]] + +---- + +Hi, it's been 7 years since I last looked at this, and I'm surprised to find +that I'd got it up to a merge-request state; I've dusted it off and done some +clean up and testing, but it's working (albeit not via websetup). I've revamped +the docs and rebased the branch. Can someone please consider merging ([[joey]] +or [[smcv]]?) or otherwise feed back on this? Thanks! — [[Jon]] (2018-09-25) + +> To hide it from `websetup`, the `example` needs to be a hash reference +> like `example => { images => "*.png or *.jpg or *.gif" }`, I think? +> (Please try it on a websetup-enabled wiki, possibly by copying +> `t/manual/git_revert` to `t/manual/websetup` and adapting it as required.) +> +> For a less magical variant, you could consider using `alias(images)` +> instead of `images()` for the pagespec syntax that is enabled by the +> example above. I'm not sure which way is better. +> +> If `safe_key` fails, you probably want to log a warning, or even fail +> `checkconfig` with a fatal `error`? +> +> If `checkconfig` detects that the given pagespec function already +> exists, for example `title` after loading the meta plugin, you probably +> want to log a warning or fail? It seems you can detect this with +> `defined ref *$subname{CODE}`. +> +> If you define a loop of mutually recursive aliases (or even an alias +> that refers to itself), I think you'll get infinite recursion. +> You can probably bypass that with a construct like: +> +> my $entered; +> *{ $subname } = sub { +> return IkiWiki::ErrorReason->new("Alias $key is defined recursively") if $entered; +> $entered = 1; +> my $result = IkiWiki::pagespec_match($path, $value); +> $entered = 0; +> return $result; +> } +> +> (but don't take my word for it, a regression test would tell you whether +> this works.) +> +> --[[smcv]] + +---- + +Thank you for the review (nearly a year ago, I've just noticed!). I've +added checks for the issues you outline above, and test coverage for all +those issues. +I've also decided to rename the plugin (back) to just "alias": +I mooted that right back when I started this but I was worried about +potential ambiguity. That was ten years ago and I think the concern has +prove unfounded. I've left the config key as `pagespec_aliases` though, +as that's one area I think its clearer. + +With regards `aliasname()` versus `alias(aliasname)`: +I've given this some thought. Pros and cons of that approach: it would be +a little uglier; you would not inadvertently clash with a PageSpec defined +elsewhere. However, I wonder if someone might actually *want* to define a +PageSpec this way that was the same as that defined by something else: Perhaps, +you have disabled a plugin that defined a PageSpec name and you want to substitute +what it would have expanded to with something else, for example. + +I will (after writing this) rebase my branch. Please take another look! +(just in case the rebase and/or the "-" in the branchnames causes problems +with IkiWiki's auto-mirror-pull, the branch is here: +) + +*— [[Jon]], 2021-01-10* + +> Scratch that, more work needed ☹ *— [[Jon]], 2021-01-11* + +>> This is really ready now. *— [[Jon]], 2021-01-13*