From: Andy Moreton <andrewjmoreton@gmail.com>
To: emacs-devel@gnu.org
Subject: Re: Generalize start-process with keyword args
Date: Tue, 17 Mar 2015 22:04:26 +0000 [thread overview]
Message-ID: <86k2yfwaad.fsf@gmail.com> (raw)
In-Reply-To: 83lhivxr42.fsf@gnu.org
On Wed 18 Mar 2015, Eli Zaretskii wrote:
>> From: Andy Moreton <andrewjmoreton@gmail.com>
>> Date: Tue, 17 Mar 2015 20:55:28 +0000
>>
>> A simple example is using the cscope package from Cygwin. This installs
>> a cscope executable, a cscope-indexer script and cscope.el that uses the
>> cscope indexes for symbol lookup. cscope.el can also invoke the indexer
>> script to regenerate the indexes (by invoking `cscope-indexing-script'
>> with arguments via `start-process').
>>
>> This script can easily be reused without modification, by advising
>> `start-process to rework its arguments: cahnge PROGRAM to be "bash" and
>> prepend "-c" to the PROGRAM-ARGS list. This allows cscope.el to invoke
>> the original script from a Win32 emacs build without needing any changes
>> to the original package.
>
> So how you suggest this to work? Should such scripts be treated as
> executable only if the interpreter they require is on PATH, and
> otherwise be treated as non-executable? Or should we always treat
> them as executables, and let them fail if the interpreter is not
> available? Or should we require that a script that says
>
> #! /usr/local/bin/perl
>
> is run by "/usr/local/bin/perl", and nothing else?
>
> What about scripts that say
>
> #! /usr/bin/env perl
>
> should we run 'env' for them, too?
>
> And what about MSYS mounting of Windows directories, whereby /bin/bash
> resolves to something like C:\MSYS\1.0\bin\bash.exe (of which Emacs
> has no idea)?
>
> I see a lot of complications with the semantics of this, and no easy
> solutions, since the necessary tools are not available on Windows,
> could be installed in any directory, and come with a set of
> assumptions that don't necessarily play well with a native Emacs.
I agree that this is awkward. What I envisaged was an (optional) alist
of (REGEXP . (INTERPRETER INTERPRETER-ARGS)) pairs such that if
start-process is onvoked for a PROGRAM that matches REGEXP, then use
INTERPRETER as the PROGRAM argument to start-process, and prepend
INTERPRETER-ARGS to the PROGRAM-ARGS list.
E.g. (start-process name buffer "/path/to/script" "foo" "bar" "baz")
and assuming something like:
(setq start-process-interpreter-alist
'(("/path/to/script" . ("/path/to/shell" "-c")))
would result in behaviour equivalent to:
(start-process name buffer "/path/to/shell" "-c" "/path/to/script"
"foo" "bar" "baz")
>> > But what shell would be able to interpret such scripts on Windows?
>> > AFAIK, there are no good candidates for that role.
>>
>> A shell from cygwin, msys2 or msys.
>
> They are all subtly incompatible with a native Emacs, both in the
> file-name syntax and in how they treat I/O.
Agreed. The filenames can be massaged (e.g. cygwin-mount.el), and other
issues can be ameliorated by using a different shell (or arguments) for
different tools.
AndyM
next prev parent reply other threads:[~2015-03-17 22:04 UTC|newest]
Thread overview: 84+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-13 9:01 pipe Daiki Ueno
2015-03-13 10:59 ` pipe Eli Zaretskii
2015-03-13 12:29 ` pipe Daiki Ueno
2015-03-13 20:08 ` pipe Werner Koch
2015-03-14 8:54 ` pipe Eli Zaretskii
2015-03-14 11:51 ` pipe Werner Koch
2015-03-14 13:42 ` pipe Eli Zaretskii
2015-03-14 19:28 ` pipe Werner Koch
2015-03-14 20:34 ` pipe Eli Zaretskii
2015-03-17 7:22 ` pipe Daiki Ueno
2015-03-17 8:47 ` pipe Eli Zaretskii
2015-03-13 12:45 ` pipe Stefan Monnier
2015-03-13 13:10 ` pipe Daiki Ueno
2015-03-16 5:42 ` [PATCH] Generalize start-process with keyword args Daiki Ueno
2015-03-16 13:34 ` Stefan Monnier
2015-03-17 2:16 ` Daiki Ueno
2015-03-17 3:13 ` Stefan Monnier
2015-03-17 3:39 ` Daiki Ueno
2015-03-17 15:35 ` Stefan Monnier
2015-03-17 15:42 ` Eli Zaretskii
2015-03-17 18:08 ` Stefan Monnier
2015-03-17 18:19 ` Eli Zaretskii
2015-03-17 21:36 ` Stefan Monnier
2015-03-18 3:47 ` Eli Zaretskii
2015-03-18 6:17 ` Daiki Ueno
2015-03-18 7:37 ` [PATCH] Add facility to collect stderr of async subprocess Daiki Ueno
2015-03-18 16:25 ` Eli Zaretskii
2015-03-31 7:27 ` Daiki Ueno
2015-03-31 12:55 ` Eli Zaretskii
2015-04-08 0:21 ` Daiki Ueno
2015-04-08 0:47 ` Paul Eggert
2015-04-08 2:55 ` Daiki Ueno
2015-04-08 6:17 ` Eli Zaretskii
2015-04-08 6:20 ` Eli Zaretskii
2015-04-08 7:05 ` Daiki Ueno
2015-04-10 23:11 ` Daiki Ueno
2015-04-18 10:55 ` Ted Zlatanov
2016-10-05 4:33 ` Tino Calancha
2016-10-05 6:54 ` Eli Zaretskii
2016-10-05 7:10 ` Tino Calancha
2016-10-05 7:37 ` Eli Zaretskii
2016-10-05 16:22 ` John Wiegley
2016-10-06 3:13 ` Tino Calancha
2016-10-06 6:54 ` Eli Zaretskii
2016-10-06 7:25 ` Tino Calancha
2016-10-06 7:55 ` Eli Zaretskii
2016-10-06 8:37 ` Tino Calancha
2016-10-06 8:53 ` Eli Zaretskii
2016-10-06 9:13 ` Tino Calancha
2016-10-06 9:25 ` Michael Albinus
2016-10-06 9:45 ` Tino Calancha
2016-10-06 9:22 ` Michael Albinus
2016-10-06 7:15 ` Philipp Stephani
2016-10-06 7:42 ` Eli Zaretskii
2016-10-05 8:46 ` Alain Schneble
2016-10-05 9:15 ` Tino Calancha
2016-10-05 11:20 ` Michael Albinus
2016-10-05 17:24 ` Eli Zaretskii
2016-10-06 7:27 ` Michael Albinus
2015-04-08 5:56 ` Eli Zaretskii
2015-03-18 13:03 ` [PATCH] Generalize start-process with keyword args Stefan Monnier
2015-03-18 16:34 ` Eli Zaretskii
2015-03-19 7:36 ` Daiki Ueno
2015-03-19 13:32 ` Stefan Monnier
2015-03-23 7:36 ` Daiki Ueno
2015-03-18 16:23 ` Eli Zaretskii
2015-03-18 18:57 ` Stefan Monnier
2015-03-18 19:13 ` Eli Zaretskii
2015-03-17 7:50 ` Eli Zaretskii
2015-03-16 19:12 ` Andy Moreton
2015-03-16 19:40 ` Eli Zaretskii
2015-03-16 22:27 ` Andy Moreton
2015-03-17 0:39 ` Stefan Monnier
2015-03-17 7:15 ` Eli Zaretskii
2015-03-17 20:55 ` Andy Moreton
2015-03-17 21:15 ` Eli Zaretskii
2015-03-17 22:04 ` Andy Moreton [this message]
2015-03-19 16:34 ` Eli Zaretskii
2015-03-19 23:22 ` Andy Moreton
2015-03-20 14:03 ` Stefan Monnier
2015-03-17 21:42 ` Stefan Monnier
2015-03-13 14:54 ` pipe Eli Zaretskii
2015-03-13 15:28 ` pipe Daniel Colascione
2015-03-13 15:40 ` pipe Eli Zaretskii
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=86k2yfwaad.fsf@gmail.com \
--to=andrewjmoreton@gmail.com \
--cc=emacs-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.