mirror of
https://github.com/fish-shell/fish-shell
synced 2024-11-15 09:27:38 +00:00
deal with fish_wcswidth() returning -1
Completion strings, especially the description, might contain characters, such as backspace, which make it impossible to calculate the width of the string. Fixes #4179
This commit is contained in:
parent
f3d025bd75
commit
4152bdc698
1 changed files with 7 additions and 5 deletions
|
@ -320,18 +320,20 @@ void pager_t::measure_completion_infos(comp_info_list_t *infos, const wcstring &
|
|||
size_t prefix_len = fish_wcswidth(prefix.c_str());
|
||||
for (size_t i = 0; i < infos->size(); i++) {
|
||||
comp_t *comp = &infos->at(i);
|
||||
|
||||
// Compute comp_width.
|
||||
const wcstring_list_t &comp_strings = comp->comp;
|
||||
|
||||
for (size_t j = 0; j < comp_strings.size(); j++) {
|
||||
// If there's more than one, append the length of ', '.
|
||||
if (j >= 1) comp->comp_width += 2;
|
||||
|
||||
comp->comp_width += prefix_len + fish_wcswidth(comp_strings.at(j).c_str());
|
||||
// fish_wcswidth() can return -1 if it can't calculate the width. So be cautious.
|
||||
int comp_width = fish_wcswidth(comp_strings.at(j).c_str());
|
||||
if (comp_width > 0) comp->comp_width += prefix_len + comp_width;
|
||||
}
|
||||
|
||||
// Compute desc_width.
|
||||
comp->desc_width = fish_wcswidth(comp->desc.c_str());
|
||||
// fish_wcswidth() can return -1 if it can't calculate the width. So be cautious.
|
||||
int desc_width = fish_wcswidth(comp->desc.c_str());
|
||||
comp->desc_width = desc_width > 0 ? desc_width : 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue