zsh-users
 help / color / mirror / code / Atom feed
* Cygwin Zsh auto-cygpath?
@ 2009-02-07 20:53 Benjamin R. Haskell
  2009-02-09 16:15 ` Peter Stephenson
  2009-02-09 17:17 ` Nikolai Weibull
  0 siblings, 2 replies; 5+ messages in thread
From: Benjamin R. Haskell @ 2009-02-07 20:53 UTC (permalink / raw)
  To: Zsh Users

On Windows machines, I use Zsh under Cygwin. The more I use it, the more 
frequently I find myself using:

"$(cygpath -w /path/to/some/file)"

For those who don't use Cygwin, that "Windows-ifies" the path.

e.g.
$ pwd
/cygdrive/c/Documents and Settings/bhaskell/My Documents
$ cygpath -w $PWD
C:\Documents and Settings\bhaskell\My Documents

It's necessary to do that for most Windows-native commands, since they 
don't (and shouldn't) know about the '/cygdrive' prefix, and usually don't 
handle forward-slash'ed paths.

I was wondering if there was a simple way to have the _files completer 
output "$(cygpath -w /path/stuff)". Has anyone created something like 
that? Or could someone point me to where I'd want to insert that into the 
completion process?

(This is the first time I've seriously considered delving into 'man 
zshcompsys', but I unfortunately don't have that kind of time right 
now...) :-\

Best,
Ben


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

* Re: Cygwin Zsh auto-cygpath?
  2009-02-07 20:53 Cygwin Zsh auto-cygpath? Benjamin R. Haskell
@ 2009-02-09 16:15 ` Peter Stephenson
  2009-02-09 16:41   ` Benjamin R. Haskell
  2009-02-09 17:17 ` Nikolai Weibull
  1 sibling, 1 reply; 5+ messages in thread
From: Peter Stephenson @ 2009-02-09 16:15 UTC (permalink / raw)
  To: Zsh Users

"Benjamin R. Haskell" wrote:
> I was wondering if there was a simple way to have the _files completer 
> output "$(cygpath -w /path/stuff)".

Completely replacing the output of a completion functions may be doable
though is likely to be icky, but note that if you define a function

  cyg() {
    reply=("$(cygpath -w $REPLY)")
  }

in a recent version of the shell then you can put "(+cyg)" (minus
quotes, with parentheses---it's a glob qualifer) after any file name to
convert it.

-- 
Peter Stephenson <pws@csr.com>                  Software Engineer
CSR PLC, Churchill House, Cambridge Business Park, Cowley Road
Cambridge, CB4 0WZ, UK                          Tel: +44 (0)1223 692070


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

* Re: Cygwin Zsh auto-cygpath?
  2009-02-09 16:15 ` Peter Stephenson
@ 2009-02-09 16:41   ` Benjamin R. Haskell
  0 siblings, 0 replies; 5+ messages in thread
From: Benjamin R. Haskell @ 2009-02-09 16:41 UTC (permalink / raw)
  To: Zsh Users

On Mon, 9 Feb 2009, Peter Stephenson wrote:

> "Benjamin R. Haskell" wrote:
>> I was wondering if there was a simple way to have the _files completer
>> output "$(cygpath -w /path/stuff)".
>
> Completely replacing the output of a completion functions may be doable
> though is likely to be icky, but note that if you define a function
>
>  cyg() {
>    reply=("$(cygpath -w $REPLY)")
>  }
>
> in a recent version of the shell then you can put "(+cyg)" (minus 
> quotes, with parentheses---it's a glob qualifer) after any file name to 
> convert it.

Oooh. Very cool. I like that. And, it's probably what I'll stick with.

But as a followup, and not necessarily for only this situation...

How hard is it to extend csh-style modifiers -- to do, e.g. $param:+cyg ?

Thanks,
Ben


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

* Re: Cygwin Zsh auto-cygpath?
  2009-02-07 20:53 Cygwin Zsh auto-cygpath? Benjamin R. Haskell
  2009-02-09 16:15 ` Peter Stephenson
@ 2009-02-09 17:17 ` Nikolai Weibull
  2009-02-09 18:14   ` Cygwin Zsh auto-cygpath? (OT) Benjamin R. Haskell
  1 sibling, 1 reply; 5+ messages in thread
From: Nikolai Weibull @ 2009-02-09 17:17 UTC (permalink / raw)
  To: Benjamin R. Haskell; +Cc: Zsh Users

On Sat, Feb 7, 2009 at 21:53, Benjamin R. Haskell <zsh@benizi.com> wrote:

  ... most Windows-native commands, ... usually don't handle
  forward-slash'ed paths.

If they don't then they are actually broken, as a forward slash is
defined to be a path separator on Windows systems.  Of course, few
realize that, and it seems few of those that do bother to handle it.
There's more information at
http://blogs.msdn.com/larryosterman/archive/2005/06/24/432386.aspx


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

* Re: Cygwin Zsh auto-cygpath? (OT)
  2009-02-09 17:17 ` Nikolai Weibull
@ 2009-02-09 18:14   ` Benjamin R. Haskell
  0 siblings, 0 replies; 5+ messages in thread
From: Benjamin R. Haskell @ 2009-02-09 18:14 UTC (permalink / raw)
  To: Zsh Users

On Mon, 9 Feb 2009, Nikolai Weibull wrote:

> On Sat, Feb 7, 2009 at 21:53, Benjamin R. Haskell <zsh@benizi.com> wrote:
>
>  ... most Windows-native commands, ... usually don't handle
>  forward-slash'ed paths.
>
> If they don't then they are actually broken, as a forward slash is 
> defined to be a path separator on Windows systems.  Of course, few 
> realize that, and it seems few of those that do bother to handle it.

Huh, neat.  I didn't realize (until tangentially looking it up on 
Wikipedia[1]) that NTFS accommodates POSIX filenames (only the null 
character and '/' are always forbidden in NTFS filenames.)  In "Win32" 
mode, it still excludes '\' (the path separator) plus the forbidden seven: 
/:*?"<>


An article from the MSDN Library[2] (which is an interesting read if you 
have to deal with Windows) seems to corroborate your "If they don't then 
they are actually broken":

"""
File I/O functions in the Windows API convert "/" to "\" as part of 
converting the name to an NT-style name, except when using the "\\?\" 
prefix as detailed in the following sections.
"""

Which, I suppose, makes "cmd" broken.  (In more ways than it already 
seemed.)  As a quick test, out of 'dir', 'copy', 'move', 'type', and 'cd', 
only 'cd' accepts forward slashes[3].  Windows PowerShell handles them 
all.


> There's more information at 
> http://blogs.msdn.com/larryosterman/archive/2005/06/24/432386.aspx

Thanks for the history (especially after following some of the 
hyperlinks).

Best,
Ben



[1] http://en.wikipedia.org/wiki/NTFS

[2] "Naming a File or Directory (Windows)" 
http://msdn.microsoft.com/en-us/library/aa365247.aspx

[3] ==== output from   Start > Run > cmd ====

C:\>dir WINDOWS\system\test.txt
  Volume in drive C has no label.
  Volume Serial Number is ECD7-AF25

  Directory of C:\WINDOWS\system

2009/02/09  12:32                16 test.txt
                1 File(s)             16 bytes
                0 Dir(s)  118,255,886,336 bytes free

C:\>dir WINDOWS/system/test.txt
Parameter format not correct - "system".

C:\>copy WINDOWS/system/test.txt .
The syntax of the command is incorrect.

C:\>move WINDOWS/system/test.txt .
The system cannot find the path specified.

C:\>type WINDOWS/system/test.txt
The syntax of the command is incorrect.

C:\>type WINDOWS\system\test.txt
this is test.txt
C:\>cd WINDOWS/system

C:\WINDOWS\system>


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

end of thread, other threads:[~2009-02-09 18:15 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-02-07 20:53 Cygwin Zsh auto-cygpath? Benjamin R. Haskell
2009-02-09 16:15 ` Peter Stephenson
2009-02-09 16:41   ` Benjamin R. Haskell
2009-02-09 17:17 ` Nikolai Weibull
2009-02-09 18:14   ` Cygwin Zsh auto-cygpath? (OT) Benjamin R. Haskell

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

	https://git.vuxu.org/mirror/zsh/

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 NNTP newsgroup(s).