Dal mio punto vista, sarebbe stato meglio attivare il warning con \doshowargumenterror;
ho provato qualche veloce hack con \let, ma niente di buono.
Concordo sul warning; purtroppo, a meno di non ridefinirle una per una, quelle macro non produrranno mai alcun warning perché usano \do*empty che sono definite più o meno così (commenti e tutto il resto):
`\def\dosingleempty#1%
{\noshowargumenterror % \relax % prevents lookahead, brr
\doifnextcharelse[%
{\firstargumenttrue#1}
{\dosinglefakeempty#1}}`
Non mi e’ molto chiaro cosa si intende in ConTeXt con opzionali/obbligatori ;
Intendevo dire che con una definizione come questa
`\unprotect
\definestartstop[esperimento]
[saluto={Ciao a tutti}, commands=\MyEsperimento]
\def\MyEsperimento{%
\csname\??be esperimentosaluto\endcsname\crlf}
\protect `
non posso scrivere
`
\startesperimento[saluto={Non funziona}]
%…
\stopesperimento`
ma devo necessariamente utilizzare \setupstartstop. Per ottenere il comportamento richiesto, ho trovato come unica soluzione quella che ho proposto al termine del mio primo messaggio: costruire il blocco “a mano” :).