I'm a bit reluctant to change this as it can break existing workflows.
I understand the motivation but I don't understand the technical reason. This seems to be a simple shell quoting problem to me. I'm an inexperienced ConTeXt/TeX user though, so feel free to tell me I'm utterly wrong :)
What if you use "%[oldname]%" and don't feed an quoted argument?
I'm not sure I understood: I'm not feeding a quoted argument, grph-con.lua introduces superfluous quotes, breaking the proper quoting introduced later by util-sbx.lua (since the shell is used to spawn the process). Let me try to explain it a little bit better. Here is a minimal reproduction (needs Inkscape installed): dir="/tmp/s p a c e s" mkdir -p "$dir" cat > "$dir/test.svg" << EOF <?xml version="1.0" standalone="no"?> <svg width="100" height="100" version="1.1" xmlns="http://www.w3.org/2000/svg"> <rect x="10" y="10" width="80" height="80"/> </svg> EOF cat > "$dir/test.tex" << EOF \defineexternalfigure[test][height=1cm] \starttext \externalfigure[test.svg][test] \stoptext EOF (cd "$dir" && context test.tex) 1/ With an unpatched ConTeXt, the Inkscape command line is: inkscape ""/private/tmp/s p a c e s/test.svg"" --export-dpi=600 --export-pdf=""/private/tmp/s p a c e s/m_k_i_v_test.svg.pdf"" So Inkscape can't find the file because the shell actually gives multiple parameters (some parts omitted for brevity): ** (inkscape-bin:8703): WARNING **: Can't open file: /private/tmp/s (doesn't exist) ** (inkscape-bin:8703): WARNING **: Specified document /private/tmp/s cannot be opened (does not exist or not a valid SVG file) ** (inkscape-bin:8703): WARNING **: Can't open file: p (doesn't exist) ** (inkscape-bin:8703): WARNING **: Specified document p cannot be opened (does not exist or not a valid SVG file) ** (inkscape-bin:8703): WARNING **: Can't open file: a (doesn't exist) [...] 2/ With the proposed "%[oldname]%" patch: template = longtostring [[ - "%oldname%" + "%[oldname]%" --export-dpi=%resolution% - --export-%format%="%newname%" + --export-%format%="%[newname]%" ]], The Inkscape command line is: inkscape "\"/private/tmp/s p a c e s/test.svg\"" --export-dpi=600 --export-pdf="\"/private/tmp/s p a c e s/m_k_i_v_test.svg.pdf\"" Now, Inkscape will complain because we added quotes to the path itself: ** (inkscape-bin:9113): WARNING **: Can't open file: "/private/tmp/s p a c e s/test.svg" (doesn't exist) ** (inkscape-bin:9113): WARNING **: Specified document "/private/tmp/s p a c e s/test.svg" cannot be opened (does not exist or not a valid SVG file) 3/ With my first patch, spaces in the path or even double quotes in filenames are now properly handled. Probably all of the conversion routines in grph-con.lua must be patched similarly. The Inkscape command line is: inkscape "/private/tmp/s p a c e s/test.svg" --export-dpi=600 --export-pdf="/private/tmp/s p a c e s/m_k_i_v_test.svg.pdf" I hope I was a bit clearer this time. Thanks.