summaryrefslogtreecommitdiffstats
path: root/src/move.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2010-05-16 15:46:46 +0200
committerBram Moolenaar <Bram@vim.org>2010-05-16 15:46:46 +0200
commit64486671c3fcc75698c57732c50865ad0573b3fe (patch)
tree2e638c57e838549b6c314984b2405c25b2e4c175 /src/move.c
parent13c4c5da673c488d2d340c72f401f0631b9f669d (diff)
Add 'relativenumber' patch from Markus Heidelberg.
Diffstat (limited to 'src/move.c')
-rw-r--r--src/move.c32
1 files changed, 19 insertions, 13 deletions
diff --git a/src/move.c b/src/move.c
index de1a9e4de3..4bdb694717 100644
--- a/src/move.c
+++ b/src/move.c
@@ -916,14 +916,14 @@ validate_cursor_col()
}
/*
- * Compute offset of a window, occupied by line number, fold column and sign
- * column (these don't move when scrolling horizontally).
+ * Compute offset of a window, occupied by absolute or relative line number,
+ * fold column and sign column (these don't move when scrolling horizontally).
*/
int
win_col_off(wp)
win_T *wp;
{
- return ((wp->w_p_nu ? number_width(wp) + 1 : 0)
+ return (((wp->w_p_nu || wp->w_p_rnu) ? number_width(wp) + 1 : 0)
#ifdef FEAT_CMDWIN
+ (cmdwin_type == 0 || wp != curwin ? 0 : 1)
#endif
@@ -949,13 +949,14 @@ curwin_col_off()
/*
* Return the difference in column offset for the second screen line of a
- * wrapped line. It's 8 if 'number' is on and 'n' is in 'cpoptions'.
+ * wrapped line. It's 8 if 'number' or 'relativenumber' is on and 'n' is in
+ * 'cpoptions'.
*/
int
win_col_off2(wp)
win_T *wp;
{
- if (wp->w_p_nu && vim_strchr(p_cpo, CPO_NUMCOL) != NULL)
+ if ((wp->w_p_nu || wp->w_p_rnu) && vim_strchr(p_cpo, CPO_NUMCOL) != NULL)
return number_width(wp) + 1;
return 0;
}
@@ -1218,17 +1219,22 @@ curs_columns(scroll)
if (prev_skipcol != curwin->w_skipcol)
redraw_later(NOT_VALID);
+ /* Redraw when w_row changes and 'relativenumber' is set */
+ if (((curwin->w_valid & VALID_WROW) == 0 && (curwin->w_p_rnu
#ifdef FEAT_SYN_HL
- /* Redraw when w_virtcol changes and 'cursorcolumn' is set, or when w_row
- * changes and 'cursorline' is set. */
- if (((curwin->w_p_cuc && (curwin->w_valid & VALID_VIRTCOL) == 0)
- || (curwin->w_p_cul && (curwin->w_valid & VALID_WROW) == 0))
+ /* or when w_row changes and 'cursorline' is set. */
+ || curwin->w_p_cul
+#endif
+ ))
+#ifdef FEAT_SYN_HL
+ /* or when w_virtcol changes and 'cursorcolumn' is set */
+ || (curwin->w_p_cuc && (curwin->w_valid & VALID_VIRTCOL) == 0)
+#endif
+ )
# ifdef FEAT_INS_EXPAND
- && !pum_visible()
+ if (!pum_visible())
# endif
- )
- redraw_later(SOME_VALID);
-#endif
+ redraw_later(SOME_VALID);
curwin->w_valid |= VALID_WCOL|VALID_WROW|VALID_VIRTCOL;
}