unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Quote file name args to start-process-shell-command?
@ 2006-10-11 20:32 Lennart Borgman
  2006-10-12  4:27 ` Eli Zaretskii
  0 siblings, 1 reply; 55+ messages in thread
From: Lennart Borgman @ 2006-10-11 20:32 UTC (permalink / raw)


Should arguments to 
start-process-shell-command/call-process-shell-command that are file 
names be quoted with shell-quote-arguments? Could that perhaps be done 
inside those functions? (I mean could 'identity be replaced by 
'shell-quote-argument in those functions.)

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-11 20:32 Quote file name args to start-process-shell-command? Lennart Borgman
@ 2006-10-12  4:27 ` Eli Zaretskii
  2006-10-12  6:08   ` Lennart Borgman
  0 siblings, 1 reply; 55+ messages in thread
From: Eli Zaretskii @ 2006-10-12  4:27 UTC (permalink / raw)
  Cc: emacs-devel

> Date: Wed, 11 Oct 2006 22:32:24 +0200
> From: Lennart Borgman <lennart.borgman.073@student.lu.se>
> 
> Should arguments to 
> start-process-shell-command/call-process-shell-command that are file 
> names be quoted with shell-quote-arguments?

Can you show examples of situations when this is an issue?

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-12  4:27 ` Eli Zaretskii
@ 2006-10-12  6:08   ` Lennart Borgman
  2006-10-12  7:03     ` Eli Zaretskii
  0 siblings, 1 reply; 55+ messages in thread
From: Lennart Borgman @ 2006-10-12  6:08 UTC (permalink / raw)
  Cc: emacs-devel

Eli Zaretskii wrote:
>> Date: Wed, 11 Oct 2006 22:32:24 +0200
>> From: Lennart Borgman <lennart.borgman.073@student.lu.se>
>>
>> Should arguments to 
>> start-process-shell-command/call-process-shell-command that are file 
>> names be quoted with shell-quote-arguments?
>>     
>
> Can you show examples of situations when this is an issue?
>   

Something like this:

    (call-process-shell-command "ls" nil t nil "c:/program files/emacs")

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-12  6:08   ` Lennart Borgman
@ 2006-10-12  7:03     ` Eli Zaretskii
  2006-10-12  7:44       ` David Kastrup
  0 siblings, 1 reply; 55+ messages in thread
From: Eli Zaretskii @ 2006-10-12  7:03 UTC (permalink / raw)
  Cc: emacs-devel

> Date: Thu, 12 Oct 2006 08:08:08 +0200
> From: Lennart Borgman <lennart.borgman.073@student.lu.se>
> CC:  emacs-devel@gnu.org
> 
> Eli Zaretskii wrote:
> >> Date: Wed, 11 Oct 2006 22:32:24 +0200
> >> From: Lennart Borgman <lennart.borgman.073@student.lu.se>
> >>
> >> Should arguments to 
> >> start-process-shell-command/call-process-shell-command that are file 
> >> names be quoted with shell-quote-arguments?
> >>     
> >
> > Can you show examples of situations when this is an issue?
> >   
> 
> Something like this:
> 
>     (call-process-shell-command "ls" nil t nil "c:/program files/emacs")

I believe it's wrong for call-process-shell-command to quote
arguments, because it has no idea of their semantics.  The doc string
of call-process-shell-command says:

  Remaining arguments are strings passed as additional arguments for COMMAND.

There's no requirement here that each one of the "&rest ARGS" be a
separate command-line argument, is there?  For example, I just tried
this:

  (call-process-shell-command "ls" nil t nil "foo* bar*")

and got a listing of all files that match the two wildcards `foo*' and
`bar*'.

So I think that any quoting should be done by the caller of
call-process-shell-command, since only the caller knows what each
argument means.

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-12  7:03     ` Eli Zaretskii
@ 2006-10-12  7:44       ` David Kastrup
  2006-10-12  8:15         ` Kim F. Storm
                           ` (4 more replies)
  0 siblings, 5 replies; 55+ messages in thread
From: David Kastrup @ 2006-10-12  7:44 UTC (permalink / raw)
  Cc: Lennart Borgman, emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

>> Date: Thu, 12 Oct 2006 08:08:08 +0200
>> From: Lennart Borgman <lennart.borgman.073@student.lu.se>
>> CC:  emacs-devel@gnu.org
>> 
>> Eli Zaretskii wrote:
>> >> Date: Wed, 11 Oct 2006 22:32:24 +0200
>> >> From: Lennart Borgman <lennart.borgman.073@student.lu.se>
>> >>
>> >> Should arguments to 
>> >> start-process-shell-command/call-process-shell-command that are file 
>> >> names be quoted with shell-quote-arguments?
>> >>     
>> >
>> > Can you show examples of situations when this is an issue?
>> >   
>> 
>> Something like this:
>> 
>>     (call-process-shell-command "ls" nil t nil "c:/program files/emacs")
>
> I believe it's wrong for call-process-shell-command to quote
> arguments, because it has no idea of their semantics.  The doc string
> of call-process-shell-command says:
>
>   Remaining arguments are strings passed as additional arguments for COMMAND.
>
> There's no requirement here that each one of the "&rest ARGS" be a
> separate command-line argument, is there?

Then it would be completely pointless to allow several ARGS.

> For example, I just tried this:
>
>   (call-process-shell-command "ls" nil t nil "foo* bar*")
>
> and got a listing of all files that match the two wildcards `foo*' and
> `bar*'.

I think that would be abuse of the command.

> So I think that any quoting should be done by the caller of
> call-process-shell-command, since only the caller knows what each
> argument means.

The caller knows that different arguments mean different arguments,
presumably.

One would have to look at the actual use cases to see whether any
caller assumes differently, but from the description, I'd agree with
Lennart's idea.

-- 
David Kastrup, Kriemhildstr. 15, 44793 Bochum

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-12  7:44       ` David Kastrup
@ 2006-10-12  8:15         ` Kim F. Storm
  2006-10-12  8:24           ` David Kastrup
  2006-10-12  8:49         ` Andreas Schwab
                           ` (3 subsequent siblings)
  4 siblings, 1 reply; 55+ messages in thread
From: Kim F. Storm @ 2006-10-12  8:15 UTC (permalink / raw)
  Cc: Lennart Borgman, Eli Zaretskii, emacs-devel

David Kastrup <dak@gnu.org> writes:

> One would have to look at the actual use cases to see whether any
> caller assumes differently, but from the description, I'd agree with
> Lennart's idea.

But it would break any uses where the caller already has used
shell-quote-argument.

Let's leave the API alone -- but it would be ok to mention the use of
shell-quote-argument in the doc string.

-- 
Kim F. Storm <storm@cua.dk> http://www.cua.dk

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-12  8:15         ` Kim F. Storm
@ 2006-10-12  8:24           ` David Kastrup
  2006-10-12  9:08             ` Andreas Schwab
  0 siblings, 1 reply; 55+ messages in thread
From: David Kastrup @ 2006-10-12  8:24 UTC (permalink / raw)
  Cc: Lennart Borgman, Eli Zaretskii, emacs-devel

storm@cua.dk (Kim F. Storm) writes:

> David Kastrup <dak@gnu.org> writes:
>
>> One would have to look at the actual use cases to see whether any
>> caller assumes differently, but from the description, I'd agree
>> with Lennart's idea.
>
> But it would break any uses where the caller already has used
> shell-quote-argument.
>
> Let's leave the API alone

It appears broken to me, but fixing it in a backwards-compatible way
does not seem possible without further messing the API up.

The question is how much actual code might be affected by a non
backwards-compatible change of the API.  I never heard of the function
until now.

> -- but it would be ok to mention the use of shell-quote-argument in
> the doc string.

I'd prefer fixing the function instead.  A command API should take
either a single string, or a list of individual arguments.  A list of
individual arguments which get concatened into a single string that is
later split into individual arguments in a different way: that simply
is not a useful concept to wrap into calling conventions.

The current API suggests a usage that does not actually work.

-- 
David Kastrup, Kriemhildstr. 15, 44793 Bochum

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-12  7:44       ` David Kastrup
  2006-10-12  8:15         ` Kim F. Storm
@ 2006-10-12  8:49         ` Andreas Schwab
  2006-10-12  9:27           ` David Kastrup
  2006-10-12 10:35         ` Eli Zaretskii
                           ` (2 subsequent siblings)
  4 siblings, 1 reply; 55+ messages in thread
From: Andreas Schwab @ 2006-10-12  8:49 UTC (permalink / raw)
  Cc: Lennart Borgman, Eli Zaretskii, emacs-devel

David Kastrup <dak@gnu.org> writes:

> Eli Zaretskii <eliz@gnu.org> writes:
>
>> For example, I just tried this:
>>
>>   (call-process-shell-command "ls" nil t nil "foo* bar*")
>>
>> and got a listing of all files that match the two wildcards `foo*' and
>> `bar*'.
>
> I think that would be abuse of the command.

No, it isn't.  The doc string says:

"Wildcards and redirection are handled as usual in the shell."

That implies that there shall be no quoting applied.  You need to go lower
level to avoid metacharacter handling.

Andreas.

-- 
Andreas Schwab, SuSE Labs, schwab@suse.de
SuSE Linux Products GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany
PGP key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-12  8:24           ` David Kastrup
@ 2006-10-12  9:08             ` Andreas Schwab
  0 siblings, 0 replies; 55+ messages in thread
From: Andreas Schwab @ 2006-10-12  9:08 UTC (permalink / raw)
  Cc: Lennart Borgman, Eli Zaretskii, emacs-devel, Kim F. Storm

David Kastrup <dak@gnu.org> writes:

> storm@cua.dk (Kim F. Storm) writes:
>
>> David Kastrup <dak@gnu.org> writes:
>>
>>> One would have to look at the actual use cases to see whether any
>>> caller assumes differently, but from the description, I'd agree
>>> with Lennart's idea.
>>
>> But it would break any uses where the caller already has used
>> shell-quote-argument.
>>
>> Let's leave the API alone
>
> It appears broken to me, but fixing it in a backwards-compatible way
> does not seem possible without further messing the API up.

There is nothing broken.  The function is explicitly designed that way.

Andreas.

-- 
Andreas Schwab, SuSE Labs, schwab@suse.de
SuSE Linux Products GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany
PGP key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-12  8:49         ` Andreas Schwab
@ 2006-10-12  9:27           ` David Kastrup
  2006-10-12  9:41             ` Andreas Schwab
  2006-10-12 10:54             ` Eli Zaretskii
  0 siblings, 2 replies; 55+ messages in thread
From: David Kastrup @ 2006-10-12  9:27 UTC (permalink / raw)
  Cc: Lennart Borgman, Eli Zaretskii, emacs-devel

Andreas Schwab <schwab@suse.de> writes:

> David Kastrup <dak@gnu.org> writes:
>
>> Eli Zaretskii <eliz@gnu.org> writes:
>>
>>> For example, I just tried this:
>>>
>>>   (call-process-shell-command "ls" nil t nil "foo* bar*")
>>>
>>> and got a listing of all files that match the two wildcards `foo*' and
>>> `bar*'.
>>
>> I think that would be abuse of the command.
>
> No, it isn't.  The doc string says:
>
> "Wildcards and redirection are handled as usual in the shell."

Spaces are neither a wildcard nor a redirection.

> That implies that there shall be no quoting applied.

`shell-quote-argument' and `shell-quote-wildcard-pattern' are two
different functions.

> You need to go lower level to avoid metacharacter handling.

Straw man.  This never was about "metacharacter handling" but rather
about argument processing.

However, I agree that `shell-quote-argument' would be inappropriate to
apply on the arguments of `call-process-shell-command'.  Only those
characters responsible for splitting arguments into words should get
quoted.  That would pretty much be the subset that
`shell-quote-wildcard-pattern' uses.

-- 
David Kastrup, Kriemhildstr. 15, 44793 Bochum

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-12  9:27           ` David Kastrup
@ 2006-10-12  9:41             ` Andreas Schwab
  2006-10-12  9:49               ` David Kastrup
  2006-10-12 10:54             ` Eli Zaretskii
  1 sibling, 1 reply; 55+ messages in thread
From: Andreas Schwab @ 2006-10-12  9:41 UTC (permalink / raw)
  Cc: Lennart Borgman, Eli Zaretskii, emacs-devel

David Kastrup <dak@gnu.org> writes:

> Spaces are neither a wildcard nor a redirection.

The function executes a shell command.  Shell commands can include many
kinds of meta characters, including wildcards and redirections.

> Straw man.  This never was about "metacharacter handling" but rather
> about argument processing.

The function is about shell commands.  That includes any kind of meta
characters.  This works as documented.

Andreas.

-- 
Andreas Schwab, SuSE Labs, schwab@suse.de
SuSE Linux Products GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany
PGP key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-12  9:41             ` Andreas Schwab
@ 2006-10-12  9:49               ` David Kastrup
  2006-10-12  9:53                 ` Andreas Schwab
  2006-10-12 18:50                 ` Stephen Leake
  0 siblings, 2 replies; 55+ messages in thread
From: David Kastrup @ 2006-10-12  9:49 UTC (permalink / raw)
  Cc: Lennart Borgman, Eli Zaretskii, emacs-devel

Andreas Schwab <schwab@suse.de> writes:

> David Kastrup <dak@gnu.org> writes:
>
>> Spaces are neither a wildcard nor a redirection.
>
> The function executes a shell command.  Shell commands can include
> many kinds of meta characters, including wildcards and redirections.

Spaces are neither a wildcard nor a redirection.

>> Straw man.  This never was about "metacharacter handling" but
>> rather about argument processing.
>
> The function is about shell commands.  That includes any kind of
> meta characters.  This works as documented.

I disagree.  If I call something like

(start-process-shell-command "ls" "*scratch*" "ls"
 "\"Program" "Files\"")

then "\"Program" and "Files\"" are not become separate arguments to
the shell.  Rather there is one argument "Program Files".

The command should either make some attempt to actually pass separate
arguments (and that means quoting of word separating entities), or
just accept a single string as an argument.

Everything else is inconsistent.

Again: this does not at all have anything to do with wildcards and
redirections, so I fail to see why you bring them up time and again.

-- 
David Kastrup, Kriemhildstr. 15, 44793 Bochum

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-12  9:49               ` David Kastrup
@ 2006-10-12  9:53                 ` Andreas Schwab
  2006-10-12 10:02                   ` David Kastrup
  2006-10-12 18:50                 ` Stephen Leake
  1 sibling, 1 reply; 55+ messages in thread
From: Andreas Schwab @ 2006-10-12  9:53 UTC (permalink / raw)
  Cc: Lennart Borgman, Eli Zaretskii, emacs-devel

David Kastrup <dak@gnu.org> writes:

> I disagree.  If I call something like
>
> (start-process-shell-command "ls" "*scratch*" "ls"
>  "\"Program" "Files\"")
>
> then "\"Program" and "Files\"" are not become separate arguments to
> the shell.

Read the documentation.  You are changing the semantics of the function.

> Again: this does not at all have anything to do with wildcards and
> redirections, so I fail to see why you bring them up time and again.

Read the documentation again.

Andreas.

-- 
Andreas Schwab, SuSE Labs, schwab@suse.de
SuSE Linux Products GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany
PGP key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-12  9:53                 ` Andreas Schwab
@ 2006-10-12 10:02                   ` David Kastrup
  2006-10-12 11:23                     ` Andreas Schwab
  0 siblings, 1 reply; 55+ messages in thread
From: David Kastrup @ 2006-10-12 10:02 UTC (permalink / raw)
  Cc: Lennart Borgman, Eli Zaretskii, emacs-devel

Andreas Schwab <schwab@suse.de> writes:

> David Kastrup <dak@gnu.org> writes:
>
>> I disagree.  If I call something like
>>
>> (start-process-shell-command "ls" "*scratch*" "ls"
>>  "\"Program" "Files\"")
>>
>> then "\"Program" and "Files\"" are not become separate arguments to
>> the shell.
>
> Read the documentation.  You are changing the semantics of the
> function.

I can't change semantics of a function by using it.  The function
already _has_ those semantics, and the question was whether that is a
good idea.

>> Again: this does not at all have anything to do with wildcards and
>> redirections, so I fail to see why you bring them up time and again.
>
> Read the documentation again.

The only thing the documentation says in that respect is

    Remaining arguments are the arguments for the command.
    Wildcards and redirection are handled as usual in the shell.

Since I am apparently too stupid to understand your meaning by
rereading those two sentences, would you care to explain it in words
fit for a simple-minded person like myself?

-- 
David Kastrup, Kriemhildstr. 15, 44793 Bochum

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-12  7:44       ` David Kastrup
  2006-10-12  8:15         ` Kim F. Storm
  2006-10-12  8:49         ` Andreas Schwab
@ 2006-10-12 10:35         ` Eli Zaretskii
  2006-10-12 10:45           ` David Kastrup
  2006-10-12 14:47         ` Stefan Monnier
  2006-10-12 22:38         ` Richard Stallman
  4 siblings, 1 reply; 55+ messages in thread
From: Eli Zaretskii @ 2006-10-12 10:35 UTC (permalink / raw)
  Cc: lennart.borgman.073, emacs-devel

> Cc: Lennart Borgman <lennart.borgman.073@student.lu.se>,  emacs-devel@gnu.org
> From: David Kastrup <dak@gnu.org>
> Date: Thu, 12 Oct 2006 09:44:14 +0200
> 
> >   Remaining arguments are strings passed as additional arguments for COMMAND.
> >
> > There's no requirement here that each one of the "&rest ARGS" be a
> > separate command-line argument, is there?
> 
> Then it would be completely pointless to allow several ARGS.

It's not pointless, it can be useful if the command line is generated
piecewise.  start-process-shell-command is not system(3).

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-12 10:35         ` Eli Zaretskii
@ 2006-10-12 10:45           ` David Kastrup
  2006-10-12 11:02             ` Eli Zaretskii
  2006-10-12 11:24             ` Andreas Schwab
  0 siblings, 2 replies; 55+ messages in thread
From: David Kastrup @ 2006-10-12 10:45 UTC (permalink / raw)
  Cc: lennart.borgman.073, emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

>> Cc: Lennart Borgman <lennart.borgman.073@student.lu.se>,  emacs-devel@gnu.org
>> From: David Kastrup <dak@gnu.org>
>> Date: Thu, 12 Oct 2006 09:44:14 +0200
>> 
>> >   Remaining arguments are strings passed as additional arguments
>> >   for COMMAND.
>> >
>> > There's no requirement here that each one of the "&rest ARGS" be a
>> > separate command-line argument, is there?
>> 
>> Then it would be completely pointless to allow several ARGS.
>
> It's not pointless, it can be useful if the command line is
> generated piecewise.  start-process-shell-command is not system(3).

Then the question is why it should behave like it.

The code says:

(defun start-process-shell-command (name buffer &rest args)
  "Start a program in a subprocess.  Return the process object for it.

[...]

Remaining arguments are the arguments for the command.
Wildcards and redirection are handled as usual in the shell.

[...]"

  (cond
   ((eq system-type 'vax-vms)
    (apply 'start-process name buffer args))
   ;; We used to use `exec' to replace the shell with the command,
   ;; but that failed to handle (...) and semicolon, etc.
   (t
    (start-process name buffer shell-file-name shell-command-switch
		   (mapconcat 'identity args " ")))))

Clearly, ARGS is (except on VMS) _not_ a list of separate arguments,
but rather strings pasted together with spaces.

So I don't understand how to apply your remark
"start-process-shell-command is not system(3).".
`start-process-shell-command' certainly is coded in a manner that
_strongly_ suggests it to be quite close to system(3) which is
documented as

SYNOPSIS
	#include <stdlib.h>

	int system(const char *command);

DESCRIPTION
	system() executes a command  specified in command by calling
	/bin/sh -c  command, and returns after the  command has been
	completed.  During execution of the command, SIGCHLD will be
	blocked, and SIGINT and SIGQUIT will be ignored.

-- 
David Kastrup, Kriemhildstr. 15, 44793 Bochum

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-12  9:27           ` David Kastrup
  2006-10-12  9:41             ` Andreas Schwab
@ 2006-10-12 10:54             ` Eli Zaretskii
  2006-10-12 11:01               ` David Kastrup
  1 sibling, 1 reply; 55+ messages in thread
From: Eli Zaretskii @ 2006-10-12 10:54 UTC (permalink / raw)
  Cc: schwab, emacs-devel, lennart.borgman.073

> Cc: Eli Zaretskii <eliz@gnu.org>,
> 	  Lennart Borgman <lennart.borgman.073@student.lu.se>,
> 	  emacs-devel@gnu.org
> From: David Kastrup <dak@gnu.org>
> Date: Thu, 12 Oct 2006 11:27:58 +0200
> 
> However, I agree that `shell-quote-argument' would be inappropriate to
> apply on the arguments of `call-process-shell-command'.  Only those
> characters responsible for splitting arguments into words should get
> quoted.

What about < and | and ` and ' and ~ and ! etc.?  Some, if not all of
them also split arguments into words, and have other effects.  We
should leave this to the shell.

Let's put it another way: an interface to invoking a shell eventually
boils down to calling `system' or its equivalent.  A call to `system'
accepts a single string that is the command line to pass to the shell.
So any API wrapped around `system' eventually concatenates all the
portions of the command-line args into a single string, and that is
how applications should use such an API.

If one needs to pass several strings as separate arguments to a
subprogram (including a shell), one should use an appropriate API,
such as call-process.

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-12 10:54             ` Eli Zaretskii
@ 2006-10-12 11:01               ` David Kastrup
  2006-10-12 11:08                 ` Eli Zaretskii
  2006-10-12 22:38                 ` Richard Stallman
  0 siblings, 2 replies; 55+ messages in thread
From: David Kastrup @ 2006-10-12 11:01 UTC (permalink / raw)
  Cc: schwab, emacs-devel, lennart.borgman.073

Eli Zaretskii <eliz@gnu.org> writes:

>> Cc: Eli Zaretskii <eliz@gnu.org>,
>> 	  Lennart Borgman <lennart.borgman.073@student.lu.se>,
>> 	  emacs-devel@gnu.org
>> From: David Kastrup <dak@gnu.org>
>> Date: Thu, 12 Oct 2006 11:27:58 +0200
>> 
>> However, I agree that `shell-quote-argument' would be inappropriate to
>> apply on the arguments of `call-process-shell-command'.  Only those
>> characters responsible for splitting arguments into words should get
>> quoted.
>
> What about < and | and ` and ' and ~ and ! etc.?  Some, if not all of
> them also split arguments into words, and have other effects.  We
> should leave this to the shell.
>
> Let's put it another way: an interface to invoking a shell eventually
> boils down to calling `system' or its equivalent.  A call to `system'
> accepts a single string that is the command line to pass to the shell.
> So any API wrapped around `system' eventually concatenates all the
> portions of the command-line args into a single string, and that is
> how applications should use such an API.
>
> If one needs to pass several strings as separate arguments to a
> subprogram (including a shell), one should use an appropriate API,
> such as call-process.

But the current documentation string and the availability of multiple
arguments that are _documented_ as multiple arguments is quite
misleading.  If we decide that those arguments are not intended to be
multiple arguments but rather something that is merely spliced
together with spaces into one single string, then the documentation
should reflect this.

And it would seem like this function has a different behavior under
VMS, too.

The current situation is an incoherent mess.  The implementation under
VMS, the implementation under other systems, and the documentation are
not consistent.

If the documentation documents something which we can't reasonably
provide, the solution is to change the documentation, not to stick
one's head into the sand.  And then the behavior should be consistent
between operating systems.

-- 
David Kastrup, Kriemhildstr. 15, 44793 Bochum

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-12 10:45           ` David Kastrup
@ 2006-10-12 11:02             ` Eli Zaretskii
  2006-10-12 11:25               ` David Kastrup
  2006-10-12 11:24             ` Andreas Schwab
  1 sibling, 1 reply; 55+ messages in thread
From: Eli Zaretskii @ 2006-10-12 11:02 UTC (permalink / raw)
  Cc: lennart.borgman.073, emacs-devel

> Cc: lennart.borgman.073@student.lu.se,  emacs-devel@gnu.org
> From: David Kastrup <dak@gnu.org>
> Date: Thu, 12 Oct 2006 12:45:43 +0200
> 
> Clearly, ARGS is (except on VMS) _not_ a list of separate arguments,
> but rather strings pasted together with spaces.

Yes, as any API to `system' should do.

> So I don't understand how to apply your remark
> "start-process-shell-command is not system(3).".

That remark should be understood as follows:
start-process-shell-command is a wrapper around `system', but it isn't
`system' itself.  So it doesn't need to accept only one string, but
eventually it will concatenate them all.

Apologies for being unclear.

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-12 11:01               ` David Kastrup
@ 2006-10-12 11:08                 ` Eli Zaretskii
  2006-10-12 22:38                 ` Richard Stallman
  1 sibling, 0 replies; 55+ messages in thread
From: Eli Zaretskii @ 2006-10-12 11:08 UTC (permalink / raw)
  Cc: schwab, emacs-devel, lennart.borgman.073

> Cc: schwab@suse.de,  lennart.borgman.073@student.lu.se,  emacs-devel@gnu.org
> From: David Kastrup <dak@gnu.org>
> Date: Thu, 12 Oct 2006 13:01:29 +0200
> 
> But the current documentation string and the availability of multiple
> arguments that are _documented_ as multiple arguments is quite
> misleading.  If we decide that those arguments are not intended to be
> multiple arguments but rather something that is merely spliced
> together with spaces into one single string, then the documentation
> should reflect this.

I agree that the fact they are concatenated should be documented.

> And it would seem like this function has a different behavior under
> VMS, too.

I don't know enough about VMS to comment on that; perhaps on VMS it's
impossible to do what we do on other systems.  Or maybe the VMS code
of this function should be rewritten.

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-12 10:02                   ` David Kastrup
@ 2006-10-12 11:23                     ` Andreas Schwab
  2006-10-12 11:30                       ` David Kastrup
  0 siblings, 1 reply; 55+ messages in thread
From: Andreas Schwab @ 2006-10-12 11:23 UTC (permalink / raw)
  Cc: Lennart Borgman, Eli Zaretskii, emacs-devel

David Kastrup <dak@gnu.org> writes:

> The only thing the documentation says in that respect is

     It follows that if
     you include an arbitrary user-specified arguments in the command,
     you should quote it with `shell-quote-argument' first, so that any
     special shell characters do _not_ have their special shell
     meanings.

*Any* special characters.

Andreas.

-- 
Andreas Schwab, SuSE Labs, schwab@suse.de
SuSE Linux Products GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany
PGP key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-12 10:45           ` David Kastrup
  2006-10-12 11:02             ` Eli Zaretskii
@ 2006-10-12 11:24             ` Andreas Schwab
  2006-10-12 11:37               ` David Kastrup
  1 sibling, 1 reply; 55+ messages in thread
From: Andreas Schwab @ 2006-10-12 11:24 UTC (permalink / raw)
  Cc: lennart.borgman.073, Eli Zaretskii, emacs-devel

David Kastrup <dak@gnu.org> writes:

> Then the question is why it should behave like it.

It was definitely designed that way.

Andreas.

-- 
Andreas Schwab, SuSE Labs, schwab@suse.de
SuSE Linux Products GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany
PGP key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-12 11:02             ` Eli Zaretskii
@ 2006-10-12 11:25               ` David Kastrup
  2006-10-12 11:41                 ` Eli Zaretskii
  0 siblings, 1 reply; 55+ messages in thread
From: David Kastrup @ 2006-10-12 11:25 UTC (permalink / raw)
  Cc: lennart.borgman.073, emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

>> Cc: lennart.borgman.073@student.lu.se,  emacs-devel@gnu.org
>> From: David Kastrup <dak@gnu.org>
>> Date: Thu, 12 Oct 2006 12:45:43 +0200
>> 
>> Clearly, ARGS is (except on VMS) _not_ a list of separate arguments,
>> but rather strings pasted together with spaces.
>
> Yes, as any API to `system' should do.

start-process-shell-command is neither documented as an API to
`system', nor implemented by using `system'.

>> So I don't understand how to apply your remark
>> "start-process-shell-command is not system(3).".
>
> That remark should be understood as follows:
> start-process-shell-command is a wrapper around `system',

No, it isn't.  It does something similar, but the similarity to what
`system' does is not documented, and `system' is not used in its
implementation.

> but it isn't `system' itself.  So it doesn't need to accept only one
> string, but eventually it will concatenate them all.

Even if did use `system' (which it doesn't), any behavior that arises
as a consequence of undocumentated implementation details of
`start-process-shell-command' would need to get documented.

> Apologies for being unclear.

-- 
David Kastrup, Kriemhildstr. 15, 44793 Bochum

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-12 11:23                     ` Andreas Schwab
@ 2006-10-12 11:30                       ` David Kastrup
  0 siblings, 0 replies; 55+ messages in thread
From: David Kastrup @ 2006-10-12 11:30 UTC (permalink / raw)
  Cc: Lennart Borgman, Eli Zaretskii, emacs-devel

Andreas Schwab <schwab@suse.de> writes:

> David Kastrup <dak@gnu.org> writes:
>
>> The only thing the documentation says in that respect is
>
>      It follows that if
>      you include an arbitrary user-specified arguments in the command,
>      you should quote it with `shell-quote-argument' first, so that any
>      special shell characters do _not_ have their special shell
>      meanings.

Please don't do creative misquoting by combining things I actually
wrote with stuff of your own.  I did not quote the above, it is not
present in `start-process-shell-command's doc string, and you don't
give a source for the quote you attribute to me in a very misleading
manner.

-- 
David Kastrup, Kriemhildstr. 15, 44793 Bochum

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-12 11:24             ` Andreas Schwab
@ 2006-10-12 11:37               ` David Kastrup
  2006-10-12 11:45                 ` Andreas Schwab
  0 siblings, 1 reply; 55+ messages in thread
From: David Kastrup @ 2006-10-12 11:37 UTC (permalink / raw)
  Cc: lennart.borgman.073, Eli Zaretskii, emacs-devel

Andreas Schwab <schwab@suse.de> writes:

> David Kastrup <dak@gnu.org> writes:
>
>> Then the question is why it should behave like it.
>
> It was definitely designed that way.

By that argument, every misbehavior can be justified.  Whenever an
implementation disagrees with expectation and doc string, one can
_always_ claim "it was definitely designed that way", since any
implementation will exhibit just the behavior that the code actually
happens to have.

It does not make sense to document desirable behavior that the
implementation does not provide.  If the implementation can't
reasonably be expected to have the documented behavior, the
documentation needs to get changed.

-- 
David Kastrup, Kriemhildstr. 15, 44793 Bochum

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-12 11:25               ` David Kastrup
@ 2006-10-12 11:41                 ` Eli Zaretskii
  0 siblings, 0 replies; 55+ messages in thread
From: Eli Zaretskii @ 2006-10-12 11:41 UTC (permalink / raw)
  Cc: lennart.borgman.073, emacs-devel

> Cc: lennart.borgman.073@student.lu.se,  emacs-devel@gnu.org
> From: David Kastrup <dak@gnu.org>
> Date: Thu, 12 Oct 2006 13:25:00 +0200
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> >> Clearly, ARGS is (except on VMS) _not_ a list of separate arguments,
> >> but rather strings pasted together with spaces.
> >
> > Yes, as any API to `system' should do.
> 
> start-process-shell-command is neither documented as an API to
> `system', nor implemented by using `system'.

It clearly produces the same effect; the details don't matter.  And I
think that any reasonable API to invoke a shell command would work in
the same way.

> > That remark should be understood as follows:
> > start-process-shell-command is a wrapper around `system',
> 
> No, it isn't.  It does something similar

You are nitpicking.

> but the similarity to what `system' does is not documented

There's no need to document that; we don't refer to C functions for
other primitives, at least not as a matter of principle.

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-12 11:37               ` David Kastrup
@ 2006-10-12 11:45                 ` Andreas Schwab
  0 siblings, 0 replies; 55+ messages in thread
From: Andreas Schwab @ 2006-10-12 11:45 UTC (permalink / raw)
  Cc: lennart.borgman.073, Eli Zaretskii, emacs-devel

David Kastrup <dak@gnu.org> writes:

> Andreas Schwab <schwab@suse.de> writes:
>
>> David Kastrup <dak@gnu.org> writes:
>>
>>> Then the question is why it should behave like it.
>>
>> It was definitely designed that way.
>
> By that argument, every misbehavior can be justified.

There is no misbehaviour.  It works like this on purpose, and since it is
documented that way we should not change it, or we break the users of
these functions.

Andreas.

-- 
Andreas Schwab, SuSE Labs, schwab@suse.de
SuSE Linux Products GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany
PGP key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-12  7:44       ` David Kastrup
                           ` (2 preceding siblings ...)
  2006-10-12 10:35         ` Eli Zaretskii
@ 2006-10-12 14:47         ` Stefan Monnier
  2006-10-12 14:53           ` David Kastrup
  2006-10-12 22:38         ` Richard Stallman
  4 siblings, 1 reply; 55+ messages in thread
From: Stefan Monnier @ 2006-10-12 14:47 UTC (permalink / raw)
  Cc: Lennart Borgman, Eli Zaretskii, emacs-devel

I think the current situation is misleading: the "&rest ARGS" gives the
impression that these are separate args to the command, whereas they're just
arbitrary strings concatenated to COMMAND (which really can itself be
anything rather than a file name).

Just as obviously, this can't be fixed by quoting the arguments, because it
would defeat the purpose: you may as well use `start-process' and avoid the
whole shell problem.

I suggest the patch below to fix this problem: let the caller do the
concatenation/quoting, so she gets what she expects.  It's really not that
big a deal.


        Stefan


* auto-adding monnier@iro.umontreal.ca--first/emacs--monnier--0--patch-405 to greedy revision library /home/monnier/tmp/arch-lib
* found immediate ancestor revision in library (monnier@iro.umontreal.ca--first/emacs--monnier--0--patch-404)
* patching for this revision (monnier@iro.umontreal.ca--first/emacs--monnier--0--patch-405)
--- orig/lisp/subr.el
+++ mod/lisp/subr.el
@@ -2304,11 +2304,9 @@
  an output stream or filter function to handle the output.
  BUFFER may be also nil, meaning that this process is not associated
  with any buffer
-COMMAND is the name of a shell command.
-Remaining arguments are the arguments for the command.
-Wildcards and redirection are handled as usual in the shell.
+COMMAND is the shell command to run.
 
-\(fn NAME BUFFER COMMAND &rest COMMAND-ARGS)"
+\(fn NAME BUFFER COMMAND)"
   (cond
    ((eq system-type 'vax-vms)
     (apply 'start-process name buffer args))

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-12 14:47         ` Stefan Monnier
@ 2006-10-12 14:53           ` David Kastrup
  2006-10-12 15:24             ` Stefan Monnier
  0 siblings, 1 reply; 55+ messages in thread
From: David Kastrup @ 2006-10-12 14:53 UTC (permalink / raw)
  Cc: Lennart Borgman, Eli Zaretskii, emacs-devel

Stefan Monnier <monnier@iro.umontreal.ca> writes:

> I think the current situation is misleading: the "&rest ARGS" gives
> the impression that these are separate args to the command, whereas
> they're just arbitrary strings concatenated to COMMAND (which really
> can itself be anything rather than a file name).
>
> Just as obviously, this can't be fixed by quoting the arguments,
> because it would defeat the purpose: you may as well use
> `start-process' and avoid the whole shell problem.
>
> I suggest the patch below to fix this problem: let the caller do the
> concatenation/quoting, so she gets what she expects.  It's really
> not that big a deal.

> * auto-adding monnier@iro.umontreal.ca--first/emacs--monnier--0--patch-405 to greedy revision library /home/monnier/tmp/arch-lib
> * found immediate ancestor revision in library (monnier@iro.umontreal.ca--first/emacs--monnier--0--patch-404)
> * patching for this revision (monnier@iro.umontreal.ca--first/emacs--monnier--0--patch-405)
> --- orig/lisp/subr.el
> +++ mod/lisp/subr.el
> @@ -2304,11 +2304,9 @@
>   an output stream or filter function to handle the output.
>   BUFFER may be also nil, meaning that this process is not associated
>   with any buffer
> -COMMAND is the name of a shell command.
> -Remaining arguments are the arguments for the command.
> -Wildcards and redirection are handled as usual in the shell.
> +COMMAND is the shell command to run.
>  
> -\(fn NAME BUFFER COMMAND &rest COMMAND-ARGS)"
> +\(fn NAME BUFFER COMMAND)"
>    (cond
>     ((eq system-type 'vax-vms)
>      (apply 'start-process name buffer args))

I agree with the gist of your patch which removes the confusion about
the args.

But it does this only in the doc string, not the code itself.  This
gives the function "hidden" backwards compatibility.

I don't think that is really a good idea: I think the code should
follow suit.

-- 
David Kastrup, Kriemhildstr. 15, 44793 Bochum

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-12 14:53           ` David Kastrup
@ 2006-10-12 15:24             ` Stefan Monnier
  2006-10-12 18:11               ` Stuart D. Herring
  0 siblings, 1 reply; 55+ messages in thread
From: Stefan Monnier @ 2006-10-12 15:24 UTC (permalink / raw)
  Cc: Lennart Borgman, Eli Zaretskii, emacs-devel

> I agree with the gist of your patch which removes the confusion about
> the args.

> But it does this only in the doc string, not the code itself.  This
> gives the function "hidden" backwards compatibility.

> I don't think that is really a good idea: I think the code should
> follow suit.

Well, I guess the docstring should do like the `sit-for' does, and mention
the old calling convention and mention that it's deprecated.


        Stefan

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-12 15:24             ` Stefan Monnier
@ 2006-10-12 18:11               ` Stuart D. Herring
  2006-10-12 19:48                 ` Stefan Monnier
  0 siblings, 1 reply; 55+ messages in thread
From: Stuart D. Herring @ 2006-10-12 18:11 UTC (permalink / raw)
  Cc: Lennart Borgman, Eli Zaretskii, emacs-devel

>> I agree with the gist of your patch which removes the confusion about
>> the args.
>
>> But it does this only in the doc string, not the code itself.  This
>> gives the function "hidden" backwards compatibility.
>
>> I don't think that is really a good idea: I think the code should
>> follow suit.
>
> Well, I guess the docstring should do like the `sit-for' does, and mention
> the old calling convention and mention that it's deprecated.

Unless it makes sense on VMS (about which I know nothing) to do something
like (start-process "foo" "*bar*" "ls -l") (since
`start-process-shell-command' redirects to an identical `start-process'
call on VMS), which would be the preferred mode of operation for this
function, the function is broken already.

I tend to agree with David that, as written, this function is
fundamentally confused (and confusing): if the client (a Lisp program)
really has separate arguments for a process (a "command line"), it should
be calling `start-process' anyway.  If a client has a true command line,
it should (be required to) do any dynamic construction required for the
command itself if only to make it obvious to the reader what construction
is occurring.

To me, the only question is whether the whole-command-as-string case works
on VMS: if it does, we can just change the argument list, avoid calling
`apply', and hope that the compatibility impact isn't too great (I see
that all 2 calls to s-p-s-c in 21 use just one string, and that in 22 only
pgg-pgp5.el, pgg-pgp.el, and grep.el have calls to s-p-s-c or c-p-s-c that
would need changing).  If my earlier example doesn't work on VMS, though,
we still need to change the argument list just because the function will
have to do some magic to make the command work (possibly involving
emulating the shell to some extent) and it would be far too confusing to
layer that transformation on top of the implied argument concatenation.

For what it's worth, the implementation-equivalent
`call-process-shell-command' didn't exist in 21, so there's no
compatibility consideration there.  If we decide to actually make the
change, I'll be glad to write the change and fix those three files to be
compatible.

Davis

-- 
This product is sold by volume, not by mass.  If it appears too dense or
too sparse, it is because mass-energy conversion has occurred during
shipping.

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-12  9:49               ` David Kastrup
  2006-10-12  9:53                 ` Andreas Schwab
@ 2006-10-12 18:50                 ` Stephen Leake
  2006-10-12 19:47                   ` Stefan Monnier
  1 sibling, 1 reply; 55+ messages in thread
From: Stephen Leake @ 2006-10-12 18:50 UTC (permalink / raw)
  Cc: Andreas Schwab, Eli Zaretskii, emacs-devel, Lennart Borgman

David Kastrup <dak@gnu.org> writes:

> Andreas Schwab <schwab@suse.de> writes:
>
>> David Kastrup <dak@gnu.org> writes:
>>
>>> Spaces are neither a wildcard nor a redirection.
>>
>> The function executes a shell command.  Shell commands can include
>> many kinds of meta characters, including wildcards and redirections.
>
> Spaces are neither a wildcard nor a redirection.
>
>>> Straw man.  This never was about "metacharacter handling" but
>>> rather about argument processing.
>>
>> The function is about shell commands.  That includes any kind of
>> meta characters.  This works as documented.
>
> I disagree.  If I call something like
>
> (start-process-shell-command "ls" "*scratch*" "ls"
>  "\"Program" "Files\"")
>
> then "\"Program" and "Files\"" are not become separate arguments to
> the shell.  Rather there is one argument "Program Files".

That is what I would expect, and what I believe the documentation
says:

(start-process-shell-command NAME BUFFER &rest ARGS)
...
    Remaining arguments are the arguments for the command.

Each lisp object in ARGS is one command shell argument.

Not "remaining arguments are split on spaces", which is what you seem
to be expecting.

> The command should either make some attempt to actually pass separate
> arguments 

That is what it does.

> (and that means quoting of word separating entities)

This it does not do. Perhaps it should; I think that is the point of
this discussion.

This matters to me as the maintainer of ada-mode; it builds compiler
commands, that may contain arguments that need to be quoted.

My inclination is that any "automagic" quoting that I don't have
direct control over will be wrong at some point. So I'd prefer to
leave start-process-shell-command as is, but mention that
shell-quote-argument might be useful.

> , or just accept a single string as an argument.

It is often convenient to build the arguments in separate groups; a
single string would be awkward.

I don't have any exact examples handy.

-- 
-- Stephe

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-12 18:50                 ` Stephen Leake
@ 2006-10-12 19:47                   ` Stefan Monnier
  2006-10-13 15:25                     ` Eli Zaretskii
  0 siblings, 1 reply; 55+ messages in thread
From: Stefan Monnier @ 2006-10-12 19:47 UTC (permalink / raw)
  Cc: Andreas Schwab, Eli Zaretskii, Lennart Borgman, emacs-devel

> It is often convenient to build the arguments in separate groups; a
> single string would be awkward.

Is (mapconcat 'identity foo " ") really awkward?


        Stefan

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-12 18:11               ` Stuart D. Herring
@ 2006-10-12 19:48                 ` Stefan Monnier
  2006-10-12 20:27                   ` Stuart D. Herring
  0 siblings, 1 reply; 55+ messages in thread
From: Stefan Monnier @ 2006-10-12 19:48 UTC (permalink / raw)
  Cc: Lennart Borgman, Eli Zaretskii, emacs-devel

> Unless it makes sense on VMS (about which I know nothing) to do something
> like (start-process "foo" "*bar*" "ls -l") (since
> `start-process-shell-command' redirects to an identical `start-process'
> call on VMS), which would be the preferred mode of operation for this
> function, the function is broken already.

I don't think the decision on this should depend on VMS.


        Stefan

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-12 19:48                 ` Stefan Monnier
@ 2006-10-12 20:27                   ` Stuart D. Herring
  2006-10-13 11:19                     ` Richard Stallman
  0 siblings, 1 reply; 55+ messages in thread
From: Stuart D. Herring @ 2006-10-12 20:27 UTC (permalink / raw)
  Cc: Lennart Borgman, Eli Zaretskii, emacs-devel

> I don't think the decision on this should depend on VMS.

My point was merely that this function's current definition may very well
be buggy (as well as, IMHO, misguided), and that incompatible change would
be required to remove such a bug, so that (in that case) backward
compatibility would not be so great a concern.

Davis

-- 
This product is sold by volume, not by mass.  If it appears too dense or
too sparse, it is because mass-energy conversion has occurred during
shipping.

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-12  7:44       ` David Kastrup
                           ` (3 preceding siblings ...)
  2006-10-12 14:47         ` Stefan Monnier
@ 2006-10-12 22:38         ` Richard Stallman
  4 siblings, 0 replies; 55+ messages in thread
From: Richard Stallman @ 2006-10-12 22:38 UTC (permalink / raw)
  Cc: lennart.borgman.073, eliz, emacs-devel

call-process-shell-command can't quote its arguments
because there would be no way to specify wildcards
and redirections.

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-12 11:01               ` David Kastrup
  2006-10-12 11:08                 ` Eli Zaretskii
@ 2006-10-12 22:38                 ` Richard Stallman
  2006-10-13  0:44                   ` Stefan Monnier
  2006-10-13 19:24                   ` Eli Zaretskii
  1 sibling, 2 replies; 55+ messages in thread
From: Richard Stallman @ 2006-10-12 22:38 UTC (permalink / raw)
  Cc: schwab, eliz, lennart.borgman.073, emacs-devel

    But the current documentation string and the availability of multiple
    arguments that are _documented_ as multiple arguments is quite
    misleading.  If we decide that those arguments are not intended to be
    multiple arguments but rather something that is merely spliced
    together with spaces into one single string, then the documentation
    should reflect this.

The function does what it is supposed to do.
I agree that we should change the documentation in this way.

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-12 22:38                 ` Richard Stallman
@ 2006-10-13  0:44                   ` Stefan Monnier
  2006-10-13  6:02                     ` Lennart Borgman
  2006-10-13 19:24                   ` Eli Zaretskii
  1 sibling, 1 reply; 55+ messages in thread
From: Stefan Monnier @ 2006-10-13  0:44 UTC (permalink / raw)
  Cc: schwab, eliz, emacs-devel, lennart.borgman.073

>     But the current documentation string and the availability of multiple
>     arguments that are _documented_ as multiple arguments is quite
>     misleading.  If we decide that those arguments are not intended to be
>     multiple arguments but rather something that is merely spliced
>     together with spaces into one single string, then the documentation
>     should reflect this.

> The function does what it is supposed to do.
> I agree that we should change the documentation in this way.

I still think that saying

   (start-process-shell-command NAME BUFFER COMMAND &rest COMMAND-ARGS)

is misleading and the "flexibility" it provides is very minor.  So it'd be
better to only have

   (start-process-shell-command NAME BUFFER COMMAND)

because it makes the behavior of the function much more obvious.  Makes for
a simpler docstring as well, which in turn will save us trouble and the
users as well.

And the callers can easily do the (mapconcat 'identity <args> " ")
themselves when they need it.


        Stefan

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-13  0:44                   ` Stefan Monnier
@ 2006-10-13  6:02                     ` Lennart Borgman
  2006-10-13  8:31                       ` Kim F. Storm
  0 siblings, 1 reply; 55+ messages in thread
From: Lennart Borgman @ 2006-10-13  6:02 UTC (permalink / raw)
  Cc: schwab, eliz, rms, emacs-devel

Stefan Monnier wrote:
>>     But the current documentation string and the availability of multiple
>>     arguments that are _documented_ as multiple arguments is quite
>>     misleading.  If we decide that those arguments are not intended to be
>>     multiple arguments but rather something that is merely spliced
>>     together with spaces into one single string, then the documentation
>>     should reflect this.
>>     
>
>   
>> The function does what it is supposed to do.
>> I agree that we should change the documentation in this way.
>>     
>
> I still think that saying
>
>    (start-process-shell-command NAME BUFFER COMMAND &rest COMMAND-ARGS)
>
> is misleading and the "flexibility" it provides is very minor.  So it'd be
> better to only have
>
>    (start-process-shell-command NAME BUFFER COMMAND)
>
> because it makes the behavior of the function much more obvious.  Makes for
> a simpler docstring as well, which in turn will save us trouble and the
> users as well.
>
> And the callers can easily do the (mapconcat 'identity <args> " ")
> themselves when they need it.
>   

After reading this long discussion I agree to this.

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-13  6:02                     ` Lennart Borgman
@ 2006-10-13  8:31                       ` Kim F. Storm
  0 siblings, 0 replies; 55+ messages in thread
From: Kim F. Storm @ 2006-10-13  8:31 UTC (permalink / raw)
  Cc: schwab, eliz, emacs-devel, Stefan Monnier, rms

Lennart Borgman <lennart.borgman.073@student.lu.se> writes:

> After reading this long discussion I agree to this.

The start-process-shell-command command has existed in its current form
since 1994 -- I see no need to change it _right now_.

Pls. leave further discussions on the subject until ATR (after the release).

-- 
Kim F. Storm <storm@cua.dk> http://www.cua.dk

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-12 20:27                   ` Stuart D. Herring
@ 2006-10-13 11:19                     ` Richard Stallman
  0 siblings, 0 replies; 55+ messages in thread
From: Richard Stallman @ 2006-10-13 11:19 UTC (permalink / raw)
  Cc: lennart.borgman.073, eliz, monnier, emacs-devel

The function does what it was supposed to do.
I don't want to change it.

Could we please turn from this subject to something useful?

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-12 19:47                   ` Stefan Monnier
@ 2006-10-13 15:25                     ` Eli Zaretskii
  2006-10-13 18:16                       ` Stefan Monnier
  0 siblings, 1 reply; 55+ messages in thread
From: Eli Zaretskii @ 2006-10-13 15:25 UTC (permalink / raw)
  Cc: stephen_leake, emacs-devel, lennart.borgman.073, schwab

> Cc: David Kastrup <dak@gnu.org>,  Andreas Schwab <schwab@suse.de>,
> 	  Eli Zaretskii <eliz@gnu.org>,  emacs-devel@gnu.org,
> 	  Lennart Borgman <lennart.borgman.073@student.lu.se>
> From: Stefan Monnier <monnier@iro.umontreal.ca>
> Date: Thu, 12 Oct 2006 15:47:28 -0400
> 
> > It is often convenient to build the arguments in separate groups; a
> > single string would be awkward.
> 
> Is (mapconcat 'identity foo " ") really awkward?

It's more awkward than just calling a function with a list.

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-13 15:25                     ` Eli Zaretskii
@ 2006-10-13 18:16                       ` Stefan Monnier
  2006-10-13 19:03                         ` Eli Zaretskii
  0 siblings, 1 reply; 55+ messages in thread
From: Stefan Monnier @ 2006-10-13 18:16 UTC (permalink / raw)
  Cc: stephen_leake, emacs-devel, lennart.borgman.073, schwab

>> > It is often convenient to build the arguments in separate groups; a
>> > single string would be awkward.
>> Is (mapconcat 'identity foo " ") really awkward?
> It's more awkward than just calling a function with a list.

The question wasn't whether it more or less awkward, just whether it is
awkward.  And I really don't think it is.  And it has the invaluable
advantage of making it crystal clear what's happening.


        Stefan

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-13 18:16                       ` Stefan Monnier
@ 2006-10-13 19:03                         ` Eli Zaretskii
  2006-10-13 20:18                           ` Stefan Monnier
  0 siblings, 1 reply; 55+ messages in thread
From: Eli Zaretskii @ 2006-10-13 19:03 UTC (permalink / raw)
  Cc: stephen_leake, emacs-devel, lennart.borgman.073, schwab

> Cc: stephen_leake@member.fsf.org,  dak@gnu.org,  schwab@suse.de,
> 	  emacs-devel@gnu.org,  lennart.borgman.073@student.lu.se
> From: Stefan Monnier <monnier@iro.umontreal.ca>
> Date: Fri, 13 Oct 2006 14:16:11 -0400
> 
> >> > It is often convenient to build the arguments in separate groups; a
> >> > single string would be awkward.
> >> Is (mapconcat 'identity foo " ") really awkward?
> > It's more awkward than just calling a function with a list.
> 
> The question wasn't whether it more or less awkward, just whether it is
> awkward.  And I really don't think it is.  And it has the invaluable
> advantage of making it crystal clear what's happening.

It's quite clear I cannot convince you no matter what I say, so let's
just agree to disagree.

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-12 22:38                 ` Richard Stallman
  2006-10-13  0:44                   ` Stefan Monnier
@ 2006-10-13 19:24                   ` Eli Zaretskii
  1 sibling, 0 replies; 55+ messages in thread
From: Eli Zaretskii @ 2006-10-13 19:24 UTC (permalink / raw)
  Cc: schwab, lennart.borgman.073, emacs-devel

> From: Richard Stallman <rms@gnu.org>
> CC: eliz@gnu.org, schwab@suse.de, emacs-devel@gnu.org,
> 	lennart.borgman.073@student.lu.se
> Date: Thu, 12 Oct 2006 18:38:26 -0400
> 
> The function does what it is supposed to do.
> I agree that we should change the documentation in this way.

Done.

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-13 19:03                         ` Eli Zaretskii
@ 2006-10-13 20:18                           ` Stefan Monnier
  2006-10-14 13:10                             ` Eli Zaretskii
  0 siblings, 1 reply; 55+ messages in thread
From: Stefan Monnier @ 2006-10-13 20:18 UTC (permalink / raw)
  Cc: stephen_leake, emacs-devel, lennart.borgman.073, schwab

>> The question wasn't whether it more or less awkward, just whether it is
>> awkward.  And I really don't think it is.  And it has the invaluable
>> advantage of making it crystal clear what's happening.

> It's quite clear I cannot convince you no matter what I say, so let's
> just agree to disagree.

I guess I could be convinced by example code where the use of the "multiple
arg feature" makes the code simpler (without introducing extra bugs).


        Stefan

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-13 20:18                           ` Stefan Monnier
@ 2006-10-14 13:10                             ` Eli Zaretskii
  2006-10-14 16:57                               ` Stefan Monnier
  0 siblings, 1 reply; 55+ messages in thread
From: Eli Zaretskii @ 2006-10-14 13:10 UTC (permalink / raw)
  Cc: stephen_leake, emacs-devel, lennart.borgman.073, schwab

> Cc: stephen_leake@member.fsf.org,  dak@gnu.org,  schwab@suse.de,
> 	  emacs-devel@gnu.org,  lennart.borgman.073@student.lu.se
> From: Stefan Monnier <monnier@iro.umontreal.ca>
> Date: Fri, 13 Oct 2006 16:18:18 -0400
> 
> >> The question wasn't whether it more or less awkward, just whether it is
> >> awkward.  And I really don't think it is.  And it has the invaluable
> >> advantage of making it crystal clear what's happening.
> 
> > It's quite clear I cannot convince you no matter what I say, so let's
> > just agree to disagree.
> 
> I guess I could be convinced by example code where the use of the "multiple
> arg feature" makes the code simpler (without introducing extra bugs).

Define ``make the code simpler'', and I will try to think if there is
an example of that.

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-14 13:10                             ` Eli Zaretskii
@ 2006-10-14 16:57                               ` Stefan Monnier
  2006-10-14 18:26                                 ` Eli Zaretskii
  2006-10-15 17:12                                 ` Richard Stallman
  0 siblings, 2 replies; 55+ messages in thread
From: Stefan Monnier @ 2006-10-14 16:57 UTC (permalink / raw)
  Cc: stephen_leake, emacs-devel, lennart.borgman.073, schwab

>> >> The question wasn't whether it more or less awkward, just whether it is
>> >> awkward.  And I really don't think it is.  And it has the invaluable
>> >> advantage of making it crystal clear what's happening.
>> 
>> > It's quite clear I cannot convince you no matter what I say, so let's
>> > just agree to disagree.
>> 
>> I guess I could be convinced by example code where the use of the "multiple
>> arg feature" makes the code simpler (without introducing extra bugs).

> Define ``make the code simpler'', and I will try to think if there is
> an example of that.

The notion of what is simpler is clearly objective and we may never agree,
but I may be satisfied by a concrete example which you consider
as simpler.

I just honestly can't think of any case where the "multiple args feature"
can be used without either introducing bugs, or just pushing the arguably
strange behavior (of having a list of strings which will be concatenated
by Emacs and re-split later differently by the shell) to the user of
that code.


        Stefan

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-14 16:57                               ` Stefan Monnier
@ 2006-10-14 18:26                                 ` Eli Zaretskii
  2006-10-16  0:14                                   ` Stefan Monnier
  2006-10-15 17:12                                 ` Richard Stallman
  1 sibling, 1 reply; 55+ messages in thread
From: Eli Zaretskii @ 2006-10-14 18:26 UTC (permalink / raw)
  Cc: stephen_leake, emacs-devel, lennart.borgman.073, schwab

> Cc: stephen_leake@member.fsf.org,  dak@gnu.org,  schwab@suse.de,
> 	  emacs-devel@gnu.org,  lennart.borgman.073@student.lu.se
> From: Stefan Monnier <monnier@iro.umontreal.ca>
> Date: Sat, 14 Oct 2006 12:57:50 -0400
> >> 
> >> I guess I could be convinced by example code where the use of the "multiple
> >> arg feature" makes the code simpler (without introducing extra bugs).
> 
> > Define ``make the code simpler'', and I will try to think if there is
> > an example of that.
> 
> The notion of what is simpler is clearly objective and we may never agree,

That is exactly why I asked for _your_ notion of ``simpler''.

> I just honestly can't think of any case where the "multiple args feature"
> can be used without either introducing bugs, or just pushing the arguably
> strange behavior (of having a list of strings which will be concatenated
> by Emacs and re-split later differently by the shell) to the user of
> that code.

Well, the function exists in this form for many years (at least 12).
I'm guessing that the &rest args form was to make it similar to
start-process or something, but that's just a guess.

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-14 16:57                               ` Stefan Monnier
  2006-10-14 18:26                                 ` Eli Zaretskii
@ 2006-10-15 17:12                                 ` Richard Stallman
  1 sibling, 0 replies; 55+ messages in thread
From: Richard Stallman @ 2006-10-15 17:12 UTC (permalink / raw)
  Cc: stephen_leake, eliz, lennart.borgman.073, schwab, emacs-devel

For simple practical reasons, I'm not considering a change in the
specs of this function, so could we drop the discussion?

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-14 18:26                                 ` Eli Zaretskii
@ 2006-10-16  0:14                                   ` Stefan Monnier
  2006-10-16  4:21                                     ` Eli Zaretskii
  0 siblings, 1 reply; 55+ messages in thread
From: Stefan Monnier @ 2006-10-16  0:14 UTC (permalink / raw)
  Cc: stephen_leake, emacs-devel, lennart.borgman.073, schwab

>> The notion of what is simpler is clearly objective and we may never agree,
> That is exactly why I asked for _your_ notion of ``simpler''.

>> but I may be satisfied by a concrete example which you consider
>> as simpler.
>[silence]

The absence of answer here seems to indicate that you don't have a concrete
example which *you* consider as simpler.  So the potential disagreement
about what is simpler is really not the stumbling block.

> Well, the function exists in this form for many years (at least 12).
> I'm guessing that the &rest args form was to make it similar to
> start-process or something, but that's just a guess.

Yes, that's my guess as well.  Doesn't mean that it was a good decision,
since it is misleading to think that it works like start-process.
Anyway, that's post-22 stuff.


        Stefan

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-16  0:14                                   ` Stefan Monnier
@ 2006-10-16  4:21                                     ` Eli Zaretskii
  2006-10-16  6:44                                       ` Stefan Monnier
  2006-10-16 18:46                                       ` Richard Stallman
  0 siblings, 2 replies; 55+ messages in thread
From: Eli Zaretskii @ 2006-10-16  4:21 UTC (permalink / raw)
  Cc: emacs-devel

> Cc: stephen_leake@member.fsf.org,  dak@gnu.org,  schwab@suse.de,
> 	  emacs-devel@gnu.org,  lennart.borgman.073@student.lu.se
> From: Stefan Monnier <monnier@iro.umontreal.ca>
> Date: Sun, 15 Oct 2006 20:14:39 -0400
> 
> >> The notion of what is simpler is clearly objective and we may never agree,
> > That is exactly why I asked for _your_ notion of ``simpler''.
> 
> >> but I may be satisfied by a concrete example which you consider
> >> as simpler.
> >[silence]
> 
> The absence of answer here seems to indicate that you don't have a concrete
> example which *you* consider as simpler.

And what does _your_ silence mean to my request of telling what is
your notion of simpler?

I don't want to waste my time to come up with examples only to hear
you say ``that's not simpler''.

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-16  4:21                                     ` Eli Zaretskii
@ 2006-10-16  6:44                                       ` Stefan Monnier
  2006-10-16  9:22                                         ` Andreas Schwab
  2006-10-16 18:46                                       ` Richard Stallman
  1 sibling, 1 reply; 55+ messages in thread
From: Stefan Monnier @ 2006-10-16  6:44 UTC (permalink / raw)
  Cc: emacs-devel

>> >> The notion of what is simpler is clearly objective and we may never agree,
>> > That is exactly why I asked for _your_ notion of ``simpler''.
>> 
>> >> but I may be satisfied by a concrete example which you consider
>> >> as simpler.
>> >[silence]
>> 
>> The absence of answer here seems to indicate that you don't have a concrete
>> example which *you* consider as simpler.

> And what does _your_ silence mean to my request of telling what is
> your notion of simpler?

It means that I don't know how to define it.

> I don't want to waste my time to come up with examples only to hear
> you say ``that's not simpler''.

As I said: I may be satisfied by a concrete example which you consider
as simpler.

Basically, I see no evidence that we'll strongly disagree on what is simpler.

To get the thing rolling, he is my rewrite of pgg-pgp.el to avoid the use of
a list of args.  It fixes a few missing shell-quote-arguments and replaces
a few (concat "\"" foo "\"") with calls to shell-quote-arguments.

The only other place I could find where the `args' feature of
start-process-shell-command is used is in pgg-pgp5.el which is basically
a copy of pgg-pgp.el so the patch can trivially be adapted, although I'd
rather not do that since I think pgg-pgp5.el has no business being in Emacs,
owing to the fact that pgp5 is not Free Software.

Do you find my new code less simple?


        Stefan


PS: It also fixes a bug in the handling of pgg-pgp-extra-args: the
defcustom says it should be a string, but the previous code assumed it was
a list of strings instead.


--- pgg-pgp.el	03 jui 2006 14:46:24 -0400	1.4
+++ pgg-pgp.el	16 oct 2006 01:36:27 -0400	
@@ -63,9 +63,9 @@
 (defun pgg-pgp-process-region (start end passphrase program args)
   (let* ((errors-file-name (pgg-make-temp-file "pgg-errors"))
 	 (args
-	  (append args
+	  (concat args
 		  pgg-pgp-extra-args
-		  (list (concat "2>" errors-file-name))))
+                  " 2>" (shell-quote-argument errors-file-name)))
 	 (shell-file-name pgg-pgp-shell-file-name)
 	 (shell-command-switch pgg-pgp-shell-command-switch)
 	 (process-environment process-environment)
@@ -83,9 +83,8 @@
 	  (let ((coding-system-for-read 'binary)
 		(coding-system-for-write 'binary))
 	    (setq process
-		  (apply #'funcall
-			 #'start-process-shell-command "*PGP*" output-buffer
-			 program args)))
+		  (start-process-shell-command "*PGP*" output-buffer
+                                               (concat program " " args))))
 	  (set-process-sentinel process #'ignore)
 	  (when passphrase
 	    (process-send-string process (concat passphrase "\n")))
@@ -142,15 +141,14 @@
 				    pgg-pgp-user-id)
 			    pgg-pgp-user-id))))
 	 (args
-	  (append
-	   `("+encrypttoself=off +verbose=1" "+batchmode"
-	     "+language=us" "-fate"
-	     ,@(if recipients
-		   (mapcar (lambda (rcpt) (concat "\"" rcpt "\""))
+	  (concat
+	   "+encrypttoself=off +verbose=1 +batchmode +language=us -fate"
+           (if recipients
+               (mapconcat 'shell-quote-argument
 			   (append recipients
 				   (if pgg-encrypt-for-me
-				       (list pgg-pgp-user-id))))))
-	   (if sign '("-s" "-u" pgg-pgp-user-id)))))
+                                      (list pgg-pgp-user-id)))))
+           (if sign (concat " -s -u " (shell-quote-argument pgg-pgp-user-id))))))
     (pgg-pgp-process-region start end nil pgg-pgp-program args)
     (pgg-process-when-success nil)))
 
@@ -166,7 +164,7 @@
 	      (pgg-read-passphrase
 	       (format "PGP passphrase for %s: " pgg-pgp-user-id) key)))
 	 (args
-	  '("+verbose=1" "+batchmode" "+language=us" "-f")))
+	  "+verbose=1 +batchmode +language=us -f"))
     (pgg-pgp-process-region start end passphrase pgg-pgp-program args)
     (pgg-process-when-success
       (if pgg-cache-passphrase
@@ -184,9 +182,9 @@
 	       (format "PGP passphrase for %s: " pgg-pgp-user-id)
 	       (pgg-pgp-lookup-key pgg-pgp-user-id 'sign))))
 	 (args
-	  (list (if clearsign "-fast" "-fbast")
-		"+verbose=1" "+language=us" "+batchmode"
-		"-u" pgg-pgp-user-id)))
+	  (concat (if clearsign "-fast" "-fbast")
+		" +verbose=1 +language=us +batchmode"
+		" -u " (shell-quote-argument pgg-pgp-user-id))))
     (pgg-pgp-process-region start end passphrase pgg-pgp-program args)
     (pgg-process-when-success
       (goto-char (point-min))
@@ -204,7 +202,7 @@
 (defun pgg-pgp-verify-region (start end &optional signature)
   "Verify region between START and END as the detached signature SIGNATURE."
   (let* ((orig-file (pgg-make-temp-file "pgg"))
-	 (args '("+verbose=1" "+batchmode" "+language=us"))
+	 (args "+verbose=1 +batchmode +language=us"))
 	 (orig-mode (default-file-modes)))
     (unwind-protect
 	(progn
@@ -216,8 +214,8 @@
     (if (stringp signature)
 	(progn
 	  (copy-file signature (setq signature (concat orig-file ".asc")))
-	  (setq args (append args (list signature orig-file))))
-      (setq args (append args (list orig-file))))
+	  (setq args (concat args " " (shell-quote-argument signature)))))
+    (setq args (concat args " " (shell-quote-argument orig-file)))
     (pgg-pgp-process-region (point)(point) nil pgg-pgp-program args)
     (delete-file orig-file)
     (if signature (delete-file signature))
@@ -237,8 +235,8 @@
   "Insert public key at point."
   (let* ((pgg-pgp-user-id (or pgg-pgp-user-id pgg-default-user-id))
 	 (args
-	  (list "+verbose=1" "+batchmode" "+language=us" "-kxaf"
-		(concat "\"" pgg-pgp-user-id "\""))))
+	  (concat "+verbose=1 +batchmode +language=us -kxaf "
+                  (shell-quote-argument pgg-pgp-user-id))))
     (pgg-pgp-process-region (point)(point) nil pgg-pgp-program args)
     (insert-buffer-substring pgg-output-buffer)))
 
@@ -247,8 +245,8 @@
   (let* ((pgg-pgp-user-id (or pgg-pgp-user-id pgg-default-user-id))
 	 (key-file (pgg-make-temp-file "pgg"))
 	 (args
-	  (list "+verbose=1" "+batchmode" "+language=us" "-kaf"
-		key-file)))
+	  (concat "+verbose=1 +batchmode +language=us -kaf "
+                  (shell-quote-argument key-file))))
     (let ((coding-system-for-write 'raw-text-dos))
       (write-region start end key-file))
     (pgg-pgp-process-region start end nil pgg-pgp-program args)
@@ -257,5 +255,5 @@
 
 (provide 'pgg-pgp)
 
-;;; arch-tag: 076b7801-37b2-49a6-97c3-218fdecde33c
+;; arch-tag: 076b7801-37b2-49a6-97c3-218fdecde33c
 ;;; pgg-pgp.el ends here

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-16  6:44                                       ` Stefan Monnier
@ 2006-10-16  9:22                                         ` Andreas Schwab
  0 siblings, 0 replies; 55+ messages in thread
From: Andreas Schwab @ 2006-10-16  9:22 UTC (permalink / raw)
  Cc: Eli Zaretskii, emacs-devel

Stefan Monnier <monnier@iro.umontreal.ca> writes:

> Do you find my new code less simple?

It shows how easy it is to get it wrong.

Andreas.

-- 
Andreas Schwab, SuSE Labs, schwab@suse.de
SuSE Linux Products GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany
PGP key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

^ permalink raw reply	[flat|nested] 55+ messages in thread

* Re: Quote file name args to start-process-shell-command?
  2006-10-16  4:21                                     ` Eli Zaretskii
  2006-10-16  6:44                                       ` Stefan Monnier
@ 2006-10-16 18:46                                       ` Richard Stallman
  1 sibling, 0 replies; 55+ messages in thread
From: Richard Stallman @ 2006-10-16 18:46 UTC (permalink / raw)
  Cc: monnier, emacs-devel

    And what does _your_ silence mean to my request of telling what is
    your notion of simpler?

    I don't want to waste my time to come up with examples only to hear
    you say ``that's not simpler''.

Could we please drop this argument?  This is an issue without practical
consequence, and it is sapping your time.

^ permalink raw reply	[flat|nested] 55+ messages in thread

end of thread, other threads:[~2006-10-16 18:46 UTC | newest]

Thread overview: 55+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-10-11 20:32 Quote file name args to start-process-shell-command? Lennart Borgman
2006-10-12  4:27 ` Eli Zaretskii
2006-10-12  6:08   ` Lennart Borgman
2006-10-12  7:03     ` Eli Zaretskii
2006-10-12  7:44       ` David Kastrup
2006-10-12  8:15         ` Kim F. Storm
2006-10-12  8:24           ` David Kastrup
2006-10-12  9:08             ` Andreas Schwab
2006-10-12  8:49         ` Andreas Schwab
2006-10-12  9:27           ` David Kastrup
2006-10-12  9:41             ` Andreas Schwab
2006-10-12  9:49               ` David Kastrup
2006-10-12  9:53                 ` Andreas Schwab
2006-10-12 10:02                   ` David Kastrup
2006-10-12 11:23                     ` Andreas Schwab
2006-10-12 11:30                       ` David Kastrup
2006-10-12 18:50                 ` Stephen Leake
2006-10-12 19:47                   ` Stefan Monnier
2006-10-13 15:25                     ` Eli Zaretskii
2006-10-13 18:16                       ` Stefan Monnier
2006-10-13 19:03                         ` Eli Zaretskii
2006-10-13 20:18                           ` Stefan Monnier
2006-10-14 13:10                             ` Eli Zaretskii
2006-10-14 16:57                               ` Stefan Monnier
2006-10-14 18:26                                 ` Eli Zaretskii
2006-10-16  0:14                                   ` Stefan Monnier
2006-10-16  4:21                                     ` Eli Zaretskii
2006-10-16  6:44                                       ` Stefan Monnier
2006-10-16  9:22                                         ` Andreas Schwab
2006-10-16 18:46                                       ` Richard Stallman
2006-10-15 17:12                                 ` Richard Stallman
2006-10-12 10:54             ` Eli Zaretskii
2006-10-12 11:01               ` David Kastrup
2006-10-12 11:08                 ` Eli Zaretskii
2006-10-12 22:38                 ` Richard Stallman
2006-10-13  0:44                   ` Stefan Monnier
2006-10-13  6:02                     ` Lennart Borgman
2006-10-13  8:31                       ` Kim F. Storm
2006-10-13 19:24                   ` Eli Zaretskii
2006-10-12 10:35         ` Eli Zaretskii
2006-10-12 10:45           ` David Kastrup
2006-10-12 11:02             ` Eli Zaretskii
2006-10-12 11:25               ` David Kastrup
2006-10-12 11:41                 ` Eli Zaretskii
2006-10-12 11:24             ` Andreas Schwab
2006-10-12 11:37               ` David Kastrup
2006-10-12 11:45                 ` Andreas Schwab
2006-10-12 14:47         ` Stefan Monnier
2006-10-12 14:53           ` David Kastrup
2006-10-12 15:24             ` Stefan Monnier
2006-10-12 18:11               ` Stuart D. Herring
2006-10-12 19:48                 ` Stefan Monnier
2006-10-12 20:27                   ` Stuart D. Herring
2006-10-13 11:19                     ` Richard Stallman
2006-10-12 22:38         ` Richard Stallman

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).