diff options
-rw-r--r-- | src/getchar.c | 252 | ||||
-rw-r--r-- | src/version.c | 2 |
2 files changed, 111 insertions, 143 deletions
diff --git a/src/getchar.c b/src/getchar.c index 0c1d4e8f6..fe1cc7e2e 100644 --- a/src/getchar.c +++ b/src/getchar.c @@ -1910,7 +1910,7 @@ typedef enum { /* * Handle mappings in the typeahead buffer. * - When something was mapped, return map_result_retry for recursive mappings. - * - When nothing mapped and typeahead has a character return map_result_get. + * - When nothing mapped and typeahead has a character: return map_result_get. * - When there is no match yet, return map_result_nomatch, need to get more * typeahead. */ @@ -1936,16 +1936,14 @@ handle_mapping( /* * Check for a mappable key sequence. - * Walk through one maphash[] list until we find an - * entry that matches. + * Walk through one maphash[] list until we find an entry that matches. * * Don't look for mappings if: * - no_mapping set: mapping disabled (e.g. for CTRL-V) * - maphash_valid not set: no mappings present. * - typebuf.tb_buf[typebuf.tb_off] should not be remapped * - in insert or cmdline mode and 'paste' option set - * - waiting for "hit return to continue" and CR or SPACE - * typed + * - waiting for "hit return to continue" and CR or SPACE typed * - waiting for a char with --more-- * - in Ctrl-X mode, and we get a valid char for that mode */ @@ -1961,8 +1959,7 @@ handle_mapping( && State != ASKMORE && State != CONFIRM #ifdef FEAT_INS_EXPAND - && !((ctrl_x_mode_not_default() - && vim_is_ctrl_x_key(tb_c1)) + && !((ctrl_x_mode_not_default() && vim_is_ctrl_x_key(tb_c1)) || ((compl_cont_status & CONT_LOCAL) && (tb_c1 == Ctrl_N || tb_c1 == Ctrl_P))) #endif @@ -1973,9 +1970,8 @@ handle_mapping( nolmaplen = 2; else { - LANGMAP_ADJUST(tb_c1, - (State & (CMDLINE | INSERT)) == 0 - && get_real_state() != SELECTMODE); + LANGMAP_ADJUST(tb_c1, (State & (CMDLINE | INSERT)) == 0 + && get_real_state() != SELECTMODE); nolmaplen = 0; } #endif @@ -1988,26 +1984,25 @@ handle_mapping( mp = mp2; mp2 = NULL; } + /* - * Loop until a partly matching mapping is found or - * all (local) mappings have been checked. + * Loop until a partly matching mapping is found or all (local) + * mappings have been checked. * The longest full match is remembered in "mp_match". - * A full match is only accepted if there is no partly - * match, so "aa" and "aaa" can both be mapped. + * A full match is only accepted if there is no partly match, so "aa" + * and "aaa" can both be mapped. */ mp_match = NULL; mp_match_len = 0; for ( ; mp != NULL; - mp->m_next == NULL ? (mp = mp2, mp2 = NULL) - : (mp = mp->m_next)) + mp->m_next == NULL ? (mp = mp2, mp2 = NULL) : (mp = mp->m_next)) { - // Only consider an entry if the first character - // matches and it is for the current state. + // Only consider an entry if the first character matches and it is + // for the current state. // Skip ":lmap" mappings if keys were mapped. if (mp->m_keys[0] == tb_c1 && (mp->m_mode & local_State) - && ((mp->m_mode & LANGMAP) == 0 - || typebuf.tb_maplen == 0)) + && ((mp->m_mode & LANGMAP) == 0 || typebuf.tb_maplen == 0)) { #ifdef FEAT_LANGMAP int nomap = nolmaplen; @@ -2032,16 +2027,15 @@ handle_mapping( break; } - // Don't allow mapping the first byte(s) of a - // multi-byte char. Happens when mapping - // <M-a> and then changing 'encoding'. Beware - // that 0x80 is escaped. + // Don't allow mapping the first byte(s) of a multi-byte char. + // Happens when mapping <M-a> and then changing 'encoding'. + // Beware that 0x80 is escaped. { char_u *p1 = mp->m_keys; char_u *p2 = mb_unescape(&p1); if (has_mbyte && p2 != NULL - && MB_BYTE2LEN(tb_c1) > MB_PTR2LEN(p2)) + && MB_BYTE2LEN(tb_c1) > MB_PTR2LEN(p2)) mlen = 0; } @@ -2049,26 +2043,23 @@ handle_mapping( // - Full match: mlen == keylen // - Partly match: mlen == typebuf.tb_len keylen = mp->m_keylen; - if (mlen == keylen - || (mlen == typebuf.tb_len - && typebuf.tb_len < keylen)) + if (mlen == keylen || (mlen == typebuf.tb_len + && typebuf.tb_len < keylen)) { char_u *s; int n; - // If only script-local mappings are - // allowed, check if the mapping starts - // with K_SNR. + // If only script-local mappings are allowed, check if the + // mapping starts with K_SNR. s = typebuf.tb_noremap + typebuf.tb_off; if (*s == RM_SCRIPT && (mp->m_keys[0] != K_SPECIAL || mp->m_keys[1] != KS_EXTRA - || mp->m_keys[2] - != (int)KE_SNR)) + || mp->m_keys[2] != (int)KE_SNR)) continue; - // If one of the typed keys cannot be - // remapped, skip the entry. + // If one of the typed keys cannot be remapped, skip the + // entry. for (n = mlen; --n >= 0; ) if (*s++ & (RM_NONE|RM_ABBR)) break; @@ -2078,7 +2069,7 @@ handle_mapping( if (keylen > typebuf.tb_len) { if (!*timedout && !(mp_match != NULL - && mp_match->m_nowait)) + && mp_match->m_nowait)) { // break at a partly match keylen = KEYLEN_PART_MAP; @@ -2093,15 +2084,14 @@ handle_mapping( } } else - // No match; may have to check for - // termcode at next character. + // No match; may have to check for termcode at next + // character. if (max_mlen < mlen) max_mlen = mlen; } } - // If no partly match found, use the longest full - // match. + // If no partly match found, use the longest full match. if (keylen != KEYLEN_PART_MAP) { mp = mp_match; @@ -2114,22 +2104,18 @@ handle_mapping( */ if (*p_pt != NUL && mp == NULL && (State & (INSERT|NORMAL))) { - for (mlen = 0; mlen < typebuf.tb_len && p_pt[mlen]; - ++mlen) - if (p_pt[mlen] != typebuf.tb_buf[typebuf.tb_off - + mlen]) + for (mlen = 0; mlen < typebuf.tb_len && p_pt[mlen]; ++mlen) + if (p_pt[mlen] != typebuf.tb_buf[typebuf.tb_off + mlen]) break; if (p_pt[mlen] == NUL) // match { // write chars to script file(s) if (mlen > typebuf.tb_maplen) - gotchars(typebuf.tb_buf + typebuf.tb_off - + typebuf.tb_maplen, - mlen - typebuf.tb_maplen); + gotchars(typebuf.tb_buf + typebuf.tb_off + typebuf.tb_maplen, + mlen - typebuf.tb_maplen); del_typebuf(mlen, 0); // remove the chars - set_option_value((char_u *)"paste", - (long)!p_paste, NULL, 0); + set_option_value((char_u *)"paste", (long)!p_paste, NULL, 0); if (!(State & INSERT)) { msg_col = 0; @@ -2147,72 +2133,64 @@ handle_mapping( if (mlen == typebuf.tb_len) keylen = KEYLEN_PART_KEY; else if (max_mlen < mlen) - // no match, may have to check for termcode at - // next character + // no match, may have to check for termcode at next character max_mlen = mlen + 1; } - if ((mp == NULL || max_mlen >= mp_match_len) - && keylen != KEYLEN_PART_MAP) + if ((mp == NULL || max_mlen >= mp_match_len) && keylen != KEYLEN_PART_MAP) { int save_keylen = keylen; /* - * When no matching mapping found or found a - * non-matching mapping that matches at least what the - * matching mapping matched: + * When no matching mapping found or found a non-matching mapping that + * matches at least what the matching mapping matched: * Check if we have a terminal code, when: - * mapping is allowed, - * keys have not been mapped, - * and not an ESC sequence, not in insert mode or - * p_ek is on, - * and when not timed out, + * - mapping is allowed, + * - keys have not been mapped, + * - and not an ESC sequence, not in insert mode or p_ek is on, + * - and when not timed out, */ if ((no_mapping == 0 || allow_keys != 0) && (typebuf.tb_maplen == 0 || (p_remap && typebuf.tb_noremap[ - typebuf.tb_off] == RM_YES)) + 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 - // sequence. + // If no termcode matched but 'pastetoggle' matched partially it's + // like an incomplete key sequence. if (keylen == 0 && save_keylen == KEYLEN_PART_KEY) keylen = KEYLEN_PART_KEY; - // When getting a partial match, but the last - // characters were not typed, don't wait for a - // typed character to complete the termcode. - // This helps a lot when a ":normal" command ends - // in an ESC. - if (keylen < 0 - && typebuf.tb_len == typebuf.tb_maplen) + // When getting a partial match, but the last characters were not + // typed, don't wait for a typed character to complete the + // termcode. This helps a lot when a ":normal" command ends in an + // ESC. + if (keylen < 0 && typebuf.tb_len == typebuf.tb_maplen) keylen = 0; } else keylen = 0; if (keylen == 0) // no matching terminal code { -#ifdef AMIGA // check for window bounds report +#ifdef AMIGA + // check for window bounds report if (typebuf.tb_maplen == 0 && (typebuf.tb_buf[ - typebuf.tb_off] & 0xff) == CSI) + typebuf.tb_off] & 0xff) == CSI) { char_u *s; for (s = typebuf.tb_buf + typebuf.tb_off + 1; - s < typebuf.tb_buf + typebuf.tb_off - + typebuf.tb_len - && (VIM_ISDIGIT(*s) || *s == ';' - || *s == ' '); + s < typebuf.tb_buf + typebuf.tb_off + typebuf.tb_len + && (VIM_ISDIGIT(*s) || *s == ';' || *s == ' '); ++s) ; if (*s == 'r' || *s == '|') // found one { - del_typebuf((int)(s + 1 - - (typebuf.tb_buf + typebuf.tb_off)), 0); + del_typebuf( + (int)(s + 1 - (typebuf.tb_buf + typebuf.tb_off)), 0); // get size and redraw screen shell_resized(); *keylenp = keylen; @@ -2223,51 +2201,47 @@ handle_mapping( } if (keylen >= 0) #endif - // When there was a matching mapping and no - // termcode could be replaced after another one, - // use that mapping (loop around). If there was - // no mapping at all use the character from the - // typeahead buffer right here. - if (mp == NULL) - { - *keylenp = keylen; - return map_result_get; // got character, break for loop - } + // When there was a matching mapping and no termcode could be + // replaced after another one, use that mapping (loop around). + // If there was no mapping at all use the character from the + // typeahead buffer right here. + if (mp == NULL) + { + *keylenp = keylen; + return map_result_get; // got character, break for loop + } } if (keylen > 0) // full matching terminal code { #if defined(FEAT_GUI) && defined(FEAT_MENU) if (typebuf.tb_len >= 2 - && typebuf.tb_buf[typebuf.tb_off] == K_SPECIAL - && typebuf.tb_buf[typebuf.tb_off + 1] - == KS_MENU) + && typebuf.tb_buf[typebuf.tb_off] == K_SPECIAL + && typebuf.tb_buf[typebuf.tb_off + 1] == KS_MENU) { int idx; - // Using a menu may cause a break in undo! - // It's like using gotchars(), but without - // recording or writing to a script file. + // Using a menu may cause a break in undo! It's like using + // gotchars(), but without recording or writing to a script + // file. may_sync_undo(); del_typebuf(3, 0); idx = get_menu_index(current_menu, local_State); if (idx != MENU_INDEX_INVALID) { - // In Select mode and a Visual mode menu - // is used: Switch to Visual mode - // temporarily. Append K_SELECT to switch + // In Select mode and a Visual mode menu is used: Switch + // to Visual mode temporarily. Append K_SELECT to switch // back to Select mode. if (VIsual_active && VIsual_select - && (current_menu->modes & VISUAL)) + && (current_menu->modes & VISUAL)) { VIsual_select = FALSE; (void)ins_typebuf(K_SELECT_STRING, - REMAP_NONE, 0, TRUE, FALSE); + REMAP_NONE, 0, TRUE, FALSE); } ins_typebuf(current_menu->strings[idx], current_menu->noremap[idx], - 0, TRUE, - current_menu->silent[idx]); + 0, TRUE, current_menu->silent[idx]); } } #endif // FEAT_GUI && FEAT_MENU @@ -2275,8 +2249,8 @@ handle_mapping( return map_result_retry; // try mapping again } - // Partial match: get some more characters. When a - // matching mapping was found use that one. + // Partial match: get some more characters. When a matching mapping + // was found use that one. if (mp == NULL || keylen < 0) keylen = KEYLEN_PART_KEY; else @@ -2291,11 +2265,11 @@ handle_mapping( char_u *map_str; #ifdef FEAT_EVAL - int save_m_expr; - int save_m_noremap; - int save_m_silent; - char_u *save_m_keys; - char_u *save_m_str; + int save_m_expr; + int save_m_noremap; + int save_m_silent; + char_u *save_m_keys; + char_u *save_m_str; #else # define save_m_noremap mp->m_noremap # define save_m_silent mp->m_silent @@ -2303,9 +2277,8 @@ handle_mapping( // write chars to script file(s) if (keylen > typebuf.tb_maplen) - gotchars(typebuf.tb_buf + typebuf.tb_off - + typebuf.tb_maplen, - keylen - typebuf.tb_maplen); + gotchars(typebuf.tb_buf + typebuf.tb_off + typebuf.tb_maplen, + keylen - typebuf.tb_maplen); cmd_silent = (typebuf.tb_silent > 0); del_typebuf(keylen, 0); // remove the mapped keys @@ -2328,23 +2301,19 @@ handle_mapping( } /* - * In Select mode and a Visual mode mapping is used: - * Switch to Visual mode temporarily. Append K_SELECT - * to switch back to Select mode. + * In Select mode and a Visual mode mapping is used: Switch to Visual + * mode temporarily. Append K_SELECT to switch back to Select mode. */ - if (VIsual_active && VIsual_select - && (mp->m_mode & VISUAL)) + if (VIsual_active && VIsual_select && (mp->m_mode & VISUAL)) { VIsual_select = FALSE; - (void)ins_typebuf(K_SELECT_STRING, REMAP_NONE, - 0, TRUE, FALSE); + (void)ins_typebuf(K_SELECT_STRING, REMAP_NONE, 0, TRUE, FALSE); } #ifdef FEAT_EVAL - // Copy the values from *mp that are used, because - // evaluating the expression may invoke a function - // that redefines the mapping, thereby making *mp - // invalid. + // Copy the values from *mp that are used, because evaluating the + // expression may invoke a function that redefines the mapping, thereby + // making *mp invalid. save_m_expr = mp->m_expr; save_m_noremap = mp->m_noremap; save_m_silent = mp->m_silent; @@ -2352,9 +2321,8 @@ handle_mapping( save_m_str = NULL; // only saved when needed /* - * Handle ":map <expr>": evaluate the {rhs} as an - * expression. Also save and restore the command line - * for "normal :". + * Handle ":map <expr>": evaluate the {rhs} as an expression. Also + * save and restore the command line for "normal :". */ if (mp->m_expr) { @@ -2377,11 +2345,9 @@ handle_mapping( /* * Insert the 'to' part in the typebuf.tb_buf. - * If 'from' field is the same as the start of the - * 'to' field, don't remap the first character (but do - * allow abbreviations). - * If m_noremap is set, don't remap the whole 'to' - * part. + * If 'from' field is the same as the start of the 'to' field, don't + * remap the first character (but do allow abbreviations). + * If m_noremap is set, don't remap the whole 'to' part. */ if (map_str == NULL) i = FAIL; @@ -2393,9 +2359,8 @@ handle_mapping( noremap = save_m_noremap; else if ( #ifdef FEAT_EVAL - STRNCMP(map_str, save_m_keys != NULL - ? save_m_keys : mp->m_keys, - (size_t)keylen) + STRNCMP(map_str, save_m_keys != NULL ? save_m_keys : mp->m_keys, + (size_t)keylen) #else STRNCMP(map_str, mp->m_keys, (size_t)keylen) #endif @@ -2470,7 +2435,6 @@ vgetorpeek(int advance) for mapping to complete */ int mapdepth = 0; /* check for recursive mapping */ int mode_deleted = FALSE; /* set when mode has been deleted */ - int i; #ifdef FEAT_CMDL_INFO int new_wcol, new_wrow; #endif @@ -2541,7 +2505,9 @@ vgetorpeek(int advance) { long wait_time; int keylen = 0; - +#ifdef FEAT_CMDL_INFO + int showcmd_idx; +#endif /* * ui_breakcheck() is slow, don't use it too often when * inside a mapping. But call it each time for typed @@ -2820,7 +2786,7 @@ vgetorpeek(int advance) * to the user with showcmd. */ #ifdef FEAT_CMDL_INFO - i = 0; + showcmd_idx = 0; #endif c1 = 0; if (typebuf.tb_len > 0 && advance && !exmode_active) @@ -2846,10 +2812,10 @@ vgetorpeek(int advance) curwin->w_wrow = new_wrow; push_showcmd(); if (typebuf.tb_len > SHOWCMD_COLS) - i = typebuf.tb_len - SHOWCMD_COLS; - while (i < typebuf.tb_len) - (void)add_to_showcmd(typebuf.tb_buf[typebuf.tb_off - + i++]); + showcmd_idx = typebuf.tb_len - SHOWCMD_COLS; + while (showcmd_idx < typebuf.tb_len) + (void)add_to_showcmd( + typebuf.tb_buf[typebuf.tb_off + showcmd_idx++]); curwin->w_wcol = old_wcol; curwin->w_wrow = old_wrow; #endif @@ -2898,7 +2864,7 @@ vgetorpeek(int advance) wait_time); #ifdef FEAT_CMDL_INFO - if (i != 0) + if (showcmd_idx != 0) pop_showcmd(); #endif if (c1 == 1) diff --git a/src/version.c b/src/version.c index c3af73a54..ec67fe406 100644 --- a/src/version.c +++ b/src/version.c @@ -774,6 +774,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1798, +/**/ 1797, /**/ 1796, |