Commit Graph

112 Commits

Author SHA1 Message Date
Björn Linse
2ab70cb55c window/ui: reorganize size variables, fix terminal window size with multigrid.
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
2019-01-27 12:07:06 +01:00
Björn Linse
23c71d5182 display: unify cursorline and concealcursor redraw logic
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.
2019-01-13 12:08:11 +01:00
Björn Linse
b819795661 remove dead argument of redrawWinline 2019-01-09 10:23:26 +01:00
Björn Linse
820c81e638 multigrid: various cleanup (types, unused parameters)
Handle the rare case of full highlight table properly
2018-12-31 16:24:07 +01:00
Björn Linse
f77f09ea6e multigrid: don't clear window grids on resize
Instead define that the shared top-left part of the grid is preserved.
2018-12-31 12:44:22 +01:00
Utkarsh Maheshwari
ba6f9f60ad multigrid: Fix lint errors 2018-12-31 12:44:22 +01:00
Utkarsh Maheshwari
01555de2da multigrid: Allow UIs to set grid size different from window size 2018-12-31 12:44:21 +01:00
Björn Linse
c9b559a030 multigrid: introduce grid abstraction 2018-12-31 12:44:21 +01:00
Björn Linse
520ec3dbfd UI/TUI: improvements and cleanups for scrolling and clearing
- TUI: _never_ rely on BCE for implicit clearing, only explicit commands.
- TUI: use unibi_erase_chars when possible.
- TUI: use end-exclusive ranges for invalid and cleared areas
- screen: scrolling leaves scrolled in aree undefined. This is a
  conservative change, a client assuming the old semantics will still
  behave correctly.
- screen: factor out vsep handling from line drawing. This is needed
  anyway for the multigrid refactor.
- screen: simplifications of win_do_lines
2018-11-11 09:54:03 +01:00
Björn Linse
e598811e76 ui: disable clearing almost everywhere
Avoid clearing the screen in most situations. NOT_VALID should be
equivalent to CLEAR unless some external force messed up the terminal,
for these situations <c-l> and :mode will still clear the screen.

Also eliminate some obsolete code in screen.c, that dealt with that in
vim drawing window 1 can mess up window 2, but this never happens in
nvim.

But what about slow terminals? There is two common meanings in which
a terminal is said to be "slow":

Most commonly (and in the sense of vim:s nottyfast) it means low
bandwidth for sending bytes from nvim to the terminal. If the screen is
very similar before and after the update_screen(CLEAR) this change
should reduce bandwidth. If the screen is quite different, but there is
no new regions of contiguous whitespace, clearing doesn't reduce
bandwidth significantly. If the new screen contains a lot of whitespace,
it will depend of if vsplits are used or not: as long as there is no
vsplits, ce is used to cheaply clear the rest of the line, so
full-screen clear is not needed to reduce bandwith. However a left
vsplit currently needs to be padded with whitespace all the way to the
separator. It is possible ec (clear N chars) can be used to reduce
bandwidth here if this is a problem. (All of this assumes that one
doesn't set Normal guibg=... on a non-BCE terminal, if you do you are
doomed regardless of this change).

Slow can also mean that drawing pixels on the screen is slow. E-ink
screens is a recent example. Avoiding clearing and redrawing the
unchanged part of the screen will always improve performance in these
cases.
2018-10-22 11:59:02 +02:00
Justin M. Keyes
ee94eecbd4 vim-patch:8.1.0448: cursorline not removed when using 'cursorbind'
Problem:    Cursorline not removed when using 'cursorbind'. (Justin Keyes)
Solution:   Store the last cursor line per window. (closes vim/vim#3488)
4a5abbd613
2018-10-16 00:15:09 +02:00
Justin M. Keyes
ba17bcfefc vim-patch:8.1.0435: cursorline highlight not removed in some situation (#9059)
Problem:    Cursorline highlight not removed in some situation. (Vitaly
            Yashin)
Solution:   Reset last_cursorline when resetting 'cursorline'. (Christian
            Brabandt, closes vim/vim#3481)
8c63e0ec31
2018-09-27 10:33:39 +02:00
Justin M. Keyes
ba27284f07 vim-patch:8.1.0374: moving the cursor is slow when 'relativenumber' is set
Problem:    Moving the cursor is slow when 'relativenumber' is set.
Solution:   Only redraw the number column, not all lines.
bd9a53c06c
2018-09-13 01:08:12 +02:00
Justin M. Keyes
e7a9c76ab0 vim-patch:8.1.0373: screen updating still slow when 'cursorline' is set
Problem:    Screen updating still slow when 'cursorline' is set.
Solution:   Fix setting last_cursorline.
1b7fefcbce
2018-09-13 00:32:14 +02:00
Justin M. Keyes
7a26b9b62b vim-patch:8.1.0372: screen updating slow when 'cursorline' is set (#8986)
Problem:    Screen updating slow when 'cursorline' is set.
Solution:   Only redraw the old and new cursor line, not all lines.
90a997987d
2018-09-12 23:06:26 +02:00
Jan Edmund Lazo
566f573378 move: dir in onepage() is Direction
Move vim.h in move.h to implicitly include buffer_defs.h and pos.h.
2018-09-10 23:16:16 -04:00
Jan Edmund Lazo
1a43aef9ec move: drop has_mbyte check
has_mbyte is always true in nvim.
2018-09-10 23:01:45 -04:00
Jan Edmund Lazo
e1fa242a6c vim-patch:8.1.0174: after paging up and down fold line is wrong
Problem:    After paging up and down fold line is wrong.
Solution:   Correct the computation of w_topline and w_botline. (Hirohito
            Higashi)
907dad72ef
2018-09-10 20:34:34 -04:00
KunMing Xie
77a2eaf08b vim-patch:8.0.0515: ml_get errors in silent Ex mode (#8452)
Problem:    ml_get errors in silent Ex mode. (Dominique Pelle)
Solution:   Clear valid flags when setting the cursor.  Set the topline when
            not in full screen mode.
d5d37537d1
2018-05-30 09:11:52 +02:00
Matthieu Coudron
0848add488 screen.c: define column width by function (#5802)
This does not change the behavior but centralizes column size for future use
(like dynamic signcolumn width depending on the maximum number of signs on a line).

The returned value is limited by the size of the `extra` tab in win_line
(currently allows for 18 ASCII characters).
2018-03-18 17:31:28 +01:00
KunMing Xie
8728a5d50b vim-patch:8.0.0448: some macros are lower case (#7936)
Problem:    Some macros are in lower case, which can be confusing.
Solution:   Make a few lower case macros upper case.
b5aedf3e22

ref #6297
2018-01-30 20:29:15 +01:00
Justin M. Keyes
8c959be511 Merge #7593 'PVS static analysis fixes' 2017-11-22 23:12:30 +01:00
Peter Kalauskas
fe2546c81a move.c: remove unreachable break statement
n > 0 verified by while condition, (--n < 0) always false
2017-11-22 09:21:34 -08:00
KunMing Xie
82795c2c3a vim-patch: 8.0.0{181,182,188} (#7152)
vim-patch:8.0.0181
Problem:    When 'cursorbind' and 'cursorcolumn' are both on, the column
            highlignt in non-current windows is wrong.
Solution:   Add validate_cursor(). (Masanori Misono, closes vim/vim#1372)
519d7785f4

vim-patch:8.0.0182
Problem:    When 'cursorbind' and 'cursorline' are set, but 'cursorcolumn' is
            not, then the cursor line highlighting is not updated. (Hirohito
            Higashi)
Solution:   Call redraw_later() with NOT_VALID.
e47683a091

vim-patch:8.0.0188
    Problem:    Using NOT_VALID for redraw_later() to update the cursor
                line/column highlighting is not efficient.
    Solution:   Call validate_cursor() when 'cul' or 'cuc' is set.
9506cad7a1
2017-09-05 19:04:57 +02:00
ckelsel
8dddf55907 vim-patch:8.0.0044
Problem:    In diff mode the cursor may end up below the last line, resulting
            in an ml_get error.
Solution:   Check the line to be valid.

025e3e0baf
2017-08-16 12:48:58 -04:00
ckelsel
ad07e9c7fc vim-patch:8.0.0069
Problem:    Compiler warning for self-comparison.
Solution:   Define ONE_WINDOW and add vim/vim#ifdef.

a1f4cb93ba
2017-07-23 10:34:41 +08:00
ZyX
c2f3e361c5 *: Add comment to all C files 2017-04-19 19:11:50 +03:00
lonerover
7418adc143 move.c: add cursor adjustment for scrolloff (#6319) 2017-03-21 21:37:52 +08:00
raichoo
2ad25c0466 linter: make changes pass the linter 2017-03-19 21:14:11 +01:00
raichoo
42caeccce6 vim-patch:7.4.2322
Problem:    Access memory beyond the end of the line. (Dominique Pelle)
Solution:   Adjust the cursor column.

bc54f3f3fe
2017-03-19 21:14:11 +01:00
James McCoy
564e9dc17f vim-patch:7.4.2101
Problem:    Looping over windows, buffers and tab pages is inconsistant.
Solution:   Use FOR_ALL_ macros everywhere. (Yegappan Lakshmanan)

2932359000
2017-03-11 20:32:09 -05:00
James McCoy
46235a30ed lint 2016-12-28 14:57:40 -05:00
Chris Lucas
99a8cd3be0 vim-patch:7.4.2201
Problem:    The sign column disappears when the last sign is deleted.
Solution:   Add the 'signcolumn' option. (Christian Brabandt)

95ec9d6a6a
2016-12-28 14:57:38 -05:00
Justin M. Keyes
df072c3b2b refactor: eliminate misc2.c
move `call_shell` to misc1.c
Move some fns to state.c
Move some fns to option.c
Move some fns to memline.c
Move `vim_chdir*` fns to file_search.c
Move some fns to new module, bytes.c
Move some fns to fileio.c
2016-09-13 16:20:09 +02:00
ZyX
cf4e1fb0f4 *: Fix new linter errors
Originally there were 128 new errors, so I thought this is a good idea to fix 
all of them. Of course, this commit also fixes many suppressed errors.
2016-05-01 20:35:51 +03:00
Jurica Bradaric
313c24a31b vim-patch:7.4.856
Problem:    "zt" still doesn't work well with filler lines. (Gary Johnson)
Solution:   Check for filler lines above the cursor. (Christian Brabandt)

a09a2c5857
2016-02-10 00:00:29 +01:00
Jurica Bradaric
37288e522a vim-patch:7.4.853
Problem:    "zt" in diff mode does not always work properly. (Gary Johnson)
Solution:   Don't count filler lines twice. (Christian Brabandt)

cf619daa8e
2016-02-09 23:51:28 +01:00
Michael Reed
53ee6425c8 src/*: Remove VIM - Vi improved ... header
Regarding the individual items in the header:

`Vim - Vi improved	by Bram Moolenar`
  Bram Moolenar is already mentioned throughout the documentation, as
  well as the intro screen.

`:help uganda`
  It's already shown to all users who don't use `shortmess+=I` upon
  starting nvim, and is already placed prominently in help.txt, i.e.,
  `:help` run with no arguments.

`:help credits`
  Already mentioned near the top of help.txt.

`README.md`
  Already mentioned in develop.txt.
2015-11-27 16:25:10 -05:00
Michael Reed
af5483089e src: README.txt -> README.md
The former no longer exists in this repo; see the top of
src/nvim/README.md.
2015-11-23 21:38:08 -05:00
Justin M. Keyes
6d50f4d0c9 Merge #3297 'move.c refactor' 2015-09-10 00:32:43 -04:00
Nicolas Cornu
23acaf8940 Scope variables in move.c 2015-09-08 13:51:36 +02:00
Nicolas Cornu
600bb285f6 Replace TRUE/FALSE with true/false in move.c 2015-09-08 02:34:50 +02:00
Nicolas Cornu
16e9c853df hasFolding return bool now 2015-09-08 02:34:50 +02:00
Nicolas Cornu
63a39015f5 hasFoldingWin now return bool 2015-09-08 02:34:43 +02:00
Nicolas Cornu
41778e2e10 win_T.w_cline_folded from int to bool 2015-09-07 15:03:47 +02:00
David Bürgin
f6d76c0813 vim-patch:7.4.550 #2510
Problem:    curs_rows() function is always called with the second argument
            false.
Solution:   Remove the argument. (Christian Brabandt)
            validate_botline_win() can then also be removed.

https://github.com/vim/vim/releases/tag/v7-4-550
2015-04-25 17:08:40 -04:00
Eliseo Martínez
402c6fd939 Enable -Wconversion: move.c. 2015-04-07 12:56:28 +02:00
Jack Danger Canty
19c22cdb80 "halfway a line" is a very confusing phrase
If you Google for this phrase found in the Vim documentation you'll find
almost exclusively hits from the Vim documentation. I think changing
"halfway a line" to "halfway through a line" makes more sense.

There seems to be an pervasive odd use of the word 'halfway' in the
original docs which I'm updating everywhere.
2015-01-22 21:57:03 -08:00
Florian Walch
2fefb5e7d3 vim-patch:7.4.458
Problem:    Issue 252: Cursor moves in a zero-height window.
Solution:   Check for zero height. (idea by Christian Brabandt)

https://code.google.com/p/vim/source/detail?r=v7-4-458
2014-12-23 16:13:30 +01:00
Wayne Rowcliffe
63e2558870 Convert some values from buffer_defs.h to bools 2014-11-12 00:38:34 -06:00