diff -urB gmrun-0.7/src/ci_string.h gmrun-patch/src/ci_string.h
--- gmrun-0.7/src/ci_string.h	Wed May 16 18:39:31 2001
+++ gmrun-patch/src/ci_string.h	Tue Oct 23 18:35:16 2001
@@ -9,7 +9,7 @@
 #include <string>
 #include <ctype.h>
 
-struct ci_char_traits : public std::char_traits<char>
+struct ci_char_traits : public std::string_char_traits<char>
 {
   static bool eq( char c1, char c2 ) {
     return ::tolower(c1) == ::tolower(c2);
diff -urB gmrun-0.7/src/gtkcompletionline.cc gmrun-patch/src/gtkcompletionline.cc
--- gmrun-0.7/src/gtkcompletionline.cc	Fri Oct 19 13:19:35 2001
+++ gmrun-patch/src/gtkcompletionline.cc	Wed Oct 24 23:19:00 2001
@@ -61,6 +61,7 @@
 static StrSet execs;
 static StrSet dirlist;
 static string prefix;
+static string sempty = "";
 
 /* callbacks */
 static void gtk_completion_line_class_init(GtkCompletionLineClass *klass);
@@ -319,6 +320,7 @@
 generate_execs()
 {
   execs.clear();
+//  execs.empty ();
 
   for (StrSet::iterator i = path.begin(); i != path.end(); i++) {
     struct dirent **eps;
@@ -845,202 +847,240 @@
 
   switch (event->type) {
 
-   case GDK_KEY_PRESS:
+    case GDK_KEY_PRESS:
 
 
-    switch (event->keyval) {
+      switch (event->keyval) {
 
-     case GDK_Tab:
-      if (MODE_SRC) {
-        search_off(cl);
-      }
-      complete_line(cl);
-      STOP_PRESS;
-      return TRUE;
-
-     case GDK_Up:
-      if (cl->win_compl != NULL) {
-        int &item = cl->list_compl_items_where;
-        item--;
-        if (item < 0) {
-          item = 0;
-        } else {
-          complete_from_list(cl);
-        }
-      } else {
-        up_history(cl);
-      }
-      if (MODE_SRC) {
-        search_off(cl);
-      }
-      STOP_PRESS;
-      return TRUE;
-
-     case GDK_space:
-     {
-       bool search = MODE_SRC;
-       if (search) {
-         search_off(cl);
-       }
-       if (cl->win_compl != NULL) {
-         gtk_widget_destroy(cl->win_compl);
-         cl->win_compl = NULL;
-         if (!search) {
-           int pos = gtk_editable_get_position(GTK_EDITABLE(cl));
-           gtk_entry_select_region(GTK_ENTRY(cl), pos, pos);
-         }
-       }
-     }
-     return TRUE;
-
-     case GDK_Down:
-      if (cl->win_compl != NULL) {
-        int &item = cl->list_compl_items_where;
-        item++;
-        if (item >= cl->list_compl_nr_rows) {
-          item = cl->list_compl_nr_rows - 1;
-        } else {
-          complete_from_list(cl);
-        }
-      } else {
-        down_history(cl);
-      }
-      if (MODE_SRC) {
-        search_off(cl);
-      }
-      STOP_PRESS;
-      return TRUE;
+        case GDK_Tab:
+          if (MODE_SRC) {
+            search_off(cl);
+          }
+          complete_line(cl);
+          STOP_PRESS;
+          return TRUE;
 
-     case GDK_Return:
-      if (cl->win_compl != NULL) {
-        gtk_widget_destroy(cl->win_compl);
-        cl->win_compl = NULL;
-      }
-      if (event->state & GDK_CONTROL_MASK) {
-        gtk_signal_emit_by_name(GTK_OBJECT(cl), "runwithterm");
-      } else {
-        gtk_signal_emit_by_name(GTK_OBJECT(cl), "activate");
-      }
-      STOP_PRESS;
-      return TRUE;
+        case GDK_Up:
+          if (cl->win_compl != NULL) {
+            int &item = cl->list_compl_items_where;
+            item--;
+            if (item < 0) {
+              item = 0;
+            } else {
+              complete_from_list(cl);
+            }
+          } else {
+            up_history(cl);
+          }
+          if (MODE_SRC) {
+            search_off(cl);
+          }
+          STOP_PRESS;
+          return TRUE;
 
-     case GDK_exclam:
-      if (!MODE_BEG) {
-        const char *tmp = gtk_entry_get_text(GTK_ENTRY(cl));
-        if (*tmp != '\0') {
-          goto ordinary;
-        }
-        cl->hist_search_mode = GCL_SEARCH_BEG;
-        cl->hist_word->clear();
-        gtk_signal_emit_by_name(GTK_OBJECT(cl), "search_mode");
-        STOP_PRESS;
-        return true;
-      } else goto ordinary;
-
-     case GDK_R:
-     case GDK_r:
-      if (event->state & GDK_CONTROL_MASK) {
-        if (MODE_SRC) {
-          search_back_history(cl, true, MODE_BEG);
-        } else {
-          cl->hist_search_mode = GCL_SEARCH_REW;
-          cl->hist_word->clear();
-          cl->hist->reset_position();
-          gtk_signal_emit_by_name(GTK_OBJECT(cl), "search_mode");
+        case GDK_space:
+        {
+          bool search = MODE_SRC;
+          if (search) {
+            search_off(cl);
+          }
+          if (cl->win_compl != NULL) {
+            gtk_widget_destroy(cl->win_compl);
+            cl->win_compl = NULL;
+            if (!search) {
+              int pos = gtk_editable_get_position(GTK_EDITABLE(cl));
+              gtk_entry_select_region(GTK_ENTRY(cl), pos, pos);
+            }
+          }
         }
-        STOP_PRESS;
         return TRUE;
-      } else goto ordinary;
 
-     case GDK_S:
-     case GDK_s:
-      if (event->state & GDK_CONTROL_MASK) {
-        if (MODE_SRC) {
-          search_forward_history(cl, true, MODE_BEG);
-        } else {
-          cl->hist_search_mode = GCL_SEARCH_FWD;
-          cl->hist_word->clear();
-          cl->hist->reset_position();
-          gtk_signal_emit_by_name(GTK_OBJECT(cl), "search_mode");
-        }
-        STOP_PRESS;
-        return TRUE;
-      } else goto ordinary;
+        case GDK_Down:
+          if (cl->win_compl != NULL) {
+            int &item = cl->list_compl_items_where;
+            item++;
+            if (item >= cl->list_compl_nr_rows) {
+              item = cl->list_compl_nr_rows - 1;
+            } else {
+              complete_from_list(cl);
+            }
+          } else {
+            down_history(cl);
+          }
+          if (MODE_SRC) {
+            search_off(cl);
+          }
+          STOP_PRESS;
+          return TRUE;
 
-     case GDK_BackSpace:
-      if (MODE_SRC) {
-        if (!cl->hist_word->empty()) {
-          cl->hist_word->erase(cl->hist_word->length() - 1);
-          gtk_signal_emit_by_name(GTK_OBJECT(cl), "search_letter");
-        }
-        STOP_PRESS;
-        return TRUE;
-      }
-      return FALSE;
+        case GDK_Return:
+          if (cl->win_compl != NULL) {
+            gtk_widget_destroy(cl->win_compl);
+            cl->win_compl = NULL;
+          }
+          if (event->state & GDK_CONTROL_MASK) {
+            gtk_signal_emit_by_name(GTK_OBJECT(cl), "runwithterm");
+          } else {
+            gtk_signal_emit_by_name(GTK_OBJECT(cl), "activate");
+          }
+          STOP_PRESS;
+          return TRUE;
 
-     case GDK_Escape:
-     case GDK_End:
-     {
-       int pos = gtk_editable_get_position(GTK_EDITABLE(cl));
-       gtk_entry_select_region(GTK_ENTRY(cl), pos, pos);
-       if (cl->win_compl != NULL) {
-         gtk_widget_destroy(cl->win_compl);
-         cl->win_compl = NULL;
-         STOP_PRESS;
-         return TRUE;
-       }
-       if (MODE_SRC) {
-         search_off(cl);
-         STOP_PRESS;
-         return TRUE;
-       }
-       return FALSE;
-     }
-
-     case GDK_G:
-     case GDK_g:
-     case GDK_A:
-     case GDK_a:
-     case GDK_E:
-     case GDK_e:
-      if ((event->state & GDK_CONTROL_MASK) && MODE_SRC) {
-        search_off(cl);
-        return FALSE;
-      } else goto ordinary;
-
-     case GDK_Control_R:
-     case GDK_Control_L:
-     case GDK_Shift_R:
-     case GDK_Shift_L:
-     case GDK_Alt_R:
-     case GDK_Alt_L:
-      break;
+        case GDK_exclam:
+          if (!MODE_BEG) {
+            const char *tmp = gtk_entry_get_text(GTK_ENTRY(cl));
+            if (*tmp != '\0') {
+              goto ordinary;
+            }
+            cl->hist_search_mode = GCL_SEARCH_BEG;
+            cl->hist_word->erase ();
+//        cl->hist_word->clear();
+            gtk_signal_emit_by_name(GTK_OBJECT(cl), "search_mode");
+            STOP_PRESS;
+            return true;
+          } else goto ordinary;
+
+        case GDK_R:
+        case GDK_r:
+          if (event->state & GDK_CONTROL_MASK) {
+            if (MODE_SRC) {
+              search_back_history(cl, true, MODE_BEG);
+            } else {
+              cl->hist_search_mode = GCL_SEARCH_REW;
+              cl->hist_word->erase();
+//          cl->hist_word->clear();
+              cl->hist->reset_position();
+              gtk_signal_emit_by_name(GTK_OBJECT(cl), "search_mode");
+            }
+            STOP_PRESS;
+            return TRUE;
+          } else goto ordinary;
+
+        case GDK_S:
+        case GDK_s:
+          if (event->state & GDK_CONTROL_MASK) {
+            if (MODE_SRC) {
+              search_forward_history(cl, true, MODE_BEG);
+            } else {
+              cl->hist_search_mode = GCL_SEARCH_FWD;
+              cl->hist_word->erase ();
+//          cl->hist_word->clear();
+              cl->hist->reset_position();
+              gtk_signal_emit_by_name(GTK_OBJECT(cl), "search_mode");
+            }
+            STOP_PRESS;
+            return TRUE;
+          } else goto ordinary;
+
+        case GDK_BackSpace:
+          if (MODE_SRC) {
+            if (!cl->hist_word->empty()) {
+              cl->hist_word->erase(cl->hist_word->length() - 1);
+              gtk_signal_emit_by_name(GTK_OBJECT(cl), "search_letter");
+            }
+            STOP_PRESS;
+            return TRUE;
+          }
+          return FALSE;
 
-     ordinary:
-     default:
-      if (cl->win_compl != NULL) {
-        gtk_widget_destroy(cl->win_compl);
-        cl->win_compl = NULL;
-      }
-      cl->where = NULL;
-      if (MODE_SRC) {
-        if (event->length > 0) {
-          *cl->hist_word += event->string;
-          if (search_history(cl, false, MODE_BEG) <= 0) {
-            cl->hist_word->erase(cl->hist_word->length() - 1);
+        case GDK_Prior:
+          if (cl->win_compl != NULL) {
+            int &item = cl->list_compl_items_where;
+            item-=10;
+            if (item < 0) {
+              item = 0;
+            }
+            complete_from_list(cl);
+          } else {
+            up_history(cl);
+          }
+          if (MODE_SRC) {
+            search_off(cl);
           }
           STOP_PRESS;
           return TRUE;
-        } else {
-          search_off(cl);
+      
+        case GDK_Next:
+          if (cl->win_compl != NULL) {
+            int &item = cl->list_compl_items_where;
+            item+=10;
+            if (item >= cl->list_compl_nr_rows) {
+              item = cl->list_compl_nr_rows - 1;
+            } 
+            complete_from_list(cl);
+          } else {
+            up_history(cl);
+          }
+          if (MODE_SRC) {
+            search_off(cl);
+          }
+          STOP_PRESS;
+          return TRUE;
+
+
+        case GDK_Escape:
+        case GDK_End:
+        {
+          int pos = gtk_editable_get_position(GTK_EDITABLE(cl));
+          gtk_entry_select_region(GTK_ENTRY(cl), pos, pos);
+          if (cl->win_compl != NULL) {
+            gtk_widget_destroy(cl->win_compl);
+            cl->win_compl = NULL;
+            STOP_PRESS;
+            return TRUE;
+          }
+          if (MODE_SRC) {
+            search_off(cl);
+            STOP_PRESS;
+            return TRUE;
+          }
+          return FALSE;
         }
+
+        case GDK_G:
+        case GDK_g:
+        case GDK_A:
+        case GDK_a:
+        case GDK_E:
+        case GDK_e:
+          if ((event->state & GDK_CONTROL_MASK) && MODE_SRC) {
+            search_off(cl);
+            return FALSE;
+          } else goto ordinary;
+
+        case GDK_Control_R:
+        case GDK_Control_L:
+        case GDK_Shift_R:
+        case GDK_Shift_L:
+        case GDK_Alt_R:
+        case GDK_Alt_L:
+          break;
+
+      ordinary:
+        default:
+          if (cl->win_compl != NULL) {
+            gtk_widget_destroy(cl->win_compl);
+            cl->win_compl = NULL;
+          }
+          cl->where = NULL;
+          if (MODE_SRC) {
+            if (event->length > 0) {
+              *cl->hist_word += event->string;
+              if (search_history(cl, false, MODE_BEG) <= 0) {
+                cl->hist_word->erase(cl->hist_word->length() - 1);
+              }
+              STOP_PRESS;
+              return TRUE;
+            } else {
+              search_off(cl);
+            }
+          }
+          break;
       }
       break;
-    }
-    break;
 
-   default:
-    break;
+    default:
+      break;
   }
   return FALSE;
 
diff -urB gmrun-0.7/src/main.cc gmrun-patch/src/main.cc
--- gmrun-0.7/src/main.cc	Fri Oct 19 12:59:40 2001
+++ gmrun-patch/src/main.cc	Wed Oct 24 18:54:36 2001
@@ -86,6 +86,7 @@
 static void
 run_the_command(const std::string& command, struct gigi* g)
 {
+#if 0
   string prog;
   std::vector<char*> argv;
 
@@ -147,7 +148,8 @@
         char *p = (char*)malloc(tmp.length() + 1);
         memcpy(p, tmp.c_str(), tmp.length() + 1);
         argv.push_back(p);
-        tmp.clear();
+        tmp = "";
+//        tmp.clear();
       }
       break;
 
@@ -166,23 +168,46 @@
   argv.push_back(NULL);
 
 #ifdef DEBUG
+  string s;
   for (vector<char*>::iterator i = argv.begin(); i != argv.end(); ++i) {
     if (*i) {
       cerr << "'" << *i << "'" << endl;
+      s = s + *i;
     }
   }
 #endif
-
+  s = s + " &";
+#if 0
   execvp(prog.c_str(), (char**)&(*argv.begin()));
+#else
+  system(s.c_str());
+#endif
   string error("ERROR: ");
   error += strerror(errno);
 #ifdef DEBUG
   cerr << error << endl;
 #endif
+#endif
 
+  int ret = system ((command + " &").c_str());
+  if (-1 == ret)
+  {
+    string error("ERROR: ");
+    error += strerror(errno);
+    gtk_label_set_text(GTK_LABEL(g->w1), error.c_str());
+    gtk_widget_set_style(g->w1, style_notfound(g->w1));
+    gtk_timeout_add(2000, GtkFunction(search_off_timeout), g);
+  } else {
+#ifdef DEBUG    
+    cerr << "ret: " << ret << " " << errno << endl;
+#endif
+    exit(0);
+  }
+#if 0
   gtk_label_set_text(GTK_LABEL(g->w1), error.c_str());
   gtk_widget_set_style(g->w1, style_notfound(g->w1));
   gtk_timeout_add(2000, GtkFunction(search_off_timeout), g);
+#endif
 }
 
 static void
@@ -382,11 +407,11 @@
 
   win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
   gtk_widget_realize(win);
-  gdk_window_set_decorations(win->window, GDK_DECOR_BORDER);
+//  gdk_window_set_decorations(win->window, GDK_DECOR_BORDER);
   gtk_widget_set_name(win, "Msh_Run_Window");
   gtk_window_set_title(GTK_WINDOW(win), "Execute program feat. completion");
   gtk_window_set_policy(GTK_WINDOW(win), FALSE, FALSE, TRUE);
-  // gtk_window_set_position(GTK_WINDOW(win), GTK_WIN_POS_CENTER);
+  gtk_window_set_position(GTK_WINDOW(win), GTK_WIN_POS_CENTER);
   gtk_container_set_border_width(GTK_CONTAINER(win), 4);
   gtk_signal_connect(GTK_OBJECT(win), "destroy",
                      GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
@@ -404,7 +429,7 @@
   gtk_misc_set_alignment(GTK_MISC(label), 0.0, 1.0);
   gtk_misc_set_padding(GTK_MISC(label), 10, 0);
   gtk_box_pack_start(GTK_BOX(hhbox), label, FALSE, FALSE, 0);
-
+  
   label_search = gtk_label_new("");
   gtk_widget_show(label_search);
   gtk_misc_set_alignment(GTK_MISC(label_search), 1.0, 0.5);
diff -urB gmrun-0.7/src/prefs.cc gmrun-patch/src/prefs.cc
--- gmrun-0.7/src/prefs.cc	Fri Oct 19 12:59:40 2001
+++ gmrun-patch/src/prefs.cc	Tue Oct 23 18:37:54 2001
@@ -13,7 +13,7 @@
 #include <fstream>
 #include <iostream>
 #include <stdio.h>
-
+#include <ctype.h>
 #include <list>
 
 #define GMRUNRC "gmrunrc"
@@ -129,10 +129,10 @@
   if (get_string(key, sval)) {
     const char *q, *p = sval.c_str();
     for (q = sval.c_str(); *q; ++q) {
-      if (::isspace(*q)) {
+      if (isspace(*q)) {
         string s(p, q - p);
         val.push_back(s);
-        while (*q && ::isspace(*q)) ++q;
+        while (*q && isspace(*q)) ++q;
         p = q;
       }
     }

