UNIXで動くDOS風ファイラー

Minnu's Filer2

これは良さげだ。TODOに「MacOSX対応」ってあるから動かないのかもしれないけど、一応試してみよう。

パッチ

diff -ru mfiler2-2.6.8b/Makefile.in mfiler2-2.6.8b.patched/Makefile.in
--- mfiler2-2.6.8b/Makefile.in  2007-03-14 16:17:43.000000000 +0900
+++ mfiler2-2.6.8b.patched/Makefile.in  2007-03-18 20:58:12.000000000 +0900
@@ -60,16 +60,16 @@
        $(CXX) -o mfiler2 $(CFLAGS) $(OBJ) $(ONIG) $(EXTRALIB) $(CURSES) $(MIGEMO) $(RUBYLIBPATH) $(RUBYLIBNAME)
 
 mattr: mattr.cpp
-       $(CXX) -o mattr mattr.cpp $(CFLAGS) $(CURSES)
+       $(CXX) -o mattr mattr.cpp $(CFLAGS) $(EXTRALIB) $(CURSES)
 
 mhitanykey: mhitanykey.c minato_lib/minato_lib.a
-       $(CC) -o mhitanykey mhitanykey.c minato_lib/minato_lib.a $(CFLAGS) $(CURSES)
+       $(CC) -o mhitanykey mhitanykey.c minato_lib/minato_lib.a $(CFLAGS) $(EXTRALIB) $(CURSES)
 
 mkeycode: mkeycode.cpp
-       $(CXX) -o mkeycode mkeycode.cpp  $(CFLAGS) $(CURSES)
+       $(CXX) -o mkeycode mkeycode.cpp  $(CFLAGS) $(EXTRALIB) $(CURSES)
 
 mattrcyg: mattrcyg.cpp
-       $(CXX) -o mattrcyg mattrcyg.cpp $(CFLAGS) $(EXTRALIB) $(CURSES) $(RUBYINCPATH) $(RUBYLIBPATH) $(RUBYLIBNAME)
+       $(CXX) -o mattrcyg mattrcyg.cpp $(CFLAGS) $(EXTRALIB) $(EXTRALIB) $(CURSES) $(RUBYINCPATH) $(RUBYLIBPATH) $(RUBY
LIBNAME)
 
 ################################################################################
 # ライブラリ
diff -ru mfiler2-2.6.8b/cmdline.cpp mfiler2-2.6.8b.patched/cmdline.cpp
--- mfiler2-2.6.8b/cmdline.cpp  2007-03-14 16:17:43.000000000 +0900
+++ mfiler2-2.6.8b.patched/cmdline.cpp  2007-03-18 20:47:12.000000000 +0900
@@ -24,12 +24,21 @@
 #include <stdlib.h>
 
 #ifdef __CYGWIN__
-#include <ncurses/term.h>
-#include <sys/time.h>
+# include <ncurses/term.h>
+# include <sys/time.h>
+
+typedef void (*SIGHANDLER_T)(int);
+#else /* !defined(__CYGWIN) */
+# include <term.h>
+
+# ifdef HAVE_SIGHANDLER_T
+#  define SIGHANDLER_T sighandler_t
+# elif HAVE_SIG_T
+#  define SIGHANDLER_T sig_t
+# elif HAVE___SIGHANDLER_T
+#  define SIGHANDLER_T __sighandler_t
+# endif
 
-typedef void (*sighandler_t)(int);
-#else
-#include <term.h>
 #endif
 }
 
@@ -717,19 +726,19 @@
 
     /// shell mode ///
     else  {
-        sighandler_t mfiler_int = signal(SIGINT, SIG_DFL);
-        sighandler_t mfiler_quit = signal(SIGQUIT, SIG_DFL);
-        sighandler_t mfiler_abrt = signal(SIGABRT, SIG_DFL);
-        sighandler_t mfiler_kill = signal(SIGKILL, SIG_DFL);
-        sighandler_t mfiler_pipe = signal(SIGPIPE, SIG_DFL);
-        sighandler_t mfiler_alrm = signal(SIGALRM, SIG_DFL);
-        sighandler_t mfiler_term = signal(SIGTERM, SIG_DFL);
-        sighandler_t mfiler_hup = signal(SIGHUP, SIG_DFL);
-        sighandler_t mfiler_stp = signal(SIGTSTP, SIG_DFL);
-        sighandler_t mfiler_ttou = signal(SIGTTOU, SIG_DFL);
-        sighandler_t mfiler_cont = signal(SIGCONT, SIG_DFL);
-        sighandler_t mfiler_winch = signal(SIGWINCH, SIG_DFL);
-        sighandler_t mfiler_child = signal(SIGCHLD, SIG_DFL);
+        SIGHANDLER_T mfiler_int = signal(SIGINT, SIG_DFL);
+        SIGHANDLER_T mfiler_quit = signal(SIGQUIT, SIG_DFL);
+        SIGHANDLER_T mfiler_abrt = signal(SIGABRT, SIG_DFL);
+        SIGHANDLER_T mfiler_kill = signal(SIGKILL, SIG_DFL);
+        SIGHANDLER_T mfiler_pipe = signal(SIGPIPE, SIG_DFL);
+        SIGHANDLER_T mfiler_alrm = signal(SIGALRM, SIG_DFL);
+        SIGHANDLER_T mfiler_term = signal(SIGTERM, SIG_DFL);
+        SIGHANDLER_T mfiler_hup = signal(SIGHUP, SIG_DFL);
+        SIGHANDLER_T mfiler_stp = signal(SIGTSTP, SIG_DFL);
+        SIGHANDLER_T mfiler_ttou = signal(SIGTTOU, SIG_DFL);
+        SIGHANDLER_T mfiler_cont = signal(SIGCONT, SIG_DFL);
+        SIGHANDLER_T mfiler_winch = signal(SIGWINCH, SIG_DFL);
+        SIGHANDLER_T mfiler_child = signal(SIGCHLD, SIG_DFL);
 
         if(!quick) {
             mendwin();
diff -ru mfiler2-2.6.8b/cmdline_completion.cpp mfiler2-2.6.8b.patched/cmdline_completion.cpp
--- mfiler2-2.6.8b/cmdline_completion.cpp       2007-03-14 21:15:53.000000000 +0900
+++ mfiler2-2.6.8b.patched/cmdline_completion.cpp       2007-03-18 20:54:42.000000000 +0900
@@ -22,6 +22,10 @@
 ////////////////////////////////////////////////////////////////////////////////
 void cmdline_init_after_reading_rc_file()
 {
+#if !HAVE_DECL_ENVIRON
+    extern char **environ;
+#endif
+
     cmdline_rehash();        
 
     gEnvirons = rb_ary_new();
diff -ru mfiler2-2.6.8b/config.h.in mfiler2-2.6.8b.patched/config.h.in
--- mfiler2-2.6.8b/config.h.in  2007-03-14 16:17:43.000000000 +0900
+++ mfiler2-2.6.8b.patched/config.h.in  2007-03-18 20:53:39.000000000 +0900
@@ -6,5 +6,11 @@
 #undef HAVE_MIGEMO
 #undef RUBYCOMPILE
 
+#undef HAVE_SIGHANDLER_T
+#undef HAVE_SIG_T
+#undef HAVE___SIGHANDLER_T
+
+#undef HAVE_DECL_ENVIRON
+
 #undef HAVE_ICONV_H
 
diff -ru mfiler2-2.6.8b/configure.in mfiler2-2.6.8b.patched/configure.in
--- mfiler2-2.6.8b/configure.in 2007-03-14 16:17:43.000000000 +0900
+++ mfiler2-2.6.8b.patched/configure.in 2007-03-18 20:57:35.000000000 +0900
@@ -24,6 +24,14 @@
     EXTRALIB="-lcrypt"
     
     TARGETS="mfiler2 mattr mkeycode mhitanykey mattrcyg"
+elif test `uname -s` = "Darwin"; then
+    echo "Darwin"
+
+    AC_DEFINE(__DARWIN__, 1)
+
+    EXTRALIB="-liconv"
+
+    TARGETS="mfiler2 mattr mkeycode mhitanykey"
 else
     echo "Linux"
 
@@ -38,6 +46,18 @@
 AC_SUBST(TARGETS)
 
 ################################################################################
+# signal
+################################################################################
+AC_CHECK_TYPES([sighandler_t, sig_t, __signalhandler_t], , ,
+    [#include <sys/types.h>
+     #include <signal.h> ])
+
+################################################################################
+# environ
+################################################################################
+AC_CHECK_DECL(environ)
+
+################################################################################
 # カーシス
 ################################################################################
 AC_MSG_CHECKING(HaveCurses)
@@ -86,7 +106,7 @@
 # ruby
 ################################################################################
 RUBYINCPATH=""
-RUBYLIBPATH="-L /usr/lib"
+RUBYLIBPATH="-L/usr/lib"
 RUBYLIBNAME=""
 
 AC_ARG_WITH(ruby-header-path, 
@@ -100,7 +120,7 @@
 AC_ARG_WITH(ruby-lib-path, 
        [  --with-ruby-lib-path=PATH specify librubyXX.so location (/usr/lib, /usr/local/lib,...,etc)], 
        [
-       RUBYLIBPATH="-L $withval"
+       RUBYLIBPATH="-L$withval"
        ])
        
 AC_SUBST(RUBYLIBPATH)
@@ -138,4 +158,3 @@
 then
     echo "#define HAVE_ICONV_H 1" >> config.h
 fi
-
diff -ru mfiler2-2.6.8b/extra.cpp mfiler2-2.6.8b.patched/extra.cpp
--- mfiler2-2.6.8b/extra.cpp    2007-03-15 17:29:39.000000000 +0900
+++ mfiler2-2.6.8b.patched/extra.cpp    2007-03-18 20:55:21.000000000 +0900
@@ -736,6 +736,10 @@
 ////////////////////////////////////////////////////////////////////////////////
 int msystem(char* line)
 {
+#if !HAVE_DECL_ENVIRON
+    extern char **environ;
+#endif
+
     int status, save;
     pid_t pid;
     struct sigaction sa, intr, quit;

ビルド

$ patch -p1 

結果

なんか動いてるっぽい。