Commit Graph

16747 Commits

Author SHA1 Message Date
zeertzjq
6555176f34 vim-patch:9.0.1923: curswant wrong on click with 've' and 'nowrap' set (#25293)
Problem:  curswant wrong on click with 've' and 'nowrap' set
Solution: Add w_leftcol to mouse click column.

closes: vim/vim#13142

db54e989b5
2023-09-22 05:44:45 +08:00
dundargoc
c1ff216668 build: actually export symbols on mac
If `-export_dynamic` is not passed to the linker, then Link Time
Optimization may inline and remove global functions even though
ENABLE_EXPORTS is set to true.

Closes https://github.com/neovim/neovim/issues/25295.
Closes https://github.com/kevinhwang91/nvim-ufo/issues/162.
Closes https://github.com/neovim/neovim/issues/25295.

Co-authored-by: Carlo Cabrera <30379873+carlocab@users.noreply.github.com>
2023-09-21 22:08:13 +02:00
bfredl
911f3d9623 fix(tui): don't overwrite an assertion faliure message on exit
If nvim exited with nonzero status this is for one of the two reasons
- `:cquit` was invoked. This is used by users and plugins to communicate
  a result, like a nonzero status will fail a `git commit` operation
- There was an internal error or deadly signal. in this case an error
  message was likely written to stderr or to the screen.

In the latter case, the error message was often hidden by the TUI
exiting altscreen mode, which erases all visible terminal text.

This change prevents this in the latter case, while still cleaning up
the terminal properly when `:cquit` was deliberatily invoked.
Other cleanup like exiting mouse mode and raw mode is still done.
2023-09-21 10:18:37 +02:00
zeertzjq
e25cf47ad3 fix(mouse): click on empty line with 'foldcolumn' 2023-09-21 11:13:48 +08:00
zeertzjq
adb73772d9 vim-patch:9.0.1919: Wrong curswant when clicking on empty line or with vsplits
Problem:  Wrong curswant when clicking on empty line or with vsplits.
Solution: Don't check for ScreenCols[] before the start of the window
          and handle empty line properly.

closes: vim/vim#13132

03cd697d63
2023-09-21 09:43:12 +08:00
zeertzjq
f094db0e5c vim-patch:9.0.1921: not possible to use the jumplist like a stack (#25278)
Problem:  not possible to use the jumplist like a stack
Solution: Add the 'jumpoptions' setting to make the jumplist
          a stack.

Add an option for using jumplist like tag stack

related: vim/vim#7738
closes: vim/vim#13134

ported from NeoVim:

- https://neovim.io/doc/user/motion.html#jumplist-stack
- neovim/neovim@39094b3
- https://vi.stackexchange.com/questions/18344/how-to-change-jumplist-behavior

Based on the feedback in the previous PR, it looks like many people like
this option.

87018255e3

Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Co-authored-by: butwerenotthereyet <58348703+butwerenotthereyet@users.noreply.github.com>
2023-09-21 07:37:03 +08:00
zeertzjq
dc6c11394b fix(statuscolumn): update number hl for each screen line (#25277) 2023-09-21 07:03:26 +08:00
Ibby
23c21e7630 fix(extmarks): account for rightleft when drawing virt text (#25262)
Co-authored-by: zeertzjq <zeertzjq@outlook.com>
2023-09-20 22:39:54 +08:00
zeertzjq
818d7f6daf fix(extmarks): fix win_col virt_text drawn on wrong screen line (#25264) 2023-09-20 21:48:12 +08:00
Lewis Russell
11865dbe39 fix(build): better deps for doc 2023-09-20 13:42:41 +01:00
Justin M. Keyes
1b55f51d0d docs: misc #24561
fix #24699
fix #25253
2023-09-20 04:15:23 -07:00
bfredl
50d5fcc0bc Merge pull request #25261 from bfredl/nolinewrap
refactor(grid): unused grid->line_wraps delenda est
2023-09-20 12:17:10 +02:00
bfredl
351dda5e26 Merge pull request #25244 from jedrzejboczar/fix-cursor-jump-win-separators
fix: avoid ui_grid_cursor_goto when drawing window separators
2023-09-20 11:11:52 +02:00
bfredl
ee20e9e669 refactor(grid): unused grid->line_wraps delenda est
This is not used as part of the logic to actually implement TUI line wrapping
In vim (especially gvim) it is used to emulate terminal-style text
selection. But in nvim we don't do that, and have no plans to reintroduce it.
2023-09-20 10:24:07 +02:00
bfredl
acde86d436 Merge pull request #25096 from glepnir/float_winnew
fix(float): trigger winnew event when float window create
2023-09-20 09:25:59 +02:00
bfredl
c6cc56d69c Merge pull request #25155 from glepnir/fix_winhl
fix(highlight): winhl receive wrong argument
2023-09-20 09:18:59 +02:00
zeertzjq
c4f4c7a356 vim-patch:9.0.1915: r_CTRL-C works differently in visual mode (#25248)
Problem:  r_CTRL-C works differently in visual mode
Solution: Make r_CTRL-C behave consistent in visual mode
          in terminal and Windows GUI

in visual mode, r CTRL-C behaves strange in Unix like environments. It
seems to end visual mode, but still is waiting for few more chars,
however it never seems to replace it by any characters and eventually
just returns back into normal mode.

In contrast in Windows GUI mode, r_CTRL-C replaces in the selected area
all characters by a literal CTRL-C.

Not sure why it behaves like this. It seems in the Windows GUI, got_int
is not set and therefore behaves as if any other normal character has
been pressed.

So remove the special casing of what happens when got_int is set and
make it always behave like in Windows GUI mode. Add a test to verify it
always behaves like replacing in the selected area each selected
character by a literal CTRL-C.

closes: vim/vim#13091
closes: vim/vim#13112

476733f3d0

Co-authored-by: Christian Brabandt <cb@256bit.org>
2023-09-20 06:37:29 +08:00
Jędrzej Boczar
592bc831ce fix: avoid ui_grid_cursor_goto when drawing window separators 2023-09-19 14:35:03 +02:00
zeertzjq
c5abf487f1 fix(float): make "fixed" work with relative=win (#25243) 2023-09-19 18:45:11 +08:00
glepnir
437ed3cee2 fix(float): trigger winnew event when float window create 2023-09-19 18:44:48 +08:00
bfredl
1db45a9c1f Merge pull request #25214 from bfredl/glyphcache
refactor(grid): change schar_T representation to be more compact
2023-09-19 12:32:41 +02:00
glepnir
ab92575753 fix(highlight): winhl receive wrong argument 2023-09-19 18:05:59 +08:00
bfredl
2de5cddeb1 Merge pull request #25148 from glepnir/fixed_opt
fix(float): add fixed option
2023-09-19 11:49:59 +02:00
bfredl
8da986ea87 refactor(grid): change schar_T representation to be more compact
Previously, a screen cell would occupy 28+4=32 bytes per cell
as we always made space for up to MAX_MCO+1 codepoints in a cell.

As an example, even a pretty modest 50*80 screen would consume

50*80*2*32 = 256000, i e a quarter megabyte

With the factor of two due to the TUI side buffer, and even more when
using msg_grid and/or ext_multigrid.

This instead stores a 4-byte union of either:
- a valid UTF-8 sequence up to 4 bytes
- an escape char which is invalid UTF-8 (0xFF) plus a 24-bit index to a
  glyph cache

This avoids allocating space for huge composed glyphs _upfront_, while
still keeping rendering such glyphs reasonably fast (1 hash table lookup
+ one plain index lookup). If the same large glyphs are using repeatedly
on the screen, this is still a net reduction of memory/cache
consumption. The only case which really gets worse is if you blast
the screen full with crazy emojis and zalgo text and even this case
only leads to 4 extra bytes per char.

When only <= 4-byte glyphs are used, plus the 4-byte attribute code,
i e 8 bytes in total there is a factor of four reduction of memory use.
Memory which will be quite hot in cache as the screen buffer is scanned
over in win_line() buffer text drawing

A slight complication is that the representation depends on host byte
order. I've tested this manually by compling and running this
in qemu-s390x and it works fine. We might add a qemu based solution
to CI at some point.
2023-09-19 11:25:31 +02:00
zeertzjq
bbde37fd64 vim-patch:9.0.1908: undefined behaviour upper/lower function ptrs (#25238)
Problem:  undefined behaviour upper/lower function ptrs
Solution: Fix UBSAN error in regexp and simplify upper/lowercase
          modifier code

The implementation of \u / \U / \l / \L modifiers in the substitute
command relies on remembering the state by setting function pointers on
func_all/func_one in the code. The code signature of `fptr_T` is
supposed to return void* (due to C function signatures not being able to
return itself due to type recursion), and the definition of the
functions (e.g. to_Upper) didn't follow this rule, and so the code tries
to cast functions of different signatures, resulting in undefined
behavior error under UBSAN in Clang 17. See vim/vim#12745.

We could just fix `do_Upper`/etc to just return void*, which would fix
the problem. However, these functions actually do not need to return
anything at all. It used to be the case that there was only one pointer
"func" to store the pointer, which is why the function needs to either
return itself or NULL to indicate whether it's a one time or ongoing
modification. However, c2c355df6f094cdb9e599fd395a78c14486ec697
(7.3.873) already made that obsolete by introducing `func_one` and
`func_all` to store one-time and ongoing operations separately, so these
functions don't actually need to return anything anymore because it's
implicit whether it's a one-time or ongoing operation. Simplify the code
to reflect that.

closes: vim/vim#13117

d25021cf03

Co-authored-by: Yee Cheng Chin <ychin.git@gmail.com>
2023-09-19 06:41:59 +08:00
glepnir
fd08fd3de3 fix(float): add fixd option 2023-09-18 18:21:14 +08:00
sid-6581
57ccd82417 fix(job-control): fix use after free (#25223) 2023-09-18 07:07:08 +08:00
zeertzjq
211edceb4f vim-patch:8.2.4173: cannot use an import in 'foldexpr' (#25215)
Problem:    Cannot use an import in 'foldexpr'.
Solution:   Set the script context to where 'foldexpr' was set. (closes vim/vim#9584)
            Fix that the script context was not set for all buffers.

e70dd11ef4

Co-authored-by: Bram Moolenaar <Bram@vim.org>
2023-09-17 21:01:19 +08:00
zeertzjq
71530cc972 feat(folds): support virtual text format for 'foldtext' (#25209)
Co-authored-by: Lewis Russell <lewis6991@gmail.com>
2023-09-17 20:29:18 +08:00
bfredl
a0c99755b8 Merge pull request #25190 from glepnir/echo_hl
fix(highlight): correct hi command output
2023-09-17 12:23:22 +02:00
glepnir
5183651773 fix(highlight): correct hi command output 2023-09-17 17:47:51 +08:00
zeertzjq
a1f0f0b2bc vim-patch:9.0.1633: duplicate code for converting float to string
Problem:    Duplicate code for converting float to string.
Solution:   Use tv_get_string(). (closes vim/vim#12521)

19dfa276c3
2023-09-17 11:07:35 +08:00
zeertzjq
ac0fda2e46 vim-patch:8.2.2356: Vim9: ":put =expr" does not handle a list properly
Problem:    Vim9: ":put =expr" does not handle a list properly.
Solution:   Use the same logic as eval_to_string_eap(). (closes vim/vim#7684)

883cf97f10

Co-authored-by: Bram Moolenaar <Bram@vim.org>
2023-09-17 11:07:32 +08:00
Lewis Russell
b3342171d5 fix(typing): vim.fn.execute 2023-09-16 14:24:24 +01:00
bfredl
883e2a1409 Merge pull request #25186 from llllvvuu/fix/preserve_marktree_orderinh
fix(marktree): preserve ordering in `marktree_move`
2023-09-16 14:59:20 +02:00
L Lllvvuu
34be915f6b fix(marktree): preserve ordering in marktree_move
`marktree_move` is making the tree out of order at:

be10d65bfa/src/nvim/marktree.c (L1188)

Because `key` is at the new position, and `x->key[new_i]` is also at the
new position, this comparison spuriously returns true, which causes
`x->key[i]` to be updated in-place even when it needs to be moved.

This causes crashes down the line, since the ordering of `MTNode.key` is
an invariant that must be preserved.

Fixes: #25157
2023-09-16 04:56:12 -07:00
Lewis Russell
091b57d766 refactor(mapping.c): reduce scope of locals 2023-09-16 11:43:30 +01:00
bfredl
40bfca744d Merge pull request #25183 from llllvvuu/fix/marktree_move
fix(marktree): off-by-one error in `marktree_move`
2023-09-16 10:39:54 +02:00
bfredl
2d2cf150e1 Merge pull request #25078 from glepnir/au
fix(float): don't trigger au event when enter is false
2023-09-16 10:27:45 +02:00
L Lllvvuu
585549625d fix(marktree): off-by-one error in marktree_move
If you would insert element X at position j, then if you are moving that
same element X from position i < j, you should move it to position j -
1, because you are losing an element.

This error caused a gap to be left in the array, so that it looked like
[x, null, y] instead of [x, y], where len = 2. This triggered #25147.

Fixes: #25147
2023-09-16 01:12:15 -07:00
zeertzjq
35e50d79c6 fix(extmarks): overlay virt_text position after 'showbreak' (#25175)
Also make virt_text_hide work properly.
2023-09-15 20:30:50 +08:00
glepnir
a916523574 fix(ui): doesn't trigger au event when enter is false 2023-09-15 19:18:01 +08:00
Ilia Choly
f5a09f1b03 fix: invoke changed_bytes when rewriting <Tab> char #25125
When tabstop and shiftwidth are not equal, tabs are inserted as individual
spaces and then rewritten as tab characters in a second pass. That second pass
did not call changed_bytes which resulted in events being omitted.

Fixes #25092
2023-09-15 03:45:51 -07:00
zeertzjq
a6e4793baf fix(extmarks): draw virt_text below diff filler lines properly (#25170)
fix(extmarks): draw virt_text properly below diff filler lines
2023-09-15 15:56:52 +08:00
zeertzjq
b65cd7ff1a fix(extmarks): fix wrong virt_text position after wrapped TAB (#25168) 2023-09-15 14:54:42 +08:00
zeertzjq
b52bd8a2de fix(extmarks): properly handle virt_text on next screen line (#25166)
TODO: virt_text_hide doesn't work for the first char on a wrapped screen
line, and it's not clear how to fix that.
2023-09-15 12:35:27 +08:00
zeertzjq
9ec0ecb222 refactor(drawline): remove unnecessary inline virt checks (#25163) 2023-09-15 07:17:13 +08:00
Gregory Anders
2e92065686 docs: replace <pre> with ``` (#25136) 2023-09-14 08:23:01 -05:00
dundargoc
a6e74c1f0a docs: fix typos and other small fixes (#25005)
Co-authored-by: nuid64 <lvkuzvesov@proton.me>
Co-authored-by: Mike Smith <10135646+mikesmithgh@users.noreply.github.com>
Co-authored-by: XTY <xty@xty.io>
Co-authored-by: Empa <emanuel@empa.xyz>
Co-authored-by: kyu08 <49891479+kyu08@users.noreply.github.com>
2023-09-14 12:05:27 +08:00
zeertzjq
f5953edbac fix(float): update position of anchored windows first (#25133) 2023-09-14 07:42:22 +08:00