Merges from Irssi CVS.
[crypto.git] / apps / irssi / src / fe-common / core / window-commands.c
index 2accad9d558fd3e8aa6b44abc8962203f97220a1..bbe495aa611a5b992a36f8d0f155d2deeee7db70 100644 (file)
@@ -427,7 +427,12 @@ static void cmd_window_server(const char *data)
 
 static void cmd_window_item(const char *data, void *server, WI_ITEM_REC *item)
 {
-       command_runsub("window item", data, server, item);
+        while (*data == ' ') data++;
+
+       if (is_numeric(data, '\0'))
+               signal_emit("command window item goto", 3, data, server, item);
+       else
+               command_runsub("window item", data, server, item);
 }
 
 /* SYNTAX: WINDOW ITEM PREV */
@@ -442,12 +447,20 @@ static void cmd_window_item_next(void)
        window_item_next(active_win);
 }
 
-/* SYNTAX: WINDOW ITEM GOTO <name> */
+/* SYNTAX: WINDOW ITEM GOTO <number>|<name> */
 static void cmd_window_item_goto(const char *data, SERVER_REC *server)
 {
-        WI_ITEM_REC *item;
+       WI_ITEM_REC *item;
+       GSList *tmp;
+
+       if (is_numeric(data, '\0')) {
+               /* change to specified number */
+               tmp = g_slist_nth(active_win->items, atoi(data)-1);
+               item = tmp == NULL ? NULL : tmp->data;
+       } else {
+               item = window_item_find_window(active_win, server, data);
+       }
 
-        item = window_item_find_window(active_win, server, data);
         if (item != NULL)
                 window_item_set_active(active_win, item);
 }
@@ -510,7 +523,8 @@ static void cmd_window_name(const char *data)
 {
        if (window_find_name(data) == NULL)
                window_set_name(active_win, data);
-       else {
+       else if (active_win->name == NULL ||
+                strcmp(active_win->name, data) != 0) {
                printformat_window(active_win, MSGLEVEL_CLIENTERROR,
                                   TXT_WINDOW_NAME_NOT_UNIQUE, data);
        }