>From:     Denis Howe
>Date:     Wed, 28 Mar 2012 15:11:50 +0100
>
>On Mon, 2012-02-27 19:00:49 +0100, Bo Johansson wrote:
>
>> The environment variable SHELL has in (my) emacs at start up the value 
>> "C:/Program Files (x86)/GNU Emacs 23.4/bin/cmdproxy.exe". In the Windows 
>> command shell it is not defined.
>
>Thanks to Bo for a great post about an issue keeps biting me.  As Bo
>points out, Emacs' SHELL environment variable breaks some external
>processes (e.g. installing Perl modules), so why set it?  Setting it
>to cmdproxy, the default on Windows, will cause other programs running
>in an Emacs subshell to use cmdproxy as a "sh" replacement.  Then if
>they try to do  "sh -c 'myprog foo bar' ",  it will eventually become
>something like  "cmd /c myprog foo bar".  Clearly only Unix ports
>running on Windows would benefit.  Are there any examples where this
>SHELL variable setting actually helps?
>
>My .emacs now removes SHELL from process-environment, which seems to
>work for me.

Hej Denis!

Nice it could help somebody. But I want more to be helped!

I have continued to work on the problem. It is a Emacs-w32 problem.

I issued a bug report: bug#10980: 23.4; Variable init_environment incorrectly 
set see http://lists.gnu.org/archive/html/bug-gnu-emacs/2012-03/msg00178.html. 
The bug report did not get enough priority to result in a change.

During the work I have realized that changes to the environment are mainly made 
for Emacs, NOT for the processes STARTED by Emacs. The elisp code expects a 
certain situation. Example: "However, Emacs assumes a fully case sensitive 
environment, so we need to change "Path" to "PATH" to match the expectations of 
various elisp packages."

--------------------------- My goal
is to get the same result using: 1) The Windows command prompt, 2) The Emacs 
compile function or 3) The Emacs shell-command function. An example: To do 
"make" from a Windows command prompt, to do (compile "make" nil) or to do 
(shell-command "make" nil nil) should all give the same result.

--------------------------- Proposal: Better warning message from the 
cmdproxy.exe
In cmdproxy.c
   if (argc > 0) warn ("warning: extra args ignored after '%s'\n", argv[-1]);
is changed to
   if (argc > 0) warn ("warning: [cmdproxy.exe] extra args ignored after 
'%s'\n", argv[-1]);

The command with all its args could also be included in the message.

---- Motivation:
The warning messages given by cmdproxy.exe is often given without any context.
It took me a long time to understand that the cmdproxy.exe was the source of 
the warning message "warning: extra args ignored after ... ".

This change will help people to understand what is going on until the problem 
is solved.

--------------------------- Proposal: Programming rules how to handle 
environment variables
There is a need for rules how to use and change the environment variables in 
Emacs.

---- Motivation:
In Emacs the "internal environment" used internally in Emacs and the external 
used to set up external processes should probably be separated.

--------------------------- Proposal: Read-only "inherited environment" 
Implement a lisp function to get the "inherited environment". This could be 
achieved by:

1) To save the "inherited environment" early in "c-code" at start up of Emacs
2) Implement a lisp function which can return the saved "inherited environment".

---- Motivation:
To change the current handling of the variable initial-environment is probably 
difficult and error prone.

The feature to read the "inherited environment" is a first step in handling the 
"external environment", which is used used to set up external processes.
The feature can then later be used to start external processes with a more 
"transparent" environment.

--------------------------- Proposal: Strategy for an invisible cmdproxy.exe
The SHELL environment variable should have it "normal" value both when running 
M-x compile and  M-! (= shell-command). SHELL should never have the value " ... 
/bin/cmdproxy.exe"!

The purpose of the cmdproxy.exe should only be to translate "emacs internal 
UNIX-style" commands to those used in the actual Windows command shell.

I have the feeling that the adaptation to Windows sometimes is done twice. 
First by cmdproxy.exe and than by the called utilities.

The documentation of the cmdproxy.exe is rather limited!?
--------------------------

Denis, what do you think is a feasible way to solve the problems? Is there any 
clean solution.

Best regards
Bo Johansson

Reply via email to