| To: vim_dev@googlegroups.com |
| Subject: Patch 7.3.251 |
| 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.251 |
| Problem: "gH<Del>" deletes the current line, except when it's the last |
| line. |
| Solution: Set the "include" flag to indicate the last line is to be deleted. |
| Files: src/normal.c, src/ops.c |
| |
| |
| |
| |
| |
| *** 1795,1811 **** |
| { |
| oap->inclusive = FALSE; |
| /* Try to include the newline, unless it's an operator |
| ! * that works on lines only */ |
| ! if (*p_sel != 'o' |
| ! && !op_on_lines(oap->op_type) |
| ! && oap->end.lnum < curbuf->b_ml.ml_line_count) |
| { |
| ! ++oap->end.lnum; |
| ! oap->end.col = 0; |
| # ifdef FEAT_VIRTUALEDIT |
| ! oap->end.coladd = 0; |
| # endif |
| ! ++oap->line_count; |
| } |
| } |
| } |
| --- 1795,1819 ---- |
| { |
| oap->inclusive = FALSE; |
| /* Try to include the newline, unless it's an operator |
| ! * that works on lines only. */ |
| ! if (*p_sel != 'o' && !op_on_lines(oap->op_type)) |
| { |
| ! if (oap->end.lnum < curbuf->b_ml.ml_line_count) |
| ! { |
| ! ++oap->end.lnum; |
| ! oap->end.col = 0; |
| # ifdef FEAT_VIRTUALEDIT |
| ! oap->end.coladd = 0; |
| # endif |
| ! ++oap->line_count; |
| ! } |
| ! else |
| ! { |
| ! /* Cannot move below the last line, make the op |
| ! * inclusive to tell the operation to include the |
| ! * line break. */ |
| ! oap->inclusive = TRUE; |
| ! } |
| } |
| } |
| } |
| |
| |
| |
| *** 1650,1656 **** |
| && oap->line_count > 1 |
| && oap->op_type == OP_DELETE) |
| { |
| ! ptr = ml_get(oap->end.lnum) + oap->end.col + oap->inclusive; |
| ptr = skipwhite(ptr); |
| if (*ptr == NUL && inindent(0)) |
| oap->motion_type = MLINE; |
| --- 1650,1658 ---- |
| && oap->line_count > 1 |
| && oap->op_type == OP_DELETE) |
| { |
| ! ptr = ml_get(oap->end.lnum) + oap->end.col; |
| ! if (*ptr != NUL) |
| ! ptr += oap->inclusive; |
| ptr = skipwhite(ptr); |
| if (*ptr == NUL && inindent(0)) |
| oap->motion_type = MLINE; |
| |
| *** 1920,1930 **** |
| curwin->w_cursor.coladd = 0; |
| } |
| #endif |
| ! (void)del_bytes((long)n, !virtual_op, oap->op_type == OP_DELETE |
| #ifdef FEAT_VISUAL |
| && !oap->is_VIsual |
| #endif |
| ); |
| } |
| else /* delete characters between lines */ |
| { |
| --- 1922,1941 ---- |
| curwin->w_cursor.coladd = 0; |
| } |
| #endif |
| ! if (oap->inclusive && oap->end.lnum == curbuf->b_ml.ml_line_count |
| ! && n > (int)STRLEN(ml_get(oap->end.lnum))) |
| ! { |
| ! /* Special case: gH<Del> deletes the last line. */ |
| ! del_lines(1L, FALSE); |
| ! } |
| ! else |
| ! { |
| ! (void)del_bytes((long)n, !virtual_op, oap->op_type == OP_DELETE |
| #ifdef FEAT_VISUAL |
| && !oap->is_VIsual |
| #endif |
| ); |
| + } |
| } |
| else /* delete characters between lines */ |
| { |
| |
| *** 1941,1957 **** |
| ++curwin->w_cursor.lnum; |
| del_lines((long)(oap->line_count - 2), FALSE); |
| |
| ! /* delete from start of line until op_end */ |
| ! curwin->w_cursor.col = 0; |
| ! (void)del_bytes((long)(oap->end.col + 1 - !oap->inclusive), |
| ! !virtual_op, oap->op_type == OP_DELETE |
| #ifdef FEAT_VISUAL |
| && !oap->is_VIsual |
| #endif |
| ); |
| ! curwin->w_cursor = curpos; /* restore curwin->w_cursor */ |
| ! |
| ! (void)do_join(2, FALSE, FALSE); |
| } |
| } |
| |
| --- 1952,1980 ---- |
| ++curwin->w_cursor.lnum; |
| del_lines((long)(oap->line_count - 2), FALSE); |
| |
| ! n = (oap->end.col + 1 - !oap->inclusive); |
| ! if (oap->inclusive && oap->end.lnum == curbuf->b_ml.ml_line_count |
| ! && n > (int)STRLEN(ml_get(oap->end.lnum))) |
| ! { |
| ! /* Special case: gH<Del> deletes the last line. */ |
| ! del_lines(1L, FALSE); |
| ! curwin->w_cursor = curpos; /* restore curwin->w_cursor */ |
| ! if (curwin->w_cursor.lnum > 1) |
| ! --curwin->w_cursor.lnum; |
| ! } |
| ! else |
| ! { |
| ! /* delete from start of line until op_end */ |
| ! curwin->w_cursor.col = 0; |
| ! (void)del_bytes((long)n, !virtual_op, oap->op_type == OP_DELETE |
| #ifdef FEAT_VISUAL |
| && !oap->is_VIsual |
| #endif |
| ); |
| ! curwin->w_cursor = curpos; /* restore curwin->w_cursor */ |
| ! } |
| ! if (curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count) |
| ! (void)do_join(2, FALSE, FALSE); |
| } |
| } |
| |
| |
| |
| |
| *** 711,712 **** |
| --- 711,714 ---- |
| { /* Add new patch number below this line */ |
| + /**/ |
| + 251, |
| /**/ |
| |
| -- |
| ### Hiroshima 45, Chernobyl 86, Windows 95 ### |
| |
| /// 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 /// |