mirror of
https://github.com/sheumann/hush.git
synced 2024-10-29 20:27:40 +00:00
lineedit: fix completion with Unicode chars
function old new delta read_line_input 4966 5002 +36 bb_wcstombs 170 159 -11 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/1 up/down: 36/-11) Total: 25 bytes Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
This commit is contained in:
parent
b068bd7a41
commit
61a36af45d
@ -1061,9 +1061,16 @@ static void input_tab(smallint *lastWasTab)
|
|||||||
|
|
||||||
/* Make a local copy of the string --
|
/* Make a local copy of the string --
|
||||||
* up to the position of the cursor */
|
* up to the position of the cursor */
|
||||||
|
#if !ENABLE_UNICODE_SUPPORT
|
||||||
save_string(matchBuf, cursor + 1);
|
save_string(matchBuf, cursor + 1);
|
||||||
#if ENABLE_UNICODE_SUPPORT
|
#else
|
||||||
cursor_mb = strlen(matchBuf);
|
{
|
||||||
|
CHAR_T wc = command_ps[cursor];
|
||||||
|
command_ps[cursor] = 0;
|
||||||
|
save_string(matchBuf, MAX_LINELEN);
|
||||||
|
command_ps[cursor] = wc;
|
||||||
|
cursor_mb = strlen(matchBuf);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
tmp = matchBuf;
|
tmp = matchBuf;
|
||||||
|
|
||||||
@ -1167,7 +1174,10 @@ static void input_tab(smallint *lastWasTab)
|
|||||||
sprintf(&command[cursor_mb - recalc_pos], "%s%s", tmp, matchBuf);
|
sprintf(&command[cursor_mb - recalc_pos], "%s%s", tmp, matchBuf);
|
||||||
command_len = load_string(command, S.maxsize);
|
command_len = load_string(command, S.maxsize);
|
||||||
/* write out the matched command */
|
/* write out the matched command */
|
||||||
redraw(cmdedit_y, command_len - len);
|
/* paranoia: load_string can return 0 on conv error,
|
||||||
|
* prevent passing len = (0 - 12) to redraw */
|
||||||
|
len = command_len - len;
|
||||||
|
redraw(cmdedit_y, len >= 0 ? len : 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -131,7 +131,7 @@ size_t FAST_FUNC wcstombs(char *dest, const wchar_t *src, size_t n)
|
|||||||
size_t len = wcrtomb_internal(tbuf, wc);
|
size_t len = wcrtomb_internal(tbuf, wc);
|
||||||
|
|
||||||
if (len > n)
|
if (len > n)
|
||||||
len = n;
|
break;
|
||||||
memcpy(dest, tbuf, len);
|
memcpy(dest, tbuf, len);
|
||||||
if (wc == L'\0')
|
if (wc == L'\0')
|
||||||
return org_n - n;
|
return org_n - n;
|
||||||
|
Loading…
Reference in New Issue
Block a user