mirror of
				https://github.com/neovim/neovim.git
				synced 2025-10-26 12:27:24 +00:00 
			
		
		
		
	vim-patch:9.0.1600: screenpos() does not take w_skipcol into account
Problem:    screenpos() does not take w_skipcol into account.
Solution:   Subtract w_skipcol from column. (closes vim/vim#12486, closes vim/vim#12476)
f0e68c0e2a
			
			
This commit is contained in:
		| @@ -972,6 +972,10 @@ void textpos2screenpos(win_T *wp, pos_T *pos, int *rowp, int *scolp, int *ccolp, | ||||
|       col += off; | ||||
|       int width = wp->w_width_inner - off + win_col_off2(wp); | ||||
|  | ||||
|       if (pos->lnum == wp->w_topline) { | ||||
|         col -= wp->w_skipcol; | ||||
|       } | ||||
|  | ||||
|       // long line wrapping, adjust row | ||||
|       if (wp->w_p_wrap && col >= (colnr_T)wp->w_width_inner && width > 0) { | ||||
|         // use same formula as what is used in curs_columns() | ||||
|   | ||||
| @@ -127,6 +127,39 @@ func Test_screenpos() | ||||
|   call assert_equal({'row': 0, 'col': 0, 'curscol': 0, 'endcol': 0}, | ||||
| 	\ winid->screenpos(line('$'), 22)) | ||||
|  | ||||
|   1split | ||||
|   normal G$ | ||||
|   redraw | ||||
|   call assert_equal({'row': winrow + 0, | ||||
| 	\ 'col': wincol + 20 - 1, | ||||
| 	\ 'curscol': wincol + 20 - 1, | ||||
| 	\ 'endcol': wincol + 20 - 1}, | ||||
| 	\ screenpos(win_getid(), line('.'), col('.'))) | ||||
|  | ||||
|   " w_skipcol should be subtracted | ||||
|   setlocal nowrap | ||||
|   normal 050zl$ | ||||
|   call assert_equal({'row': winrow + 0, | ||||
| 	\ 'col': wincol + 10 - 1, | ||||
| 	\ 'curscol': wincol + 10 - 1, | ||||
| 	\ 'endcol': wincol + 10 - 1}, | ||||
| 	\ screenpos(win_getid(), line('.'), col('.'))) | ||||
|  | ||||
|   " w_skipcol should only matter for the topline | ||||
| " FIXME: This fails because pline_m_win() does not take w_skipcol into | ||||
| " account.  If it does, then other tests fail. | ||||
| "  wincmd + | ||||
| "  setlocal wrap smoothscroll | ||||
| "  call setline(line('$') + 1, 'last line') | ||||
| "  exe "normal \<C-E>G$" | ||||
| "  redraw | ||||
| "  call assert_equal({'row': winrow + 1, | ||||
| "	\ 'col': wincol + 9 - 1, | ||||
| "	\ 'curscol': wincol + 9 - 1, | ||||
| "	\ 'endcol': wincol + 9 - 1}, | ||||
| "	\ screenpos(win_getid(), line('.'), col('.'))) | ||||
|   close | ||||
|  | ||||
|   close | ||||
|   call assert_equal({}, screenpos(999, 1, 1)) | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 zeertzjq
					zeertzjq