On 03/07/2015 08:58, Ulrike Fischer wrote: > - .default:X can imho be reset with .default:n= {}. > - .groups:n can imho be reset with .groups:n = {}. As previously noted, I'll alter this behaviour for .groups:n so a blank version means 'remove from grouping'. I'll also document that. The .default:n is different: an empty default is not the same as no default at all (as a default means effectively a value is always given). I will though note exactly that point in the docs. > - the action can be reset by setting a new action. True, and again I will clarify docs. > Missing is ".value_not_required:" and ".value_not_forbidden:". I wonder if best would be to deprecate current .value_required: and .value_forbidden: and go to .value_required:n and .value_forbidden:n taking boolean values? Makes the syntax a little longer but is explicit and so allows reversal. Alternatively, we could leave this as-is is simply note that to clear it you need to 'remake' the key by undefining it then re-declaring it. It's an unusual case so that might be as sensible as changing the property now. > Missing is an explicit ".unknown:", which would e.g. allow to remove > choices from a key. An accompayning ".known:" which reactivates the > key would be interesting too. (I don't know if the code allows > this). As previously noted, making a key unknown removes the code behind it entirely. Unless there is a compelling use case I'm minded to leave this. > An additional ".delete:" which clears a key completly would be good > too. Based on the fact that as far as possible the key property names follow other expl3 things (see .tl_set:N, etc.) I will probably go with .undefine:, although .unknown: would also fit nicely with the way keys are described. Unless there is further feedback I'll implement all of this over the next couple of days and prepare a release to CTAN. -- Joseph Wright