A Total Commander gomb sorába (Button Bar) fel lehet venni egy szép gombocskát, amire bökve indítani tudja a Cygwin-t és arra a könyvtárra tud állni, ami a Total Commander-ben a jelenlegi path. Hogyan valósítható ez meg? Annyira azért nem triviális!
1. lépés: A Cygwin gomb felvétele:
Tegyük fel, hogy a cygwin a c:\cygwin alá van telepítve. Továbbá tegyük fel, hogy az rxvt csomagot is hozzáadtuk. Ekkor Total Commander-ben a Configuration menu -> Button Bar... -> Add után megadhatjuk a szükséges adatokat:
- Command: C:\cygwin\bin\rxvt.exe
- Parameters: -bg #000020 -fg #a0a000 -sl 5000 -geometry 80x43 -fn 9x15 -e /bin/bash -i -c "TC_SRCDIR='%P' TC_DSTDIR='%T' TC_SRCNAME='%O' TC_SRCEXT='%E' TC_DSTFILE='%M' /bin/bash -li"
Úgy tűnhetne, hogy a TC_SRCNAME és TC_SRCEXT helyett használni lehetne a TC_SRCFILE='%N' beállítást, hiszen a %N pont a forrás file nevét adja. Van vele egy kis gond! Az összes többivel ellentétben a %N macskakörmök közé teszi a file nevét, ha szóköz van benne! De csak akkor! Ez pedig összezavarja a paraméter átadást. Se a %M, se a %O, se a %E nem csinál ilyet! Így ezt a workaround-ot kell használni!
Ha a scroll bar-t inkább a jobb oldalra szeretnénk, akkor a paraméterek elejére adjuk hozzá egy "-sr"-t. Én jobban szeretem a bal oldalon, mert kevesebbet kell egerészni. - Icon File: C:\cygwin\Cygwin.ico (ínyencebbek választhatják a C:\cygwin\bin\rxvt.exe-t is)
- Tooltip: Cygwin
2. A cygwin-ben a user-ünk .bash_profile-jának végéhez ezt a kódot adhatjuk hozzá:
if [ -n "$TC_DSTDIR" ]; then
if [[ "$TC_DSTDIR" == \\* ]]; then
echo "Destination is a network share. Please map it before use!"
elif [[ "$TC_DSTDIR" == [0-9]:* ]]; then
echo "Destination is on an ftp server."
else
myifs="$IFS"
IFS=""
TC_DSTDIR=$(cygpath -u ${TC_DSTDIR})
IFS="$myifs"
fi
fi
if [ -n "$TC_SRCDIR" ]; then
if [[ "$TC_SRCDIR" == \\* ]]; then
echo "Source is a network share. Please map it before use!"
elif [[ "$TC_SRCDIR" == [0-9]:* ]]; then
echo "Source is on an ftp server. Can not change directory!"
else
myifs="$IFS"
IFS=""
TC_SRCDIR=$(cygpath -u ${TC_SRCDIR})
IFS="$myifs"
cd "$TC_SRCDIR"
fi
fi
TC_SRCFILE="$TC_SRCNAME"${TC_SRCEXT:+.$TC_SRCEXT}
A fenti beállítások eredményeként ha rányomunk a Total Commander-ben a Cygwin gombra, akkor elindítja a bash-t egy rxvt ablakban. Lesz pár beállított környezeti változónk, ami az alábbiakat tartalmazza:
- TC_SRCDIR - a forrás ablakban levő könyvtár unix formátumú nevét a lezáró '/'-sel
- TC_SRCNAME - a forrás ablakban levő éppen kijelölt file kiterjesztés nélküli nevét
- TC_SRCEXT - a forrás ablakban levő éppen kijelölt file kiterjesztését
- TC_SRCFILE - a forrás ablakban levő éppen kijelölt file nevét
- TC_DSTDIR - a cél ablakban levő könyvtár unix formátumú nevét a lezáró '/'-sel
- TC_DSTFILE - a cél ablakban levő éppen kijelölt file nevét
És a bash a forrás könyvtáron fog állni (feltéve, ha a .bash_profile-ban a fenti kódrészlet után nem hangzik el még egy 'cd' parancs). A környezeti változókat pedig prímán használhatjuk a később megírandó szkriptjeinkben.
Egy ismert probléma adódhat. Olyan könyvtárneveknél, ahol olyan hálózati drive-ra hivatkozunk, ami nincs hozzárendelve drive bötűhöz (pl. \\server\share), azt nem fogja tudni átkonvertálni unix-os path-szá és a .bash_profile üzenni fog nekünk, hogy problema van. Hasonlóan, ha egy ftp server-en vagyunk valamelyik ablakban, akkor azt sem fogja tudni cygwin path-szá alakítani és akkor üzenetet fogunk kapni a bash indulásakor. Ilyen esetben az átadott path így fog kinézni: 0:\directory.
Ha a TC_DSTFILE és/vagy a TC_SRCFILE üres, akkor az forrás és/vagy a cél ablakban a [..] könyvtáron állunk.
Az is megoldható, hogy ha több file van kijelölve, akkor ezek mindegyike átadódjon a bash-nak mind a forrás, mind a cél könyvtárakban. Lehet játszani a Total Commander %S, %P%S, %R, %L, %l, %F, %f, %D, %d, %WL, %WF, %UL, %UF változókkal. Ehhez jó szórakozást minden kedves érdeklődőnek!
Hívogassunk minden nap!
+jegyzések