static int _inp_rl_tab_handler(int count, int key) { if (rl_point != rl_end || !rl_line_buffer) { return 0; } ProfWin *current = wins_get_current(); if ((strncmp(rl_line_buffer, "/", 1) != 0) && (current->type == WIN_MUC)) { char *result = muc_autocomplete(current, rl_line_buffer); if (result) { rl_replace_line(result, 0); rl_point = rl_end; free(result); } } else if (strncmp(rl_line_buffer, "/", 1) == 0) { ProfWin *window = wins_get_current(); char *result = cmd_autocomplete(window, rl_line_buffer); if (result) { rl_replace_line(result, 0); rl_point = rl_end; free(result); } } return 0; }
void prof_run(char *log_level, char *account_name) { _init(log_level); _connect_default(account_name); ui_update(); log_info("Starting main event loop"); activity_state = ACTIVITY_ST_ACTIVE; saved_status = NULL; char *line = NULL; while(cont) { log_stderr_handler(); _check_autoaway(); line = ui_readline(); if (line) { ProfWin *window = wins_get_current(); cont = cmd_process_input(window, line); free(line); line = NULL; } else { cont = TRUE; } #ifdef HAVE_LIBOTR otr_poll(); #endif notify_remind(); jabber_process_events(10); ui_update(); } }
static int _inp_rl_subwin_pagedown_handler(int count, int key) { ProfWin *current = wins_get_current(); win_sub_page_down(current); return 0; }
static int _inp_rl_win_pageup_handler(int count, int key) { ProfWin *current = wins_get_current(); win_page_up(current); return 0; }
static int _inp_rl_clear_handler(int count, int key) { ProfWin *win = wins_get_current(); win_clear(win); return 0; }
void ui_init(void) { log_info("Initialising UI"); initscr(); nonl(); cbreak(); noecho(); keypad(stdscr, TRUE); ui_load_colours(); refresh(); create_title_bar(); create_status_bar(); status_bar_active(1); create_input_window(); wins_init(); notifier_initialise(); cons_about(); #ifdef HAVE_LIBXSS display = XOpenDisplay(0); #endif ui_idle_time = g_timer_new(); inp_size = 0; ProfWin *window = wins_get_current(); win_update_virtual(window); }
void ui_focus_win(ProfWin *window) { assert(window != NULL); if (wins_is_current(window)) { return; } ProfWin *old_current = wins_get_current(); if (old_current->type == WIN_MUC_CONFIG) { ProfMucConfWin *confwin = (ProfMucConfWin*)old_current; cmd_ac_remove_form_fields(confwin->form); } if (window->type == WIN_MUC_CONFIG) { ProfMucConfWin *confwin = (ProfMucConfWin*)window; cmd_ac_add_form_fields(confwin->form); } int i = wins_get_num(window); wins_set_current_by_num(i); if (i == 1) { title_bar_console(); rosterwin_roster(); } else { title_bar_switch(); } status_bar_current(i); status_bar_active(i); }
void ui_update(void) { ProfWin *current = wins_get_current(); if (current->layout->paged == 0) { win_move_to_end(current); } win_update_virtual(current); if (prefs_get_boolean(PREF_WINTITLE_SHOW)) { _ui_draw_term_title(); } title_bar_update_virtual(); status_bar_update_virtual(); inp_put_back(); doupdate(); if (perform_resize) { signal(SIGWINCH, SIG_IGN); ui_resize(); perform_resize = FALSE; signal(SIGWINCH, ui_sigwinch_handler); } }
gboolean scripts_exec(const char *const script) { char *scriptsdir = files_get_data_path(DIR_SCRIPTS); GString *scriptpath = g_string_new(scriptsdir); free(scriptsdir); g_string_append(scriptpath, "/"); g_string_append(scriptpath, script); FILE *scriptfile = g_fopen(scriptpath->str, "r"); if (!scriptfile) { log_info("Script not found: %s", scriptpath->str); g_string_free(scriptpath, TRUE); return FALSE; } g_string_free(scriptpath, TRUE); char *line = NULL; size_t len = 0; ssize_t read; while ((read = getline(&line, &len, scriptfile)) != -1) { ProfWin *win = wins_get_current(); cmd_process_input(win, line); session_process_events(); ui_update(); } fclose(scriptfile); if (line) free(line); return TRUE; }
int api_current_win_is_console(void) { ProfWin *current = wins_get_current(); if (current && current->type == WIN_CONSOLE) { return 1; } else { return 0; } }
static int _inp_rl_getc(FILE *stream) { int ch = rl_getc(stream); if (_inp_printable(ch)) { ProfWin *window = wins_get_current(); cmd_reset_autocomplete(window); } return ch; }
void ui_current_error_line(const char * const msg) { ProfWin *current = wins_get_current(); win_print_time(current, '-'); wattron(current->win, COLOUR_ERROR); wprintw(current->win, "%s\n", msg); wattroff(current->win, COLOUR_ERROR); wins_refresh_current(); }
void prof_handle_activity(void) { jabber_conn_status_t status = jabber_get_connection_status(); ProfWin *current = wins_get_current(); if ((status == JABBER_CONNECTED) && (current->type == WIN_CHAT)) { ProfChatWin *chatwin = (ProfChatWin*)current; assert(chatwin->memcheck == PROFCHATWIN_MEMCHECK); chat_state_handle_typing(chatwin->barejid, chatwin->state); } }
void ui_current_print_line(const char *const msg, ...) { ProfWin *window = wins_get_current(); va_list arg; va_start(arg, msg); GString *fmt_msg = g_string_new(NULL); g_string_vprintf(fmt_msg, msg, arg); win_println(window, 0, fmt_msg->str); va_end(arg); g_string_free(fmt_msg, TRUE); }
char * api_get_current_nick(void) { ProfWin *current = wins_get_current(); if (current->type == WIN_MUC) { ProfMucWin *mucwin = (ProfMucWin*)current; assert(mucwin->memcheck == PROFMUCWIN_MEMCHECK); return muc_nick(mucwin->roomjid); } else { return NULL; } }
void ui_status_room(const char * const contact) { PContact pcontact = muc_get_participant(ui_current_recipient(), contact); ProfWin *current = wins_get_current(); if (pcontact != NULL) { win_show_contact(current, pcontact); } else { ui_current_print_line("No such participant \"%s\" in room.", contact); } }
char * api_get_current_recipient(void) { ProfWin *current = wins_get_current(); if (current->type == WIN_CHAT) { ProfChatWin *chatwin = (ProfChatWin*)current; assert(chatwin->memcheck == PROFCHATWIN_MEMCHECK); return chatwin->barejid; } else { return NULL; } }
void ui_current_print_formatted_line(const char show_char, int attrs, const char *const msg, ...) { ProfWin *current = wins_get_current(); va_list arg; va_start(arg, msg); GString *fmt_msg = g_string_new(NULL); g_string_vprintf(fmt_msg, msg, arg); win_print(current, show_char, 0, NULL, 0, attrs, "", fmt_msg->str); va_end(arg); g_string_free(fmt_msg, TRUE); }
void prof_run(char *log_level, char *account_name) { #ifdef PROF_HAVE_GTK gtk_ready = gtk_init_check(0, NULL); log_debug("Env is GTK-ready: %s", gtk_ready ? "true" : "false"); if (gtk_ready) { gtk_init(0, NULL); gtk_main_iteration_do(false); } #endif _init(log_level); plugins_on_start(); _connect_default(account_name); ui_update(); log_info("Starting main event loop"); activity_state = ACTIVITY_ST_ACTIVE; saved_status = NULL; char *line = NULL; while(cont && !force_quit) { log_stderr_handler(); _check_autoaway(); line = inp_readline(); if (line) { ProfWin *window = wins_get_current(); cont = cmd_process_input(window, line); free(line); line = NULL; } else { cont = TRUE; } #ifdef PROF_HAVE_LIBOTR otr_poll(); #endif plugins_run_timed(); notify_remind(); jabber_process_events(10); iq_autoping_check(); ui_update(); #ifdef PROF_HAVE_GTK if (gtk_ready) { gtk_main_iteration_do(false); } #endif } }
void ui_status(void) { char *recipient = ui_current_recipient(); PContact pcontact = roster_get_contact(recipient); ProfWin *current = wins_get_current(); if (pcontact != NULL) { win_show_contact(current, pcontact); } else { ui_current_print_line("Error getting contact info."); } }
static void _connect_default(const char *const account) { ProfWin *window = wins_get_current(); if (account) { cmd_execute_connect(window, account); } else { char *pref_connect_account = prefs_get_string(PREF_CONNECT_ACCOUNT); if (pref_connect_account) { cmd_execute_connect(window, pref_connect_account); prefs_free_string(pref_connect_account); } } }
void ui_current_print_line(const char * const msg, ...) { ProfWin *current = wins_get_current(); va_list arg; va_start(arg, msg); GString *fmt_msg = g_string_new(NULL); g_string_vprintf(fmt_msg, msg, arg); win_print_time(current, '-'); wprintw(current->win, "%s\n", fmt_msg->str); g_string_free(fmt_msg, TRUE); va_end(arg); wins_refresh_current(); }
void ui_status_private(void) { Jid *jid = jid_create(ui_current_recipient()); PContact pcontact = muc_get_participant(jid->barejid, jid->resourcepart); ProfWin *current = wins_get_current(); if (pcontact != NULL) { win_show_contact(current, pcontact); } else { ui_current_print_line("Error getting contact info."); } jid_destroy(jid); }
void ui_resize(void) { struct winsize w; ioctl(STDOUT_FILENO, TIOCGWINSZ, &w); erase(); resizeterm(w.ws_row, w.ws_col); refresh(); log_debug("Resizing UI"); title_bar_resize(); wins_resize_all(); status_bar_resize(); inp_win_resize(); ProfWin *window = wins_get_current(); win_update_virtual(window); }
void ui_current_page_off(void) { ProfWin *current = wins_get_current(); current->paged = 0; int rows = getmaxy(stdscr); int y = getcury(current->win); int size = rows - 3; current->y_pos = y - (size - 1); if (current->y_pos < 0) { current->y_pos = 0; } wins_refresh_current(); }
void title_bar_update_virtual(void) { ProfWin *window = wins_get_current(); if (window->type != WIN_CONSOLE) { if (typing_elapsed) { gdouble seconds = g_timer_elapsed(typing_elapsed, NULL); if (seconds >= 10) { typing = FALSE; g_timer_destroy(typing_elapsed); typing_elapsed = NULL; } } } _title_bar_draw(); }
void prof_run(char *log_level, char *account_name) { _init(log_level); plugins_on_start(); _connect_default(account_name); ui_update(); log_info("Starting main event loop"); session_init_activity(); char *line = NULL; while(cont && !force_quit) { log_stderr_handler(); session_check_autoaway(); line = inp_readline(); if (line) { ProfWin *window = wins_get_current(); cont = cmd_process_input(window, line); free(line); line = NULL; } else { cont = TRUE; } #ifdef HAVE_LIBOTR otr_poll(); #endif plugins_run_timed(); notify_remind(); session_process_events(); iq_autoping_check(); ui_update(); #ifdef HAVE_GTK tray_update(); #endif } }
void ui_invalid_command_usage(const char *const cmd, void (*setting_func)(void)) { GString *msg = g_string_new(""); g_string_printf(msg, "Invalid usage, see '/help %s' for details.", &cmd[1]); if (setting_func) { cons_show(""); (*setting_func)(); cons_show(msg->str); } else { cons_show(""); cons_show(msg->str); ProfWin *current = wins_get_current(); if (current->type == WIN_CHAT) { win_println(current, THEME_DEFAULT, '-', "%s", msg->str); } } g_string_free(msg, TRUE); }
char* ui_ask_pgp_passphrase(const char *hint, int prev_fail) { ProfWin *current = wins_get_current(); win_println(current, THEME_DEFAULT, '-', ""); if (prev_fail) { win_println(current, THEME_DEFAULT, '!', "Incorrect passphrase"); } if (hint) { win_println(current, THEME_DEFAULT, '!', "Enter PGP key passphrase for %s", hint); } else { win_println(current, THEME_DEFAULT, '!', "Enter PGP key passphrase"); } ui_update(); status_bar_get_password(); status_bar_update_virtual(); return inp_get_password(); }
static void _title_bar_draw(void) { ProfWin *current = wins_get_current(); werase(win); wmove(win, 0, 0); int i; for (i = 0; i < 45; i++) { waddch(win, ' '); } char *title = win_get_title(current); mvwprintw(win, 0, 0, " %s", title); free(title); if (current && current->type == WIN_CHAT) { ProfChatWin *chatwin = (ProfChatWin*) current; assert(chatwin->memcheck == PROFCHATWIN_MEMCHECK); _show_contact_presence(chatwin); _show_privacy(chatwin); if (typing) { wprintw(win, " (typing...)"); } } else if (current && current->type == WIN_MUC) { ProfMucWin *mucwin = (ProfMucWin*) current; assert(mucwin->memcheck == PROFMUCWIN_MEMCHECK); _show_muc_privacy(mucwin); } _show_self_presence(); wnoutrefresh(win); inp_put_back(); }