Mercurial > vim
diff src/normal.c @ 31752:3365a601e73b v9.0.1208
patch 9.0.1208: code is indented more than necessary
Commit: https://github.com/vim/vim/commit/a41e221935edab62672a15123af48f4f14ac1c7d
Author: Yegappan Lakshmanan <yegappan@yahoo.com>
Date: Mon Jan 16 18:19:05 2023 +0000
patch 9.0.1208: code is indented more than necessary
Problem: Code is indented more than necessary.
Solution: Use an early return where it makes sense. (Yegappan Lakshmanan,
closes #11819)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Mon, 16 Jan 2023 19:30:04 +0100 |
parents | 07480c2f5ea8 |
children | df061831a85f |
line wrap: on
line diff
--- a/src/normal.c +++ b/src/normal.c @@ -186,14 +186,13 @@ find_command(int cmdchar) static int check_text_locked(oparg_T *oap) { - if (text_locked()) - { - if (oap != NULL) - clearopbeep(oap); - text_locked_msg(); - return TRUE; - } - return FALSE; + if (!text_locked()) + return FALSE; + + if (oap != NULL) + clearopbeep(oap); + text_locked_msg(); + return TRUE; } /* @@ -206,13 +205,13 @@ check_text_or_curbuf_locked(oparg_T *oap { if (check_text_locked(oap)) return TRUE; - if (curbuf_locked()) - { - if (oap != NULL) - clearop(oap); - return TRUE; - } - return FALSE; + + if (!curbuf_locked()) + return FALSE; + + if (oap != NULL) + clearop(oap); + return TRUE; } /* @@ -2030,19 +2029,19 @@ nv_addsub(cmdarg_T *cap) static void nv_page(cmdarg_T *cap) { - if (!checkclearop(cap->oap)) - { - if (mod_mask & MOD_MASK_CTRL) - { - // <C-PageUp>: tab page back; <C-PageDown>: tab page forward - if (cap->arg == BACKWARD) - goto_tabpage(-(int)cap->count1); - else - goto_tabpage((int)cap->count0); - } + if (checkclearop(cap->oap)) + return; + + if (mod_mask & MOD_MASK_CTRL) + { + // <C-PageUp>: tab page back; <C-PageDown>: tab page forward + if (cap->arg == BACKWARD) + goto_tabpage(-(int)cap->count1); else - (void)onepage(cap->arg, cap->count1); - } + goto_tabpage((int)cap->count0); + } + else + (void)onepage(cap->arg, cap->count1); } /* @@ -2062,17 +2061,16 @@ nv_gd( == FAIL) { clearopbeep(oap); - } - else - { + return; + } + #ifdef FEAT_FOLDING - if ((fdo_flags & FDO_SEARCH) && KeyTyped && oap->op_type == OP_NOP) - foldOpenCursor(); -#endif - // clear any search statistics - if (messaging() && !msg_silent && !shortmess(SHM_SEARCHCOUNT)) - clear_cmdline = TRUE; - } + if ((fdo_flags & FDO_SEARCH) && KeyTyped && oap->op_type == OP_NOP) + foldOpenCursor(); +#endif + // clear any search statistics + if (messaging() && !msg_silent && !shortmess(SHM_SEARCHCOUNT)) + clear_cmdline = TRUE; } /* @@ -3157,60 +3155,61 @@ nv_colon(cmdarg_T *cap) int flags; if (VIsual_active && !is_cmdkey) + { nv_operator(cap); - else - { - if (cap->oap->op_type != OP_NOP) + return; + } + + if (cap->oap->op_type != OP_NOP) + { + // Using ":" as a movement is characterwise exclusive. + cap->oap->motion_type = MCHAR; + cap->oap->inclusive = FALSE; + } + else if (cap->count0 && !is_cmdkey) + { + // translate "count:" into ":.,.+(count - 1)" + stuffcharReadbuff('.'); + if (cap->count0 > 1) { - // Using ":" as a movement is characterwise exclusive. - cap->oap->motion_type = MCHAR; - cap->oap->inclusive = FALSE; - } - else if (cap->count0 && !is_cmdkey) - { - // translate "count:" into ":.,.+(count - 1)" - stuffcharReadbuff('.'); - if (cap->count0 > 1) - { - stuffReadbuff((char_u *)",.+"); - stuffnumReadbuff((long)cap->count0 - 1L); - } + stuffReadbuff((char_u *)",.+"); + stuffnumReadbuff((long)cap->count0 - 1L); } - - // When typing, don't type below an old message - if (KeyTyped) - compute_cmdrow(); - - old_p_im = p_im; - - // get a command line and execute it - flags = cap->oap->op_type != OP_NOP ? DOCMD_KEEPLINE : 0; - if (is_cmdkey) - cmd_result = do_cmdkey_command(cap->cmdchar, flags); + } + + // When typing, don't type below an old message + if (KeyTyped) + compute_cmdrow(); + + old_p_im = p_im; + + // get a command line and execute it + flags = cap->oap->op_type != OP_NOP ? DOCMD_KEEPLINE : 0; + if (is_cmdkey) + cmd_result = do_cmdkey_command(cap->cmdchar, flags); + else + cmd_result = do_cmdline(NULL, getexline, NULL, flags); + + // If 'insertmode' changed, enter or exit Insert mode + if (p_im != old_p_im) + { + if (p_im) + restart_edit = 'i'; else - cmd_result = do_cmdline(NULL, getexline, NULL, flags); - - // If 'insertmode' changed, enter or exit Insert mode - if (p_im != old_p_im) - { - if (p_im) - restart_edit = 'i'; - else - restart_edit = 0; - } - - if (cmd_result == FAIL) - // The Ex command failed, do not execute the operator. - clearop(cap->oap); - else if (cap->oap->op_type != OP_NOP - && (cap->oap->start.lnum > curbuf->b_ml.ml_line_count - || cap->oap->start.col > - (colnr_T)STRLEN(ml_get(cap->oap->start.lnum)) - || did_emsg - )) - // The start of the operator has become invalid by the Ex command. - clearopbeep(cap->oap); - } + restart_edit = 0; + } + + if (cmd_result == FAIL) + // The Ex command failed, do not execute the operator. + clearop(cap->oap); + else if (cap->oap->op_type != OP_NOP + && (cap->oap->start.lnum > curbuf->b_ml.ml_line_count + || cap->oap->start.col > + (colnr_T)STRLEN(ml_get(cap->oap->start.lnum)) + || did_emsg + )) + // The start of the operator has become invalid by the Ex command. + clearopbeep(cap->oap); } /* @@ -3251,28 +3250,28 @@ nv_ctrlh(cmdarg_T *cap) static void nv_clear(cmdarg_T *cap) { - if (!checkclearop(cap->oap)) - { + if (checkclearop(cap->oap)) + return; + #ifdef FEAT_SYN_HL - // Clear all syntax states to force resyncing. - syn_stack_free_all(curwin->w_s); + // Clear all syntax states to force resyncing. + syn_stack_free_all(curwin->w_s); # ifdef FEAT_RELTIME - { - win_T *wp; - - FOR_ALL_WINDOWS(wp) - wp->w_s->b_syn_slow = FALSE; - } + { + win_T *wp; + + FOR_ALL_WINDOWS(wp) + wp->w_s->b_syn_slow = FALSE; + } # endif #endif - redraw_later(UPD_CLEAR); + redraw_later(UPD_CLEAR); #if defined(MSWIN) && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL)) # ifdef VIMDLL - if (!gui.in_use) + if (!gui.in_use) # endif - resize_console_buf(); -#endif - } + resize_console_buf(); +#endif } /* @@ -3314,20 +3313,20 @@ nv_hat(cmdarg_T *cap) static void nv_Zet(cmdarg_T *cap) { - if (!checkclearopq(cap->oap)) - { - switch (cap->nchar) - { - // "ZZ": equivalent to ":x". - case 'Z': do_cmdline_cmd((char_u *)"x"); + if (checkclearopq(cap->oap)) + return; + + switch (cap->nchar) + { + // "ZZ": equivalent to ":x". + case 'Z': do_cmdline_cmd((char_u *)"x"); break; // "ZQ": equivalent to ":q!" (Elvis compatible). - case 'Q': do_cmdline_cmd((char_u *)"q!"); + case 'Q': do_cmdline_cmd((char_u *)"q!"); break; - default: clearopbeep(cap->oap); - } + default: clearopbeep(cap->oap); } } @@ -3982,15 +3981,14 @@ nv_up(cmdarg_T *cap) // <S-Up> is page up cap->arg = BACKWARD; nv_page(cap); - } - else - { - cap->oap->motion_type = MLINE; - if (cursor_up(cap->count1, cap->oap->op_type == OP_NOP) == FAIL) - clearopbeep(cap->oap); - else if (cap->arg) - beginline(BL_WHITE | BL_FIX); - } + return; + } + + cap->oap->motion_type = MLINE; + if (cursor_up(cap->count1, cap->oap->op_type == OP_NOP) == FAIL) + clearopbeep(cap->oap); + else if (cap->arg) + beginline(BL_WHITE | BL_FIX); } /* @@ -4249,27 +4247,28 @@ nv_csearch(cmdarg_T *cap) cap->oap->motion_type = MCHAR; if (IS_SPECIAL(cap->nchar) || searchc(cap, t_cmd) == FAIL) + { clearopbeep(cap->oap); + return; + } + + curwin->w_set_curswant = TRUE; + // Include a Tab for "tx" and for "dfx". + if (gchar_cursor() == TAB && virtual_active() && cap->arg == FORWARD + && (t_cmd || cap->oap->op_type != OP_NOP)) + { + colnr_T scol, ecol; + + getvcol(curwin, &curwin->w_cursor, &scol, NULL, &ecol); + curwin->w_cursor.coladd = ecol - scol; + } else - { - curwin->w_set_curswant = TRUE; - // Include a Tab for "tx" and for "dfx". - if (gchar_cursor() == TAB && virtual_active() && cap->arg == FORWARD - && (t_cmd || cap->oap->op_type != OP_NOP)) - { - colnr_T scol, ecol; - - getvcol(curwin, &curwin->w_cursor, &scol, NULL, &ecol); - curwin->w_cursor.coladd = ecol - scol; - } - else - curwin->w_cursor.coladd = 0; - adjust_for_sel(cap); + curwin->w_cursor.coladd = 0; + adjust_for_sel(cap); #ifdef FEAT_FOLDING - if ((fdo_flags & FDO_HOR) && KeyTyped && cap->oap->op_type == OP_NOP) - foldOpenCursor(); -#endif - } + if ((fdo_flags & FDO_HOR) && KeyTyped && cap->oap->op_type == OP_NOP) + foldOpenCursor(); +#endif } /* @@ -4654,17 +4653,18 @@ nv_brace(cmdarg_T *cap) curwin->w_set_curswant = TRUE; if (findsent(cap->arg, cap->count1) == FAIL) + { clearopbeep(cap->oap); - else - { - // Don't leave the cursor on the NUL past end of line. - adjust_cursor(cap->oap); - curwin->w_cursor.coladd = 0; + return; + } + + // Don't leave the cursor on the NUL past end of line. + adjust_cursor(cap->oap); + curwin->w_cursor.coladd = 0; #ifdef FEAT_FOLDING - if ((fdo_flags & FDO_BLOCK) && KeyTyped && cap->oap->op_type == OP_NOP) - foldOpenCursor(); -#endif - } + if ((fdo_flags & FDO_BLOCK) && KeyTyped && cap->oap->op_type == OP_NOP) + foldOpenCursor(); +#endif } /* @@ -4673,11 +4673,11 @@ nv_brace(cmdarg_T *cap) static void nv_mark(cmdarg_T *cap) { - if (!checkclearop(cap->oap)) - { - if (setmark(cap->nchar) == FAIL) - clearopbeep(cap->oap); - } + if (checkclearop(cap->oap)) + return; + + if (setmark(cap->nchar) == FAIL) + clearopbeep(cap->oap); } /* @@ -4692,15 +4692,16 @@ nv_findpar(cmdarg_T *cap) cap->oap->use_reg_one = TRUE; curwin->w_set_curswant = TRUE; if (!findpar(&cap->oap->inclusive, cap->arg, cap->count1, NUL, FALSE)) + { clearopbeep(cap->oap); - else - { - curwin->w_cursor.coladd = 0; + return; + } + + curwin->w_cursor.coladd = 0; #ifdef FEAT_FOLDING - if ((fdo_flags & FDO_BLOCK) && KeyTyped && cap->oap->op_type == OP_NOP) - foldOpenCursor(); -#endif - } + if ((fdo_flags & FDO_BLOCK) && KeyTyped && cap->oap->op_type == OP_NOP) + foldOpenCursor(); +#endif } /* @@ -4726,18 +4727,18 @@ nv_undo(cmdarg_T *cap) static void nv_kundo(cmdarg_T *cap) { - if (!checkclearopq(cap->oap)) - { + if (checkclearopq(cap->oap)) + return; + #ifdef FEAT_JOB_CHANNEL - if (bt_prompt(curbuf)) - { - clearopbeep(cap->oap); - return; - } -#endif - u_undo((int)cap->count1); - curwin->w_set_curswant = TRUE; - } + if (bt_prompt(curbuf)) + { + clearopbeep(cap->oap); + return; + } +#endif + u_undo((int)cap->count1); + curwin->w_set_curswant = TRUE; } /* @@ -5008,17 +5009,19 @@ nv_Replace(cmdarg_T *cap) VIsual_mode_orig = VIsual_mode; // remember original area for gv VIsual_mode = 'V'; nv_operator(cap); - } - else if (!checkclearopq(cap->oap)) - { - if (!curbuf->b_p_ma) - emsg(_(e_cannot_make_changes_modifiable_is_off)); - else - { - if (virtual_active()) - coladvance(getviscol()); - invoke_edit(cap, FALSE, cap->arg ? 'V' : 'R', FALSE); - } + return; + } + + if (checkclearopq(cap->oap)) + return; + + if (!curbuf->b_p_ma) + emsg(_(e_cannot_make_changes_modifiable_is_off)); + else + { + if (virtual_active()) + coladvance(getviscol()); + invoke_edit(cap, FALSE, cap->arg ? 'V' : 'R', FALSE); } } @@ -5033,21 +5036,23 @@ nv_vreplace(cmdarg_T *cap) cap->cmdchar = 'r'; cap->nchar = cap->extra_char; nv_replace(cap); // Do same as "r" in Visual mode for now - } - else if (!checkclearopq(cap->oap)) - { - if (!curbuf->b_p_ma) - emsg(_(e_cannot_make_changes_modifiable_is_off)); - else - { - if (cap->extra_char == Ctrl_V) // get another character - cap->extra_char = get_literal(FALSE); - stuffcharReadbuff(cap->extra_char); - stuffcharReadbuff(ESC); - if (virtual_active()) - coladvance(getviscol()); - invoke_edit(cap, TRUE, 'v', FALSE); - } + return; + } + + if (checkclearopq(cap->oap)) + return; + + if (!curbuf->b_p_ma) + emsg(_(e_cannot_make_changes_modifiable_is_off)); + else + { + if (cap->extra_char == Ctrl_V) // get another character + cap->extra_char = get_literal(FALSE); + stuffcharReadbuff(cap->extra_char); + stuffcharReadbuff(ESC); + if (virtual_active()) + coladvance(getviscol()); + invoke_edit(cap, TRUE, 'v', FALSE); } } @@ -5345,44 +5350,44 @@ nv_pcmark(cmdarg_T *cap) int old_KeyTyped = KeyTyped; // getting file may reset it #endif - if (!checkclearopq(cap->oap)) - { - if (cap->cmdchar == TAB && mod_mask == MOD_MASK_CTRL) - { - if (goto_tabpage_lastused() == FAIL) - clearopbeep(cap->oap); - return; - } - if (cap->cmdchar == 'g') - pos = movechangelist((int)cap->count1); + if (checkclearopq(cap->oap)) + return; + + if (cap->cmdchar == TAB && mod_mask == MOD_MASK_CTRL) + { + if (goto_tabpage_lastused() == FAIL) + clearopbeep(cap->oap); + return; + } + if (cap->cmdchar == 'g') + pos = movechangelist((int)cap->count1); + else + pos = movemark((int)cap->count1); + if (pos == (pos_T *)-1) // jump to other file + { + curwin->w_set_curswant = TRUE; + check_cursor(); + } + else if (pos != NULL) // can jump + nv_cursormark(cap, FALSE, pos); + else if (cap->cmdchar == 'g') + { + if (curbuf->b_changelistlen == 0) + emsg(_(e_changelist_is_empty)); + else if (cap->count1 < 0) + emsg(_(e_at_start_of_changelist)); else - pos = movemark((int)cap->count1); - if (pos == (pos_T *)-1) // jump to other file - { - curwin->w_set_curswant = TRUE; - check_cursor(); - } - else if (pos != NULL) // can jump - nv_cursormark(cap, FALSE, pos); - else if (cap->cmdchar == 'g') - { - if (curbuf->b_changelistlen == 0) - emsg(_(e_changelist_is_empty)); - else if (cap->count1 < 0) - emsg(_(e_at_start_of_changelist)); - else - emsg(_(e_at_end_of_changelist)); - } - else - clearopbeep(cap->oap); + emsg(_(e_at_end_of_changelist)); + } + else + clearopbeep(cap->oap); # ifdef FEAT_FOLDING - if (cap->oap->op_type == OP_NOP - && (pos == (pos_T *)-1 || lnum != curwin->w_cursor.lnum) - && (fdo_flags & FDO_MARK) - && old_KeyTyped) - foldOpenCursor(); + if (cap->oap->op_type == OP_NOP + && (pos == (pos_T *)-1 || lnum != curwin->w_cursor.lnum) + && (fdo_flags & FDO_MARK) + && old_KeyTyped) + foldOpenCursor(); # endif - } } /* @@ -6237,41 +6242,41 @@ n_opencmd(cmdarg_T *cap) linenr_T oldline = curwin->w_cursor.lnum; #endif - if (!checkclearopq(cap->oap)) - { + if (checkclearopq(cap->oap)) + return; + #ifdef FEAT_FOLDING - if (cap->cmdchar == 'O') - // Open above the first line of a folded sequence of lines - (void)hasFolding(curwin->w_cursor.lnum, - &curwin->w_cursor.lnum, NULL); - else - // Open below the last line of a folded sequence of lines - (void)hasFolding(curwin->w_cursor.lnum, - NULL, &curwin->w_cursor.lnum); -#endif - if (u_save((linenr_T)(curwin->w_cursor.lnum - - (cap->cmdchar == 'O' ? 1 : 0)), - (linenr_T)(curwin->w_cursor.lnum + - (cap->cmdchar == 'o' ? 1 : 0)) - ) == OK - && open_line(cap->cmdchar == 'O' ? BACKWARD : FORWARD, - has_format_option(FO_OPEN_COMS) ? OPENLINE_DO_COM : 0, - 0, NULL) == OK) - { + if (cap->cmdchar == 'O') + // Open above the first line of a folded sequence of lines + (void)hasFolding(curwin->w_cursor.lnum, + &curwin->w_cursor.lnum, NULL); + else + // Open below the last line of a folded sequence of lines + (void)hasFolding(curwin->w_cursor.lnum, + NULL, &curwin->w_cursor.lnum); +#endif + if (u_save((linenr_T)(curwin->w_cursor.lnum - + (cap->cmdchar == 'O' ? 1 : 0)), + (linenr_T)(curwin->w_cursor.lnum + + (cap->cmdchar == 'o' ? 1 : 0)) + ) == OK + && open_line(cap->cmdchar == 'O' ? BACKWARD : FORWARD, + has_format_option(FO_OPEN_COMS) ? OPENLINE_DO_COM : 0, + 0, NULL) == OK) + { #ifdef FEAT_CONCEAL - if (curwin->w_p_cole > 0 && oldline != curwin->w_cursor.lnum) - redrawWinline(curwin, oldline); + if (curwin->w_p_cole > 0 && oldline != curwin->w_cursor.lnum) + redrawWinline(curwin, oldline); #endif #ifdef FEAT_SYN_HL - if (curwin->w_p_cul) - // force redraw of cursorline - curwin->w_valid &= ~VALID_CROW; -#endif - // When '#' is in 'cpoptions' ignore the count. - if (vim_strchr(p_cpo, CPO_HASH) != NULL) - cap->count1 = 1; - invoke_edit(cap, FALSE, cap->cmdchar, TRUE); - } + if (curwin->w_p_cul) + // force redraw of cursorline + curwin->w_valid &= ~VALID_CROW; +#endif + // When '#' is in 'cpoptions' ignore the count. + if (vim_strchr(p_cpo, CPO_HASH) != NULL) + cap->count1 = 1; + invoke_edit(cap, FALSE, cap->cmdchar, TRUE); } } @@ -6281,14 +6286,14 @@ n_opencmd(cmdarg_T *cap) static void nv_dot(cmdarg_T *cap) { - if (!checkclearopq(cap->oap)) - { - // If "restart_edit" is TRUE, the last but one command is repeated - // instead of the last command (inserting text). This is used for - // CTRL-O <.> in insert mode. - if (start_redo(cap->count0, restart_edit != 0 && !arrow_used) == FAIL) - clearopbeep(cap->oap); - } + if (checkclearopq(cap->oap)) + return; + + // If "restart_edit" is TRUE, the last but one command is repeated + // instead of the last command (inserting text). This is used for + // CTRL-O <.> in insert mode. + if (start_redo(cap->count0, restart_edit != 0 && !arrow_used) == FAIL) + clearopbeep(cap->oap); } /* @@ -6316,11 +6321,11 @@ nv_redo_or_register(cmdarg_T *cap) return; } - if (!checkclearopq(cap->oap)) - { - u_redo((int)cap->count1); - curwin->w_set_curswant = TRUE; - } + if (checkclearopq(cap->oap)) + return; + + u_redo((int)cap->count1); + curwin->w_set_curswant = TRUE; } /* @@ -6336,12 +6341,14 @@ nv_Undo(cmdarg_T *cap) cap->cmdchar = 'g'; cap->nchar = 'U'; nv_operator(cap); - } - else if (!checkclearopq(cap->oap)) - { - u_undoline(); - curwin->w_set_curswant = TRUE; - } + return; + } + + if (checkclearopq(cap->oap)) + return; + + u_undoline(); + curwin->w_set_curswant = TRUE; } /* @@ -7146,25 +7153,27 @@ nv_record(cmdarg_T *cap) cap->cmdchar = 'g'; cap->nchar = 'q'; nv_operator(cap); - } - else if (!checkclearop(cap->oap)) - { - if (cap->nchar == ':' || cap->nchar == '/' || cap->nchar == '?') + return; + } + + if (checkclearop(cap->oap)) + return; + + if (cap->nchar == ':' || cap->nchar == '/' || cap->nchar == '?') + { + if (cmdwin_type != 0) { - if (cmdwin_type != 0) - { - emsg(_(e_cmdline_window_already_open)); - return; - } - stuffcharReadbuff(cap->nchar); - stuffcharReadbuff(K_CMDWIN); + emsg(_(e_cmdline_window_already_open)); + return; } - else - // (stop) recording into a named register, unless executing a - // register - if (reg_executing == 0 && do_record(cap->nchar) == FAIL) - clearopbeep(cap->oap); - } + stuffcharReadbuff(cap->nchar); + stuffcharReadbuff(K_CMDWIN); + } + else + // (stop) recording into a named register, unless executing a + // register + if (reg_executing == 0 && do_record(cap->nchar) == FAIL) + clearopbeep(cap->oap); } /* @@ -7214,28 +7223,32 @@ nv_halfpage(cmdarg_T *cap) nv_join(cmdarg_T *cap) { if (VIsual_active) // join the visual lines + { nv_operator(cap); - else if (!checkclearop(cap->oap)) - { - if (cap->count0 <= 1) - cap->count0 = 2; // default for join is two lines! - if (curwin->w_cursor.lnum + cap->count0 - 1 > - curbuf->b_ml.ml_line_count) + return; + } + + if (checkclearop(cap->oap)) + return; + + if (cap->count0 <= 1) + cap->count0 = 2; // default for join is two lines! + if (curwin->w_cursor.lnum + cap->count0 - 1 > + curbuf->b_ml.ml_line_count) + { + // can't join when on the last line + if (cap->count0 <= 2) { - // can't join when on the last line - if (cap->count0 <= 2) - { - clearopbeep(cap->oap); - return; - } - cap->count0 = curbuf->b_ml.ml_line_count - - curwin->w_cursor.lnum + 1; + clearopbeep(cap->oap); + return; } - - prep_redo(cap->oap->regname, cap->count0, - NUL, cap->cmdchar, NUL, NUL, cap->nchar); - (void)do_join(cap->count0, cap->nchar == NUL, TRUE, TRUE, TRUE); - } + cap->count0 = curbuf->b_ml.ml_line_count + - curwin->w_cursor.lnum + 1; + } + + prep_redo(cap->oap->regname, cap->count0, + NUL, cap->cmdchar, NUL, NUL, cap->nchar); + (void)do_join(cap->count0, cap->nchar == NUL, TRUE, TRUE, TRUE); } /* @@ -7273,132 +7286,133 @@ nv_put_opt(cmdarg_T *cap, int fix_indent } else #endif - clearopbeep(cap->oap); - } + clearopbeep(cap->oap); + return; + } + #ifdef FEAT_JOB_CHANNEL - else if (bt_prompt(curbuf) && !prompt_curpos_editable()) + if (bt_prompt(curbuf) && !prompt_curpos_editable()) { clearopbeep(cap->oap); - } -#endif + return; + } +#endif + + if (fix_indent) + { + dir = (cap->cmdchar == ']' && cap->nchar == 'p') + ? FORWARD : BACKWARD; + flags |= PUT_FIXINDENT; + } else - { - if (fix_indent) - { - dir = (cap->cmdchar == ']' && cap->nchar == 'p') - ? FORWARD : BACKWARD; - flags |= PUT_FIXINDENT; - } - else - dir = (cap->cmdchar == 'P' - || ((cap->cmdchar == 'g' || cap->cmdchar == 'z') - && cap->nchar == 'P')) ? BACKWARD : FORWARD; - prep_redo_cmd(cap); - if (cap->cmdchar == 'g') - flags |= PUT_CURSEND; - else if (cap->cmdchar == 'z') - flags |= PUT_BLOCK_INNER; - - if (VIsual_active) - { - // Putting in Visual mode: The put text replaces the selected - // text. First delete the selected text, then put the new text. - // Need to save and restore the registers that the delete - // overwrites if the old contents is being put. - was_visual = TRUE; - regname = cap->oap->regname; - keep_registers = cap->cmdchar == 'P'; + dir = (cap->cmdchar == 'P' + || ((cap->cmdchar == 'g' || cap->cmdchar == 'z') + && cap->nchar == 'P')) ? BACKWARD : FORWARD; + prep_redo_cmd(cap); + if (cap->cmdchar == 'g') + flags |= PUT_CURSEND; + else if (cap->cmdchar == 'z') + flags |= PUT_BLOCK_INNER; + + if (VIsual_active) + { + // Putting in Visual mode: The put text replaces the selected + // text. First delete the selected text, then put the new text. + // Need to save and restore the registers that the delete + // overwrites if the old contents is being put. + was_visual = TRUE; + regname = cap->oap->regname; + keep_registers = cap->cmdchar == 'P'; #ifdef FEAT_CLIPBOARD - adjust_clip_reg(®name); -#endif - if (regname == 0 || regname == '"' - || VIM_ISDIGIT(regname) || regname == '-' + adjust_clip_reg(®name); +#endif + if (regname == 0 || regname == '"' + || VIM_ISDIGIT(regname) || regname == '-' #ifdef FEAT_CLIPBOARD - || (clip_unnamed && (regname == '*' || regname == '+')) -#endif - - ) - { - // The delete is going to overwrite the register we want to - // put, save it first. - reg1 = get_register(regname, TRUE); - } - - // Now delete the selected text. Avoid messages here. - cap->cmdchar = 'd'; - cap->nchar = NUL; - cap->oap->regname = keep_registers ? '_' : NUL; - ++msg_silent; - nv_operator(cap); - do_pending_operator(cap, 0, FALSE); - empty = (curbuf->b_ml.ml_flags & ML_EMPTY); - --msg_silent; - - // delete PUT_LINE_BACKWARD; - cap->oap->regname = regname; - - if (reg1 != NULL) - { - // Delete probably changed the register we want to put, save - // it first. Then put back what was there before the delete. - reg2 = get_register(regname, FALSE); - put_register(regname, reg1); - } - - // When deleted a linewise Visual area, put the register as - // lines to avoid it joined with the next line. When deletion was - // characterwise, split a line when putting lines. - if (VIsual_mode == 'V') - flags |= PUT_LINE; - else if (VIsual_mode == 'v') - flags |= PUT_LINE_SPLIT; - if (VIsual_mode == Ctrl_V && dir == FORWARD) - flags |= PUT_LINE_FORWARD; - dir = BACKWARD; - if ((VIsual_mode != 'V' - && curwin->w_cursor.col < curbuf->b_op_start.col) - || (VIsual_mode == 'V' - && curwin->w_cursor.lnum < curbuf->b_op_start.lnum)) - // cursor is at the end of the line or end of file, put - // forward. - dir = FORWARD; - // May have been reset in do_put(). - VIsual_active = TRUE; + || (clip_unnamed && (regname == '*' || regname == '+')) +#endif + + ) + { + // The delete is going to overwrite the register we want to + // put, save it first. + reg1 = get_register(regname, TRUE); + } + + // Now delete the selected text. Avoid messages here. + cap->cmdchar = 'd'; + cap->nchar = NUL; + cap->oap->regname = keep_registers ? '_' : NUL; + ++msg_silent; + nv_operator(cap); + do_pending_operator(cap, 0, FALSE); + empty = (curbuf->b_ml.ml_flags & ML_EMPTY); + --msg_silent; + + // delete PUT_LINE_BACKWARD; + cap->oap->regname = regname; + + if (reg1 != NULL) + { + // Delete probably changed the register we want to put, save + // it first. Then put back what was there before the delete. + reg2 = get_register(regname, FALSE); + put_register(regname, reg1); } - do_put(cap->oap->regname, NULL, dir, cap->count1, flags); - - // If a register was saved, put it back now. - if (reg2 != NULL) - put_register(regname, reg2); - - // What to reselect with "gv"? Selecting the just put text seems to - // be the most useful, since the original text was removed. - if (was_visual) + + // When deleted a linewise Visual area, put the register as + // lines to avoid it joined with the next line. When deletion was + // characterwise, split a line when putting lines. + if (VIsual_mode == 'V') + flags |= PUT_LINE; + else if (VIsual_mode == 'v') + flags |= PUT_LINE_SPLIT; + if (VIsual_mode == Ctrl_V && dir == FORWARD) + flags |= PUT_LINE_FORWARD; + dir = BACKWARD; + if ((VIsual_mode != 'V' + && curwin->w_cursor.col < curbuf->b_op_start.col) + || (VIsual_mode == 'V' + && curwin->w_cursor.lnum < curbuf->b_op_start.lnum)) + // cursor is at the end of the line or end of file, put + // forward. + dir = FORWARD; + // May have been reset in do_put(). + VIsual_active = TRUE; + } + do_put(cap->oap->regname, NULL, dir, cap->count1, flags); + + // If a register was saved, put it back now. + if (reg2 != NULL) + put_register(regname, reg2); + + // What to reselect with "gv"? Selecting the just put text seems to + // be the most useful, since the original text was removed. + if (was_visual) + { + curbuf->b_visual.vi_start = curbuf->b_op_start; + curbuf->b_visual.vi_end = curbuf->b_op_end; + // need to adjust cursor position + if (*p_sel == 'e') + inc(&curbuf->b_visual.vi_end); + } + + // When all lines were selected and deleted do_put() leaves an empty + // line that needs to be deleted now. + if (empty && *ml_get(curbuf->b_ml.ml_line_count) == NUL) + { + ml_delete_flags(curbuf->b_ml.ml_line_count, ML_DEL_MESSAGE); + deleted_lines(curbuf->b_ml.ml_line_count + 1, 1); + + // If the cursor was in that line, move it to the end of the last + // line. + if (curwin->w_cursor.lnum > curbuf->b_ml.ml_line_count) { - curbuf->b_visual.vi_start = curbuf->b_op_start; - curbuf->b_visual.vi_end = curbuf->b_op_end; - // need to adjust cursor position - if (*p_sel == 'e') - inc(&curbuf->b_visual.vi_end); + curwin->w_cursor.lnum = curbuf->b_ml.ml_line_count; + coladvance((colnr_T)MAXCOL); } - - // When all lines were selected and deleted do_put() leaves an empty - // line that needs to be deleted now. - if (empty && *ml_get(curbuf->b_ml.ml_line_count) == NUL) - { - ml_delete_flags(curbuf->b_ml.ml_line_count, ML_DEL_MESSAGE); - deleted_lines(curbuf->b_ml.ml_line_count + 1, 1); - - // If the cursor was in that line, move it to the end of the last - // line. - if (curwin->w_cursor.lnum > curbuf->b_ml.ml_line_count) - { - curwin->w_cursor.lnum = curbuf->b_ml.ml_line_count; - coladvance((colnr_T)MAXCOL); - } - } - auto_format(FALSE, TRUE); - } + } + auto_format(FALSE, TRUE); } /*