summaryrefslogtreecommitdiff
path: root/doc/todo/pagespec_expansions.mdwn
blob: 111217948df05193cbc77ca2c275694375f62bd5 (plain)

A couple of suggestions for improving the usefulness of pagespecs:

  • @ to match [^/]* (i.e. all pages exactly one level below this one)
  • initial ./ to mean "from the page the pagespec is running from". This would require some architectural changes and a change to the interface for pagespec_match. What do you think? I have lots of pages a/b/c.mdwn that inline "a/b/c/*".

--Ethan

I want this too, so that the [[examples]] can use pagespecs that don't have to be changed when the pages are moved around. I don't know how I feel about the "@" thing, but "./" seems good. I take it you've looked at how to implement it?

It's worth mentioning that there's a bit of an inconsistency; wikilinks match relative by default and absolute if prefixed with a "/", while pagespecs match absolute by default. It would be nice to clear up that inconsistency somehow, it's on my little list of things in ikiwiki that arn't ideal. :-) --[[Joey]]

I've looked at how to implement "./", yes, and I was a little hesitant to disturb the elegant implementation of pagespecs as it is now. That's why I wrote this todo item rather than just a patch. :) As I see it, the simplest thing to do is check globs when building the pagespec expression and translate "./foo" to "$from.'/foo'" in the resulting expression, and then add the $from paramater to pagespec_match. This does require an API change for all plugins which use pagespecs but hopefully it should be minor. I will work on a patch tomorrow.

My use case for "@" (which is kind of a crummy symbol, but whatever) is my projects page. I want to inline "summary" or "introduction" pages that are exactly one level below the inlining page, but not tarballs or other junk that might be in subdirectories. (The issue is confounded here because of my index.mdwn patch, but the principle is the same.) I chose "@" because it's similar in physical shape to "*" but enclosed, suggesting limitations. I also thought it would be useful in simplifying hacks like in [[plugins/map]] but I see now that I was mistaken.. "four or fewer levels deep" would be "@ or @/@ or @/@/@ or @/@/@/@". Well, I think it has a certain appeal but I can see why it might not be much of an improvement. :) --Ethan

Seems to me that ".." would be the natural thing to use, not "@". --[[Joey]]

OK, I took a shot at implementing the changes. I was thinking about making pagespecs relative by default but I couldn't decide whether page foo/bar inlining * should match foo/bar/* or foo/*. So I punted and left things as absolute, with ./* matching foo/bar/*, which I think is pretty clear. The patch is at ikidev and you can see it work at this page or this page --Ethan

Nice patch, though I see the following problems with it:

  • The sole pagespec_match in IkiWiki::Render probably should have $p as its third parameter. This will allow add_depends to add a dependency on a pagespec that matches relative to the page. I made this changes and it seems to work, new pages are noticed in updates.
  • ! $from fails to match pages named "0" :-)
  • '/./ matches any letter, not just "." :-) :-)
  • One other major problem. If you look at the doc/examples/blog/index.mdwn I changed it to use relative globs like "./posts/", but they didn't work, because it looked for examples/blog/indexposts/ instead of examples/blog/index/posts/. And, of course, what I really expected it to look for was examples/blog/posts/. I think you may have made the wrong choice about that, so I changed it to go the other way. What do you think?

I've committed support for ./ to ikiwiki now, based on your patch. --[[Joey]]