diff --git a/src/command/command.c b/src/command/command.c index b986239f..4f2c1932 100644 --- a/src/command/command.c +++ b/src/command/command.c @@ -482,12 +482,13 @@ static struct cmd_t main_commands[] = { "/close", _cmd_close, parse_args, 0, 1, - { "/close [win|all]", "Close a window window.", - { "/close [win|all]", - "----------------", + { "/close [win|read|all]", "Close a window window.", + { "/close [win|read|all]", + "---------------------", "Passing no argument will close the current window.", "Passing 2,3,4,5,6,7,8,9 or 0 will close the specified window.", "Passing 'all' will close all currently open windows.", + "Passing 'read' will close all windows that have no unread messages.", "The console window cannot be closed.", "If in a chat room, you will leave the room.", NULL } } }, @@ -2520,6 +2521,17 @@ _cmd_close(gchar **args, struct cmd_help_t help) cons_show("Closed all windows."); return TRUE; + } else if (strcmp(args[0], "read") == 0) { + for (curr = 1; curr <= 9; curr++) { + if (ui_win_exists(curr) && (ui_win_unread(curr) == 0)) { + if (conn_status == JABBER_CONNECTED) { + _close_connected_win(curr); + } + ui_close_win(curr); + } + } + cons_show("Closed windows."); + return TRUE; } else { index = atoi(args[0]); if (index == 0) { diff --git a/src/ui/core.c b/src/ui/core.c index 992a5701..717966b4 100644 --- a/src/ui/core.c +++ b/src/ui/core.c @@ -1215,6 +1215,16 @@ ui_unread(void) return result; } +int +ui_win_unread(int index) +{ + if (windows[index] != NULL) { + return windows[index]->unread; + } else { + return 0; + } +} + static void _ui_draw_win_title(void) { diff --git a/src/ui/ui.h b/src/ui/ui.h index 83441311..e165b353 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -79,6 +79,7 @@ win_type_t ui_win_type(int index); char * ui_recipient(int index); void ui_close_win(int index); gboolean ui_win_exists(int index); +int ui_win_unread(int index); // ui events void ui_contact_typing(const char * const from);