Seit geraumer Zeit habe ich aus heiterem Himmel im Midnight Commander unter OSX (ich glaub auf anderen Platformen hab ich es auch schon gesehen) ein blödes Problem: navigiert man in ein Verzeichnis, in dem eine spezielle Datei liegt, spuckt der MC eine Warnung aus, welche den Bildschirmaufbau leicht zerstört, so dass man es mit CTRL+L wieder beheben muss.
Ausser der Warnung gibt es aber keine weiteren Probleme, wodurch dieser Bug in die Gruppe “tolerierbar, aber extrem nervig” fällt.
Nach einigem Googlen fand ich als Ursache ein Zusammenspiel zwischen MC und der Bash als wahrscheinlichste Lösung. Leider brachte das Updaten auf die aktuelle Bash 3.2.39 keine Linderung. Deswegen habe ich mich daran gemacht, ein statisches Binary vom MC aus dem CVS zu bauen1) - was nach einigen Anpassungen sogar klappte. Das Ergebnis ist hier:
Entpacken tut sich die Distribution in die Hierarchie /opt/mc - ich hätte auch /usr/local nehmen können, aber eventuell kollidiert es dort dann mit anderen Files; ausserdem ist ja /opt/mc/bin schnell der PATH Variable hinzugefügt.
UPDATE:
Da das eigentliche Problem ja noch nicht behhoben war, habe ich mich nochmal hingesetzt und eine Version des Midnight-Commanders übersetzt, welche den beschriebenen Bug nicht hat. Es handelt sich dabei um die Version vom Midnight-Commander, die auch in den FreeBSD Ports unter dem Namen mc-light vorhanden ist und welche man hier herunterladen kann.
Für OS X Leopard muss lediglich ein File gepatched werden:
diff -ruN mc-4.1.40-pre9/src/mountlist.c mc-4.1.40-pre9-rhoenie/src/mountlist.c --- mc-4.1.40-pre9/src/mountlist.c 2003-04-30 12:00:11.000000000 +0200 +++ mc-4.1.40-pre9-rhoenie/src/mountlist.c 2008-08-16 10:43:15.000000000 +0200 @@ -138,10 +138,14 @@ static char *fstype_to_string (short t) { switch (t) { +#ifdef MOUNT_UFS case MOUNT_UFS: return "ufs"; +#endif +#ifdef MOUNT_NFS case MOUNT_NFS: return "nfs"; +#endif #ifdef MOUNT_PC case MOUNT_PC: return "pc";
Unter OS X Tiger muss zusätzlich zu obigen Patch noch nach dem ./configure Lauf noch in der config.h das HAVE_GRANTPT auskommentiert werden.