2813 |
2813 |
2814 if (!completion_started) { |
2814 if (!completion_started) { |
2815 guint dynlist; |
2815 guint dynlist; |
2816 GSList *list = compl_get_category_list(compl_categ, &dynlist); |
2816 GSList *list = compl_get_category_list(compl_categ, &dynlist); |
2817 if (list) { |
2817 if (list) { |
|
2818 guint n; |
2818 char *prefix = g_strndup(row, ptr_inputline-row); |
2819 char *prefix = g_strndup(row, ptr_inputline-row); |
2819 // Init completion |
2820 // Init completion |
2820 new_completion(prefix, list); |
2821 n = new_completion(prefix, list); |
2821 g_free(prefix); |
2822 g_free(prefix); |
|
2823 if (n == 0 && nrow == -1) { |
|
2824 // This is a MUC room and we can't complete from the beginning of the |
|
2825 // line. Let's try a bit harder and complete the current word. |
|
2826 row = prev_char(ptr_inputline, inputLine); |
|
2827 while (row >= inputLine) { |
|
2828 if (!iswalnum(get_char(row)) && get_char(row) != '_') { |
|
2829 row = next_char((char*)row); |
|
2830 break; |
|
2831 } |
|
2832 if (row == inputLine) |
|
2833 break; |
|
2834 row = prev_char((char*)row, inputLine); |
|
2835 } |
|
2836 // There's no need to try again if row == inputLine |
|
2837 if (row > inputLine) { |
|
2838 prefix = g_strndup(row, ptr_inputline-row); |
|
2839 new_completion(prefix, list); |
|
2840 g_free(prefix); |
|
2841 } |
|
2842 } |
2822 // Free the list if it's a dynamic one |
2843 // Free the list if it's a dynamic one |
2823 if (dynlist) { |
2844 if (dynlist) { |
2824 GSList *slp; |
2845 GSList *slp; |
2825 for (slp = list; slp; slp = g_slist_next(slp)) |
2846 for (slp = list; slp; slp = g_slist_next(slp)) |
2826 g_free(slp->data); |
2847 g_free(slp->data); |
2827 g_slist_free(list); |
2848 g_slist_free(list); |
2828 |
|
2829 } |
2849 } |
2830 // Now complete |
2850 // Now complete |
2831 cchar = complete(); |
2851 cchar = complete(); |
2832 if (cchar) |
2852 if (cchar) |
2833 scr_insert_text(cchar); |
2853 scr_insert_text(cchar); |