Index: commands.c
===================================================================
--- commands.c	(revision efeec7f945a0024cc21af30c2e6c2110bb5d3c6b)
+++ commands.c	(revision 83e023e9db86cd6fb930db4e4594001ffb565613)
@@ -2165,6 +2165,7 @@
       myargv[i]=argv[i];
     }
-    owl_function_create_filter(argc, myargv);
-    owl_function_change_currentview_filter("owl-dynamic");
+    if (owl_function_create_filter(argc, myargv)) {
+      owl_function_change_currentview_filter("owl-dynamic");
+    }
     g_free(myargv);
     return NULL;
Index: functions.c
===================================================================
--- functions.c	(revision 4ebbfbc5360fa004637dd101f5a0c833cdccd60a)
+++ functions.c	(revision 4ebbfbc5360fa004637dd101f5a0c833cdccd60a)
@@ -2132,7 +2132,7 @@
 
 /* Create a new filter, or replace an existing one
- * with a new definition.
+ * with a new definition. Returns true on success.
  */
-void owl_function_create_filter(int argc, const char *const *argv)
+bool owl_function_create_filter(int argc, const char *const *argv)
 {
   owl_filter *f;
@@ -2142,5 +2142,5 @@
   if (argc < 2) {
     owl_function_error("Wrong number of arguments to filter command");
-    return;
+    return false;
   }
 
@@ -2152,5 +2152,5 @@
   if (!strcmp(argv[1], "all")) {
     owl_function_error("You may not change the 'all' filter.");
-    return;
+    return false;
   }
 
@@ -2160,13 +2160,13 @@
     if (!f) {
       owl_function_error("The filter '%s' does not exist.", argv[1]);
-      return;
+      return false;
     }
     if (owl_util_string_to_color(argv[3])==OWL_COLOR_INVALID) {
       owl_function_error("The color '%s' is not available.", argv[3]);
-      return;
+      return false;
     }
     owl_filter_set_fgcolor(f, owl_util_string_to_color(argv[3]));
     owl_mainwin_redisplay(owl_global_get_mainwin(&g));
-    return;
+    return false;
   }
   if (argc==4 && !strcmp(argv[2], "-b")) {
@@ -2174,13 +2174,13 @@
     if (!f) {
       owl_function_error("The filter '%s' does not exist.", argv[1]);
-      return;
+      return false;
     }
     if (owl_util_string_to_color(argv[3])==OWL_COLOR_INVALID) {
       owl_function_error("The color '%s' is not available.", argv[3]);
-      return;
+      return false;
     }
     owl_filter_set_bgcolor(f, owl_util_string_to_color(argv[3]));
     owl_mainwin_redisplay(owl_global_get_mainwin(&g));
-    return;
+    return true;
   }
 
@@ -2189,5 +2189,5 @@
   if (f == NULL) {
     owl_function_error("Invalid filter");
-    return;
+    return false;
   }
 
@@ -2210,4 +2210,5 @@
   }
   owl_mainwin_redisplay(owl_global_get_mainwin(&g));
+  return true;
 }
 
Index: owl.h
===================================================================
--- owl.h	(revision 67e5ba36abe583efd14108ede63b5f5f26887257)
+++ owl.h	(revision c40d11a3d527920acd6063b93f1de30d1f668c96)
@@ -75,5 +75,4 @@
 
 #define OWL_CONFIG_DIR "/.owl"             /* this is relative to the user's home directory */
-#define OWL_STARTUP_FILE "/.owl/startup"   /* this is relative to the user's home directory */
 
 #define OWL_FMTEXT_ATTR_NONE      0
@@ -206,6 +205,4 @@
 #define OWL_META(key) ((key)|010000)
 /* OWL_CTRL is definied in kepress.c */
-
-#define LINE 2048
 
 #ifdef HAVE_LIBZEPHYR
Index: regex.c
===================================================================
--- regex.c	(revision d427f08508a96769e6a7fd429711b6349caf5b57)
+++ regex.c	(revision c40d11a3d527920acd6063b93f1de30d1f668c96)
@@ -11,5 +11,6 @@
 {
   int ret;
-  char buff1[LINE];
+  size_t errbuf_size;
+  char *errbuf;
   const char *ptr;
   
@@ -26,6 +27,9 @@
   ret=regcomp(&(re->re), ptr, REG_EXTENDED|REG_ICASE);
   if (ret) {
-    regerror(ret, NULL, buff1, LINE);
-    owl_function_makemsg("Error in regular expression: %s", buff1);
+    errbuf_size = regerror(ret, NULL, NULL, 0);
+    errbuf = g_new(char, errbuf_size);
+    regerror(ret, NULL, errbuf, errbuf_size);
+    owl_function_error("Error in regular expression: %s", errbuf);
+    g_free(errbuf);
     g_free(re->string);
     re->string=NULL;
