tweaks: avoid an unnecessary refresh for zero or just one completion

master
Benno Schulenberg 2020-06-21 10:02:45 +02:00
parent ff11ab6b66
commit 0f843b007a
2 changed files with 7 additions and 9 deletions

View File

@ -2483,8 +2483,6 @@ char *input_tab(char *buf, size_t *place, void (*refresh_func)(void), bool *list
size_t num_matches = 0; size_t num_matches = 0;
char **matches = NULL; char **matches = NULL;
*listed = FALSE;
/* If the cursor is not at the end of the fragment, do nothing. */ /* If the cursor is not at the end of the fragment, do nothing. */
if (buf[*place] != '\0') { if (buf[*place] != '\0') {
beep(); beep();
@ -2501,6 +2499,12 @@ char *input_tab(char *buf, size_t *place, void (*refresh_func)(void), bool *list
if (matches == NULL) if (matches == NULL)
matches = filename_completion(buf, *place, &num_matches); matches = filename_completion(buf, *place, &num_matches);
/* If possible completions were listed before but none will be listed now... */
if (*listed && num_matches < 2) {
refresh_func();
*listed = FALSE;
}
if (num_matches == 0) if (num_matches == 0)
beep(); beep();
else { else {
@ -2607,11 +2611,6 @@ char *input_tab(char *buf, size_t *place, void (*refresh_func)(void), bool *list
free_chararray(matches, num_matches); free_chararray(matches, num_matches);
/* When we didn't list any matches now, refresh the edit window, just
* in case a previous tab showed a list, so we know where we are. */
if (!*listed)
refresh_func();
return buf; return buf;
} }
#endif /* ENABLE_TABCOMP */ #endif /* ENABLE_TABCOMP */

View File

@ -598,8 +598,7 @@ int do_prompt(int menu, const char *provided, linestruct **history_list,
wipe_statusbar(); wipe_statusbar();
#ifdef ENABLE_TABCOMP #ifdef ENABLE_TABCOMP
/* If we've done tab completion, there might still be a list of /* If possible filename completions are still listed, clear them off. */
* filename matches on the edit window. Clear them off. */
if (listed) if (listed)
refresh_func(); refresh_func();
#endif #endif