mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
vim-patch:7.4.207
Problem: The cursor report sequence is sometimes not recognized and results in entering replace mode. Solution: Also check for the cursor report when not asked for. https://code.google.com/p/vim/source/detail?r=2aa909427e44cd3aac7def024b66e41d0c9d0e0d
This commit is contained in:
parent
78fd9386b6
commit
71e1cccc7a
31
src/term.c
31
src/term.c
@ -2757,7 +2757,8 @@ void may_req_ambiguous_char_width(void)
|
|||||||
out_str(buf);
|
out_str(buf);
|
||||||
out_str(T_U7);
|
out_str(T_U7);
|
||||||
u7_status = U7_SENT;
|
u7_status = U7_SENT;
|
||||||
term_windgoto(0, 0);
|
out_flush();
|
||||||
|
term_windgoto(1, 0);
|
||||||
out_str((char_u *)" ");
|
out_str((char_u *)" ");
|
||||||
term_windgoto(0, 0);
|
term_windgoto(0, 0);
|
||||||
/* check for the characters now, otherwise they might be eaten by
|
/* check for the characters now, otherwise they might be eaten by
|
||||||
@ -3423,33 +3424,43 @@ int check_termcode(int max_offset, char_u *buf, int bufsize, int *buflen)
|
|||||||
&& ((tp[0] == ESC && tp[1] == '[' && len >= 3)
|
&& ((tp[0] == ESC && tp[1] == '[' && len >= 3)
|
||||||
|| (tp[0] == CSI && len >= 2))
|
|| (tp[0] == CSI && len >= 2))
|
||||||
&& (VIM_ISDIGIT(*p) || *p == '>' || *p == '?')) {
|
&& (VIM_ISDIGIT(*p) || *p == '>' || *p == '?')) {
|
||||||
|
int col;
|
||||||
|
int row_char;
|
||||||
j = 0;
|
j = 0;
|
||||||
extra = 0;
|
extra = 0;
|
||||||
for (i = 2 + (tp[0] != CSI); i < len
|
for (i = 2 + (tp[0] != CSI); i < len
|
||||||
&& !(tp[i] >= '{' && tp[i] <= '~')
|
&& !(tp[i] >= '{' && tp[i] <= '~')
|
||||||
&& !ASCII_ISALPHA(tp[i]); ++i)
|
&& !ASCII_ISALPHA(tp[i]); ++i)
|
||||||
if (tp[i] == ';' && ++j == 1)
|
if (tp[i] == ';' && ++j == 1) {
|
||||||
extra = i + 1;
|
extra = i + 1;
|
||||||
|
row_char = tp[i - 1];
|
||||||
|
}
|
||||||
if (i == len) {
|
if (i == len) {
|
||||||
LOG_TR("Not enough characters for CRV");
|
LOG_TR("Not enough characters for CRV");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
if (extra > 0) {
|
||||||
|
col = atoi((char *)tp + extra);
|
||||||
|
} else {
|
||||||
|
col = 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* Eat it when it has 2 arguments and ends in 'R'. Ignore it
|
/* Eat it when it has 2 arguments and ends in 'R'. Also when
|
||||||
* when u7_status is not "sent", <S-F3> sends something
|
* u7_status is not "sent", it may be from a previous Vim that
|
||||||
* similar. */
|
* just exited. But not for <S-F3>, it sends something
|
||||||
if (j == 1 && tp[i] == 'R' && u7_status == U7_SENT) {
|
* similar, check for row and column to make sense. */
|
||||||
|
if (j == 1 && tp[i] == 'R' && row_char == '2' && col >= 2) {
|
||||||
char *aw = NULL;
|
char *aw = NULL;
|
||||||
|
|
||||||
LOG_TR("Received U7 status");
|
LOG_TR("Received U7 status");
|
||||||
u7_status = U7_GOT;
|
u7_status = U7_GOT;
|
||||||
did_cursorhold = TRUE;
|
did_cursorhold = TRUE;
|
||||||
if (extra > 0)
|
if (col == 2) {
|
||||||
extra = atoi((char *)tp + extra);
|
|
||||||
if (extra == 2)
|
|
||||||
aw = "single";
|
aw = "single";
|
||||||
else if (extra == 3)
|
} else if (col == 3) {
|
||||||
aw = "double";
|
aw = "double";
|
||||||
|
}
|
||||||
|
|
||||||
if (aw != NULL && STRCMP(aw, p_ambw) != 0) {
|
if (aw != NULL && STRCMP(aw, p_ambw) != 0) {
|
||||||
/* Setting the option causes a screen redraw. Do that
|
/* Setting the option causes a screen redraw. Do that
|
||||||
* right away if possible, keeping any messages. */
|
* right away if possible, keeping any messages. */
|
||||||
|
@ -202,6 +202,8 @@ static char *(features[]) = {
|
|||||||
|
|
||||||
static int included_patches[] = {
|
static int included_patches[] = {
|
||||||
// Add new patch number below this line
|
// Add new patch number below this line
|
||||||
|
207,
|
||||||
|
//206,
|
||||||
205,
|
205,
|
||||||
204,
|
204,
|
||||||
203,
|
203,
|
||||||
|
Loading…
Reference in New Issue
Block a user