aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/ex_getln.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/ex_getln.c')
-rw-r--r--src/nvim/ex_getln.c78
1 files changed, 33 insertions, 45 deletions
diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c
index 53feffd2d7..9edb826ea6 100644
--- a/src/nvim/ex_getln.c
+++ b/src/nvim/ex_getln.c
@@ -2096,7 +2096,7 @@ static int command_line_handle_key(CommandLineState *s)
s->do_abbr = false; // don't do abbreviation now
ccline.special_char = NUL;
// may need to remove ^ when composing char was typed
- if (enc_utf8 && utf_iscomposing(s->c) && !cmd_silent) {
+ if (utf_iscomposing(s->c) && !cmd_silent) {
if (ui_has(kUICmdline)) {
// TODO(bfredl): why not make unputcmdline also work with true?
unputcmdline();
@@ -2143,9 +2143,8 @@ static int command_line_handle_key(CommandLineState *s)
if (s->do_abbr && (IS_SPECIAL(s->c) || !vim_iswordc(s->c))
// Add ABBR_OFF for characters above 0x100, this is
// what check_abbr() expects.
- && (ccheck_abbr((has_mbyte && s->c >= 0x100) ?
- (s->c + ABBR_OFF) : s->c)
- || s->c == Ctrl_RSB)) {
+ && (ccheck_abbr((s->c >= 0x100) ? (s->c + ABBR_OFF) : s->c)
+ || s->c == Ctrl_RSB)) {
return command_line_changed(s);
}
@@ -2254,7 +2253,7 @@ static int command_line_changed(CommandLineState *s)
may_do_incsearch_highlighting(s->firstc, s->count, &s->is_state);
}
- if (cmdmsg_rl || (p_arshape && !p_tbidi && enc_utf8)) {
+ if (cmdmsg_rl || (p_arshape && !p_tbidi)) {
// Always redraw the whole command line to fix shaping and
// right-left typing. Not efficient, but it works.
// Do it only when there are no characters left to read
@@ -3139,11 +3138,9 @@ static void draw_cmdline(int start, int len)
if (cmdline_star > 0) {
for (int i = 0; i < len; i++) {
msg_putchar('*');
- if (has_mbyte) {
- i += (*mb_ptr2len)(ccline.cmdbuff + start + i) - 1;
- }
+ i += utfc_ptr2len(ccline.cmdbuff + start + i) - 1;
}
- } else if (p_arshape && !p_tbidi && enc_utf8 && len > 0) {
+ } else if (p_arshape && !p_tbidi && len > 0) {
bool do_arabicshape = false;
int mb_l;
for (int i = start; i < start + len; i += mb_l) {
@@ -3439,32 +3436,31 @@ void put_on_cmdline(char_u *str, int len, int redraw)
(size_t)(ccline.cmdlen - ccline.cmdpos));
ccline.cmdlen += len;
} else {
- if (has_mbyte) {
- /* Count nr of characters in the new string. */
- m = 0;
- for (i = 0; i < len; i += (*mb_ptr2len)(str + i))
- ++m;
- /* Count nr of bytes in cmdline that are overwritten by these
- * characters. */
- for (i = ccline.cmdpos; i < ccline.cmdlen && m > 0;
- i += (*mb_ptr2len)(ccline.cmdbuff + i))
- --m;
- if (i < ccline.cmdlen) {
- memmove(ccline.cmdbuff + ccline.cmdpos + len,
- ccline.cmdbuff + i, (size_t)(ccline.cmdlen - i));
- ccline.cmdlen += ccline.cmdpos + len - i;
- } else
- ccline.cmdlen = ccline.cmdpos + len;
- } else if (ccline.cmdpos + len > ccline.cmdlen)
+ // Count nr of characters in the new string.
+ m = 0;
+ for (i = 0; i < len; i += utfc_ptr2len(str + i)) {
+ m++;
+ }
+ // Count nr of bytes in cmdline that are overwritten by these
+ // characters.
+ for (i = ccline.cmdpos; i < ccline.cmdlen && m > 0;
+ i += utfc_ptr2len(ccline.cmdbuff + i)) {
+ m--;
+ }
+ if (i < ccline.cmdlen) {
+ memmove(ccline.cmdbuff + ccline.cmdpos + len,
+ ccline.cmdbuff + i, (size_t)(ccline.cmdlen - i));
+ ccline.cmdlen += ccline.cmdpos + len - i;
+ } else {
ccline.cmdlen = ccline.cmdpos + len;
+ }
}
memmove(ccline.cmdbuff + ccline.cmdpos, str, (size_t)len);
ccline.cmdbuff[ccline.cmdlen] = NUL;
- if (enc_utf8) {
- /* When the inserted text starts with a composing character,
- * backup to the character before it. There could be two of them.
- */
+ {
+ // When the inserted text starts with a composing character,
+ // backup to the character before it. There could be two of them.
i = 0;
c = utf_ptr2char(ccline.cmdbuff + ccline.cmdpos);
while (ccline.cmdpos > 0 && utf_iscomposing(c)) {
@@ -3515,23 +3511,19 @@ void put_on_cmdline(char_u *str, int len, int redraw)
for (i = 0; i < len; i++) {
c = cmdline_charsize(ccline.cmdpos);
// count ">" for a double-wide char that doesn't fit.
- if (has_mbyte) {
- correct_screencol(ccline.cmdpos, c, &ccline.cmdspos);
- }
+ correct_screencol(ccline.cmdpos, c, &ccline.cmdspos);
// Stop cursor at the end of the screen, but do increment the
// insert position, so that entering a very long command
// works, even though you can't see it.
if (ccline.cmdspos + c < m) {
ccline.cmdspos += c;
}
- if (has_mbyte) {
- c = (*mb_ptr2len)(ccline.cmdbuff + ccline.cmdpos) - 1;
- if (c > len - i - 1) {
- c = len - i - 1;
- }
- ccline.cmdpos += c;
- i += c;
+ c = utfc_ptr2len(ccline.cmdbuff + ccline.cmdpos) - 1;
+ if (c > len - i - 1) {
+ c = len - i - 1;
}
+ ccline.cmdpos += c;
+ i += c;
ccline.cmdpos++;
}
@@ -3676,11 +3668,7 @@ void cmdline_paste_str(char_u *s, int literally)
if (cv == Ctrl_V && s[1]) {
s++;
}
- if (has_mbyte) {
- c = mb_cptr2char_adv((const char_u **)&s);
- } else {
- c = *s++;
- }
+ c = mb_cptr2char_adv((const char_u **)&s);
if (cv == Ctrl_V || c == ESC || c == Ctrl_C
|| c == CAR || c == NL || c == Ctrl_L
|| (c == Ctrl_BSL && *s == Ctrl_N)) {