aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/screen.c
Commit message (Collapse)AuthorAge
...
* vim-patch:8.1.1072: extending sign and foldcolumn below the text is ↵Marco Hinz2019-04-03
| | | | | | | | | | | | confusing (#9816) Problem: Extending sign and foldcolumn below the text is confusing. Solution: Let the sign and foldcolumn stop at the last text line, just like the line number column. Also stop the command line window leader. (Christian Brabandt) https://github.com/vim/vim/commit/8ee4c01b8c79a29065c1af05e5d9c0721069765f Closes https://github.com/neovim/neovim/issues/9613
* vim-patch:8.1.1082: "Conceal" match is mixed up with 'hlsearch' match.Jan Edmund Lazo2019-03-31
| | | | | | | Problem: "Conceal" match is mixed up with 'hlsearch' match. Solution: Check that a match is found, not a 'hlsearch' item. (Andy Massimino, closes vim/vim#4073) https://github.com/vim/vim/commit/ab62c19ea034d76632bbbf4265a9fc17e7508541
* vim-patch:8.1.1073: space in number column is on wrong side with 'rightleft' setJan Edmund Lazo2019-03-31
| | | | | | Problem: Space in number column is on wrong side with 'rightleft' set. Solution: Move the space to the text side. Add a test. https://github.com/vim/vim/commit/e73f911c53de1c87e39456ba20782f72a0ca8f4f
* vim-patch:8.0.1528: dead code foundJan Edmund Lazo2019-03-26
| | | | | | Problem: Dead code found. Solution: Remove the useless lines. (CodeAi, closes vim/vim#2656) https://github.com/vim/vim/commit/81226e03102dd00b7cdce0e00775e1e30462f9a6
* signs: support multiple columns #9295Dan Aloni2019-03-25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | closes #990 closes #9295 - Support for multiple auto-adjusted sign columns. With this change, having more than one sign on a line, and with the 'auto' setting on 'signcolumn', extra columns will shown automatically to accomodate all the existing signs. For example, suppose we have this view: 5147 } 5148 5149 return sign->typenr; 5150 } 5151 } 5152 return 0; 5153 } 5154 We have GitGutter installed, so it tells us about modified lines that are not commmited. So let's change line 5152: 5147 } 5148 5149 return sign->typenr; 5150 } 5151 } ~ 5152 return 0; 5153 } 5154 Now we add a mark over line 5152 using 'ma' in normal mode: 5147 } 5148 5149 return sign->typenr; 5150 } 5151 } a ~ 5152 return 0; 5153 } 5154 Previously, Vim/Nvim would have picked only one of the signs, because there was no support for having multiple signs in a line. - Remove signs from deleted lines. Suppose we have highlights on a group of lines and we delete them: + 6 use std::ops::Deref; --+ 7 use std::borrow::Cow; --+ 8 use std::io::{Cursor}; 9 use proc_macro2::TokenStream; 10 use syn::export::ToTokens; --+ 11 use std::io::Write; >> 12 use std::ops::Deref; Without this change, these signs will momentarily accumulate in the sign column until the plugins wake up to refresh them. + --+ --+ --+ >> 6 Discussion: It may be better to extend the API a bit and allow this to happen for only certain types of signs. For example, VIM marks and vim-gitgutter removal signs may want to be presreved, unlike line additions and linter highlights. - 'signcolumn': support 'auto:NUM' and 'yes:NUM' settings - sort signs according to id, from lowest to highest. If you have git-gutter, vim-signature, and ALE, it would appear in this order: git-gutter - vim-signature - ALE. - recalculate size before screen update - If no space for all signs, prefer the higher ids (while keeping the rendering order from low to high). - Prevent duplicate signs. Duplicate signs were invisible to the user, before using our extended non-standard signcolumn settings. - multi signcols: fix bug related to wrapped lines. In wrapped lines, the wrapped parts of a line did not include the extra columns if they existed. The result was a misdrawing of the wrapped parts. Fix the issue by: 1. initializing the signcol counter to 0 when we are on a wrap boundary 2. allowing for the draw of spaces in that case.
* vim-patch:8.1.{0849,1001}: 'cursorline' highlight #9757Justin M. Keyes2019-03-19
| | | | | | | | | | | | | | | | - Lua test correctly fails when 8.1.0849 is reverted. - 8.1.1001 bug does not manifest in Neovim. vim-patch:8.1.0849: cursorline highlight is not always updated Problem: Cursorline highlight is not always updated. Solution: Set w_last_cursorline when redrawing. Fix resetting cursor flags when using the popup menu. https://github.com/vim/vim/commit/c07ff5c60ad35982e9cdaa9dd72d3d1669935e87 vim-patch:8.1.1001: Visual area not correct when using 'cursorline' Problem: Visual area not correct when using 'cursorline'. Solution: Update w_last_cursorline also in Visual mode. (Hirohito Higashi, closes vim/vim#4086) https://github.com/vim/vim/commit/8156ed37558231a8167a1a61a147713d84c9af59
* Allow using internal popupmenu or ext_popupmenu for wildmenuBjörn Linse2019-03-16
| | | | | Deprecate ext_wildmenu. ext_popupmenu already contains more state (anchor position), and will allow further expansion (info about items).
* vim-patch:8.0.0643: when a pattern search is slow Vim becomes unusableBilly Su2019-03-07
| | | | | | | | | Problem: When 'hlsearch' is set and matching with the last search pattern is very slow, Vim becomes unusable. Cannot quit search by pressing CTRL-C. Solution: When the search times out set a flag and don't try again. Check for timeout and CTRL-C in NFA loop that adds states. https://github.com/vim/vim/commit/fbd0b0af6800f6ff89857863d6a07ea03f09ff6c
* Merge pull request #6619 from bfredl/floatingBjörn Linse2019-03-02
|\ | | | | Floating windows in TUI and Remote UI
| * floats: implement floating windowsBjörn Linse2019-03-02
| | | | | | | | Co-Author: Dongdong Zhou <dzhou121@gmail.com>
* | screen.c: remove dead code #6609Justin M. Keyes2019-03-02
|/ | | | enc_utf8, enc_dbcs, has_mbyte are always true, so the false branches are never taken.
* vim-patch:8.1.0932: remove Farsi support (#9622)Justin M. Keyes2019-02-17
| | | | | Problem: Farsi support is outdated and unused. Solution: Delete the Farsi support. https://github.com/vim/vim/commit/14184a3133b9a6ee5f711d493c04e41ba4fa7c2f
* ui: implement ext_messagesBjörn Linse2019-02-10
| | | | Co-Author: Dongdong Zhou <dzhou121@gmail.com>
* screen: cleanup allocation, clearing and validationBjörn Linse2019-02-07
| | | | | | grid_xx functions shouldn't randomly be called when the screen is not valid. Nvim deterministically initializes a default screen early in main(), so the default grid can be assumed to be allocated.
* screen: simplify scrolling codeBjörn Linse2019-02-07
| | | | | Since the separation between internal screen and TUI, internal scroll cannot FAIL. Delete the conditions for this.
* UI: implement 'pumblend' option for semi-transparent popupmenuBjörn Linse2019-02-07
| | | | | | | | | | | | | Why? - Because we can. - Because the TUI is just another GUI™ - Because it looks kinda nice, and provides useful context like 1 out of 100 times Complies with "don't pay for what you don't use". Some crashes for resizing were unfolded, add tests for those.
* rename ui_is_external to ui_has (#9576)Justin M. Keyes2019-02-03
|
* multigrid: reset win scrolling after swap messageBjörn Linse2019-02-02
|
* ui/compositor: add redraws needed due to intersected doublewidth chars.Björn Linse2019-02-02
|
* Reduce pum redraws from edit.c by delaying undisplay of pumBjörn Linse2019-02-02
| | | | | This makes it possible for the compositor to compare the old pum with the new position, and only clear what is necessary.
* UI: add "compositor" layer to merge grids for TUI use in a correct wayBjörn Linse2019-02-02
| | | | | | | | Initially we will use this for the popupmenu, floating windows will follow soon NB: writedelay + compositor is weird, we need more flexible redraw introspection.
* Merge #9539 "options: make 'listchars' and 'fillchars' local to window"Marco Hinz2019-01-28
|\
| * vim-patch:8.1.0759: showing two characters for tab is limitedMarco Hinz2019-01-26
| | | | | | | | | | | | | | | | Problem: Showing two characters for tab is limited. Solution: Allow for a third character for "tab:" in 'listchars'. (Nathaniel Braun, Ken Takata, closes vim/vim#3810) https://github.com/vim/vim/commit/83a52171ba00b2b9fd2d1d22a07e38fc9fc69c1e
| * linter: fix issuesMarco Hinz2019-01-26
| |
| * options: make 'fillchars'/'listchars' local to windowMarco Hinz2019-01-26
| | | | | | | | | | | | | | | | | | | | Using 'listchars' is a nice way to highlight tabs that were included by accident for buffers that set 'expandtab'. But maybe one does not want this for buffers that set 'noexpandtab', so now one can use: autocmd FileType go let &l:listchars .= ',tab: '
* | screen: simplify wp->w_lines allocation logicBjörn Linse2019-01-27
| |
* | window/ui: reorganize size variables, fix terminal window size with multigrid.Björn Linse2019-01-27
| | | | | | | | | | | | | | wp->w_height_inner now contains the "inner" size, regardless if the window has been drawn yet or not. It should be used instead of wp->w_grid.Rows, for stuff that is not directly related to accessing the allocated grid memory, such like cursor movement and terminal size
* | screen: remove superfluous default_grid indirection for global sizeBjörn Linse2019-01-27
| | | | | | | | | | This was changed by mistake in multigrid PR. default_grid.Rows rather corresponds to the old screen_Rows
* | terminal: simplify sizing logicBjörn Linse2019-01-27
|/
* screen: don't unconditionally clear messages on window scrollBjörn Linse2019-01-15
| | | | | | | | | | | | | | | In vim, scrolling a window might mess up the cmdline. To keep it simple, cmdline was always cleared for any window scroll. In nvim, where safe scrolling is implemented in the TUI layer, this problem doesn't exist. Clearing the message on scrolling, when we not do it e.g when switching tabs is a bit weird, as the former is a much smaller context change. A vim patch introduced the possibility to avoid the cmdlline clear for redraws caused by async events. This case will now trivially be covered, as the redraw is always avoided. vim-patch:8.0.0592: if a job writes to a buffer screen is not updated
* clang/"Dead assignment": screen.cJustin M. Keyes2019-01-13
| | | | | Vim 8.1 source has equivalent structure (this isn't a case of accidental regression), but it depends on FEAT_MBYTE.
* display: unify cursorline and concealcursor redraw logicBjörn Linse2019-01-13
| | | | | | | | | | | | | | | | There is various places where 'conceallevel' and 'concealcursor' necessitates additional redraws. This tries to separate the different cases and handle each accordingly: - Share code with 'cursorline' for the common case: vertical move of cursor within the same window (concealcursor not active) - Improve the logic for managing 'concealcursor' and switching modes: test for the case where the new mode behaves differently from the last one. - Clarify the special case for horizontal movement within a line when 'concealcursor' is active, now there is an if-statement only for this and not hidden in larger check mostly for the first point. - Keep the special case for moving between windows as is.
* Merge pull request #9484 from bfredl/highlanderBjörn Linse2019-01-11
|\ | | | | screen: make update_screen() the only entry point for redrawing
| * screen: make update_screen() the only entry point for redrawingBjörn Linse2019-01-11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | update_single_line() was only used for 'concealcursor'. But 'cursorline' has very similiar characteristics (redraw both lines on move cursor between lines) and works without its own special entry point to the redraw subsystem. Later on 'concealcursor' and 'cursorline' could share more logic, but for now make the former use standard redrawWinline(). Make sure it is called before update_screen(), so that it is immediately visible. Get rid of update_prepare() and update_finish(), and all issues from them and their callsites not being in sync with changes to update_screen()
* | vim-patch:8.1.0450: build failure without the +fold featureMichael Vilim2019-01-11
| | | | | | | | | | | | Problem: Build failure without the +fold feature. Solution: Add #ifdef. https://github.com/vim/vim/commit/0e9deefb4fb4f99d0ab90b21ca38260be26bf5de
* | vim-patch:8.1.0449: fix display of 'rnu' with folded lines #9481Michael Vilim2019-01-11
|/ | | | | | | | | | | | | | | | | | | | | | | | Problem: When 'rnu' is set folded lines are not displayed correctly. (Vitaly Yashin) Solution: When only redrawing line numbers do draw folded lines. (closes vim/vim#3484) https://github.com/vim/vim/commit/7701f308565fdc7b5096a6597d9c3b63de0bbcec --- Explanation: Before this patch, relative line numbers would update on a cursor movement and overwrite fold highlighting in the line number columns. Other operations can cause the fold highlighting to overwrite the line number styles. Together, this causes the highlighting in the line number columns to flicker back and forth while editing. Test case: create `t.vim` with these contents: set fdm=marker rnu foldcolumn=2 call setline(1, ["{{{1", "nline 1", "{{{1", "line 2"]) and then call `nvim -u NORC -S t.vim` and press `j`; observe that the fold highlighting disappears.
* remove dead argument of redrawWinlineBjörn Linse2019-01-09
|
* screen: avoid redrawing windows immediately when debug signs are placed.Björn Linse2019-01-09
|
* vim-patch:8.1.0700: using "gt" sometimes does not redraw a tab (#9464)Justin M. Keyes2019-01-07
| | | | | | | | | | | | | | | | | | Problem: Using "gt" sometimes does not redraw a tab. (Jason Franklin) Solution: Always set must_redraw in redraw_all_later(). https://github.com/vim/vim/commit/04b4e1a42409f81d65ae4801ac867dc0bba3d7b8 ref https://github.com/vim/vim/commit/bf3250a8ad39797e3ccdac82d20c6f19533419e4#r31852304 > I fixed it in a more general way, in that if we don't find a window > that doesn't have the redraw type set it, then it will not set > must_redraw, even though that's clearly intended. ref #9152 ref #9155 NA patches: vim-patch:8.1.0698 vim-patch:8.1.0699
* vim-patch:8.1.0683: spell highlighting does not always endJan Edmund Lazo2019-01-05
| | | | | | Problem: Spell highlighting does not always end. (Gary Johnson) Solution: Also reset char_attr when spell errors are highlighted. https://github.com/vim/vim/commit/637532b3c0ca41f0de7e90b6f3c0defe06369372
* vim-patch:8.1.0674: leaking memory when updating a single lineJan Edmund Lazo2019-01-05
| | | | | | Problem: Leaking memory when updating a single line. Solution: Do not call start_search_hl() twice. https://github.com/vim/vim/commit/6d5b4f566a2a50c1de7300336e9e4f5e761500a8
* vim-patch:8.0.0286: not always redrawing after screen resizeJan Edmund Lazo2019-01-05
| | | | | | | | Problem: When concealing is active and the screen is resized in the GUI it is not immediately redrawn. Solution: Use update_prepare() and update_finish() from update_single_line(). https://github.com/vim/vim/commit/c10f0e7cb0f35eea489b038e56c87b818eee975b
* Visual: highlight char-at-cursorJustin M. Keyes2019-01-04
| | | | | | | | | | | | | | | Decide whether to highlight the visual-selected character under the cursor, depending on 'guicursor' style: - Highlight if cursor is blinking or non-block (vertical, horiz). - Do NOT highlight if cursor is non-blinking block. Traditionally Vim's visual selection does "reverse mode", which perhaps conflicts with the non-blinking block cursor. But 'guicursor' defaults to a vertical bar for selection=exclusive, and this confuses users who expect to see the text highlighted. closes #8983
* remove check_visual_highlight()Justin M. Keyes2019-01-04
| | | | This check is meaningless, we assume the terminal supports reverse-mode.
* build: enable -WshadowJustin M. Keyes2019-01-02
| | | | | | | | | | Note about shada.c: - shada_read_next_item_start was intentionally shadowing `unpacked` and `i` because many of the macros (e.g. ADDITIONAL_KEY) implicitly depended on those variable names. - Macros were changed to parameterize `unpacked` (but not `i`). Macros like CLEAR_GA_AND_ERROR_OUT do control-flow (goto), so any other approach is messy.
* multigrid: do all adjustment in screen.cBjörn Linse2019-01-01
| | | | | Adjustment will get more complex with floats, tabgrid etc, so make it into a function.
* multigrid: rename grid->ScreenLines and other grid arraysBjörn Linse2018-12-31
|
* multigrid: rename to grid.row_offset and grid.requested_rowsBjörn Linse2018-12-31
|
* multigrid: reorganize types and global varaiblesBjörn Linse2018-12-31
|
* multigrid: various cleanup (types, unused parameters)Björn Linse2018-12-31
| | | | Handle the rare case of full highlight table properly