]> git.deb.at Git - pkg/abook.git/blobdiff - ui.c
Attempt to improve --datafile behavior
[pkg/abook.git] / ui.c
diff --git a/ui.c b/ui.c
index a6e1492871abf15e1f805b529b2a4c124c0ee897..1630a82f8545bff46712bf720ae1a0be56208c5d 100644 (file)
--- a/ui.c
+++ b/ui.c
@@ -2,7 +2,7 @@
 /*
  * $Id$
  *
- * by JH <jheinonen@bigfoot.com>
+ * by JH <jheinonen@users.sourceforge.net>
  *
  * Copyright (C) Jaakko Heinonen
  */
@@ -44,6 +44,8 @@
 extern int items, curitem;
 extern char *datafile;
 
+extern int alternative_datafile;
+
 /*
  * internal variables
  */
@@ -124,14 +126,22 @@ is_ui_initialized()
        return ui_initialized;
 }
 
-
-int
-init_ui()
+void
+ui_init_curses()
 {
-       initscr(); cbreak(); noecho();
+       if(!is_ui_initialized())
+               initscr();
+       cbreak();
+       noecho();
        nonl();
        intrflush(stdscr, FALSE);
        keypad(stdscr, TRUE);
+}
+
+int
+init_ui()
+{
+       ui_init_curses();
 #ifdef DEBUG
         fprintf(stderr, "init_abook():\n");
         fprintf(stderr, "  COLS = %d, LINES = %d\n", COLS, LINES);
@@ -229,7 +239,7 @@ statusline_addstr(char *str)
  * parameters:
  *  (char *str)
  *   if n >= 0 str is a pointer which points a place where to store
- *   the string, else str is ingnored
+ *   the string, else str is ignored
  *  (int n)
  *   the maximum length of the string
  *   If n < 0 function will allocate needed space for the string.
@@ -337,12 +347,10 @@ clear_statusline()
        refresh();
 }
 
-
 /*
- * help - need to rewrite
+ * help
  */
 
-
 #include "help.h"
 
 void
@@ -382,12 +390,11 @@ display_help(int help)
        delwin(helpw);
 }
 
-
 /*
  * end of help
  */
 
-char *selected;
+extern char *selected;
 extern int curitem;
 
 void
@@ -405,6 +412,9 @@ get_commands()
                can_resize = FALSE; /* it's not safe to resize anymore */
                switch( ch ) {
                        case 'q': return;
+                       case 'Q': print_stderr(selected_items() ?
+                                                 -1 : list_current_item());
+                                 return;
                        case '?':
                                  display_help(HELP_MAIN);
                                  refresh_screen();
@@ -425,9 +435,9 @@ get_commands()
                        case 'J':
                        case KEY_NPAGE: page_down();    break;
 
-                       case 'H':
+                       case 'g':
                        case KEY_HOME: goto_home();     break;
-                       case 'E':
+                       case 'G':
                        case KEY_END: goto_end();       break;
 
                        case 'w': save_database();
@@ -465,7 +475,8 @@ get_commands()
                        case 'Z': move_curitem(MOVE_ITEM_DOWN);
                                break;
 
-                       case 'm': launch_mutt(list_current_item());
+                       case 'm': launch_mutt(selected_items() ?
+                                                 -1 : list_current_item());
                                  refresh_screen();
                                  break;
 
@@ -505,7 +516,8 @@ void
 ui_find(int next)
 {
        int item;
-       static char findstr[81];
+       static char findstr[MAX_FIELD_LEN];
+       int search_fields[] = {NAME, EMAIL, NICK, -1};
 
        if(next) {
                if( !*findstr )
@@ -513,11 +525,12 @@ ui_find(int next)
        } else {
                clear_statusline();
                statusline_addstr("/");
-               statusline_getnstr(findstr, 67, 0);
+               statusline_getnstr(findstr, MAX_FIELD_LEN - 1, 0);
                clear_statusline();
        }
 
-       if( (item = find_item(findstr, next ? curitem+1 : curitem)) >= 0 ) {
+       if( (item = find_item(findstr, curitem + !!next,
+                                       search_fields )) >= 0 ) {
                curitem = item;
                refresh_list();
        }
@@ -618,4 +631,6 @@ ui_open_datafile()
 
        refresh_screen();
        free(filename);
+
+       alternative_datafile = TRUE;
 }