In my previous post I posted a script useful for running kdiff3 for windows correctly from within cygwin. Here’s a more general version that can be used for any windows program. Save the following as ~/cygwinify.sh (or whatever you like):
#!/usr/bin/bash
RESULT=""
for arg
do
if [[ "" != "$arg" ]] && [[ -e $arg ]];
then
OUT=`cygpath -wa $arg`
else
if [[ $arg == -* ]];
then
OUT=$arg
else
OUT="'$arg'"
fi
fi
RESULT=$RESULT$OUT" "
done
echo "$RESULT"
The script tries to find any file or directory names in your command line arguments, and converts them to absolute, windows-style path names using cygpath -wa. You can then run something like:
explorer `~/cygwinify.sh /tmp`
And it will open Windows Explorer in the correct folder.
Also, the script to run kdiff3 becomes (just replace the path to the executable with your own):
#!/usr/bin/bash
"/cygdrive/d/Program Files (x86)/KDiff3/kdiff3.exe" `~/cygwinify.sh "$@"`
[…] Haskell, FRP, and other technicalities « Axioms for FRP: Discussing insensitivity How to run any windows program from cygwin, still using cygwin-style path » How to use kdiff3 as a difftool / mergetool with cygwin git March 22, […]
I use a similar script but I avoid the backticks by including the running of the command in the script, so it’s like this:
cygwinify.sh some/windows/prog.exe /home/whatever /tmp/foo
I think it’s easier to type this way. You do lose tab-completion of the exe name if you don’t type it first, although that might be fixable in bash somehow.
Great tip! Thanks !
I still just need to find a way to copy from GNU Emacs (and maybe mintty) to Windows apps without the mouse and I will be able to work in Windows when necessary, without waving my hands all day long!
Cheers,
Alexandre
[…] you to Noam Lewis for your helpful article, which I based most of this […]
I wrote a script to help fix some of the annoying issues with windows and cygwin (paths) interaction
makewin() {
eval “function $1 {
# Don’t taint locals
local FN
declare -a FN
local x
# For each option
for x in \”\${@}\”
do
# Fix the path to “windows”
FN[\”\${#FN[*]}\”]=\`cygpath -w \”\$x\”|sed ‘s/ /\\\\ /g’\`
done
# Run the Command
\”$2\” \”\${FN[@]}\” >/dev/null 2>/dev/null &
}”;
}
Then I run it for each command I want to fix
makewin vi /cygdrive/c/Program\ Files\ \(x86\)/Vim/vim74/gvim.exe
makewin np /cygdrive/c/Program\ Files\ \(x86\)/Notepad++/notepad++.exe
It creates a function alias to the command I want that fixes the parameter path issues. This is added to my ~/.bash_profile
I removed the blog formatting….
http://www.spandox.com/wp-content/uploads/2014/05/thescript.txt
The kdiff3 solution doesn’t seem to work unfortunately. The file paths in arguments have “(working copy)”, “(revision xxx)” appended to them which seem to break the cygwinify script. It does not convert the paths with those appendixes.