aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/edit.c
diff options
context:
space:
mode:
authorMatthieu Coudron <mattator@gmail.com>2020-11-14 19:35:26 +0100
committerGitHub <noreply@github.com>2020-11-14 19:35:26 +0100
commit27d630926cab78511075159012ce6ac920d8747e (patch)
treedb9afbe90762056b2f2c538744ce04d571108b89 /src/nvim/edit.c
parentd8c69adbabe963142f433a2ddad172ff46413f15 (diff)
parent5d6ecfa3c7447009da75842c611ea1b9f1db83e7 (diff)
downloadrneovim-27d630926cab78511075159012ce6ac920d8747e.tar.gz
rneovim-27d630926cab78511075159012ce6ac920d8747e.tar.bz2
rneovim-27d630926cab78511075159012ce6ac920d8747e.zip
Merge pull request #13275 from janlazo/vim-8.1.0805
vim-patch:8.1.{805,806,809,810,811}
Diffstat (limited to 'src/nvim/edit.c')
-rw-r--r--src/nvim/edit.c156
1 files changed, 56 insertions, 100 deletions
diff --git a/src/nvim/edit.c b/src/nvim/edit.c
index 9c8d64a6b2..5d44c3274e 100644
--- a/src/nvim/edit.c
+++ b/src/nvim/edit.c
@@ -426,9 +426,9 @@ static void insert_enter(InsertState *s)
|| curwin->w_curswant > curwin->w_virtcol)
&& *(s->ptr = get_cursor_line_ptr() + curwin->w_cursor.col) != NUL) {
if (s->ptr[1] == NUL) {
- ++curwin->w_cursor.col;
- } else if (has_mbyte) {
- s->i = (*mb_ptr2len)(s->ptr);
+ curwin->w_cursor.col++;
+ } else {
+ s->i = utfc_ptr2len(s->ptr);
if (s->ptr[s->i] == NUL) {
curwin->w_cursor.col += s->i;
}
@@ -1299,11 +1299,10 @@ normalchar:
// special character. Let CTRL-] expand abbreviations without
// inserting it.
if (vim_iswordc(s->c)
- || (!echeck_abbr(
// Add ABBR_OFF for characters above 0x100, this is
// what check_abbr() expects.
- (has_mbyte && s->c >= 0x100) ? (s->c + ABBR_OFF) : s->c)
- && s->c != Ctrl_RSB)) {
+ || (!echeck_abbr((s->c >= 0x100) ? (s->c + ABBR_OFF) : s->c)
+ && s->c != Ctrl_RSB)) {
insert_special(s->c, false, false);
revins_legal++;
revins_chars++;
@@ -1574,14 +1573,12 @@ void edit_putchar(int c, bool highlight)
pc_status = PC_STATUS_UNSET;
if (curwin->w_p_rl) {
pc_col += curwin->w_grid.Columns - 1 - curwin->w_wcol;
- if (has_mbyte) {
- int fix_col = grid_fix_col(&curwin->w_grid, pc_col, pc_row);
+ const int fix_col = grid_fix_col(&curwin->w_grid, pc_col, pc_row);
- if (fix_col != pc_col) {
- grid_putchar(&curwin->w_grid, ' ', pc_row, fix_col, attr);
- curwin->w_wcol--;
- pc_status = PC_STATUS_RIGHT;
- }
+ if (fix_col != pc_col) {
+ grid_putchar(&curwin->w_grid, ' ', pc_row, fix_col, attr);
+ curwin->w_wcol--;
+ pc_status = PC_STATUS_RIGHT;
}
} else {
pc_col += curwin->w_wcol;
@@ -1817,10 +1814,11 @@ change_indent (
ptr = get_cursor_line_ptr();
while (vcol <= (int)curwin->w_virtcol) {
last_vcol = vcol;
- if (has_mbyte && new_cursor_col >= 0)
- new_cursor_col += (*mb_ptr2len)(ptr + new_cursor_col);
- else
- ++new_cursor_col;
+ if (new_cursor_col >= 0) {
+ new_cursor_col += utfc_ptr2len(ptr + new_cursor_col);
+ } else {
+ new_cursor_col++;
+ }
vcol += lbr_chartabsize(ptr, ptr + new_cursor_col, (colnr_T)vcol);
}
vcol = last_vcol;
@@ -1975,7 +1973,7 @@ void backspace_until_column(int col)
/// @return true when something was deleted.
static bool del_char_after_col(int limit_col)
{
- if (enc_utf8 && limit_col >= 0) {
+ if (limit_col >= 0) {
colnr_T ecol = curwin->w_cursor.col + 1;
// Make sure the cursor is at the start of a character, but
@@ -2174,15 +2172,14 @@ int ins_compl_add_infercase(char_u *str_arg, int len, bool icase, char_u *fname,
// Infer case of completed part.
// Find actual length of completion.
- if (has_mbyte) {
+ {
const char_u *p = str;
actual_len = 0;
while (*p != NUL) {
MB_PTR_ADV(p);
actual_len++;
}
- } else
- actual_len = len;
+ }
// Find actual length of original text.
{
@@ -2204,11 +2201,7 @@ int ins_compl_add_infercase(char_u *str_arg, int len, bool icase, char_u *fname,
{
const char_u *p = str;
for (i = 0; i < actual_len; i++) {
- if (has_mbyte) {
- wca[i] = mb_ptr2char_adv(&p);
- } else {
- wca[i] = *(p++);
- }
+ wca[i] = mb_ptr2char_adv(&p);
}
}
@@ -2216,11 +2209,7 @@ int ins_compl_add_infercase(char_u *str_arg, int len, bool icase, char_u *fname,
{
const char_u *p = compl_orig_text;
for (i = 0; i < min_len; i++) {
- if (has_mbyte) {
- c = mb_ptr2char_adv(&p);
- } else {
- c = *(p++);
- }
+ c = mb_ptr2char_adv(&p);
if (mb_islower(c)) {
has_lower = true;
if (mb_isupper(wca[i])) {
@@ -2241,11 +2230,7 @@ int ins_compl_add_infercase(char_u *str_arg, int len, bool icase, char_u *fname,
if (!has_lower) {
const char_u *p = compl_orig_text;
for (i = 0; i < min_len; i++) {
- if (has_mbyte) {
- c = mb_ptr2char_adv(&p);
- } else {
- c = *(p++);
- }
+ c = mb_ptr2char_adv(&p);
if (was_letter && mb_isupper(c) && mb_islower(wca[i])) {
// Rule 2 is satisfied.
for (i = actual_compl_length; i < actual_len; i++) {
@@ -2261,11 +2246,7 @@ int ins_compl_add_infercase(char_u *str_arg, int len, bool icase, char_u *fname,
{
const char_u *p = compl_orig_text;
for (i = 0; i < min_len; i++) {
- if (has_mbyte) {
- c = mb_ptr2char_adv(&p);
- } else {
- c = *(p++);
- }
+ c = mb_ptr2char_adv(&p);
if (mb_islower(c)) {
wca[i] = mb_tolower(wca[i]);
} else if (mb_isupper(c)) {
@@ -3059,12 +3040,9 @@ static void ins_compl_files(int count, char_u **files, int thesaurus, int flags,
*/
char_u *find_word_start(char_u *ptr)
{
- if (has_mbyte)
- while (*ptr != NUL && *ptr != '\n' && mb_get_class(ptr) <= 1)
- ptr += (*mb_ptr2len)(ptr);
- else
- while (*ptr != NUL && *ptr != '\n' && !vim_iswordc(*ptr))
- ++ptr;
+ while (*ptr != NUL && *ptr != '\n' && mb_get_class(ptr) <= 1) {
+ ptr += utfc_ptr2len(ptr);
+ }
return ptr;
}
@@ -3074,19 +3052,15 @@ char_u *find_word_start(char_u *ptr)
*/
char_u *find_word_end(char_u *ptr)
{
- int start_class;
-
- if (has_mbyte) {
- start_class = mb_get_class(ptr);
- if (start_class > 1)
- while (*ptr != NUL) {
- ptr += (*mb_ptr2len)(ptr);
- if (mb_get_class(ptr) != start_class)
- break;
+ const int start_class = mb_get_class(ptr);
+ if (start_class > 1) {
+ while (*ptr != NUL) {
+ ptr += utfc_ptr2len(ptr);
+ if (mb_get_class(ptr) != start_class) {
+ break;
}
- } else
- while (vim_iswordc(*ptr))
- ++ptr;
+ }
+ }
return ptr;
}
@@ -5557,10 +5531,9 @@ static void insert_special(int c, int allow_modmask, int ctrlv)
*/
# define ISSPECIAL(c) ((c) < ' ' || (c) >= DEL || (c) == '0' || (c) == '^')
-# define WHITECHAR(cc) (ascii_iswhite(cc) && \
- (!enc_utf8 || \
- !utf_iscomposing( \
- utf_ptr2char(get_cursor_pos_ptr() + 1))))
+#define WHITECHAR(cc) ( \
+ ascii_iswhite(cc) \
+ && !utf_iscomposing(utf_ptr2char(get_cursor_pos_ptr() + 1)))
/*
* "flags": INSCHAR_FORMAT - force formatting
@@ -5697,7 +5670,7 @@ void insertchar(
// Do the check for InsertCharPre before the call to vpeekc() because the
// InsertCharPre autocommand could change the input buffer.
if (!ISSPECIAL(c)
- && (!has_mbyte || (*mb_char2len)(c) == 1)
+ && (utf_char2len(c) == 1)
&& !has_event(EVENT_INSERTCHARPRE)
&& vpeekc() != NUL
&& !(State & REPLACE_FLAG)
@@ -7175,16 +7148,11 @@ static void replace_do_bs(int limit_col)
getvcol(curwin, &curwin->w_cursor, NULL, &start_vcol, NULL);
orig_vcols = chartabsize(get_cursor_pos_ptr(), start_vcol);
}
- if (has_mbyte) {
- (void)del_char_after_col(limit_col);
- if (l_State & VREPLACE_FLAG)
- orig_len = (int)STRLEN(get_cursor_pos_ptr());
- replace_push(cc);
- } else {
- pchar_cursor(cc);
- if (l_State & VREPLACE_FLAG)
- orig_len = (int)STRLEN(get_cursor_pos_ptr()) - 1;
+ (void)del_char_after_col(limit_col);
+ if (l_State & VREPLACE_FLAG) {
+ orig_len = (int)STRLEN(get_cursor_pos_ptr());
}
+ replace_push(cc);
replace_pop_ins();
if (l_State & VREPLACE_FLAG) {
@@ -7403,23 +7371,17 @@ bool in_cinkeys(int keytyped, int when, bool line_is_empty)
bool match = false;
if (keytyped == KEY_COMPLETE) {
- char_u *s;
+ char_u *n, *s;
/* Just completed a word, check if it starts with "look".
* search back for the start of a word. */
line = get_cursor_line_ptr();
- if (has_mbyte) {
- char_u *n;
-
- for (s = line + curwin->w_cursor.col; s > line; s = n) {
- n = mb_prevptr(line, s);
- if (!vim_iswordp(n))
- break;
+ for (s = line + curwin->w_cursor.col; s > line; s = n) {
+ n = mb_prevptr(line, s);
+ if (!vim_iswordp(n)) {
+ break;
}
- } else
- for (s = line + curwin->w_cursor.col; s > line; --s)
- if (!vim_iswordc(s[-1]))
- break;
+ }
assert(p >= look && (uintmax_t)(p - look) <= SIZE_MAX);
if (s + (p - look) <= line + curwin->w_cursor.col
&& (icase
@@ -8255,10 +8217,8 @@ static bool ins_bs(int c, int mode, int *inserted_space_p)
}
cc = gchar_cursor();
// look multi-byte character class
- if (has_mbyte) {
- prev_cclass = cclass;
- cclass = mb_get_class(get_cursor_pos_ptr());
- }
+ prev_cclass = cclass;
+ cclass = mb_get_class(get_cursor_pos_ptr());
if (mode == BACKSPACE_WORD && !ascii_isspace(cc)) { // start of word?
mode = BACKSPACE_WORD_NOT_SPACE;
temp = vim_iswordc(cc);
@@ -8272,19 +8232,18 @@ static bool ins_bs(int c, int mode, int *inserted_space_p)
}
break;
}
- if (State & REPLACE_FLAG)
+ if (State & REPLACE_FLAG) {
replace_do_bs(-1);
- else {
- const bool l_enc_utf8 = enc_utf8;
+ } else {
const int l_p_deco = p_deco;
- if (l_enc_utf8 && l_p_deco) {
+ if (l_p_deco) {
(void)utfc_ptr2char(get_cursor_pos_ptr(), cpc);
}
(void)del_char(false);
// If there are combining characters and 'delcombine' is set
// move the cursor back. Don't back up before the base
// character.
- if (l_enc_utf8 && l_p_deco && cpc[0] != NUL) {
+ if (l_p_deco && cpc[0] != NUL) {
inc_cursor();
}
if (revins_chars) {
@@ -8522,13 +8481,10 @@ static void ins_right(void)
AppendCharToRedobuff(K_RIGHT);
}
curwin->w_set_curswant = true;
- if (virtual_active())
+ if (virtual_active()) {
oneright();
- else {
- if (has_mbyte)
- curwin->w_cursor.col += (*mb_ptr2len)(get_cursor_pos_ptr());
- else
- ++curwin->w_cursor.col;
+ } else {
+ curwin->w_cursor.col += utfc_ptr2len(get_cursor_pos_ptr());
}
revins_legal++;