diff --git a/7.1.104 b/7.1.104 new file mode 100644 index 0000000..2c330f8 --- /dev/null +++ b/7.1.104 @@ -0,0 +1,538 @@ +To: vim-dev@vim.org +Subject: patch 7.1.104 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.104 (after 7.1.095) +Problem: When 'lazyredraw' is set a focus event causes redraw to be + postponed until a key is pressed. +Solution: Instead of not returning from vgetc() when a focus event is + encountered return K_IGNORE. Add plain_vgetc() for when the + caller doesn't want to get K_IGNORE. +Files: src/digraph.c, src/edit.c, src/ex_cmds.c, src/ex_getln.c, + src/getchar.c, src/normal.c, src/proto/getchar.pro, src/window.c + + +*** ../vim-7.1.103/src/digraph.c Sat Jul 7 13:57:39 2007 +--- src/digraph.c Thu Sep 13 16:11:54 2007 +*************** +*** 2028,2034 **** + + ++no_mapping; + ++allow_keys; +! c = safe_vgetc(); + --no_mapping; + --allow_keys; + if (c != ESC) /* ESC cancels CTRL-K */ +--- 2028,2034 ---- + + ++no_mapping; + ++allow_keys; +! c = plain_vgetc(); + --no_mapping; + --allow_keys; + if (c != ESC) /* ESC cancels CTRL-K */ +*************** +*** 2050,2056 **** + #endif + ++no_mapping; + ++allow_keys; +! cc = safe_vgetc(); + --no_mapping; + --allow_keys; + if (cc != ESC) /* ESC cancels CTRL-K */ +--- 2050,2056 ---- + #endif + ++no_mapping; + ++allow_keys; +! cc = plain_vgetc(); + --no_mapping; + --allow_keys; + if (cc != ESC) /* ESC cancels CTRL-K */ +*************** +*** 2350,2356 **** + if (*curbuf->b_p_keymap == NUL) + { + /* Stop any active keymap and clear the table. Also remove +! * b:keymap_unload, as no keymap is active now. */ + keymap_unload(); + do_cmdline_cmd((char_u *)"unlet! b:keymap_name"); + } +--- 2350,2356 ---- + if (*curbuf->b_p_keymap == NUL) + { + /* Stop any active keymap and clear the table. Also remove +! * b:keymap_name, as no keymap is active now. */ + keymap_unload(); + do_cmdline_cmd((char_u *)"unlet! b:keymap_name"); + } +*** ../vim-7.1.103/src/edit.c Sun Aug 12 16:38:03 2007 +--- src/edit.c Thu Sep 13 16:17:54 2007 +*************** +*** 788,794 **** + ins_redraw(FALSE); + ++no_mapping; + ++allow_keys; +! c = safe_vgetc(); + --no_mapping; + --allow_keys; + if (c != Ctrl_N && c != Ctrl_G && c != Ctrl_O) +--- 788,794 ---- + ins_redraw(FALSE); + ++no_mapping; + ++allow_keys; +! c = plain_vgetc(); + --no_mapping; + --allow_keys; + if (c != Ctrl_N && c != Ctrl_G && c != Ctrl_O) +*************** +*** 981,987 **** + #ifdef FEAT_NETBEANS_INTG + case K_F21: /* NetBeans command */ + ++no_mapping; /* don't map the next key hits */ +! i = safe_vgetc(); + --no_mapping; + netbeans_keycommand(i); + break; +--- 981,987 ---- + #ifdef FEAT_NETBEANS_INTG + case K_F21: /* NetBeans command */ + ++no_mapping; /* don't map the next key hits */ +! i = plain_vgetc(); + --no_mapping; + netbeans_keycommand(i); + break; +*************** +*** 5224,5233 **** + i = 0; + for (;;) + { +! do +! nc = safe_vgetc(); +! while (nc == K_IGNORE || nc == K_VER_SCROLLBAR +! || nc == K_HOR_SCROLLBAR); + #ifdef FEAT_CMDL_INFO + if (!(State & CMDLINE) + # ifdef FEAT_MBYTE +--- 5224,5230 ---- + i = 0; + for (;;) + { +! nc = plain_vgetc(); + #ifdef FEAT_CMDL_INFO + if (!(State & CMDLINE) + # ifdef FEAT_MBYTE +*************** +*** 7575,7581 **** + * deleted when ESC is hit. + */ + ++no_mapping; +! regname = safe_vgetc(); + #ifdef FEAT_LANGMAP + LANGMAP_ADJUST(regname, TRUE); + #endif +--- 7572,7578 ---- + * deleted when ESC is hit. + */ + ++no_mapping; +! regname = plain_vgetc(); + #ifdef FEAT_LANGMAP + LANGMAP_ADJUST(regname, TRUE); + #endif +*************** +*** 7586,7592 **** + #ifdef FEAT_CMDL_INFO + add_to_showcmd_c(literally); + #endif +! regname = safe_vgetc(); + #ifdef FEAT_LANGMAP + LANGMAP_ADJUST(regname, TRUE); + #endif +--- 7583,7589 ---- + #ifdef FEAT_CMDL_INFO + add_to_showcmd_c(literally); + #endif +! regname = plain_vgetc(); + #ifdef FEAT_LANGMAP + LANGMAP_ADJUST(regname, TRUE); + #endif +*************** +*** 7677,7683 **** + * deleted when ESC is hit. + */ + ++no_mapping; +! c = safe_vgetc(); + --no_mapping; + switch (c) + { +--- 7674,7680 ---- + * deleted when ESC is hit. + */ + ++no_mapping; +! c = plain_vgetc(); + --no_mapping; + switch (c) + { +*************** +*** 9356,9362 **** + * mode message to be deleted when ESC is hit */ + ++no_mapping; + ++allow_keys; +! c = safe_vgetc(); + --no_mapping; + --allow_keys; + if (IS_SPECIAL(c) || mod_mask) /* special key */ +--- 9353,9359 ---- + * mode message to be deleted when ESC is hit */ + ++no_mapping; + ++allow_keys; +! c = plain_vgetc(); + --no_mapping; + --allow_keys; + if (IS_SPECIAL(c) || mod_mask) /* special key */ +*************** +*** 9388,9394 **** + } + ++no_mapping; + ++allow_keys; +! cc = safe_vgetc(); + --no_mapping; + --allow_keys; + if (cc != ESC) +--- 9385,9391 ---- + } + ++no_mapping; + ++allow_keys; +! cc = plain_vgetc(); + --no_mapping; + --allow_keys; + if (cc != ESC) +*** ../vim-7.1.103/src/ex_cmds.c Tue Aug 21 15:28:32 2007 +--- src/ex_cmds.c Thu Sep 13 16:19:40 2007 +*************** +*** 4498,4504 **** + * + * The new text is built up in new_start[]. It has some extra + * room to avoid using alloc()/free() too often. new_start_len is +! * the lenght of the allocated memory at new_start. + * + * Make a copy of the old line, so it won't be taken away when + * updating the screen or handling a multi-line match. The "old_" +--- 4499,4505 ---- + * + * The new text is built up in new_start[]. It has some extra + * room to avoid using alloc()/free() too often. new_start_len is +! * the length of the allocated memory at new_start. + * + * Make a copy of the old line, so it won't be taken away when + * updating the screen or handling a multi-line match. The "old_" +*************** +*** 4669,4675 **** + #endif + ++no_mapping; /* don't map this key */ + ++allow_keys; /* allow special keys */ +! i = safe_vgetc(); + --allow_keys; + --no_mapping; + +--- 4670,4676 ---- + #endif + ++no_mapping; /* don't map this key */ + ++allow_keys; /* allow special keys */ +! i = plain_vgetc(); + --allow_keys; + --no_mapping; + +*** ../vim-7.1.103/src/ex_getln.c Mon Aug 6 22:27:12 2007 +--- src/ex_getln.c Thu Sep 13 16:20:49 2007 +*************** +*** 641,647 **** + { + ++no_mapping; + ++allow_keys; +! c = safe_vgetc(); + --no_mapping; + --allow_keys; + /* CTRL-\ e doesn't work when obtaining an expression. */ +--- 641,647 ---- + { + ++no_mapping; + ++allow_keys; +! c = plain_vgetc(); + --no_mapping; + --allow_keys; + /* CTRL-\ e doesn't work when obtaining an expression. */ +*************** +*** 1091,1101 **** + #endif + putcmdline('"', TRUE); + ++no_mapping; +! i = c = safe_vgetc(); /* CTRL-R */ + if (i == Ctrl_O) + i = Ctrl_R; /* CTRL-R CTRL-O == CTRL-R CTRL-R */ + if (i == Ctrl_R) +! c = safe_vgetc(); /* CTRL-R CTRL-R */ + --no_mapping; + #ifdef FEAT_EVAL + /* +--- 1091,1101 ---- + #endif + putcmdline('"', TRUE); + ++no_mapping; +! i = c = plain_vgetc(); /* CTRL-R */ + if (i == Ctrl_O) + i = Ctrl_R; /* CTRL-R CTRL-O == CTRL-R CTRL-R */ + if (i == Ctrl_R) +! c = plain_vgetc(); /* CTRL-R CTRL-R */ + --no_mapping; + #ifdef FEAT_EVAL + /* +*** ../vim-7.1.103/src/getchar.c Wed Sep 5 21:45:54 2007 +--- src/getchar.c Thu Sep 13 16:16:53 2007 +*************** +*** 1597,1608 **** + } + #endif + #ifdef FEAT_GUI +! /* The caller doesn't need to know that the focus event is delayed +! * until getting a character. */ + if (c == K_FOCUSGAINED || c == K_FOCUSLOST) + { + ui_focus_change(c == K_FOCUSGAINED); +! continue; + } + + /* Translate K_CSI to CSI. The special key is only used to avoid +--- 1597,1609 ---- + } + #endif + #ifdef FEAT_GUI +! /* Handle focus event here, so that the caller doesn't need to +! * know about it. Return K_IGNORE so that we loop once (needed if +! * 'lazyredraw' is set). */ + if (c == K_FOCUSGAINED || c == K_FOCUSLOST) + { + ui_focus_change(c == K_FOCUSGAINED); +! c = K_IGNORE; + } + + /* Translate K_CSI to CSI. The special key is only used to avoid +*************** +*** 1744,1749 **** +--- 1745,1766 ---- + c = vgetc(); + if (c == NUL) + c = get_keystroke(); ++ return c; ++ } ++ ++ /* ++ * Like safe_vgetc(), but loop to handle K_IGNORE. ++ * Also ignore scrollbar events. ++ */ ++ int ++ plain_vgetc() ++ { ++ int c; ++ ++ do ++ { ++ c = safe_vgetc(); ++ } while (c == K_IGNORE || c == K_VER_SCROLLBAR || c == K_HOR_SCROLLBAR); + return c; + } + +*** ../vim-7.1.103/src/normal.c Thu Sep 13 15:33:18 2007 +--- src/normal.c Thu Sep 13 16:24:51 2007 +*************** +*** 696,702 **** + ++allow_keys; /* no mapping for nchar, but keys */ + } + ++no_zero_mapping; /* don't map zero here */ +! c = safe_vgetc(); + #ifdef FEAT_LANGMAP + LANGMAP_ADJUST(c, TRUE); + #endif +--- 696,702 ---- + ++allow_keys; /* no mapping for nchar, but keys */ + } + ++no_zero_mapping; /* don't map zero here */ +! c = plain_vgetc(); + #ifdef FEAT_LANGMAP + LANGMAP_ADJUST(c, TRUE); + #endif +*************** +*** 721,727 **** + ca.count0 = 0; + ++no_mapping; + ++allow_keys; /* no mapping for nchar, but keys */ +! c = safe_vgetc(); /* get next character */ + #ifdef FEAT_LANGMAP + LANGMAP_ADJUST(c, TRUE); + #endif +--- 721,727 ---- + ca.count0 = 0; + ++no_mapping; + ++allow_keys; /* no mapping for nchar, but keys */ +! c = plain_vgetc(); /* get next character */ + #ifdef FEAT_LANGMAP + LANGMAP_ADJUST(c, TRUE); + #endif +*************** +*** 900,906 **** + * For 'g' get the next character now, so that we can check for + * "gr", "g'" and "g`". + */ +! ca.nchar = safe_vgetc(); + #ifdef FEAT_LANGMAP + LANGMAP_ADJUST(ca.nchar, TRUE); + #endif +--- 900,906 ---- + * For 'g' get the next character now, so that we can check for + * "gr", "g'" and "g`". + */ +! ca.nchar = plain_vgetc(); + #ifdef FEAT_LANGMAP + LANGMAP_ADJUST(ca.nchar, TRUE); + #endif +*************** +*** 957,963 **** + im_set_active(TRUE); + #endif + +! *cp = safe_vgetc(); + + if (langmap_active) + { +--- 957,963 ---- + im_set_active(TRUE); + #endif + +! *cp = plain_vgetc(); + + if (langmap_active) + { +*************** +*** 1045,1051 **** + } + if (c > 0) + { +! c = safe_vgetc(); + if (c != Ctrl_N && c != Ctrl_G) + vungetc(c); + else +--- 1045,1051 ---- + } + if (c > 0) + { +! c = plain_vgetc(); + if (c != Ctrl_N && c != Ctrl_G) + vungetc(c); + else +*************** +*** 1064,1070 **** + while (enc_utf8 && lang && (c = vpeekc()) > 0 + && (c >= 0x100 || MB_BYTE2LEN(vpeekc()) > 1)) + { +! c = safe_vgetc(); + if (!utf_iscomposing(c)) + { + vungetc(c); /* it wasn't, put it back */ +--- 1064,1070 ---- + while (enc_utf8 && lang && (c = vpeekc()) > 0 + && (c >= 0x100 || MB_BYTE2LEN(vpeekc()) > 1)) + { +! c = plain_vgetc(); + if (!utf_iscomposing(c)) + { + vungetc(c); /* it wasn't, put it back */ +*************** +*** 4564,4570 **** + #endif + ++no_mapping; + ++allow_keys; /* no mapping for nchar, but allow key codes */ +! nchar = safe_vgetc(); + #ifdef FEAT_LANGMAP + LANGMAP_ADJUST(nchar, TRUE); + #endif +--- 4564,4570 ---- + #endif + ++no_mapping; + ++allow_keys; /* no mapping for nchar, but allow key codes */ +! nchar = plain_vgetc(); + #ifdef FEAT_LANGMAP + LANGMAP_ADJUST(nchar, TRUE); + #endif +*************** +*** 4922,4928 **** + case 'u': /* "zug" and "zuw": undo "zg" and "zw" */ + ++no_mapping; + ++allow_keys; /* no mapping for nchar, but allow key codes */ +! nchar = safe_vgetc(); + #ifdef FEAT_LANGMAP + LANGMAP_ADJUST(nchar, TRUE); + #endif +--- 4922,4928 ---- + case 'u': /* "zug" and "zuw": undo "zg" and "zw" */ + ++no_mapping; + ++allow_keys; /* no mapping for nchar, but allow key codes */ +! nchar = plain_vgetc(); + #ifdef FEAT_LANGMAP + LANGMAP_ADJUST(nchar, TRUE); + #endif +*** ../vim-7.1.103/src/proto/getchar.pro Sun May 6 15:04:24 2007 +--- src/proto/getchar.pro Thu Sep 13 16:13:19 2007 +*************** +*** 38,43 **** +--- 38,44 ---- + void updatescript __ARGS((int c)); + int vgetc __ARGS((void)); + int safe_vgetc __ARGS((void)); ++ int plain_vgetc __ARGS((void)); + int vpeekc __ARGS((void)); + int vpeekc_nomap __ARGS((void)); + int vpeekc_any __ARGS((void)); +*** ../vim-7.1.103/src/window.c Sun Aug 12 16:55:01 2007 +--- src/window.c Thu Sep 13 16:25:01 2007 +*************** +*** 584,590 **** + ++no_mapping; + ++allow_keys; /* no mapping for xchar, but allow key codes */ + if (xchar == NUL) +! xchar = safe_vgetc(); + #ifdef FEAT_LANGMAP + LANGMAP_ADJUST(xchar, TRUE); + #endif +--- 584,590 ---- + ++no_mapping; + ++allow_keys; /* no mapping for xchar, but allow key codes */ + if (xchar == NUL) +! xchar = plain_vgetc(); + #ifdef FEAT_LANGMAP + LANGMAP_ADJUST(xchar, TRUE); + #endif +*** ../vim-7.1.103/src/version.c Thu Sep 13 15:33:18 2007 +--- src/version.c Thu Sep 13 18:22:59 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 104, + /**/ + +-- +ARTHUR: I am your king! +WOMAN: Well, I didn't vote for you. +ARTHUR: You don't vote for kings. +WOMAN: Well, 'ow did you become king then? + The Quest for the Holy Grail (Monty Python) + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org ///