X-Recipient: archive-cygwin AT delorie DOT com X-SWARE-Spam-Status: No, hits=-1.0 required=5.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED,FREEMAIL_FROM,NML_ADSP_CUSTOM_MED,SPF_HELO_PASS,T_RP_MATCHES_RCVD,T_TO_NO_BRKTS_FREEMAIL X-Spam-Check-By: sourceware.org To: cygwin AT cygwin DOT com connect(): No such file or directory From: Oleksandr Gavenko Subject: Re: Why call-process removes '{' and '}' chars from arguments??? Date: Thu, 03 Jun 2010 23:33:44 +0300 Lines: 150 Message-ID: References: <83wruhru5j DOT fsf AT gnu DOT org> <4C07C495 DOT 7040709 AT cygwin DOT com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.5) Gecko/20091204 Thunderbird/3.0 In-Reply-To: <4C07C495.7040709@cygwin.com> Cc: help-gnu-emacs AT gnu DOT org X-IsSubscribed: yes Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com On 2010-06-03 18:04, Larry Hall (Cygwin) wrote: > On 6/3/2010 3:46 AM, Oleksandr Gavenko wrote: >> On 2010.06.03 0:39, Eli Zaretskii wrote: >>>> From: Oleksandr Gavenko >>>> Date: Wed, 02 Jun 2010 23:40:46 +0300 >>>> >>>> I use Emacs 23.2 under Windows. >>>> >>>> (call-process >>>> "echo.exe" >>>> nil (get-buffer "*Messages*") nil >>>> "--bla" "{rev}" "}}}xxx{1}xxx{2}xxx{{{" ) >>>> >>>> put in Message buffer >>>> >>>> "--bla rev }}}xxx1xxx2xxx" >>>> >>>> so remove occurrences of "{" and "}". Why??? >>> >>> I cannot reproduce this in Emacs 23.2 on MS-Windows. I get the >>> expected result: >>> >>> --bla {rev} }}}xxx{1}xxx{2}xxx{{{ >>> >>> What kind of port of which program is your echo.exe? What happens if >>> you invoke the same command from the shell? >>> >> Futher info: I wrote simple C prog - printarg.c with: >> >> int main(int argc, char **argv) >> { >> for (int i = 0; i < argc; i++) >> printf("\"%s\"\n", argv[i]); >> return 0; >> } >> >> When I compile it with >> >> CC=gcc # resulted executable depend on cygwin1.dll >> >> (call-process "printarg.exe" >> nil (get-buffer "*Messages*") nil >> "--bla" "{rev}" "}}}xxx{1}xxx{2}xxx{{{" ) >> >> return >> >> "/home/user/usr/bin/printarg" >> "--bla" >> "rev" >> "}}}xxx1xxx2xxx" >> >> When I compile it with >> >> CC=i686-pc-cygwin-gcc-3 -mno-cygwin >> # resulted executable *NOT* depend on cygwin1.dll >> >> call-process return >> >> "d:\home\usr\bin\printarg.exe" >> "--bla" >> "{rev}" >> "}}}xxx{1}xxx{2}xxx{{{" >> >> >> Also interesting that from Cygwin bash argument successful passed to >> printarg: >> >> bash# ldd `which printarg` >> ntdll.dll => /cygdrive/c/WINDOWS/system32/ntdll.dll >> kernel32.dll => /cygdrive/c/WINDOWS/system32/kernel32.dll >> cygwin1.dll => /usr/bin/cygwin1.dll >> ADVAPI32.DLL => /cygdrive/c/WINDOWS/system32/ADVAPI32.DLL >> RPCRT4.dll => /cygdrive/c/WINDOWS/system32/RPCRT4.dll >> Secur32.dll => /cygdrive/c/WINDOWS/system32/Secur32.dll >> cyggcc_s-1.dll => /usr/bin/cyggcc_s-1.dll >> bash# printarg {}{}{{{{}}}{}}}{{} {rev} >> "printarg" >> "{}{}{{{{}}}{}}}{{}" >> "{rev}" >> >> >> GNU Emacs 23.2 from ftp.gnu.org - release build with mingw. > > See and try setting > the CYGWIN environment variable to include "noglob". > That is!!!! Much thanks. I explain that I have. Cygwin distro have Mercurial package inside. 'cygwin.el' allow incorporate Emacs with Cygwin without any pain. But native Windows Emacs can not run scripts (in Cygwin - these are files without ext with usual UNIX #!/bin/bla-bla first string). To be able invoke it from Emacs I wrote .bat wrappers with same base name for needed scripts like: @echo off python /bin/hg %* With CYGWIN env var set to "nodosfilewarning noglob" and wrapper I can use VC mode for Mersurial/Bazaar repos (without 'nodosfilewarning' script output can be damaged by Cygwin warning messages). That work pretty nice if there are no new line char in passed to .bat file args. As I debug 'log-edit-done' it can pass such command line (through 'process-file' in 'vc-do-command') switches for Mercurial: (apply 'process-file "hg" nil t nil '("commit" "-m" "message\nXXX\nYYY\nZZZ\n")) %* in .bat file not proper work - it strip all chars after first new line occurrence. I think in Windows there are no anything scriptable with "$*" like in POSIX sh. So through .bat wrapper I can not commit multiline message and as list of files for commit goes after -m "message\n" - it also forget pass list of files for commit. So if I commit single file - it commit all modified files in repo. To workaround this I create executable which linked with Cygwin runtime and as in BusyBox to 'execvp' passed base name as command and all args without changes. Cygwin 'execvp' first search for 'prog' then for 'prog.exe' so trick worked! So I switch from simple .bat wrapper to special executable. To enable another Cygwin script 'foo' for Emacs I just copy existing executable: $ cp hg.exe foo.exe Some further info accessed at http://www.mail-archive.com/cygwin AT cygwin DOT com/msg109064.html -- Best regards! -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple