Anyone who’s been around a while has seen this workaround to be able to use bracket characters in the filter. But those separate macro defs are obviously cluttering so I’m wondering if there is a more direct way?
It “feels” like there should be some escape characters? Otherwise, how about introducing this?
Or maybe filter ops addleftbrackets[]…addrightbrackets[] or perhaps addbrackets[left], or addsuffix[leftbrackets]?
Whatever makes it easier for you to read in your code. I am not crazy for escape characters, and usually go with something I can remember (left Brackets, right Brackets, and then the actual brackets in the macro), but we are all cognitively wired differently.
You’ve got to go with what you remember best.
All of that said, this would have been such an awesome opportunity to try out A collaboration experiment: code and documentation (Link in original post was incorrect, see edit below)
@saqimtiaz - thank you, I did not know about that operator. However it doesn’t seem to be a constructor adding the character, right? Only detecting if the character exists.
Hm, IMO it is more a question of writing succinct code. IMO it is obviously better if brackets can be pre-/appended directly in-filter. Put in another way; it would be very bad if we, in filters, were forced to generally split out filter operator arguments.
@Charlie_Veniot - that link leads to here, so I’m guessing it is the wrong link.
Side-track question: for the [tag[TableOfContents]format:titlelist[]] example, why are there two results in the list with double brackets around them? Is there an issue with how “titlelist” works ?
EDIT: or maybe the example needs a bit of a more substantial use-case example. I can’t imagine any value in the as-is list that results from that filter.
Succinct code that causes me to think “what is that” is not succinct at all. It causes me confusion.
So succinct is different for different folk. What you may think is good for me is horrible, and what is good for me is not necessarily good for everybody else.
Hence: you have to choose what works for you. If you are working on something with a team, then each of you make your case for what is best, and everybody must suck it up for the most popular choice.
So better for you, go for it. We just can’t assume that each of our medicine will fix things for everybody.
Just saying.
But I do always keep an eye out for something better. Just haven’t seen anything that works for how my mind works. (Yes, attention-regulation disability, among other things that make it challenging for me to process what I see, so I am an extreme case.)
ADDITION: it sometimes takes more verbose code for me to interpret what is going on. Succinct often feels cryptic, in the sense that I don’t understand what I’m looking at.
That’s a couple of times now that a Google Group link I copy and paste here turns out as a link to the very thread I’m posting in. Very strange. Could just be me showing my age…
I am yet to make it a permanent practice with all my wikis but I have made a global macro with all such additional strings [[, ]], {{, }}, eg `\define pipe() |" with the intention to create a bookmarklet I just click to add to any wiki .
An alternative to using such macros so any special character can be escaped at least inside filter operators as others have suggested would be nice.
One could imagine parenthesis eg; split(|) instead of split[|] or split({{) where the content is considered liberals and “removed” before the filter is parsed and replaces with hidden variables.
However I have wondered if we could build a simple global macro with a preset set of named variables for these special characters - basically making the variables part of the core and standardised so we need not define them and we all use the same names.
If you wanted to get cheeky you could define this;
\define ❴() {
\define ❴❴() {{
\define ⟦⟦() [[
\define ⟧⟧() ]]
then use <<❴>> or <❴> in filters
<<⟦⟦>> or <⟦⟦>
<<⟧⟧>> or <⟧⟧>
The macro or variable name is actually a similar looking Unicode character not an actual open dbt square or curly bracket and is replaced with the “real thing”.
The problem is, these are not easy to insert from the keyboard, but perhaps if we had an editor toolbar button with a drop down to insert these macro names/symbols from a list it would be easier. But this would be equally helpful with named global variables eg the option “| pipe” inserts <pipe> or <<pipe>> which is defined as “|”.
Adding my two cents here, though realize @twMat’s question is solved.
First of all, titlelist[] is fantastic and has reduced the need that Mat originally identified, though I will mention that if the title to be formatted doesn’t contain a space, the brackets are not added, which is usually fine, but depends on the scenario.
I have had similar thoughts to @TW_Tones regarding some global macros. While you can generate characters using the new charcode[] operator, you can’t really use/combine them (other than using charcode[] in a variable outside the list and then referring to it). Because of that I’ve also thought that either some escaping within filters or global macros would make sense. For example if I want to search[] for [[,or append-prefix[], the [[ you can’t really do it.
Escaping somehow would be nicest as you could do regex strings without variables/macros, but global macros would be neat too - and including newline! I don’t know if I’d personally go for the unicode characters as they’re not easy to enter, but a <lb>, <rb>, <newline> are things I still do a lot of, and if they were based in it would seem to make sense.
Actually Just before, I read Jeremys suggestion I recalled we can include parameters with macros in filters now so but we can explore designing macros to support this. Basically the sky is the limit. I will do some experiments.
I do like the idea of standard names for control characters.
As Jeremys example hints at, we often need these special characters concatenated to dynamic values prefixing etc… so I see some value exploring this a little further to come up with a really exceptional solution.
In the mean time it would be good if;
we had shorter forms of add/remove prefix and suffix
Allow Unicode to be me more readily used in filters.
A method by which to wikify a variable within a filter
with something like the following (choose correct delimiters) {{{ [all[]prefix(<varname>)]] }}}
in this example the parenthesis says first wikify varname avoiding the wikify widget complexity.