File association in wine

Open forum for end-user questions about Wine. Before asking questions, check out the Wiki as a first step.
Forum Rules
Locked
occhigrigi
Level 2
Level 2
Posts: 24
Joined: Wed Oct 22, 2008 5:01 am

File association in wine

Post by occhigrigi »

Hello everybody, i've made a little script that associates every extension known by linux in wine, unless the extension isn't already associated to some other program. So you can doubleclick on a file from winefile and have it opened with the corresponding linux application.
It's a quick and dirty script that generates a .reg file, it isn't freedesktop compliant, i am a KDE and only KDE user :wink:

The script reads the global mime database located at /usr/share/mime/globs, merges it with the user database located at /usr/share/mime/globs then generate an extension.reg file.
Every extension is associated to a "kdestart.exe" script that you can put somewhere in the PATH and customize as you like (and maybe make it freedesktop.org compliant :wink: )

Here's the script (copy and paste in a file, make it executable and run it)

WINEPREFIX=${WINEPREFIX:-$HOME/.wine}
FILEOUT=extension.reg
echo REGEDIT4 > $FILEOUT
echo >> $FILEOUT
for ext in `cat $HOME/.local/share/mime/globs /usr/share/mime/globs | grep "*."|cut -f 2 -d :|sort --unique -f | cut -f 2 -d "*"`; do
ext2=`echo $ext|cut -f 2- -d .`
esiste=`grep -i '\\[Software\\\\\\\\Classes\\\\\\\\'$ext'\\]' $WINEPREFIX/system.reg | wc -l`
if [ $esiste == "0" -a $ext != $ext2 ] ; then
echo Aggiungo estensione $ext $ext2
echo "[HKEY_CLASSES_ROOT\\"$ext"]" >> $FILEOUT
echo @=\"$ext2.document\" >> $FILEOUT
echo "[HKEY_CLASSES_ROOT\\"$ext2".document]" >> $FILEOUT
echo @=\"$ext2.document\" >> $FILEOUT
echo "[HKEY_CLASSES_ROOT\\"$ext2".document\\shell]" >> $FILEOUT
echo "[HKEY_CLASSES_ROOT\\"$ext2".document\\shell\\open]" >> $FILEOUT
echo "[HKEY_CLASSES_ROOT\\"$ext2".document\\shell\\open\\command]" >> $FILEOUT
echo @=\"C:\\\\windows\\\\command\\\\start.exe kdestart.exe \\\"%1\\\" >> $FILEOUT
echo >> $FILEOUT
fi
done


Once run, merge the resulting file to the registry (regedit extension.reg)

And here's the kdestart.exe script, put it where it can be found ($HOME/bin or /usr/local/bin) and make it executable

#!/bin/bash
echo $@ >> $HOME/kdestart.log
i=`winepath -u "$@"`
echo $@ $i >> $HOME/kdestart.log
kfmclient exec "$i"
#------------------------------------------------------------------

The last line, i.e. the command used to launch ISN'T freedesktop compliant and can be executed only under KDE.

Hope this can be useful to someone.
Locked