void ui_open_datafile() { char *filename; filename = ask_filename(_("File to open: ")); if(!filename || ! *filename) { free(filename); refresh_screen(); return; } if(opt_get_bool(BOOL_AUTOSAVE)) save_database(); else if(statusline_ask_boolean(_("Save current database"), FALSE)) save_database(); close_database(); load_database(filename); if(list_is_empty()) { statusline_msg(_("Sorry, the specified file appears not to be a valid abook addressbook")); load_database(datafile); } else { free(datafile); datafile = xstrdup(filename); } refresh_screen(); free(filename); alternative_datafile = TRUE; }
static void print_list_field(int item, int line, int *x_pos, struct index_elem *e) { char *s, *p; int width, x_start, mustfree = FALSE, len = abs(e->d.field.len); struct list_field f; get_list_field(item, e, &f); s = f.data; if(!s || !*s) { *x_pos += len; return; } if(f.type == FIELD_EMAILS && !opt_get_bool(BOOL_SHOW_ALL_EMAILS)) if((p = strchr(s, ',')) != NULL) { s = xstrndup(s, p - s); mustfree = TRUE; } width = len ? bytes2width(s, len) : strwidth(s); x_start = *x_pos + ((e->d.field.len < 0) ? len - width : 0); if(width + x_start >= COLS) width = bytes2width(s, COLS - x_start); if(width) mvwaddnstr(list, line, x_start, s, width); if(mustfree) free(s); *x_pos += len ? len : width; }
static void highlight_line(WINDOW *win, int line) { wattrset(win, COLOR_PAIR(CP_LIST_HIGHLIGHT)); if(!opt_get_bool(BOOL_USE_COLORS)) { wstandout(win); } /* * this is a tricky one */ #if 0 /*#ifdef mvwchgat*/ mvwchgat(win, line, 0, -1, A_STANDOUT, 0, NULL); #else /* * buggy function: FIXME */ scrollok(win, FALSE); { int i; wmove(win, line, 0); for(i = 0; i < COLS; i++) waddch(win, ' '); /*wattrset(win, 0);*/ } scrollok(win, TRUE); #endif }
void wopt_init(struct imwindow *imwindow, const char *target) { char nnick[NUSER_LEN]; char buf[NUSER_LEN + 256]; char *pork_dir; char *p; pref_val_t *wopt = imwindow->opts; memset(wopt, 0, sizeof(pref_val_t) * WOPT_NUM_OPTS); wopt[WOPT_ACTIVITY_TYPES].i = opt_get_int(OPT_ACTIVITY_TYPES); wopt[WOPT_BEEP_ON_OUTPUT].b = opt_get_bool(OPT_BEEP_ON_OUTPUT); wopt[WOPT_HISTORY_LEN].i = opt_get_int(OPT_HISTORY_LEN); wopt[WOPT_LOG].b = opt_get_bool(OPT_LOG); wopt[WOPT_LOG_TYPES].i = opt_get_int(OPT_LOG_TYPES); wopt[WOPT_PRIVATE_INPUT].b = opt_get_bool(OPT_PRIVATE_INPUT); wopt[WOPT_SCROLL_ON_INPUT].b = opt_get_bool(OPT_SCROLL_ON_INPUT); wopt[WOPT_SCROLL_ON_OUTPUT].b = opt_get_bool(OPT_SCROLL_ON_OUTPUT); wopt[WOPT_SCROLLBUF_LEN].i = opt_get_int(OPT_SCROLLBUF_LEN); wopt[WOPT_TIMESTAMP].b = opt_get_bool(OPT_TIMESTAMP); wopt[WOPT_WORDWRAP].b = opt_get_bool(OPT_WORDWRAP); wopt[WOPT_WORDWRAP_CHAR].c = opt_get_char(OPT_WORDWRAP_CHAR); normalize(nnick, target, sizeof(nnick)); while ((p = strchr(nnick, '/')) != NULL) *p = '_'; pork_dir = opt_get_str(OPT_NCIC_DIR); snprintf(buf, sizeof(buf), "%s/%s/logs/%s.log", pork_dir, imwindow->owner->username, nnick); wopt[WOPT_LOGFILE].s = xstrdup(buf); }
void refresh_list() { int i, line; werase(list); ui_print_number_of_items(); if(list_is_empty()) { refresh(); wrefresh(list); return; } if(curitem < 0) curitem = 0; if(first_list_item < 0) first_list_item = 0; if(curitem < first_list_item) first_list_item = curitem; else if(curitem > LAST_LIST_ITEM) first_list_item = max(curitem - LIST_LINES + 1, 0); for(line = 0, i = first_list_item; i <= LAST_LIST_ITEM && i < db_n_items(); line++, i++) { print_list_line(i, line, i == curitem); } if(opt_get_bool(BOOL_SHOW_CURSOR)) { wmove(list, curitem - first_list_item, 0); /* need to call refresh() to update the cursor positions */ refresh(); } wrefresh(list); }
void get_commands() { int ch; for(;;) { can_resize = TRUE; /* it's safe to resize now */ if(!opt_get_bool(BOOL_SHOW_CURSOR)) hide_cursor(); if(should_resize) refresh_screen(); ch = getch(); if(!opt_get_bool(BOOL_SHOW_CURSOR)) show_cursor(); can_resize = FALSE; /* it's not safe to resize anymore */ switch(ch) { case 'q': return; case 'Q': quit_abook(QUIT_DONTSAVE); break; case 'P': print_stderr(selected_items() ? -1 : list_get_curitem()); return; case '?': display_help(HELP_MAIN); refresh_screen(); break; case 'a': add_item(); break; case '\r': edit_item(-1); break; case KEY_DC: case 'd': case 'r': ui_remove_items(); break; case 'D': duplicate_item(); break; case 12: refresh_screen(); break; case 'k': case KEY_UP: scroll_up(); break; case 'j': case KEY_DOWN: scroll_down(); break; case 'K': case KEY_PPAGE: page_up(); break; case 'J': case KEY_NPAGE: page_down(); break; case 'g': case KEY_HOME: goto_home(); break; case 'G': case KEY_END: goto_end(); break; case 'w': save_database(); break; case 'l': ui_read_database(); break; case 'i': import_database(); break; case 'e': export_database(); break; case 'C': ui_clear_database(); break; case 'o': ui_open_datafile(); break; case 's': sort_by_field("name"); break; case 'S': sort_surname(); break; case 'F': sort_by_field(NULL); break; case '/': ui_find(0); break; case '\\': ui_find(1); break; case ' ': if(list_get_curitem() >= 0) { list_invert_curitem_selection(); ui_print_number_of_items(); refresh_list(); } break; case '+': select_all(); refresh_list(); break; case '-': select_none(); refresh_list(); break; case '*': invert_selection(); refresh_list(); break; case 'A': move_curitem(MOVE_ITEM_UP); break; case 'Z': move_curitem(MOVE_ITEM_DOWN); break; case 'm': launch_mutt(selected_items() ? -1 : list_get_curitem()); refresh_screen(); break; case 'p': ui_print_database(); break; case 'v': launch_wwwbrowser(list_get_curitem()); refresh_screen(); break; case 'H': launch_callpgm(list_get_curitem(), 'H'); refresh_screen(); break; case 'W': launch_callpgm(list_get_curitem(), 'W'); refresh_screen(); break; case 'M': launch_callpgm(list_get_curitem(), 'M'); refresh_screen(); break; } } }