[Geany-Devel] Placeholder replacement in (build) commands
dimitar.zhekov at xxxxx
Wed Apr 1 17:50:11 UTC 2015
On 01.4.2015 г. 04:33, Lex Trotman wrote:
> On 1 April 2015 at 04:45, Dimitar Zhekov<dimitar.zhekov at gmail.com> wrote:
>> On 31.3.2015 г. 03:16, Lex Trotman wrote:
>> - In all default Geany commands, the placeholders are unquoted, meaning that
>> any file name with space(s) currently breaks. Shame on us. :)
> Well some of the default commands are double quoted, but not all IIRC
> (filetypes.c uses all double quotes for eg).
Really... with double quotes, very nice for Windows. :)
>> - The quotes are different under Unix/Win~1: single vs. double.
> So in fact we should have two sets of filetype files, one for
> linstalls and one for winstalls with different quotes on their
Or remove them if we do minimal native quotation.
>> 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.
> Only for the commands run under the shell, if you mean "no quote
> character in the command *and* all the replacement texts" then it
> would work on Linux but that makes its behaviour depend on the command
> text and the replacement text so I forsee much confusion. Better to
> be consistent.
I should have clarified: if the original command, before any placeholder
expansion, does not contain any quotes. If there is at least a single
quote, we assume the user knows what (s)he is doing.
> And if we use double quotes on Linux, then $ and ` (at least) will
> have special powers which you may not want in a filename, but may
> want elsewhere. So again we don't know if we should escape the
> special chars or not.
Quote it *natively*. That is "name" under Windows (can not contain "),
and 'name' under Unix, with ' escaped. For file and directory name
placeholders only. I don't think any child program will want to receive
file names with spaces split into several arguments.
> Maybe we should throw away running under the shell, who's silly idea
> was it anyway :)
It'll be a good thing to do IMHO, but won't help in this case. We split
the non-shell commands under Unix with glib's g_shell_parse_argv(),
which uses the shell syntax. So quoting with 'name' and escaping ' is
>  think of %f being "fred's data" inside single quotes
'fred'\''s data' (I guess you don't mean " as part of the name, but they
won't be problematic either)
>  think of the %f being "$amounts", that will confuse the shell, and
> will be real fun if amounts is defined :)
'$amounts'. Our current double-quoted placeholders make it "$amounts",
so the users users of Geany can have fun.
More information about the Devel