Emacs + Cygwin, gunzip not found?

By Xah Lee. Date:

If you are on Windows and using Cygwin and emacs, there's a problem with gunzip.

Problem

When in dired, when you press Z on a gzipped file, emacs will give this error:

apply: Searching for program: no such file or directory, gunzip

Solution

The solution is to add a file at c:/cygwin/bin/gunzip.bat. The file content should be this:

@echo off 
gzip -d %1

Detail

Here is some detail about this problem i wrote in 2009.

From: Xah Lee
Date: Nov 4 2009, 9:32 am
Subject: gunzip problem on Windows
To: gnu.emacs.help, comp.emacs

when using emacs on Windows, when in dired, when i press Z on a file that's gzip compressed, emacs tells me:

'gunzip' is not recognized as an internal or external command

the problem is apparently that emacs won't recognize the gunzip shell script without the exe suffix. (the gunzip is in the same dir as gzip.exe) But if i rename gunzip to gunzip.exe, but Windows complain that the file is not a exe format.

How to solve this problem?

extra detail:

when i do (executable-find "gzip") emacs says "c:/cygwin/bin/gzip.exe"

and (executable-find "gunzip") says nil

the gunzip exists atc:/cygwin/bin/gunzip, which is a shell script.


From: Xah Lee
Date: Nov 5 2009, 12:34 pm
Subject: gunzip problem on Windows
To: gnu.emacs.help, comp.emacs

So far, i haven't been able to get this to work, after taking in all the suggestions in this thread.

Here is a more full report.

Suppose in dired you have a file named x.txt.gz, and you move your cursor to it, then press Z. Emacs will ask you “Compress or uncompress x.txt.gz? (y or n)”. Answer y should uncompress the file, as the expected behavior.

I have “gunzip” installed by Cygwin at “C:\cygwin\bin”. In emacs, when you do a “shell-command” then “which gunzip”, the output is “/usr/bin/gunzip”. This means, emacs can find the file.

The content of that file is:

#!/bin/sh
PATH=${GZIP_BINDIR-'/usr/bin'}:$PATH
exec gzip -d "$@"

Here is the problem. When i do Z, i get this error: “apply: Searching for program: no such file or directory, gunzip”.

This is odd and shouldn't happen, since the file is right there and emacs can find the file by “which gunzip”.

if i rename the file to gunzip.bat, then i do Z in dired on the file, i get this error:

c:\Users\xah\web\xahlee_org\emacs>#!/bin/sh
'#!' is not recognized as an internal or external command,
operable program or batch file.

c:\Users\xah\web\xahlee_org\emacs>PATH=${GZIP_BINDIR-'/usr/bin'}:
$PATH

c:\Users\xah\web\xahlee_org\emacs>exec gzip -d "$@"
'exec' is not recognized as an internal or external command,
operable program or batch file.
Failed to compressc:/Users/xah/web/xahlee_org/emacs/xxxx.txt.gz

So, apparently, emacs can find the program now, but for some mixed reasons of Windows cmd.exe and Cygwin bash and emacs, it seems to run it as win cmd.exe script and not bash. I suppose this is expected behavior.

if i rename the file to gunzip.sh, i get this error:

apply: Searching for program: no such file or directory, gunzip

the value of my exec-suffixes is (".exe" ".com" ".bat" ".cmd" ".btm" "") after changing it to (".exe" ".com" ".bat" ".cmd" ".btm" ".sh" "") still same error.

Renaming the file to gunzip.exe wont work because .exe files needs to be in certain format.

Note that also even if renaming to gunzip.bat or gunzip.sh worked for this emacs usage situation, that probably isn't a good solution because it will probably break Cygwin, since in unix shell it is expected to be just “gunzip” not “gunzip.bat” or “gunzip.sh”. So, if renaming can work for emacs, possibly i'll just create it else where and put it in a different path…

am i missing something?

does Z in dired on a compressed file work for anyone in Windows?


From: Xah Lee
Date: Nov 5 2009, 1:23 pm
Subject: gunzip problem on Windows
To: gnu.emacs.help, comp.emacs

Found a solution. Create a file name gunzip.bat, with this content:

@echo off
gzip -d %1

thanks to Eli and others.

I filed a bug report to FSF on this. #4867. I think this should still considered a bug though. Considering it as a Windows OS problem isn't very helpful in solving this. I'm sure if similar problems happens in linux that's OS issue, people probably will not look at it as “Oh, it's OS issue, emacs doesn't need to deal with it”.

The full thread is at Source groups.google.com .