delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2003/07/02/17:12:24

Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sources.redhat.com/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sources.redhat.com/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com
X-Injected-Via-Gmane: http://gmane.org/
To: cygwin AT cygwin DOT com
From: Soren A <somian AT adelphia DOT net>
Subject: CygPath to Clipboard (was: example needed pls ...)
Date: Wed, 2 Jul 2003 21:09:29 +0000 (UTC)
Organization: Occasionally Sporadically
Lines: 137
Message-ID: <Xns93ACAEA0E9DBEsoren1Gmane@80.91.224.249>
X-Complaints-To: usenet AT main DOT gmane DOT org
User-Agent: Xnews/L5
X-Archive: encrypt
Note-from-DJ: This may be spam

Hey, 'bout time to change the Subject: and start a new thread, eh?

---Reference to Previous thread---
  Subject: Re: example needed pls: `cygpath -c <HANDLE>'
  Message-ID: <3F02DA32 DOT EAD1FC18 AT dessent DOT net>
  References: <3EFE120B DOT 58A0C79E AT dessent DOT net> <Pine DOT GSO DOT 4 DOT 44 DOT 0306282234360 DOT 22307-100000 AT slinky DOT cs DOT nyu DOT edu> <20030701040434 DOT GE7604 AT ny-kenton2a-710 DOT buf DOT adelphia DOT net> <3F018740 DOT B28F53DC AT dessent DOT net> <3F018D6C DOT EA1226CA AT dessent DOT net> <Xns93ABB16F2D760soren1Gmane AT 80 DOT 91 DOT 224 DOT 249> <3F021C46 DOT C8F4CE31 AT dessent DOT net> <Xns93AC469331861soren1Gmane AT 80 DOT 91 DOT 224 DOT 249> <Xns93AC47EC6AA77soren1Gmane AT 80 DOT 91 DOT 224 DOT 249
  Xref: main.gmane.org gmane.os.cygwin:32852
---end references---

> Soren A wrote:
> 
>> The expansion encoded is of a variable %CYGROOT% which must be present
>> in the Windows "master" environment, so that the Registry
>> _always_ has access to it. I set it in my Windows9x autoexec.bat
>> file of course, and under NT/2K/XP you can use the ControlPanel|System.

> I was wondering why I didn't have any CYGROOT set.  I agree that
> REG_EXPAND_SZ is "nicer" in terms of not hard-coding paths, but since
> $CYGROOT is non-standard I don't see that it matters too much.
> 
> There's a couple of problems with it still, in the backspaces/quotes
> department.  Your .reg file installs the command:

> "%CYGROOT%\\bin\\bash -c \"echo -n `/bin/cygpath -u '%l'`>/dev/clipboard\"" + NewLine

> When I run the command I get an error.  The proper quoting is
> 
> "%CYGROOT%\bin\bash" -c "echo -n `/bin/cygpath -u '%l'`>/dev/clipboard"
> 
> You don't want to escape the double-quotes because they are there to
> tell the windows shell to make all that stuff a single arg, after -c. 
> You need double quotes around the exe image in the off chance there's a
> space in $CYGROOT.  And there's the issue of the raw binary newline at
> the end.  The hexified version of that is
> hex(2):22,25,43,59,47,52,4f,4f,54,25,5c,62,69,6e,5c,62,61,73,68,22,20,2d,63,20,22,65,63,68,6f,20,2d,6e,20,60,2f,62,69,6e,2f,63,79,67,70,61,74,68,20,2d,75,20,27,25,6c,27,60,3e,2f,64,65,76,2f,63,6c,69,70,62,6f,61,72,64,22,00
> 
> 
> ----
> 
> Anyway, the Right Way (IMHO) to do this would be something like the
> following:
> 
> ----- copy_cygpath.c -----
> #include <sys/cygwin.h>
> #include <windows.h>
> 
> int main(int argc, char **argv)
> {
>     HGLOBAL hglbBuffer;
>     LPTSTR  lptstrBuffer;
> 
> 
>     if(argc != 2) {
> 
>         // usage: copy_cygpath [win32 path]
>         return 1;
>     }
> 
>     hglbBuffer = GlobalAlloc(GMEM_MOVEABLE, (MAX_PATH +
> 1)*sizeof(TCHAR));
>     if (hglbBuffer == NULL) {
>         return 1;
>     }
> 
>     lptstrBuffer = GlobalLock(hglbBuffer);
>     cygwin_conv_to_full_posix_path(argv[1], lptstrBuffer);
>     GlobalUnlock(hglbBuffer);
> 
>     if(OpenClipboard(NULL) == 0) {
>         // failure!
> 
>         GlobalFree(hglbBuffer);
>         return 1;
>     }
> 
>     EmptyClipboard();
>     SetClipboardData(CF_TEXT, hglbBuffer);
>     CloseClipboard();
> 
>     return 0;
> }
> ------
> 
> $ gcc copy_cygpath.c -o copy_cygpath.exe -mwindows -luser32
> $ mv copy_cygpath.exe /bin

OK, Brian, your copy_cygpath tool works just fine (sans the issues
of providing fancy escaping a' la' `ls'). But I cannot get the
Registry to accept the entries now! Each time I try I get the keys
created OK, but the "command" is undefined (I am writing of how we
see the Registry in "regedit"). Somehow, my guess is that REGEDIT
is not liking the way the data entries look and is blanking them
out when adding the values to the keys.

> Now your registry entry is just: 
> 
> "%CYGROOT%\bin\copy_cygpath.exe" "%1"

That's a numeral "one" (1), not an "l" (letter L) -- that gives us
a SFN, not a LFN, no?

> or
> 
> ------
> REGEDIT4
> 
> [HKEY_CLASSES_ROOT\Directory\shell\CygPath]
> @="&Copy LFN Cygwin Path"
> 
> [HKEY_CLASSES_ROOT\Directory\shell\CygPathLFN\Command]
> @=hex(2):22,25,43,59,47,52,4f,4f,54,25,5c,62,69,6e,5c,63,6f,70,79,5f,63,79,67,70,61,74,68,2e,65,78,65,22,20,22,25,31,22,00
> ------

I have been using double backslashes! It worked fine in the previous,
bash-based script version. Let me try with single backslashes in the
path to copy_cygpath and see if THAT works. Growl. I had it working
beautifully the previous way, now all this fussing... ;-)

(More previous message reference:)
> This has the advantage of loading a single process, rather than bash,
> echo, and cygpath.  You also eliminate the silly console window that
> flashes open and then closes.
> 
> One might also want to change the C code to backslash escape spaces and
> other non-[\w\d] characters.  That way you could still work with the
> long filenames at the command prompt.  Alternatively you could have it
> paste the path as '/path/with a/space' (with the quotes.)
> 
> Brian

Soren A.

-- 
"So, tell me, my little one-eyed one, on what poor, pitiful,
defenseless planet has my MONSTROSITY been unleashed?"
                       - Dr. Jumba, Disney's "Lilo & Stitch"
OpenPGP Key at http://savannah.gnu.org/people/viewgpg.php?user_id=6050


--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019