| 614 | | static void sig_complete_word(GList **list, WINDOW_REC *window, |
| 615 | | const char *word, const char *linestart, |
| 616 | | int *want_space) |
| 617 | | { |
| 618 | | SERVER_REC *server; |
| 619 | | CHANNEL_REC *channel; |
| 620 | | QUERY_REC *query; |
| 621 | | char *prefix; |
| 622 | | |
| 623 | | g_return_if_fail(list != NULL);
|
| 624 | | g_return_if_fail(window != NULL);
|
| 625 | | g_return_if_fail(word != NULL);
|
| 626 | | g_return_if_fail(linestart != NULL);
|
| 627 | | |
| 628 | | server = window->active_server; |
| 629 | | if (server == NULL && servers != NULL)
|
| 630 | | server = servers->data; |
| 631 | | |
| 632 | | if (server != NULL && server_ischannel(server, word)) {
|
| 633 | | |
| 634 | | *list = completion_get_channels(window->active_server, word); |
| 635 | | if (*list != NULL) signal_stop();
|
| 636 | | return; |
| 637 | | } |
| 638 | | |
| 639 | | server = window->active_server; |
| 640 | | if (server == NULL || !server->connected)
|
| 641 | | return; |
| 642 | | |
| 643 | | if (*linestart == '\0' && *word == '\0') { |
| 644 | | |
| 645 | | prefix = g_strdup_printf("%cmsg", *cmdchars); |
| 646 | | *list = completion_msg(server, NULL, "", prefix);
|
| 647 | | if (*list == NULL)
|
| 648 | | *list = g_list_append(*list, g_strdup(prefix)); |
| 649 | | g_free(prefix); |
| 650 | | |
| 651 | | signal_stop(); |
| 652 | | return; |
| 653 | | } |
| 654 | | |
| 655 | | channel = CHANNEL(window->active);
|
| 656 | | query = QUERY(window->active);
|
| 657 | | if (channel == NULL && query != NULL &&
|
| 658 | | g_strncasecmp(word, query->name, strlen(word)) == 0) { |
| 659 | | |
| 660 | | *list = g_list_append(*list, g_strdup(query->name)); |
| 661 | | } else if (channel != NULL) {
|
| 662 | | |
| 663 | | |
| 664 | | const char *suffix = *linestart != '\0' ? NULL : completion_char;
|
| 665 | | complete_window_nicks(list, window, word, suffix); |
| 666 | | } else if (window->level & MSGLEVEL_MSGS) { |
| 667 | | |
| 668 | | *list = g_list_concat(completion_msg(server, NULL, word, NULL), *list);
|
| 669 | | } |
| 670 | | |
| 671 | | if (*list != NULL) signal_stop();
|
| 672 | | } |