summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <bram@vim.org>2010-12-30 12:30:31 +0100
committerBram Moolenaar <bram@vim.org>2010-12-30 12:30:31 +0100
commit6b1b3504b6d332173e53fb0cb33ac708d292c6df (patch)
tree8112e7c8755f6466d53593195b561c60e644017c
parent3bfd8afc15ab464a7ec182ce8cd976c55e29fe5e (diff)
downloadvim-6b1b3504b6d332173e53fb0cb33ac708d292c6df.tar.gz
updated for version 7.3.091v7.3.091v7-3-091
Problem: "vim -w foo" writes special key codes for removed escape sequences. (Josh Triplett) Solution: Don't write K_IGNORE codes.
-rw-r--r--src/getchar.c29
-rw-r--r--src/misc1.c7
-rw-r--r--src/term.c11
-rw-r--r--src/version.c2
-rw-r--r--src/vim.h4
5 files changed, 34 insertions, 19 deletions
diff --git a/src/getchar.c b/src/getchar.c
index ecb03790..63b93a54 100644
--- a/src/getchar.c
+++ b/src/getchar.c
@@ -1506,9 +1506,6 @@ updatescript(c)
}
}
-#define KL_PART_KEY -1 /* keylen value for incomplete key-code */
-#define KL_PART_MAP -2 /* keylen value for incomplete mapping */
-
/*
* Get the next input character.
* Can return a special key or a multi-byte character.
@@ -2171,7 +2168,7 @@ vgetorpeek(advance)
if (!timedout)
{
/* break at a partly match */
- keylen = KL_PART_MAP;
+ keylen = KEYLEN_PART_MAP;
break;
}
}
@@ -2192,7 +2189,7 @@ vgetorpeek(advance)
/* If no partly match found, use the longest full
* match. */
- if (keylen != KL_PART_MAP)
+ if (keylen != KEYLEN_PART_MAP)
{
mp = mp_match;
keylen = mp_match_len;
@@ -2230,7 +2227,7 @@ vgetorpeek(advance)
}
/* Need more chars for partly match. */
if (mlen == typebuf.tb_len)
- keylen = KL_PART_KEY;
+ keylen = KEYLEN_PART_KEY;
else if (max_mlen < mlen)
/* no match, may have to check for termcode at
* next character */
@@ -2238,7 +2235,7 @@ vgetorpeek(advance)
}
if ((mp == NULL || max_mlen >= mp_match_len)
- && keylen != KL_PART_MAP)
+ && keylen != KEYLEN_PART_MAP)
{
int save_keylen = keylen;
@@ -2264,8 +2261,8 @@ vgetorpeek(advance)
/* If no termcode matched but 'pastetoggle'
* matched partially it's like an incomplete key
* sequence. */
- if (keylen == 0 && save_keylen == KL_PART_KEY)
- keylen = KL_PART_KEY;
+ if (keylen == 0 && save_keylen == KEYLEN_PART_KEY)
+ keylen = KEYLEN_PART_KEY;
/*
* When getting a partial match, but the last
@@ -2302,7 +2299,7 @@ vgetorpeek(advance)
continue;
}
if (*s == NUL) /* need more characters */
- keylen = KL_PART_KEY;
+ keylen = KEYLEN_PART_KEY;
}
if (keylen >= 0)
#endif
@@ -2339,7 +2336,8 @@ vgetorpeek(advance)
if (keylen > 0) /* full matching terminal code */
{
#if defined(FEAT_GUI) && defined(FEAT_MENU)
- if (typebuf.tb_buf[typebuf.tb_off] == K_SPECIAL
+ if (typebuf.tb_len >= 2
+ && typebuf.tb_buf[typebuf.tb_off] == K_SPECIAL
&& typebuf.tb_buf[typebuf.tb_off + 1]
== KS_MENU)
{
@@ -2381,7 +2379,7 @@ vgetorpeek(advance)
/* Partial match: get some more characters. When a
* matching mapping was found use that one. */
if (mp == NULL || keylen < 0)
- keylen = KL_PART_KEY;
+ keylen = KEYLEN_PART_KEY;
else
keylen = mp_match_len;
}
@@ -2553,7 +2551,8 @@ vgetorpeek(advance)
#endif
&& typebuf.tb_maplen == 0
&& (State & INSERT)
- && (p_timeout || (keylen == KL_PART_KEY && p_ttimeout))
+ && (p_timeout
+ || (keylen == KEYLEN_PART_KEY && p_ttimeout))
&& (c = inchar(typebuf.tb_buf + typebuf.tb_off
+ typebuf.tb_len, 3, 25L,
typebuf.tb_change_cnt)) == 0)
@@ -2783,9 +2782,9 @@ vgetorpeek(advance)
? 0
: ((typebuf.tb_len == 0
|| !(p_timeout || (p_ttimeout
- && keylen == KL_PART_KEY)))
+ && keylen == KEYLEN_PART_KEY)))
? -1L
- : ((keylen == KL_PART_KEY && p_ttm >= 0)
+ : ((keylen == KEYLEN_PART_KEY && p_ttm >= 0)
? p_ttm
: p_tm)), typebuf.tb_change_cnt);
diff --git a/src/misc1.c b/src/misc1.c
index b14f2ed1..7235617f 100644
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -3114,10 +3114,11 @@ get_keystroke()
&& (!p_ttimeout || waited * 100L < (p_ttm < 0 ? p_tm : p_ttm)))
continue;
- /* found a termcode: adjust length */
- if (n > 0)
+ if (n == KEYLEN_REMOVED) /* key code removed */
+ continue;
+ if (n > 0) /* found a termcode: adjust length */
len = n;
- if (len == 0) /* nothing typed yet */
+ if (len == 0) /* nothing typed yet */
continue;
/* Handle modifier and/or special key code. */
diff --git a/src/term.c b/src/term.c
index 8c426620..15a38649 100644
--- a/src/term.c
+++ b/src/term.c
@@ -3828,6 +3828,7 @@ set_mouse_topline(wp)
* Check from typebuf.tb_buf[typebuf.tb_off] to typebuf.tb_buf[typebuf.tb_off
* + max_offset].
* Return 0 for no match, -1 for partial match, > 0 for full match.
+ * Return KEYLEN_REMOVED when a key code was deleted.
* With a match, the match is removed, the replacement code is inserted in
* typebuf.tb_buf[] and the number of characters in typebuf.tb_buf[] is
* returned.
@@ -3845,6 +3846,7 @@ check_termcode(max_offset, buf, buflen)
int slen = 0; /* init for GCC */
int modslen;
int len;
+ int retval = 0;
int offset;
char_u key_name[2];
int modifiers;
@@ -4940,6 +4942,13 @@ check_termcode(max_offset, buf, buflen)
#endif
string[new_slen++] = key_name[1];
}
+ else if (new_slen == 0 && key_name[0] == KS_EXTRA
+ && key_name[1] == KE_IGNORE)
+ {
+ /* Do not put K_IGNORE into the buffer, do return KEYLEN_REMOVED
+ * to indicate what happened. */
+ retval = KEYLEN_REMOVED;
+ }
else
{
string[new_slen++] = K_SPECIAL;
@@ -4976,7 +4985,7 @@ check_termcode(max_offset, buf, buflen)
(size_t)(buflen - offset));
mch_memmove(buf + offset, string, (size_t)new_slen);
}
- return (len + extra + offset);
+ return retval == 0 ? (len + extra + offset) : retval;
}
return 0; /* no match found */
diff --git a/src/version.c b/src/version.c
index 2e9363e8..f1af5d33 100644
--- a/src/version.c
+++ b/src/version.c
@@ -715,6 +715,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 91,
+/**/
90,
/**/
89,
diff --git a/src/vim.h b/src/vim.h
index 15595bf0..24c1b16e 100644
--- a/src/vim.h
+++ b/src/vim.h
@@ -2211,4 +2211,8 @@ typedef int VimClipboard; /* This is required for the prototypes. */
#define MSCR_LEFT -1
#define MSCR_RIGHT -2
+#define KEYLEN_PART_KEY -1 /* keylen value for incomplete key-code */
+#define KEYLEN_PART_MAP -2 /* keylen value for incomplete mapping */
+#define KEYLEN_REMOVED 9999 /* keylen value for removed sequence */
+
#endif /* VIM__H */