[Geany-Devel] Placeholder replacement in (build) commands

Dimitar Zhekov 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.

if (sci_has_selection(doc->editor->sci))
	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.

E-gards: Jimmy

More information about the Devel mailing list