mirror of https://github.com/MidnightCommander/mc
Fixed autocompletion in editor
Signed-off-by: Slava Zanko <slavazanko@gmail.com>
This commit is contained in:
parent
a3fcab9f50
commit
5ab3ba58c9
|
@ -2278,52 +2278,59 @@ edit_collect_completions (WEdit *edit, long start, int word_len,
|
|||
char *match_expr, struct selection *compl,
|
||||
int *num)
|
||||
{
|
||||
int len = 0, max_len = 0, i, skip;
|
||||
unsigned char *bufpos;
|
||||
int max_len = 0, i, skip;
|
||||
gsize len = 0;
|
||||
GString *temp;
|
||||
mc_search_t *srch;
|
||||
|
||||
srch = mc_search_new(match_expr, -1);
|
||||
if (srch == NULL)
|
||||
return 0;
|
||||
|
||||
srch->search_type = MC_SEARCH_T_REGEX;
|
||||
srch->is_case_sentitive = TRUE;
|
||||
srch->search_fn = edit_search_cmd_callback;
|
||||
|
||||
(void) match_expr;
|
||||
/* collect max MAX_WORD_COMPLETIONS completions */
|
||||
while (*num < MAX_WORD_COMPLETIONS) {
|
||||
/* get next match */
|
||||
/*
|
||||
start =
|
||||
edit_find (start - 1, (unsigned char *) match_expr, &len,
|
||||
edit->last_byte, edit_get_byte_ptr, (void *) edit, 0);
|
||||
*/
|
||||
start = -1;
|
||||
/* not matched */
|
||||
if (start < 0)
|
||||
if (mc_search_run (srch, (void *) edit, start+1, edit->last_byte, &len) == FALSE)
|
||||
break;
|
||||
start = srch->normal_offset;
|
||||
|
||||
/* add matched completion if not yet added */
|
||||
bufpos =
|
||||
&edit->
|
||||
buffers1[start >> S_EDIT_BUF_SIZE][start & M_EDIT_BUF_SIZE];
|
||||
temp = g_string_new("");
|
||||
for (i = 0; i < len; i++)
|
||||
g_string_append_c (temp, edit_get_byte(edit, start+i));
|
||||
|
||||
skip = 0;
|
||||
|
||||
for (i = 0; i < *num; i++) {
|
||||
if (strncmp
|
||||
((char *) &compl[i].text[word_len],
|
||||
(char *) &bufpos[word_len], max (len,
|
||||
compl[i].len) -
|
||||
word_len) == 0) {
|
||||
(
|
||||
(char *) &compl[i].text[word_len],
|
||||
(char *) &temp->str[word_len],
|
||||
max (len, compl[i].len) - word_len
|
||||
) == 0) {
|
||||
skip = 1;
|
||||
break; /* skip it, already added */
|
||||
}
|
||||
}
|
||||
if (skip)
|
||||
if (skip) {
|
||||
g_string_free(temp, TRUE);
|
||||
continue;
|
||||
}
|
||||
|
||||
compl[*num].text = g_malloc (len + 1);
|
||||
compl[*num].text = temp->str;
|
||||
compl[*num].len = len;
|
||||
for (i = 0; i < len; i++)
|
||||
compl[*num].text[i] = *(bufpos + i);
|
||||
compl[*num].text[i] = '\0';
|
||||
(*num)++;
|
||||
g_string_free(temp, FALSE);
|
||||
|
||||
/* note the maximal length needed for the completion dialog */
|
||||
if (len > max_len)
|
||||
max_len = len;
|
||||
}
|
||||
mc_search_free(srch);
|
||||
return max_len;
|
||||
}
|
||||
|
||||
|
@ -2358,9 +2365,9 @@ edit_complete_word_cmd (WEdit *edit)
|
|||
edit_set_search_parameters (edit, 0, 1, 1);
|
||||
|
||||
/* collect the possible completions */
|
||||
/* start search from curs1 down to begin of file */
|
||||
/* start search from begin to end of file */
|
||||
max_len =
|
||||
edit_collect_completions (edit, word_start, word_len, match_expr,
|
||||
edit_collect_completions (edit, 0, word_len, match_expr,
|
||||
(struct selection *) &compl, &num_compl);
|
||||
|
||||
if (num_compl > 0) {
|
||||
|
|
Loading…
Reference in New Issue