summaryrefslogtreecommitdiffstats
path: root/src/term.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-02-15 23:06:45 +0100
committerBram Moolenaar <Bram@vim.org>2020-02-15 23:06:45 +0100
commitf4140488c72cad4dbf5449dba099cfa7de7bbb22 (patch)
treeef69c7720d31e0871cd01c41d447a5440e9d8e9c /src/term.c
parentebdf3c964a901fc00c9009689f7cfda478342c51 (diff)
patch 8.2.0260: several lines of code are duplicatedv8.2.0260
Problem: Several lines of code are duplicated. Solution: Move duplicated code to a function. (Yegappan Lakshmanan, closes #5330)
Diffstat (limited to 'src/term.c')
-rw-r--r--src/term.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/term.c b/src/term.c
index b942b0f4b9..d269eb83c0 100644
--- a/src/term.c
+++ b/src/term.c
@@ -6390,3 +6390,34 @@ cterm_color2rgb(int nr, char_u *r, char_u *g, char_u *b, char_u *ansi_idx)
}
#endif
+/*
+ * Replace K_BS by <BS> and K_DEL by <DEL>
+ */
+ void
+term_replace_bs_del_keycode(char_u *ta_buf, int ta_len, int len)
+{
+ int i;
+ int c;
+
+ for (i = ta_len; i < ta_len + len; ++i)
+ {
+ if (ta_buf[i] == CSI && len - i > 2)
+ {
+ c = TERMCAP2KEY(ta_buf[i + 1], ta_buf[i + 2]);
+ if (c == K_DEL || c == K_KDEL || c == K_BS)
+ {
+ mch_memmove(ta_buf + i + 1, ta_buf + i + 3,
+ (size_t)(len - i - 2));
+ if (c == K_DEL || c == K_KDEL)
+ ta_buf[i] = DEL;
+ else
+ ta_buf[i] = Ctrl_H;
+ len -= 2;
+ }
+ }
+ else if (ta_buf[i] == '\r')
+ ta_buf[i] = '\n';
+ if (has_mbyte)
+ i += (*mb_ptr2len_len)(ta_buf + i, ta_len + len - i) - 1;
+ }
+}