[Geany-Devel] Placeholder replacement in (build) commands
dimitar.zhekov at xxxxx
Tue Mar 31 17:45:19 UTC 2015
On 31.3.2015 г. 03:16, Lex Trotman wrote:
> On 31 March 2015 at 11:14, Colomban Wendling<lists.ban at herbesfolles.org> wrote:
>> Le 31/03/2015 02:10, Lex Trotman a écrit :
>>> Perhaps we should be more explicit in the manual that on *ix build
>>> commands are run in the shell and the user is responsible for either
>>> quoting the substitutions correctly, […]
>> The user currently *cannot* do it "correctly" so it works with any
>> possible replacement, that's actually the problem :]
> See the second part of the sentence which you elided :-D
There is 1 case where the user can't do it correctly: Context Action.
word = sci_get_selection_contents(doc->editor->sci);
utils_str_replace_all(&command, "%s", word);
spawn_async(... command, ...)
This can be fixed by removing the %s specified and passing the text as
an argv after the command (the now spawn allows that), with the slight
disadvantage that the selection will always be at the end.
In all other cases, except if somebody uses a file or directory name
with ' under Unix for build or printing, the right thing *can* be done
by quoting. But:
- In all default Geany commands, the placeholders are unquoted, meaning
that any file name with space(s) currently breaks. Shame on us. :)
- The quotes are different under Unix/Win~1: single vs. double.
I think there is an absolute minimum we can do about it: quote the
file/directory name placeholders natively, but if, and only if, the
entire command does not contain any single or double quotes. I don't see
a way this can fail, but maybe elextr can prove me wrong.
Of course, that's not perfect by any means. But if it'll unquestionably
improve the most realistic scenarios (file / directory names with
spaces), with a very small effort, I think it's worth.
More information about the Devel