]> git.deb.at Git - pkg/abook.git/blobdiff - abook.c
Fix launch functions to preserve curses settings
[pkg/abook.git] / abook.c
diff --git a/abook.c b/abook.c
index e01eb427b4a399e78dda5f616191ae5b8a310240..b79fcae0b2fad72537bcb29bd681f7f0dd9bdfdd 100644 (file)
--- a/abook.c
+++ b/abook.c
@@ -204,7 +204,6 @@ show_usage()
 }
 
 extern list_item *database;
-extern int items;
 
 static void
 muttq_print_item(int item)
@@ -274,43 +273,60 @@ quit_mutt_query(int status)
 }
 
 
+static char *
+make_mailstr(int item)
+{
+       char email[MAX_EMAIL_LEN];
+       char *ret;
+       char *name = mkstr("\"%s\"", database[item][NAME]);
+
+       get_first_email(email, item);
+
+       ret = *database[item][EMAIL] ?
+               mkstr("%s <%s>", name, email) :
+               strdup(name);
+
+       free(name);
+       
+       return ret;
+}
+
 void
 launch_mutt(int item)
 {
-       int i;
-       char email[MAX_EMAIL_LEN];
-       char *cmd;
-       char *tmp = options_get_str("mutt_command");
+       char *cmd = NULL, *mailstr = NULL;
+       char *mutt_command = options_get_str("mutt_command");
 
-       if( !is_valid_item(item) )
+       if(mutt_command == NULL || !*mutt_command)
                return;
 
-       cmd = strconcat(tmp, " '", NULL );
-
-       for(i=0; i < items; i++) {
-               if( ! is_selected(i) && i != list_current_item() )
-                       continue;
-               get_first_email(email, i);
-               tmp = mkstr("%s \"%s\"", cmd, database[i][NAME]);
-               my_free(cmd);
-               if( *database[i][EMAIL] ) {
-                       cmd = mkstr("%s <%s>", tmp, email);
+       if( is_valid_item(item) )
+               mailstr = make_mailstr(item);
+       else {
+               struct db_enumerator e = init_db_enumerator(ENUM_SELECTED);
+               char *tmp = NULL;
+               db_enumerate_items(e) {
+                       tmp = mailstr;
+                       mailstr = tmp ?
+                               strconcat(tmp, ",", make_mailstr(e.item), NULL):
+                               strconcat(make_mailstr(e.item), NULL);
                        free(tmp);
-                       tmp = cmd;
                }
-               cmd = strconcat(tmp, " ", NULL);
-               free(tmp);
        }
 
-       tmp = mkstr("%s%c", cmd, '\'');
-       free(cmd);
-       cmd = tmp;
+       cmd = strconcat(mutt_command, " \'", mailstr,
+                               "\'", NULL);
+       free(mailstr);
 #ifdef DEBUG
        fprintf(stderr, "cmd: %s\n", cmd);
 #endif
        system(cmd);    
-
        free(cmd);
+       
+       /*
+        * we need to make sure that curses settings are correct
+        */
+       ui_init_curses();
 }
 
 void
@@ -332,6 +348,11 @@ launch_wwwbrowser(int item)
                system(cmd);
 
        free(cmd);
+
+       /*
+        * we need to make sure that curses settings are correct
+        */
+       ui_init_curses();
 }
 
 void *