aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/move.c
Commit message (Collapse)AuthorAge
* refactor: remove longdundargoc2023-09-29
| | | | | long is 32-bits even on 64-bit windows which makes the type suboptimal for a codebase meant to be cross-platform.
* fix(ui): wrong cursor position with left gravity inline virt text at eolzeertzjq2023-08-28
|
* refactor(change): do API changes to buffer without curbuf switchbfredl2023-08-26
| | | | | | | | | | | | | | | | | | | | | | | Most of the messy things when changing a non-current buffer is not about the buffer, it is about windows. In particular, it is about `curwin`. When editing a non-current buffer which is displayed in some other window in the current tabpage, one such window will be "borrowed" as the curwin. But this means if two or more non-current windows displayed the buffers, one of them will be treated differenty. this is not desirable. In particular, with nvim_buf_set_text, cursor _column_ position was only corrected for one single window. Two new tests are added: the test with just one non-current window passes, but the one with two didn't. Two corresponding such tests were also added for nvim_buf_set_lines. This already worked correctly on master, but make sure this is well-tested for future refactors. Also, nvim_create_buf no longer invokes autocmds just because you happened to use `scratch=true`. No option value was changed, therefore OptionSet must not be fired.
* refactor(memline): distinguish mutating uses of ml_get_buf()bfredl2023-08-24
| | | | | | | | | | | | | | ml_get_buf() takes a third parameters to indicate whether the caller wants to mutate the memline data in place. However the vast majority of the call sites is using this function just to specify a buffer but without any mutation. This makes it harder to grep for the places which actually perform mutation. Solution: Remove the bool param from ml_get_buf(). it now works like ml_get() except for a non-current buffer. Add a new ml_get_buf_mut() function for the mutating use-case, which can be grepped along with the other ml_replace() etc functions which can modify the memline.
* vim-patch:9.0.1785: wrong cursor position with 'showbreak' and lcs-eol (#24852)zeertzjq2023-08-24
| | | | | | | | | | Problem: wrong cursor position with 'showbreak' and lcs-eol Solution: Add size of 'showbreak' before when 'listchars' "eol" is used. Also fix wrong cursor position with wrapping virtual text on empty line and 'showbreak'. closes: vim/vim#12891 https://github.com/vim/vim/commit/1193951bebcff50d88403ce17dec5d3be14f131d
* vim-patch:9.0.0579: using freed memory when 'tagfunc' wipes out buffer (#24838)zeertzjq2023-08-22
| | | | | | | | | | | Problem: Using freed memory when 'tagfunc' wipes out buffer that holds 'complete'. Solution: Make a copy of the option. Make sure cursor position is valid. https://github.com/vim/vim/commit/0ff01835a40f549c5c4a550502f62a2ac9ac447c Cherry-pick a cmdwin change from patch 9.0.0500. Co-authored-by: Bram Moolenaar <Bram@vim.org>
* vim-patch:9.0.1747: screenpos() may cause unnecessary redraw (#24792)zeertzjq2023-08-19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: screenpos() may cause unnecessary redraw. Solution: Don't unnecessarily reset VALID_WROW flag. VALID_WROW flag is only used by two functions: validate_cursor() and cursor_valid(), and cursor_valid() is only used once in ex_sleep(). When adjust_plines_for_skipcol() was first added in patch 9.0.0640, it was called in two functions: comp_botline() and curs_rows(). - comp_botline() is called in two places: - onepage(), which resets VALID_WROW flag immediately afterwards. - validate_botline_win(), where resetting a VALID_ flag is strange. - curs_rows() is called in two places: - curs_columns(), which sets VALID_WROW flag afterwards. - validate_cline_row(), which is only used by GUI mouse focus. Therefore resetting VALID_WROW there doesn't seem to do anything useful. Also, a w_skipcol check (which resets VALID_WROW flag) was added to check_cursor_moved() in patch 9.0.0734, which seems to make more sense than resetting that flag in the middle of a computation. While at it make adjust_plines_for_skipcol() and textpos2screenpos() a bit less confusing: - Make adjust_plines_for_skipcol() return "off" instead of "n - off". - Use 0-based "row" in textpos2screenpos() until W_WINROW is added. closes: vim/vim#12832 https://github.com/vim/vim/commit/6235a109c48ff2559eca3b16578c429ffb61eadc
* vim-patch:9.0.1729: screenpos() wrong when w_skipcol and cpoptions+=n (#24773)zeertzjq2023-08-18
| | | | | | | | | Problem: screenpos() wrong result with w_skipcol and cpoptions+=n Solution: Use adjust_plines_for_skipcol() instead of subtracting w_skipcol. closes: vim/vim#12625 https://github.com/vim/vim/commit/bfe377b8f2d080e5f85c8cbecf3533456e1d6312
* refactor: cast to int earlier when using 'so' and 'siso' (#24756)zeertzjq2023-08-17
|
* vim-patch:9.0.1717: virtcol2col returns last byte of a multi-byte char (#24729)zeertzjq2023-08-16
| | | | | | | | | | | Problem: virtcol2col returns last byte of a multi-byte char Solution: Make it return the first byte for a multi-byte char closes: vim/vim#12786 closes: vim/vim#12799 https://github.com/vim/vim/commit/b209b86e6636a16088ccacdac98213416c065bf2 Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
* fix(highlight): make CurSearch work properly with 'winhl' (#24448)zeertzjq2023-07-23
|
* fix(column): fix wrong cursor with 'statuscolumn' and cpo+=n (#24268)zeertzjq2023-07-06
|
* refactor: remove longdundargoc2023-07-03
| | | | | long is 32-bits even on 64-bit windows which makes the type suboptimal for a codebase meant to be cross-platform.
* vim-patch:9.0.1664: divide by zero when scrolling with 'smoothscroll' setzeertzjq2023-06-27
| | | | | | | | | Problem: Divide by zero when scrolling with 'smoothscroll' set. Solution: Avoid using a negative width. (closes vim/vim#12540, closes vim/vim#12528) https://github.com/vim/vim/commit/8154e642aa476e1a5d3de66c34e8289845b2b797 Co-authored-by: fullwaywang <fullwaywang@tencent.com>
* vim-patch:9.0.1612: "skipcol" not reset when using multi-byte characters ↵zeertzjq2023-06-06
| | | | | | | | | | (#23928) Problem: "skipcol" not reset when using multi-byte characters. Solution: Compare with w_virtcol instead of w_cursor.col. (closes vim/vim#12457) https://github.com/vim/vim/commit/15d4747ffd197ffa5b5a41a852a1fe93b6cc35fd Co-authored-by: Bram Moolenaar <Bram@vim.org>
* vim-patch:9.0.1610: display is wrong when 'smoothscroll' is setzeertzjq2023-06-06
| | | | | | | | | Problem: Display is wrong when 'smoothscroll' is set and scrolling multiple lines. Solution: Redraw with UPD_NOT_VALID when "skipcol" is or was set. (closes vim/vim#12490, closes vim/vim#12468) https://github.com/vim/vim/commit/d9a92dc70b20c76cef9ca186676583c92c14311c
* vim-patch:9.0.1603: display wrong if scrolling multiple lines with ↵zeertzjq2023-06-06
| | | | | | | | | | 'smoothscroll' Problem: Display wrong when scrolling multiple lines with 'smoothscroll' set. Solution: Redraw when w_skipcol changed. (closes vim/vim#12477, closes vim/vim#12468) https://github.com/vim/vim/commit/3c802277604a6b21110e41bedfe4c937ba7c2b7d
* fix(plines): folded lines with virt_lines attached to line abovezeertzjq2023-06-05
|
* vim-patch:9.0.1607: screenpos() returns wrong row with diff filler lineszeertzjq2023-06-05
| | | | | | | | | Problem: screenpos() returns wrong row with diff filler lines. Solution: Only add filler lines when appropriate. Also don't add the 'smoothscroll' marker when w_skipcol is zero. (closes vim/vim#12485, closes vim/vim#12484) https://github.com/vim/vim/commit/55daae392157823dc5434e6be1344f4336bfe96f
* vim-patch:9.0.1600: screenpos() does not take w_skipcol into accountzeertzjq2023-06-05
| | | | | | | Problem: screenpos() does not take w_skipcol into account. Solution: Subtract w_skipcol from column. (closes vim/vim#12486, closes vim/vim#12476) https://github.com/vim/vim/commit/f0e68c0e2a3539f899e737e5b167622fe081fbbd
* vim-patch:9.0.1597: cursor ends up below the window after a put (#23873)zeertzjq2023-06-02
| | | | | | | | | Problem: Cursor ends up below the window after a put. Solution: Mark w_crow and w_botline invalid when changing the cursor line. (closes vim/vim#12465) https://github.com/vim/vim/commit/8509014adda188ee8bdf6a2e123fbf15a91b29d2 Co-authored-by: Bram Moolenaar <Bram@vim.org>
* vim-patch:9.0.1568: with 'smoothscroll' cursor may move below botlineLuuk van Baal2023-05-19
| | | | | | | | Problem: With 'smoothscroll' cursor may move below botline. Solution: Call redraw_later() if needed, Compute cursor row with adjusted condition. (Luuk van Baal, closes vim/vim#12415) https://github.com/vim/vim/commit/d49f646bf56b29d44bbb16e79bc877b59aab38ac
* vim-patch:9.0.1564: display moves up and down with 'incsearch' and ↵Luuk van Baal2023-05-19
| | | | | | | | | | 'smoothscroll' Problem: Display moves up and down with 'incsearch' and 'smoothscroll'. Solution: Do not check if w_skipcol changed. (Luuk van Baal, closes vim/vim#12410, closes vim/vim#12409) https://github.com/vim/vim/commit/0222c2d103ad9298bec4dc8864cd80b4e7559db1
* vim-patch:9.0.1561: display wrong when moving cursor to above the top line ↵luukvbaal2023-05-16
| | | | | | | | | | (#23644) Problem: Display wrong when moving cursor to above the top line and 'smoothscroll' is set. Solution: Call adjust_skipcol() in more places and make it work better. (Luuk van Baal, closes vim/vim#12395) https://github.com/vim/vim/commit/798fa76dbf737f855e47b10bf326453866b429ab
* vim-patch:9.0.1551: position of marker for 'smoothscroll' not computed ↵luukvbaal2023-05-14
| | | | | | | | | correctly (#23617) Problem: Position of marker for 'smoothscroll' not computed correctly. Solution: Take 'list' and other options into account. (Luuk van Baal, closes vim/vim#12393) https://github.com/vim/vim/commit/24b62ec8258cc7c9ca2c09f645f7f6b02584c892
* vim-patch:9.0.1542: line not fully displayed if it doesn't fit in the screenLuuk van Baal2023-05-11
| | | | | | | | Problem: Line not fully displayed if it doesn't fit in the screen. Solution: Do not reset s_skipcol if not needed. (Luuk van Baal, closes vim/vim#12376) https://github.com/vim/vim/commit/6c018680be0ec25d42614a93be1ea08df29a9e2a
* vim-patch:9.0.1530: cursor moves to wrong line when 'foldmethod' is "diff"Luuk van Baal2023-05-09
| | | | | | | | | Problem: Cursor moves to wrong line when 'foldmethod' is "diff". (Rick Howe) Solution: Adjust logic for scrolling. (Luuk van Baal, closes vim/vim#12364, closes vim/vim#12218) https://github.com/vim/vim/commit/aa6ba308a1498dc8da04d1d30ec0470018bf782a
* vim-patch:9.0.1525: 'smoothscroll' does not always work properly (#23544)luukvbaal2023-05-09
| | | | | | | Problem: 'smoothscroll' does not always work properly. Solution: Do not reset w_skipcol after it was intentionally set. (Luuk van Baal, closes vim/vim#12360, closes vim/vim#12199, closes vim/vim#12323) https://github.com/vim/vim/commit/3ce8c389155fc1257082cdb0cef7801b49f6aaf9
* vim-patch:9.0.1512: inserting lines when scrolling with 'smoothscroll' setLuuk van Baal2023-05-07
| | | | | | | | Problem: Inserting lines when scrolling with 'smoothscroll' set. Solution: Adjust line height computation for w_skipcol. (Luuk van Baal, closes vim/vim#12350) https://github.com/vim/vim/commit/c8502f9b880b6d23baa4f9d28b60e1ceb442e35f
* vim-patch:9.0.0904: various comment and indent flaws (#23498)zeertzjq2023-05-06
| | | | | | | | | | | Problem: Various comment and indent flaws. Solution: Improve comments and indenting. https://github.com/vim/vim/commit/88456cd3c49a3dd1fda17cf350daa9b8216b1aa6 Omit test_function_lists.vim change as that file is likely not applicable to Nvim due to the existence of Nvim-only functions. Co-authored-by: Bram Moolenaar <Bram@vim.org>
* fix(ui): adjust 'smoothscroll' for inner dimensionsLuuk van Baal2023-05-02
|
* vim-patch:9.0.1435: scrolling too many lines when 'wrap' and 'diff' are setLuuk van Baal2023-05-02
| | | | | | | | | | Problem: Scrolling too many lines when 'wrap' and 'diff' are set. Solution: Only scroll by screenlines for 'diff' when 'wrap' is not set. (closes vim/vim#12211) https://github.com/vim/vim/commit/38d867f041349e1400c2cce9cac06f59ae6ccbb1 Co-authored-by: Bram Moolenaar <Bram@vim.org>
* vim-patch:9.0.1367: divide by zero in zero-width windowLuuk van Baal2023-05-02
| | | | | | | | | Problem: Divide by zero in zero-width window. Solution: Check the width is positive. https://github.com/vim/vim/commit/e0f869196930ef5f25a0ac41c9215b09c9ce2d3c Co-authored-by: Bram Moolenaar <Bram@vim.org>
* vim-patch:9.0.1247: divide by zero with 'smoothscroll' set and a narrow windowLuuk van Baal2023-05-02
| | | | | | | | | Problem: Divide by zero with 'smoothscroll' set and a narrow window. Solution: Bail out when the window is too narrow. https://github.com/vim/vim/commit/870219c58c0804bdc55419b2e455c06ac715a835 Co-authored-by: Bram Moolenaar <Bram@vim.org>
* vim-patch:9.0.1121: cursor positioning and display problems with 'smoothscroll'Luuk van Baal2023-05-02
| | | | | | | | | | | Problem: Cursor positioning and display problems with 'smoothscroll' and using "zt", "zb" or "zz". Solution: Adjust computations and conditions. (Yee Cheng Chin, closes vim/vim#11764) https://github.com/vim/vim/commit/db4d88c2adfe8f8122341ac9d6cae27ef78451c8 Co-authored-by: Bram Moolenaar <Bram@vim.org>
* vim-patch:9.0.1000: with 'smoothscroll' skipcol may be reset unnecessarilyLuuk van Baal2023-05-02
| | | | | | | | | Problem: With 'smoothscroll' skipcol may be reset unnecessarily. Solution: Check the line does actually fit in the window. https://github.com/vim/vim/commit/b21b8e9ed081a6ef6b6745fe65d219b3ac046c3b Co-authored-by: Bram Moolenaar <Bram@vim.org>
* vim-patch:9.0.0998: "gk" may reset skipcol when not neededLuuk van Baal2023-05-02
| | | | | | | | | Problem: "gk" may reset skipcol when not needed. Solution: Only reset skipcol if the cursor column is less. https://github.com/vim/vim/commit/1b73edd9ee40aec400f3611f59823cec5fd1c489 Co-authored-by: Bram Moolenaar <Bram@vim.org>
* vim-patch:9.0.0908: with 'smoothscroll' cursor may end up in wrong positionLuuk van Baal2023-05-02
| | | | | | | | | | Problem: With 'smoothscroll' cursor may end up in wrong position. Solution: Correct the computation of screen lines. (Yee Cheng Chin, closes vim/vim#11502) https://github.com/vim/vim/commit/361895d2a15b4b0bbbb4c009261eab5b3d69ebf1 Co-authored-by: Yee Cheng Chin <ychin.git@gmail.com>
* vim-patch:9.0.0900: cursor moves too far with 'smoothscroll'Luuk van Baal2023-05-02
| | | | | | | | | Problem: Cursor moves too far with 'smoothscroll'. Solution: Only move as far as really needed. (Yee Cheng Chin, closes vim/vim#11504) https://github.com/vim/vim/commit/81ba26e9de24ca6b1c05b6ec03e53b21793f1a4b Co-authored-by: Yee Cheng Chin <ychin.git@gmail.com>
* vim-patch:9.0.0893: 'smoothscroll' cursor calculations wrong when 'number' ↵Luuk van Baal2023-05-02
| | | | | | | | | | | is set Problem: 'smoothscroll' cursor calculations wrong when 'number' is set. Solution: Correct the code that computes the width. (closes vim/vim#11492) https://github.com/vim/vim/commit/01ee52bab6041450095c53f9469b1b266a7e3d4d Co-authored-by: Yee Cheng Chin <ychin.git@gmail.com>
* vim-patch:9.0.0892: may redraw when not neededLuuk van Baal2023-05-02
| | | | | | | | | | Problem: May redraw when not needed, causing slow scrolling. Solution: Do not redraw when w_skipcol doesn't change. When w_skipcol changes only redraw from the top. (issue vim/vim#11559) https://github.com/vim/vim/commit/f32fb93e431e4db95a8663d86dfeb6bffa5896f6 Co-authored-by: Bram Moolenaar <Bram@vim.org>
* vim-patch:9.0.0807: with 'smoothscroll' typing "0" may not go to the first ↵Luuk van Baal2023-05-02
| | | | | | | | | | | | column Problem: With 'smoothscroll' typing "0" may not go to the first column. Solution: Recompute w_cline_height when needed. Do not scroll up when it would move the cursor. https://github.com/vim/vim/commit/d5337efece7c68e9b4ce864532ea49b02453b674 Co-authored-by: Bram Moolenaar <Bram@vim.org>
* vim-patch:9.0.0751: 'scrolloff' does not work well with 'smoothscroll'Luuk van Baal2023-05-02
| | | | | | | | | Problem: 'scrolloff' does not work well with 'smoothscroll'. Solution: Make positioning the cursor a bit better. Rename functions. https://github.com/vim/vim/commit/c9121f798f49fa71e814912cb186d89c164090c3 Co-authored-by: Bram Moolenaar <Bram@vim.org>
* vim-patch:9.0.0746: breakindent test cases are commented outLuuk van Baal2023-05-02
| | | | | | | | | | Problem: Breakindent test cases are commented out. Solution: Adjust expected result to slightly different behavior. Correct computations for cursor position. https://github.com/vim/vim/commit/856c5d2bc7c3864f8b63a0ab3e376d5c5e51f1d5 Co-authored-by: Bram Moolenaar <Bram@vim.org>
* vim-patch:9.0.0745: wrong cursor position when using "gj" and "gk" in a long ↵Luuk van Baal2023-05-02
| | | | | | | | | | | | line Problem: Wrong cursor position when using "gj" and "gk" in a long line. Solution: Adjust computations for the cursor position and skipcol. Re-enable tests that pass now, disable failing breakindent test. https://github.com/vim/vim/commit/4b6172e108fe06be47c09f8690dc54608be3ee80 Co-authored-by: Bram Moolenaar <Bram@vim.org>
* vim-patch:9.0.0734: cursor position invalid when scrolling with 'smoothscroll'Luuk van Baal2023-05-02
| | | | | | | | | | | Problem: Cursor position invalid when scrolling with 'smoothscroll' set. (Ernie Rael) Solution: Add w_valid_skipcol and clear flags when it changes. Adjust w_skipcol after moving the cursor. https://github.com/vim/vim/commit/2fbabd238a94022c99506e920186a5b6cdf15426 Co-authored-by: Bram Moolenaar <Bram@vim.org>
* vim-patch:9.0.0707: with 'smoothscroll' cursor position not adjusted in long ↵Luuk van Baal2023-05-02
| | | | | | | | | | | | line Problem: With 'smoothscroll' and 'scrolloff' non-zero the cursor position is not properly adjusted in a long line. Solution: Move the cursor further up or down in the line. https://github.com/vim/vim/commit/118c235112854f34182d968613d7fe98be3b290b Co-authored-by: Bram Moolenaar <Bram@vim.org>
* vim-patch:9.0.0701: with 'smoothscroll' cursor position not adjusted in long ↵Luuk van Baal2023-05-02
| | | | | | | | | | | | line Problem: With 'smoothscroll' the cursor position s not adjusted in a long line. Solution: Move the cursor further up or down in the line. https://github.com/vim/vim/commit/8cf3459878198c5bb4a96f3c63214b2beccce341 Co-authored-by: Bram Moolenaar <Bram@vim.org>
* vim-patch:9.0.0673: first line wong with 'smoothscroll' and 'scrolloff' zeroLuuk van Baal2023-05-02
| | | | | | | | | | Problem: First line not scrolled properly with 'smoothscroll' and 'scrolloff' zero and using "k". Solution: Make sure the cursor position is visible. https://github.com/vim/vim/commit/46b54747c5d252c584571a321231bad9330018ec Co-authored-by: Bram Moolenaar <Bram@vim.org>
* vim-patch:9.0.0672: line partly shows with 'smoothscroll' and 'scrolloff' zeroLuuk van Baal2023-05-02
| | | | | | | | | | | Problem: Cursor line only partly shows with 'smoothscroll' and 'scrolloff' zero. Solution: Do not use 'smoothscroll' when adjusting the bottom of the window. (closes vim/vim#11269) https://github.com/vim/vim/commit/9bab7a024393200bb2c03b3abddfda86436990a7 Co-authored-by: Bram Moolenaar <Bram@vim.org>