summaryrefslogtreecommitdiffstats
path: root/source/ap/vim/patches/7.3.431
diff options
context:
space:
mode:
author Patrick J Volkerding <volkerdi@slackware.com>2012-09-26 01:10:42 +0000
committer Eric Hameleers <alien@slackware.com>2018-05-31 22:51:55 +0200
commit9664bee729d487bcc0a0bc35859f8e13d5421c75 (patch)
treeb428a16618e36ed864a8d76ea3435e19a452bf90 /source/ap/vim/patches/7.3.431
parent75a4a592e5ccda30715f93563d741b83e0dcf39e (diff)
downloadcurrent-9664bee729d487bcc0a0bc35859f8e13d5421c75.tar.gz
current-9664bee729d487bcc0a0bc35859f8e13d5421c75.tar.xz
Slackware 14.0slackware-14.0
Wed Sep 26 01:10:42 UTC 2012 Slackware 14.0 x86_64 stable is released! We're perfectionists here at Slackware, so this release has been a long time a-brewing. But we think you'll agree that it was worth the wait. Slackware 14.0 combines modern components, ease of use, and flexible configuration... our "KISS" philosophy demands it. The ISOs are off to be replicated, a 6 CD-ROM 32-bit set and a dual-sided 32-bit/64-bit x86/x86_64 DVD. Please consider supporting the Slackware project by picking up a copy from store.slackware.com. We're taking pre-orders now, and offer a discount if you sign up for a subscription. Thanks to everyone who helped make this happen. The Slackware team, the upstream developers, and (of course) the awesome Slackware user community. Have fun! :-)
Diffstat (limited to 'source/ap/vim/patches/7.3.431')
-rw-r--r--source/ap/vim/patches/7.3.431280
1 files changed, 280 insertions, 0 deletions
diff --git a/source/ap/vim/patches/7.3.431 b/source/ap/vim/patches/7.3.431
new file mode 100644
index 000000000..2e4e62b3f
--- /dev/null
+++ b/source/ap/vim/patches/7.3.431
@@ -0,0 +1,280 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.431
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.431
+Problem: Fetching a key at a prompt may be confused by escape sequences.
+ Especially when getting a prompt at a VimEnter autocommand.
+ (Alex Efros)
+Solution: Properly handle escape sequences deleted by check_termcode().
+Files: src/getchar.c, src/misc1.c, src/term.c, src/proto/term.pro
+
+
+*** ../vim-7.3.430/src/getchar.c 2012-02-05 01:18:41.000000000 +0100
+--- src/getchar.c 2012-02-05 22:04:33.000000000 +0100
+***************
+*** 2282,2288 ****
+ typebuf.tb_off] == RM_YES))
+ && !timedout)
+ {
+! keylen = check_termcode(max_mlen + 1, NULL, 0);
+
+ /* If no termcode matched but 'pastetoggle'
+ * matched partially it's like an incomplete key
+--- 2282,2289 ----
+ typebuf.tb_off] == RM_YES))
+ && !timedout)
+ {
+! keylen = check_termcode(max_mlen + 1,
+! NULL, 0, NULL);
+
+ /* If no termcode matched but 'pastetoggle'
+ * matched partially it's like an incomplete key
+*** ../vim-7.3.430/src/misc1.c 2012-01-10 18:37:53.000000000 +0100
+--- src/misc1.c 2012-02-05 21:59:53.000000000 +0100
+***************
+*** 3105,3112 ****
+ int
+ get_keystroke()
+ {
+! #define CBUFLEN 151
+! char_u buf[CBUFLEN];
+ int len = 0;
+ int n;
+ int save_mapped_ctrl_c = mapped_ctrl_c;
+--- 3105,3113 ----
+ int
+ get_keystroke()
+ {
+! char_u *buf = NULL;
+! int buflen = 150;
+! int maxlen;
+ int len = 0;
+ int n;
+ int save_mapped_ctrl_c = mapped_ctrl_c;
+***************
+*** 3118,3129 ****
+ cursor_on();
+ out_flush();
+
+ /* First time: blocking wait. Second time: wait up to 100ms for a
+! * terminal code to complete. Leave some room for check_termcode() to
+! * insert a key code into (max 5 chars plus NUL). And
+! * fix_input_buffer() can triple the number of bytes. */
+! n = ui_inchar(buf + len, (CBUFLEN - 6 - len) / 3,
+! len == 0 ? -1L : 100L, 0);
+ if (n > 0)
+ {
+ /* Replace zero and CSI by a special key code. */
+--- 3119,3147 ----
+ cursor_on();
+ out_flush();
+
++ /* Leave some room for check_termcode() to insert a key code into (max
++ * 5 chars plus NUL). And fix_input_buffer() can triple the number of
++ * bytes. */
++ maxlen = (buflen - 6 - len) / 3;
++ if (buf == NULL)
++ buf = alloc(buflen);
++ else if (maxlen < 10)
++ {
++ /* Need some more space. This migth happen when receiving a long
++ * escape sequence. */
++ buflen += 100;
++ buf = vim_realloc(buf, buflen);
++ maxlen = (buflen - 6 - len) / 3;
++ }
++ if (buf == NULL)
++ {
++ do_outofmem_msg((long_u)buflen);
++ return ESC; /* panic! */
++ }
++
+ /* First time: blocking wait. Second time: wait up to 100ms for a
+! * terminal code to complete. */
+! n = ui_inchar(buf + len, maxlen, len == 0 ? -1L : 100L, 0);
+ if (n > 0)
+ {
+ /* Replace zero and CSI by a special key code. */
+***************
+*** 3135,3141 ****
+ ++waited; /* keep track of the waiting time */
+
+ /* Incomplete termcode and not timed out yet: get more characters */
+! if ((n = check_termcode(1, buf, len)) < 0
+ && (!p_ttimeout || waited * 100L < (p_ttm < 0 ? p_tm : p_ttm)))
+ continue;
+
+--- 3153,3159 ----
+ ++waited; /* keep track of the waiting time */
+
+ /* Incomplete termcode and not timed out yet: get more characters */
+! if ((n = check_termcode(1, buf, buflen, &len)) < 0
+ && (!p_ttimeout || waited * 100L < (p_ttm < 0 ? p_tm : p_ttm)))
+ continue;
+
+***************
+*** 3203,3209 ****
+ {
+ if (MB_BYTE2LEN(n) > len)
+ continue; /* more bytes to get */
+! buf[len >= CBUFLEN ? CBUFLEN - 1 : len] = NUL;
+ n = (*mb_ptr2char)(buf);
+ }
+ #endif
+--- 3221,3227 ----
+ {
+ if (MB_BYTE2LEN(n) > len)
+ continue; /* more bytes to get */
+! buf[len >= buflen ? buflen - 1 : len] = NUL;
+ n = (*mb_ptr2char)(buf);
+ }
+ #endif
+***************
+*** 3213,3218 ****
+--- 3231,3237 ----
+ #endif
+ break;
+ }
++ vim_free(buf);
+
+ mapped_ctrl_c = save_mapped_ctrl_c;
+ return n;
+*** ../vim-7.3.430/src/term.c 2012-01-26 13:01:54.000000000 +0100
+--- src/term.c 2012-02-05 21:45:09.000000000 +0100
+***************
+*** 3785,3798 ****
+ * 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.
+! * When "buf" is not NULL, it is used instead of typebuf.tb_buf[]. "buflen" is
+! * then the length of the string in buf[].
+ */
+ int
+! check_termcode(max_offset, buf, buflen)
+ int max_offset;
+ char_u *buf;
+! int buflen;
+ {
+ char_u *tp;
+ char_u *p;
+--- 3785,3800 ----
+ * 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.
+! * When "buf" is not NULL, buf[bufsize] is used instead of typebuf.tb_buf[].
+! * "buflen" is then the length of the string in buf[] and is updated for
+! * inserts and deletes.
+ */
+ int
+! check_termcode(max_offset, buf, bufsize, buflen)
+ int max_offset;
+ char_u *buf;
+! int bufsize;
+! int *buflen;
+ {
+ char_u *tp;
+ char_u *p;
+***************
+*** 3864,3873 ****
+ }
+ else
+ {
+! if (offset >= buflen)
+ break;
+ tp = buf + offset;
+! len = buflen - offset;
+ }
+
+ /*
+--- 3866,3875 ----
+ }
+ else
+ {
+! if (offset >= *buflen)
+ break;
+ tp = buf + offset;
+! len = *buflen - offset;
+ }
+
+ /*
+***************
+*** 5002,5013 ****
+ if (extra < 0)
+ /* remove matched characters */
+ mch_memmove(buf + offset, buf + offset - extra,
+! (size_t)(buflen + offset + extra));
+ else if (extra > 0)
+! /* insert the extra space we need */
+ mch_memmove(buf + offset + extra, buf + offset,
+! (size_t)(buflen - offset));
+ mch_memmove(buf + offset, string, (size_t)new_slen);
+ }
+ return retval == 0 ? (len + extra + offset) : retval;
+ }
+--- 5004,5021 ----
+ if (extra < 0)
+ /* remove matched characters */
+ mch_memmove(buf + offset, buf + offset - extra,
+! (size_t)(*buflen + offset + extra));
+ else if (extra > 0)
+! {
+! /* Insert the extra space we need. If there is insufficient
+! * space return -1. */
+! if (*buflen + extra + new_slen >= bufsize)
+! return -1;
+ mch_memmove(buf + offset + extra, buf + offset,
+! (size_t)(*buflen - offset));
+! }
+ mch_memmove(buf + offset, string, (size_t)new_slen);
++ *buflen = *buflen + extra + new_slen;
+ }
+ return retval == 0 ? (len + extra + offset) : retval;
+ }
+*** ../vim-7.3.430/src/proto/term.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/term.pro 2012-02-05 21:45:16.000000000 +0100
+***************
+*** 50,56 ****
+ char_u *get_termcode __ARGS((int i));
+ void del_termcode __ARGS((char_u *name));
+ void set_mouse_topline __ARGS((win_T *wp));
+! int check_termcode __ARGS((int max_offset, char_u *buf, int buflen));
+ char_u *replace_termcodes __ARGS((char_u *from, char_u **bufp, int from_part, int do_lt, int special));
+ int find_term_bykeys __ARGS((char_u *src));
+ void show_termcodes __ARGS((void));
+--- 50,56 ----
+ char_u *get_termcode __ARGS((int i));
+ void del_termcode __ARGS((char_u *name));
+ void set_mouse_topline __ARGS((win_T *wp));
+! int check_termcode __ARGS((int max_offset, char_u *buf, int bufsize, int *buflen));
+ char_u *replace_termcodes __ARGS((char_u *from, char_u **bufp, int from_part, int do_lt, int special));
+ int find_term_bykeys __ARGS((char_u *src));
+ void show_termcodes __ARGS((void));
+*** ../vim-7.3.430/src/version.c 2012-02-05 20:08:30.000000000 +0100
+--- src/version.c 2012-02-05 22:03:43.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 431,
+ /**/
+
+--
+"You know, it's at times like this when I'm trapped in a Vogon airlock with
+a man from Betelgeuse and about to die of asphyxiation in deep space that I
+really wish I'd listened to what my mother told me when I was young!"
+"Why, what did she tell you?"
+"I don't know, I didn't listen!"
+ -- Arthur Dent and Ford Prefect in Douglas Adams'
+ "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///