| To: vim-dev@vim.org |
| Subject: patch 7.1.104 |
| Fcc: outbox |
| From: Bram Moolenaar <Bram@moolenaar.net> |
| 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 |
| |
| |
| |
| |
| |
| *** 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"); |
| } |
| |
| |
| |
| *** 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) |
| |
| |
| |
| *** 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; |
| |
| |
| |
| |
| *** 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 <char> */ |
| 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 <char> */ |
| --no_mapping; |
| #ifdef FEAT_EVAL |
| /* |
| --- 1091,1101 ---- |
| #endif |
| putcmdline('"', TRUE); |
| ++no_mapping; |
| ! i = c = plain_vgetc(); /* CTRL-R <char> */ |
| 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 <char> */ |
| --no_mapping; |
| #ifdef FEAT_EVAL |
| /* |
| |
| |
| |
| *** 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; |
| } |
| |
| |
| |
| |
| *** 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 |
| |
| |
| |
| *** 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)); |
| |
| |
| |
| *** 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 |
| |
| |
| |
| *** 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 /// |