Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

make tabpage's active window invalid by win_close from other tab #15313

Closed
notomo opened this issue Aug 9, 2021 · 1 comment · Fixed by #15454
Closed

make tabpage's active window invalid by win_close from other tab #15313

notomo opened this issue Aug 9, 2021 · 1 comment · Fixed by #15454
Labels
api libnvim, Nvim RPC API bug issues reporting wrong behavior

Comments

@notomo
Copy link
Sponsor Contributor

notomo commented Aug 9, 2021

Neovim Version

NVIM v0.6.0-dev+1594-g68f61b167

Operating system/version:

Ubuntu 20.04

Terminal name/version:

wsltty

TERM environment variable

xterm-256color

Installation

build from repo

Steps to reproduce

build/bin/nvim -u NORC +'luafile minimal.lua'

minimal.lua

vim.cmd("tabedit")
local bufnr = vim.api.nvim_create_buf(false, true)
local window_id = vim.api.nvim_open_win(bufnr, true, {
  width = 50,
  height = 10,
  relative = "editor",
  row = 10,
  col = 10,
})

_G._on_win_closed = function()
  vim.api.nvim_win_close(window_id, true)
  vim.api.nvim_tabpage_get_win(vim.api.nvim_list_tabpages()[2])
end
vim.cmd("autocmd WinClosed * ++once lua _on_win_closed()")

vim.cmd("tabprevious | +tabclose")

Vim

N/A (WinClosed event)

Expected behavior

I'm not sure, but I think the following:

  • nvim_win_close raises an invalid window id error
  • nvim_list_tabpages does not return closed tab id.

Actual behavior

Aborted (core dumped)
Full backtrace
[New LWP 14881]
[New LWP 14882]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `/home/notomo/workspace/neovim/build/bin/nvim -u NORC +luafile ./minimal.lua +qu'.
Program terminated with signal SIGABRT, Aborted.
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
50	../sysdeps/unix/sysv/linux/raise.c: No such file or directory.
[Current thread is 1 (Thread 0x7fac39c86740 (LWP 14881))]

Thread 2 (Thread 0x7fac397fd700 (LWP 14882)):
#0  0x00007fac39dab5ce in epoll_wait (epfd=15, events=events@entry=0x7fac397f96f0, maxevents=maxevents@entry=1024, timeout=timeout@entry=20) at ../sysdeps/unix/sysv/linux/epoll_wait.c:30
        resultvar = 18446744073709551612
        sc_cancel_oldtype = 0
        sc_ret = <optimized out>
#1  0x00000000007f8d44 in uv__io_poll (loop=<optimized out>, loop@entry=0x7fac397fc8e0, timeout=20) at /home/notomo/workspace/neovim/.deps/build/src/libuv/src/unix/linux-core.c:309
        max_safe_timeout = <optimized out>
        no_epoll_pwait = 0
        no_epoll_wait = 0
        events = {{events = 1, data = {ptr = 0x12, fd = 18, u32 = 18, u64 = 18}}, {events = 0, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}} <repeats 525 times>, {events = 973485148, data = {ptr = 0x39e9650000007fac, fd = 32684, u32 = 32684, u64 = 4172977580409913260}}, {events = 32684, data = {ptr = 0xaf067c12, fd = -1358529518, u32 = 2936437778, u64 = 2936437778}}, {events = 4243088, data = {ptr = 0x39e96c8800000000, fd = 0, u32 = 0, u64 = 4172985861106827264}}, {events = 32684, data = {ptr = 0x7fac39c8eea8, fd = 969469608, u32 = 969469608, u64 = 140377680572072}}, {events = 973486218, data = {ptr = 0x39700007fac, fd = 32684, u32 = 32684, u64 = 3947074977708}}, {events = 0, data = {ptr = 0x7fac39c9e330, fd = 969532208, u32 = 969532208, u64 = 140377680634672}}, {events = 971597056, data = {ptr = 0x397fb08800007fac, fd = 32684, u32 = 32684, u64 = 4143224280366219180}}, {events = 32684, data = {ptr = 0x7fac397fb084, fd = 964669572, u32 = 964669572, u64 = 140377675772036}}, {events = 0, data = {ptr = 0x39c9e33000000000, fd = 0, u32 = 0, u64 = 4164109125778669568}}, {events = 32684, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}}, {events = 0, data = {ptr = 0x39c9054800000000, fd = 0, u32 = 0, u64 = 4163865137276518400}}, {events = 32684, data = {ptr = 0x42bbf7, fd = 4373495, u32 = 4373495, u64 = 4373495}}, {events = 2936437778, data = {ptr = 0x2bc19f000000000, fd = 0, u32 = 0, u64 = 197061002280304640}}, {events = 0, data = {ptr = 0x7fac397fb084, fd = 964669572, u32 = 964669572, u64 = 140377675772036}}, {events = 0, data = {ptr = 0x397fb15000000000, fd = 0, u32 = 0, u64 = 4143225139359645696}}, {events = 32684, data = {ptr = 0x40be90, fd = 4243088, u32 = 4243088, u64 = 4243088}}, {events = 964669760, data = {ptr = 0x7fac, fd = 32684, u32 = 32684, u64 = 32684}}, {events = 0, data = {ptr = 0x7fac39e96be8, fd = 971598824, u32 = 971598824, u64 = 140377682701288}}, {events = 10, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}}, {events = 0, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}}, {events = 0, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}}, {events = 0, data = {ptr = 0xaf067c12, fd = -1358529518, u32 = 2936437778, u64 = 2936437778}}, {events = 973632760, data = {ptr = 0x397fb1e800007fac, fd = 32684, u32 = 32684, u64 = 4143225792194707372}}, {events = 32684, data = {ptr = 0x42bbf7, fd = 4373495, u32 = 4373495, u64 = 4373495}}, {events = 964669760, data = {ptr = 0x397fb15000007fac, fd = 32684, u32 = 32684, u64 = 4143225139359678380}}, {events = 32684, data = {ptr = 0x7fac3a0641e9 <_dl_lookup_symbol_x+281>, fd = 973488617, u32 = 973488617, u64 = 140377684591081}}, {events = 8, data = {ptr = 0x39e96c8800000000, fd = 0, u32 = 0, u64 = 4172985861106827264}}, {events = 32684, data = {ptr = 0x5, fd = 5, u32 = 5, u64 = 5}}, {events = 0, data = {ptr = 0x100000000, fd = 0, u32 = 0, u64 = 4294967296}}, {events = 0, data = {ptr = 0x7fac3a087190, fd = 973631888, u32 = 973631888, u64 = 140377684734352}}, {events = 0, data = {ptr = 0x39e96c8800000000, fd = 0, u32 = 0, u64 = 4172985861106827264}}, {events = 32684, data = {ptr = 0x7fac3a087190, fd = 973631888, u32 = 973631888, u64 = 140377684734352}}, {events = 973632760, data = {ptr = 0x7fac, fd = 32684, u32 = 32684, u64 = 32684}}, {events = 0, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}}, {events = 0, data = {ptr = 0x100000000, fd = 0, u32 = 0, u64 = 4294967296}}, {events = 0, data = {ptr = 0xffffffff, fd = -1, u32 = 4294967295, u64 = 4294967295}}, {events = 0, data = {ptr = 0x39c95b7000000000, fd = 0, u32 = 0, u64 = 4163959867075198976}}, {events = 32684, data = {ptr = 0x7fac39e96500, fd = 971597056, u32 = 971597056, u64 = 140377682699520}}, {events = 0, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}}, {events = 0, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}}, {events = 0, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}}, {events = 0, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}}, {events = 0, data = {ptr = 0x9ca8a000000000, fd = 0, u32 = 0, u64 = 44095501515096064}}, {events = 0, data = {ptr = 0x7fac397fc240, fd = 964674112, u32 = 964674112, u64 = 140377675776576}}, {events = 4089134974, data = {ptr = 0xf3bb3f7f00007ffd, fd = 32765, u32 = 32765, u64 = 17562700986554810365}}, {events = 32765, data = {ptr = 0x7ffdf3bb4008, fd = -205832184, u32 = 4089135112, u64 = 140728692588552}}, {events = 964677568, data = {ptr = 0x3a06918700007fac, fd = 32684, u32 = 32684, u64 = 4181189313066729388}}, {events = 32684, data = {ptr = 0x5, fd = 5, u32 = 5, u64 = 5}}, {events = 973509098, data = {ptr = 0x7fac, fd = 32684, u32 = 32684, u64 = 32684}}, {events = 0, data = {ptr = 0x7fac39c95b70, fd = 969497456, u32 = 969497456, u64 = 140377680599920}}, {events = 964670848, data = {ptr = 0x3a070b6e00007fac, fd = 32684, u32 = 32684, u64 = 4181323346111135660}}, {events = 32684, data = {ptr = 0x7fac3401a14f, fd = 872522063, u32 = 872522063, u64 = 140377583624527}}, {events = 964674048, data = {ptr = 0x397fc20000007fac, fd = 32684, u32 = 32684, u64 = 4143243487459966892}}, {events = 32684, data = {ptr = 0x8f59d0, fd = 9394640, u32 = 9394640, u64 = 9394640}}, {events = 872522063, data = {ptr = 0x810fe000007fac, fd = 32684, u32 = 32684, u64 = 36327726742798252}}, {events = 0, data = {ptr = 0x7fac397fc288, fd = 964674184, u32 = 964674184, u64 = 140377675776648}}, {events = 0, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}}, {events = 0, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}}, {events = 0, data = {ptr = 0x1fa100000000, fd = 0, u32 = 0, u64 = 34776350195712}}, {events = 65535, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}}, {events = 0, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}}, {events = 0, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}}, {events = 0, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}}, {events = 0, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}}, {events = 0, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}}, {events = 0, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}}, {events = 0, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}}, {events = 0, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}}, {events = 0, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}}, {events = 0, data = {ptr = 0x7fac39d24773 <_int_malloc+2947>, fd = 970082163, u32 = 970082163, u64 = 140377681184627}}, {events = 0, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}}, {events = 0, data = {ptr = 0xff00000000000000, fd = 0, u32 = 0, u64 = 18374686479671623680}}, {events = 0, data = {ptr = 0xff0000, fd = 16711680, u32 = 16711680, u64 = 16711680}}, {events = 0, data = {ptr = 0xffffffffffffffff, fd = -1, u32 = 4294967295, u64 = 18446744073709551615}}, {events = 872415504, data = {ptr = 0x76f11500007fac, fd = 32684, u32 = 32684, u64 = 33479119748497324}}, {events = 0, data = {ptr = 0xffff, fd = 65535, u32 = 65535, u64 = 65535}}, {events = 872418768, data = {ptr = 0x11a772000007fac, fd = 32684, u32 = 32684, u64 = 79506922755096492}}, {events = 0, data = {ptr = 0x6, fd = 6, u32 = 6, u64 = 6}}, {events = 872522171, data = {ptr = 0x11a772000007fac, fd = 32684, u32 = 32684, u64 = 79506922755096492}}, {events = 0, data = {ptr = 0x7fac397fc000, fd = 964673536, u32 = 964673536, u64 = 140377675776000}}, {events = 8446787, data = {ptr = 0x782d6e6f00000000, fd = 0, u32 = 0, u64 = 8659699081523757056}}, {events = 1836213620, data = {ptr = 0x5b1b00325d1b002e, fd = 1562050606, u32 = 1562050606, u64 = 6564841098133045294}}, {events = 0, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}}, {events = 0, data = {ptr = 0x2000000020, fd = 32, u32 = 32, u64 = 137438953504}}, {events = 0, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}}, {events = 0, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}}, {events = 0, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}}, {events = 0, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}}, {events = 0, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}}, {events = 0, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}}, {events = 0, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}}, {events = 0, data = {ptr = 0x7fac397fc23c, fd = 964674108, u32 = 964674108, u64 = 140377675776572}}, {events = 964674071, data = {ptr = 0x100007fac, fd = 32684, u32 = 32684, u64 = 4294999980}}, {events = 33619968, data = {ptr = 0x226, fd = 550, u32 = 550, u64 = 550}}, {events = 550, data = {ptr = 0x397fc01600000000, fd = 0, u32 = 0, u64 = 4143241382925959168}}, {events = 32684, data = {ptr = 0x186, fd = 390, u32 = 390, u64 = 390}}, {events = 872502038, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}}, {events = 0, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}}, {events = 4849814, data = {ptr = 0x20000, fd = 131072, u32 = 131072, u64 = 131072}}, {events = 0, data = {ptr = 0x2, fd = 2, u32 = 2, u64 = 2}}, {events = 0, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}} <repeats 20 times>, {events = 6, data = {ptr = 0x2000000000, fd = 0, u32 = 0, u64 = 137438953472}}, {events = 0, data = {ptr = 0x6, fd = 6, u32 = 6, u64 = 6}}, {events = 964670864, data = {ptr = 0x81103500007fac, fd = 32684, u32 = 32684, u64 = 36328091815018412}}, {events = 0, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}}, {events = 6, data = {ptr = 0x397fc28800000000, fd = 0, u32 = 0, u64 = 4143244071575486464}}, {events = 32684, data = {ptr = 0x6, fd = 6, u32 = 6, u64 = 6}}, {events = 872522048, data = {ptr = 0x397fc28800007fac, fd = 32684, u32 = 32684, u64 = 4143244071575519148}}, {events = 32684, data = {ptr = 0x7fac397fc240, fd = 964674112, u32 = 964674112, u64 = 140377675776576}}, {events = 8446787, data = {ptr = 0xffff007c00000000, fd = 0, u32 = 0, u64 = 18446463131308785664}}, {events = 8454143, data = {ptr = 0x76f115 <out+197>, fd = 7794965, u32 = 7794965, u64 = 7794965}}, {events = 65529, data = {ptr = 0x34000dd000000000, fd = 0, u32 = 0, u64 = 3747010076976611328}}, {events = 32684, data = {ptr = 0x11a7720, fd = 18511648, u32 = 18511648, u64 = 18511648}}, {events = 7, data = {ptr = 0x3401a10e00000000, fd = 0, u32 = 0, u64 = 3747453446450577408}}, {events = 32684, data = {ptr = 0x11a7720, fd = 18511648, u32 = 18511648, u64 = 18511648}}, {events = 964674192, data = {ptr = 0x80e34300007fac, fd = 32684, u32 = 32684, u64 = 36278673921310636}}, {events = 0, data = {ptr = 0xffffffffffffffff, fd = -1, u32 = 4294967295, u64 = 18446744073709551615}}, {events = 19661096, data = {ptr = 0x13e013a01360132, fd = 20316466, u32 = 20316466, u64 = 89510391234036018}}, {events = 21627204, data = {ptr = 0x160015c01560150, fd = 22413648, u32 = 22413648, u64 = 99080686473183568}}, {events = 23461887, data = {ptr = 0x173016e0169ffff, fd = 23724031, u32 = 23724031, u64 = 104428788341407743}}, {events = 25035127, data = {ptr = 0x19101890185ffff, fd = 25559039, u32 = 25559039, u64 = 112873153608679423}}, {events = 4294967295, data = {ptr = 0xffffffffffffffff, fd = -1, u32 = 4294967295, u64 = 18446744073709551615}}, {events = 4294967295, data = {ptr = 0x199ffffffffffff, fd = -1, u32 = 4294967295, u64 = 115404740451368959}}, {events = 4294902178, data = {ptr = 0x1bd01b401abffff, fd = 28049407, u32 = 28049407, u64 = 125258237270032383}}, {events = 30343622, data = {ptr = 0x1f301ea01e101d8, fd = 31523288, u32 = 31523288, u64 = 140458117944115672}}, {events = 4294902268, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}}, {events = 0, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}}, {events = 38076994, data = {ptr = 0x258025502530250, fd = 38994512, u32 = 38994512, u64 = 168887550160863824}}, {events = 4294902453, data = {ptr = 0xffffffffffff02b8, fd = -64840, u32 = 4294902456, u64 = 18446744073709486776}}, {events = 45809663, data = {ptr = 0x2ca02c602c202be, fd = 46269118, u32 = 46269118, u64 = 200976182844457662}}, {events = 4294967295, data = {ptr = 0xffff0303ffff02ce, fd = -64818, u32 = 4294902478, u64 = 18446465914447528654}}, {events = 50855935, data = {ptr = 0xffffffffffff030d, fd = -64755, u32 = 4294902541, u64 = 18446744073709486861}}, {events = 0, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}}, {events = 0, data = {ptr = 0xffffffff00000000, fd = 0, u32 = 0, u64 = 18446744069414584320}}, {events = 4294967295, data = {ptr = 0xffffffffffffffff, fd = -1, u32 = 4294967295, u64 = 18446744073709551615}}, {events = 4294967295, data = {ptr = 0xffffffffffffffff, fd = -1, u32 = 4294967295, u64 = 18446744073709551615}}, {events = 4294967295, data = {ptr = 0xffffffffffffffff, fd = -1, u32 = 4294967295, u64 = 18446744073709551615}}, {events = 4294967295, data = {ptr = 0x31bffffffffffff, fd = -1, u32 = 4294967295, u64 = 224054081461682175}}, {events = 4294967295, data = {ptr = 0xffffffffffff0322, fd = -64734, u32 = 4294902562, u64 = 18446744073709486882}}, {events = 53084159, data = {ptr = 0xffffffff03370330, fd = 53936944, u32 = 53936944, u64 = 18446744069468521264}}, {events = 4294902590, data = {ptr = 0xffffffffffff0345, fd = -64699, u32 = 4294902597, u64 = 18446744073709486917}}, {events = 4294902604, data = {ptr = 0xffffffffffffffff, fd = -1, u32 = 4294967295, u64 = 18446744073709551615}}, {events = 56165203, data = {ptr = 0x374036d0366035f, fd = 57017183, u32 = 57017183, u64 = 248827646155555679}}, {events = 58917755, data = {ptr = 0x3a3039b0393038b, fd = 59966347, u32 = 59966347, u64 = 262057167632401291}}, {events = 62063531, data = {ptr = 0x3d003c903c203bb, fd = 63046587, u32 = 63046587, u64 = 274723739155956667}}, {events = 64947159, data = {ptr = 0x3ff03f703ef03e7, fd = 65995751, u32 = 65995751, u64 = 287953260632802279}}, {events = 68092935, data = {ptr = 0x42c0425041e0417, fd = 69075991, u32 = 69075991, u64 = 300619832156357655}}, {events = 70976563, data = {ptr = 0x45b0453044b0443, fd = 72025155, u32 = 72025155, u64 = 313849353633203267}}, {events = 74122339, data = {ptr = 0x4880481047a0473, fd = 75105395, u32 = 75105395, u64 = 326515925156758643}}, {events = 77005967, data = {ptr = 0x4b704af04a7049f, fd = 78054559, u32 = 78054559, u64 = 339745446633604255}}, {events = 80151743, data = {ptr = 0x7fac397fb908, fd = 964671752, u32 = 964671752, u64 = 140377675774216}}, {events = 4278519017, data = {ptr = 0xffffffff00000000, fd = 0, u32 = 0, u64 = 18446744069414584320}}, {events = 4294967295, data = {ptr = 0xffffffffffffffff, fd = -1, u32 = 4294967295, u64 = 18446744073709551615}}, {events = 0, data = {ptr = 0x397fbef000000000, fd = 0, u32 = 0, u64 = 4143240120205574144}}, {events = 32684, data = {ptr = 0x1, fd = 1, u32 = 1, u64 = 1}}, {events = 10, data = {ptr = 0x397fbf2000000000, fd = 0, u32 = 0, u64 = 4143240326364004352}}, {events = 32684, data = {ptr = 0xffffffff, fd = -1, u32 = 4294967295, u64 = 4294967295}}, {events = 969867882, data = {ptr = 0x585ffff00007fac, fd = 32684, u32 = 32684, u64 = 398005612773932972}}, {events = 4294967295, data = {ptr = 0xffffffffffffffff, fd = -1, u32 = 4294967295, u64 = 18446744073709551615}}, {events = 4294967295, data = {ptr = 0xffffffff058affff, fd = 92995583, u32 = 92995583, u64 = 18446744069507579903}}, {events = 4294967295, data = {ptr = 0x6, fd = 6, u32 = 6, u64 = 6}}, {events = 0, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}} <repeats 54 times>, {events = 7, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}}, {events = 0, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}} <repeats 165 times>...}
        e = {events = 0, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}}
        sigset = {__val = {0 <repeats 16 times>}}
        w = <optimized out>
        q = <optimized out>
        op = <optimized out>
        sigmask = <optimized out>
        real_timeout = 20
        count = 48
        base = 1338843341
        nfds = <optimized out>
        have_signals = <optimized out>
        nevents = <optimized out>
        i = <optimized out>
        pe = <optimized out>
        fd = <optimized out>
#2  0x00000000007ea5b1 in uv_run (loop=0x7fac397fc8e0, mode=UV_RUN_ONCE) at /home/notomo/workspace/neovim/.deps/build/src/libuv/src/unix/core.c:375
        r = <optimized out>
        ran_pending = <optimized out>
        timeout = 964663024
#3  0x0000000000545b70 in loop_poll_events (loop=0x7fac397fc8e0, ms=20) at ../src/nvim/event/loop.c:62
        mode = UV_RUN_ONCE
        timeout_expired = false
#4  0x000000000076e3e8 in tui_main (bridge=0x11a7860, ui=0x11a7720) at ../src/nvim/tui/tui.c:449
        ms = 26
        tui_loop = {uv = {data = 0x7fac397fc8e0, active_handles = 5, handle_queue = {0x7fac397fcb68, 0x7fac34010f08}, active_reqs = {unused = {0x0, 0x0}, count = 0}, stop_flag = 0, flags = 0, backend_fd = 15, pending_queue = {0x7fac397fc928, 0x7fac397fc928}, watcher_queue = {0x7fac397fc938, 0x7fac397fc938}, watchers = 0x7fac34000b60, nwatchers = 30, nfds = 3, wq = {0x7fac397fc958, 0x7fac397fc958}, wq_mutex = {__data = {__lock = 0, __count = 0, __owner = 0, __nusers = 0, __kind = 0, __spins = 0, __elision = 0, __list = {__prev = 0x0, __next = 0x0}}, __size = '\000' <repeats 39 times>, __align = 0}, wq_async = {data = 0x0, loop = 0x7fac397fc8e0, type = UV_ASYNC, close_cb = 0x0, handle_queue = {0x7fac397fce38, 0x7fac397fcb68}, u = {fd = 0, reserved = {0x0, 0x0, 0x0, 0x0}}, next_closing = 0x0, flags = 20, async_cb = 0x7e6b70 <uv__work_done>, queue = {0x7fac397fce80, 0x7fac397fca90}, pending = 0}, cloexec_lock = {__data = {__readers = 0, __writers = 0, __wrphase_futex = 0, __writers_futex = 0, __pad3 = 0, __pad4 = 0, __cur_writer = 0, __shared = 0, __rwelision = 0 '\000', __pad1 = "\000\000\000\000\000\000", __pad2 = 0, __flags = 0}, __size = '\000' <repeats 55 times>, __align = 0}, closing_handles = 0x0, process_handles = {0x7fac397fca50, 0x7fac397fca50}, prepare_handles = {0x7fac397fca60, 0x7fac397fca60}, check_handles = {0x7fac397fca70, 0x7fac397fca70}, idle_handles = {0x7fac397fca80, 0x7fac397fca80}, async_handles = {0x7fac397fc9f8, 0x7fac397fce80}, async_unused = 0x0, async_io_watcher = {cb = 0x7e9f90 <uv__async_io>, pending_queue = {0x7fac397fcab0, 0x7fac397fcab0}, watcher_queue = {0x7fac397fcac0, 0x7fac397fcac0}, pevents = 1, events = 1, fd = 18}, async_wfd = -1, timer_heap = {min = 0x7fac397fcde8, nelts = 1}, timer_counter = 9, time = 1338843341, signal_pipefd = {16, 17}, signal_io_watcher = {cb = 0x7f3550 <uv__signal_event>, pending_queue = {0x7fac397fcb18, 0x7fac397fcb18}, watcher_queue = {0x7fac397fcb28, 0x7fac397fcb28}, pevents = 1, events = 1, fd = 16}, child_watcher = {data = 0x0, loop = 0x7fac397fc8e0, type = UV_SIGNAL, close_cb = 0x0, handle_queue = {0x7fac397fc9b0, 0x7fac397fc8f0}, u = {fd = 0, reserved = {0x0, 0x0, 0x0, 0x0}}, next_closing = 0x0, flags = 16, signal_cb = 0x0, signum = 0, tree_entry = {rbe_left = 0x0, rbe_right = 0x0, rbe_parent = 0x0, rbe_color = 0}, caught_signals = 0, dispatched_signals = 0}, emfile_fd = 19, inotify_read_watcher = {cb = 0x0, pending_queue = {0x0, 0x0}, watcher_queue = {0x0, 0x0}, pevents = 0, events = 0, fd = 0}, inotify_watchers = 0x0, inotify_fd = -1}, events = 0x7fac34000cf0, thread_events = 0x7fac34000d70, fast_events = 0x7fac34000d30, children = 0x7fac34000c70, children_watcher = {data = 0x6f6e6b6e55646574, loop = 0x7fac397fc8e0, type = UV_SIGNAL, close_cb = 0x0, handle_queue = {0x7fac397fcd08, 0x7fac397fce38}, u = {fd = 538976288, reserved = {0x2020202020202020, 0x2020202020202020, 0x0, 0x0}}, next_closing = 0x0, flags = 8, signal_cb = 0xffffffff00ffffff, signum = 0, tree_entry = {rbe_left = 0x2000000020, rbe_right = 0x0, rbe_parent = 0x0, rbe_color = 0}, caught_signals = 0, dispatched_signals = 0}, children_kill_timer = {data = 0x0, loop = 0x7fac397fc8e0, type = UV_TIMER, close_cb = 0x0, handle_queue = {0x7fac397fcda0, 0x7fac397fcc70}, u = {fd = 0, reserved = {0x0, 0x0, 0x0, 0x0}}, next_closing = 0x0, flags = 8, timer_cb = 0x0, heap_node = {0x0, 0x0, 0x0}, timeout = 0, repeat = 0, start_id = 0}, poll_timer = {data = 0x7fac34000db0, loop = 0x7fac397fc8e0, type = UV_TIMER, close_cb = 0x0, handle_queue = {0x7fac34011668, 0x7fac397fcd08}, u = {fd = 0, reserved = {0x0, 0x0, 0x0, 0x0}}, next_closing = 0x0, flags = 12, timer_cb = 0x545be0 <timer_cb>, heap_node = {0x0, 0x0, 0x0}, timeout = 1338843361, repeat = 20, start_id = 8}, async = {data = 0x0, loop = 0x7fac397fc8e0, type = UV_ASYNC, close_cb = 0x0, handle_queue = {0x7fac397fcc70, 0x7fac397fc9b0}, u = {fd = 0, reserved = {0x0, 0x0, 0x0, 0x0}}, next_closing = 0x0, flags = 12, async_cb = 0x5459e0 <async_cb>, queue = {0x7fac397fca90, 0x7fac397fc9f8}, pending = 0}, mutex = {__data = {__lock = 0, __count = 0, __owner = 0, __nusers = 0, __kind = 0, __spins = 0, __elision = 0, __list = {__prev = 0x0, __next = 0x0}}, __size = '\000' <repeats 39 times>, __align = 0}, recursive = 1}
        data = 0x7fac34000dd0
#5  0x0000000000782d70 in ui_thread_run (data=0x11a7860) at ../src/nvim/ui_bridge.c:105
        bridge = 0x11a7860
#6  0x00007fac3a018609 in start_thread (arg=<optimized out>) at pthread_create.c:477
        ret = <optimized out>
        pd = <optimized out>
        unwind_buf = {cancel_jmp_buf = {{jmp_buf = {140377675781888, -7943739794541314189, 140728692588414, 140728692588415, 140728692588552, 140377675780032, 7969779526785498995, 7969786658932981619}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}}
        not_first_call = 0
#7  0x00007fac39dab293 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
No locals.

Thread 1 (Thread 0x7fac39c86740 (LWP 14881)):
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
        set = {__val = {0 <repeats 13 times>, 21090832, 20750672, 21090832}}
        pid = <optimized out>
        tid = <optimized out>
        ret = <optimized out>
#1  0x00007fac39cae859 in __GI_abort () at abort.c:79
        save_stage = 1
        act = {__sigaction_handler = {sa_handler = 0x0, sa_sigaction = 0x0}, sa_mask = {__val = {0 <repeats 11 times>, 4528720, 8596352181, 140728692578752, 4705074, 20750672}}, sa_flags = 20750672, sa_restorer = 0x7fac3987e550}
        sigs = {__val = {32, 0 <repeats 15 times>}}
#2  0x000000000048445c in nvim_tabpage_get_win (tabpage=2, err=0x7ffdf3bb1a38) at ../src/nvim/api/tabpage.c:124
        rv = 0
        tab = 0x13ca150
#3  0x000000000044c8f5 in nlua_msgpack_nvim_tabpage_get_win (lstate=0x7fac3987e380) at src/nvim/auto/msgpack_lua_c_bindings.generated.c:1778
        err = {type = kErrorTypeNone, msg = 0x0}
        arg1 = 2
        ret = 20739056
#4  0x000000000085c9bd in lj_BC_FUNCC ()
No symbol table info available.
#5  0x00000000008424a0 in lua_pcall (L=0x7fac3987e380, nargs=<optimized out>, nresults=<optimized out>, errfunc=<optimized out>) at lj_api.c:1169
        g = 0x7fac3987e3e0
        oldh = <optimized out>
        ef = 0
        status = <optimized out>
#6  0x00000000005e786c in nlua_typval_exec (lcmd=0x141fd70 "_on_win_closed()", lcmd_len=16, name=0x8f49c8 ":lua", args=0x0, argcount=0, special=false, ret_tv=0x0) at ../src/nvim/lua/executor.c:1133
        lstate = 0x7fac3987e380
#7  0x00000000005e8431 in ex_lua (eap=0x7ffdf3bb1c98) at ../src/nvim/lua/executor.c:1308
        len = 16
        code = 0x141fd70 "_on_win_closed()"
#8  0x000000000056a9d8 in do_one_cmd (cmdlinep=0x7ffdf3bb2028, flags=7, cstack=0x7ffdf3bb2030, fgetline=0x49de80 <getnextac>, cookie=0x7ffdf3bb2638) at ../src/nvim/ex_docmd.c:1964
        p = 0x142d243 " _on_win_closed()"
        lnum = 425201762305
        n = 553844939988
        errormsg = 0x0
        after_modifier = 0x142d240 "lua _on_win_closed()"
        ea = {arg = 0x142d244 "_on_win_closed()", nextcmd = 0x0, cmd = 0x142d240 "lua _on_win_closed()", cmdlinep = 0x7ffdf3bb2028, cmdidx = CMD_lua, argt = 524421, skip = 0, forceit = 0, addr_count = 0, line1 = 1, line2 = 1, addr_type = ADDR_LINES, flags = 0, do_ecmd_cmd = 0x0, do_ecmd_lnum = 0, append = 0, usefilter = 0, amount = 0, regname = 0, force_bin = 0, read_edit = 0, force_ff = 0, force_enc = 0, bad_char = 0, useridx = 0, errmsg = 0x0, getline = 0x49de80 <getnextac>, cookie = 0x7ffdf3bb2638, cstack = 0x7ffdf3bb2030, verbose_save = -1, save_msg_silent = -1, did_esilent = 0, did_sandbox = false}
        save_msg_scroll = 1
        save_cmdmod = {split = 0, tab = 0, browse = false, confirm = false, hide = false, keepalt = false, keepjumps = false, keepmarks = false, keeppatterns = false, lockmarks = false, noswapfile = false, save_ei = 0x0, filter_regmatch = {regprog = 0x0, startp = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, endp = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, rm_ic = false}, filter_force = false}
        save_reg_executing = 0
        cmd = 0x142d240 "lua _on_win_closed()"
        ni = 0
#9  0x000000000056772e in do_cmdline (cmdline=0x0, fgetline=0x49de80 <getnextac>, cookie=0x7ffdf3bb2638, flags=7) at ../src/nvim/ex_docmd.c:595
        recursive = 3
        call_depth = 3
        next_cmdline = 0x142d240 "lua _on_win_closed()"
        cmdline_copy = 0x142d240 "lua _on_win_closed()"
        used_getline = true
        msg_didout_before_start = false
        count = 1
        did_inc = 0
        retval = 1
        cstack = {cs_flags = {0 <repeats 50 times>}, cs_pending = '\000' <repeats 49 times>, cs_pend = {csp_rv = {0x0 <repeats 50 times>}, csp_ex = {0x0 <repeats 50 times>}}, cs_forinfo = {0x0 <repeats 50 times>}, cs_line = {0 <repeats 50 times>}, cs_idx = -1, cs_looplevel = 0, cs_trylevel = 0, cs_emsg_silent_list = 0x0, cs_lflags = 0}
        lines_ga = {ga_len = 0, ga_maxlen = 0, ga_itemsize = 16, ga_growsize = 10, ga_data = 0x0}
        current_line = 0
        fname = 0x0
        breakpoint = 0x0
        dbg_tick = 0x0
        debug_saved = {trylevel = 0, force_abort = 0, caught_stack = 0x0, vv_exception = 0x0, vv_throwpoint = 0x0, did_emsg = 0, got_int = 0, need_rethrow = 0, check_cstack = 0, current_exception = 0x0}
        initial_trylevel = 1
        saved_msg_list = 0x7ffdf3bb2df0
        private_msg_list = 0x0
        cmd_getline = 0x49de80 <getnextac>
        cmd_cookie = 0x7ffdf3bb2638
        cmd_loop_cookie = {lines_gap = 0x49de80 <getnextac>, current_line = 5498480, repeating = 0, getline = 0x7ffdf3bb27c8, cookie = 0x49de80 <getnextac>}
        real_cookie = 0x7ffdf3bb2638
        getline_is_func = 0
#10 0x000000000049cb87 in apply_autocmds_group (event=EVENT_WINCLOSED, fname=0x142d610 "1003", fname_io=0x7ffdf3bb2740 "1003", force=false, group=-3, buf=0x1411480, eap=0x0) at ../src/nvim/autocmd.c:1631
        nesting = 1
        filechangeshell_busy = 0
        sfname = 0x142d2a0 "1003"
        tail = 0x142d610 "1003"
        save_changed = false
        old_curbuf = 0x114aaf0
        retval = true
        save_sourcing_name = 0x7ffdf3bb33c0 "nvim_exec() called at command line:0"
        save_sourcing_lnum = 0
        save_autocmd_fname = 0x0
        save_autocmd_bufnr = 0
        save_autocmd_match = 0x0
        save_autocmd_busy = 0
        save_autocmd_nested = 0
        patcmd = {curpat = 0x142d200, nextcmd = 0x0, group = -3, fname = 0x142d610 "1003", sfname = 0x142d2a0 "1003", tail = 0x142d610 "1003", event = EVENT_WINCLOSED, arg_bufnr = 3, next = 0x0}
        ap = 0x142d200
        save_cmdarg = 0x0
        save_cmdbang = 0
        wait_time = 140728692582672
        did_save_redobuff = true
        save_redo = {sr_redobuff = {bh_first = {b_next = 0x0, b_str = ""}, bh_curr = 0x0, bh_index = 0, bh_space = 0}, sr_old_redobuff = {bh_first = {b_next = 0x0, b_str = ""}, bh_curr = 0x0, bh_index = 0, bh_space = 0}}
        save_KeyTyped = false
        save_current_sctx = {sc_sid = -10, sc_seq = 0, sc_lnum = 0}
        funccal_entry = {top_funccal = 0x0, next = 0x7ffdf3bb33a0}
#11 0x000000000049d97e in apply_autocmds (event=EVENT_WINCLOSED, fname=0x7ffdf3bb2740 "1003", fname_io=0x7ffdf3bb2740 "1003", force=false, buf=0x1411480) at ../src/nvim/autocmd.c:1277
No locals.
#12 0x00000000007c1704 in do_autocmd_winclosed (win=0x141d210) at ../src/nvim/window.c:2585
        recursive = true
        winid = "1003\000\000\000\000\300\063\273\363\375\177\000\000\000\000\000\000\000\000\000\001\240a\347\071\254\177", '\000' <repeats 11 times>, "\315B\001", '\000' <repeats 12 times>, "\360\252\024\001\000\000\000", <incomplete sequence \375>
#13 0x00000000007c0dd5 in win_close_othertab (win=0x141d210, free_buf=0, tp=0x13ca150) at ../src/nvim/window.c:2610
        dir = 32684
        ptp = 0x0
        free_tp = 0
#14 0x0000000000572e87 in ex_win_close (forceit=0, win=0x141d210, tp=0x13ca150) at ../src/nvim/ex_docmd.c:6543
        need_hide = 0
        buf = 0x1411480
#15 0x0000000000572fd1 in tabpage_close_other (tp=0x13ca150, forceit=0) at ../src/nvim/ex_docmd.c:6647
        done = 1
        wp = 0x141d210
        h = 1
        prev_idx = "2\000\273\363\375\177\000\000G\312V\000\002\000\000\000z\316B\001\000\000\000\000y\316B\001\000\000\000\000z\316B\001\000\000\000\000\270*\273\363\375\177\000\000\001\000\000\000\002\000\000\000\270*\273\000\002\000\000\000P"
#16 0x000000000057e10a in ex_tabclose (eap=0x7ffdf3bb2ab8) at ../src/nvim/ex_docmd.c:6568
        tab_number = 2
        tp = 0x13ca150
#17 0x000000000056a9d8 in do_one_cmd (cmdlinep=0x7ffdf3bb2e48, flags=7, cstack=0x7ffdf3bb2e50, fgetline=0x563780 <get_str_line>, cookie=0x7ffdf3bb34f8) at ../src/nvim/ex_docmd.c:1964
        p = 0x142ce7a ""
        lnum = 0
        n = 0
        errormsg = 0x0
        after_modifier = 0x142ce71 "+tabclose"
        ea = {arg = 0x142ce7a "", nextcmd = 0x0, cmd = 0x142ce72 "tabclose", cmdlinep = 0x7ffdf3bb2e48, cmdidx = CMD_tabclose, argt = 528663, skip = 0, forceit = 0, addr_count = 1, line1 = 2, line2 = 2, addr_type = ADDR_TABS, flags = 0, do_ecmd_cmd = 0x0, do_ecmd_lnum = 0, append = 0, usefilter = 0, amount = 0, regname = 0, force_bin = 0, read_edit = 0, force_ff = 0, force_enc = 0, bad_char = 0, useridx = 0, errmsg = 0x0, getline = 0x563780 <get_str_line>, cookie = 0x7ffdf3bb34f8, cstack = 0x7ffdf3bb2e50, verbose_save = -1, save_msg_silent = -1, did_esilent = 0, did_sandbox = false}
        save_msg_scroll = 1
        save_cmdmod = {split = 0, tab = 0, browse = false, confirm = false, hide = false, keepalt = false, keepjumps = false, keepmarks = false, keeppatterns = false, lockmarks = false, noswapfile = false, save_ei = 0x0, filter_regmatch = {regprog = 0x0, startp = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, endp = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, rm_ic = false}, filter_force = false}
        save_reg_executing = 0
        cmd = 0x142ce71 "+tabclose"
        ni = 0
#18 0x000000000056772e in do_cmdline (cmdline=0x0, fgetline=0x563780 <get_str_line>, cookie=0x7ffdf3bb34f8, flags=7) at ../src/nvim/ex_docmd.c:595
        recursive = 3
        call_depth = 3
        next_cmdline = 0x142ce70 " +tabclose"
        cmdline_copy = 0x142ce70 " +tabclose"
        used_getline = true
        msg_didout_before_start = false
        count = 2
        did_inc = 0
        retval = 1
        cstack = {cs_flags = {0 <repeats 50 times>}, cs_pending = '\000' <repeats 49 times>, cs_pend = {csp_rv = {0x0 <repeats 50 times>}, csp_ex = {0x0 <repeats 50 times>}}, cs_forinfo = {0x0 <repeats 50 times>}, cs_line = {0 <repeats 50 times>}, cs_idx = -1, cs_looplevel = 0, cs_trylevel = 0, cs_emsg_silent_list = 0x0, cs_lflags = 0}
        lines_ga = {ga_len = 0, ga_maxlen = 0, ga_itemsize = 16, ga_growsize = 10, ga_data = 0x0}
        current_line = 0
        fname = 0x0
        breakpoint = 0x0
        dbg_tick = 0x0
        debug_saved = {trylevel = 0, force_abort = 0, caught_stack = 0x0, vv_exception = 0x0, vv_throwpoint = 0x0, did_emsg = 0, got_int = 0, need_rethrow = 0, check_cstack = 0, current_exception = 0x0}
        initial_trylevel = 1
        saved_msg_list = 0x7ffdf3bb3b40
        private_msg_list = 0x0
        cmd_getline = 0x563780 <get_str_line>
        cmd_cookie = 0x7ffdf3bb34f8
        cmd_loop_cookie = {lines_gap = 0x0, current_line = 0, repeating = 0, getline = 0x0, cookie = 0x0}
        real_cookie = 0x7ffdf3bb34f8
        getline_is_func = 0
#19 0x0000000000563711 in source_using_linegetter (cookie=0x7ffdf3bb34f8, fgetline=0x563780 <get_str_line>, traceback_name=0x8ca380 "nvim_exec()") at ../src/nvim/ex_cmds2.c:2764
        save_sourcing_name = 0x911c35 "command line"
        save_sourcing_lnum = 0
        sourcing_name_buf = "nvim_exec() called at command line:0\000\000\000\000\350\065\273\363\375\177\000\000\377\377\377\377\377\177\000\001\003\000\000\000\353\003\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\n\000\000\000\062\000\000\000\000\000\000\000\000\000$@\000\000\000\000\000\000$@\000\000\000\000\000\000\000\000\000\001\000\000\062", '\000' <repeats 19 times>, "P\345\207\071\254\177\000\000\220\064\273\363\375\177\000\000\000dD\000\000\000\000\000c\353a\000\000\000\000\000\030\000\000\000\000\000\000\000p\320A\001\000\000\000\000\030\000\000\000\000\000\000\000"...
        save_current_sctx = {sc_sid = -3, sc_seq = 0, sc_lnum = 0}
        entry = {top_funccal = 0x0, next = 0x0}
        retval = 0
#20 0x00000000005635cf in do_source_str (cmd=0x141d070 "tabprevious | +tabclose", traceback_name=0x8ca380 "nvim_exec()") at ../src/nvim/ex_cmds2.c:2782
        cookie = {buf = 0x141d070 "tabprevious | +tabclose", offset = 24}
#21 0x000000000048c19b in nvim_exec (src=..., output=false, err=0x7ffdf3bb35e8) at ../src/nvim/api/vim.c:110
        save_msg_silent = 0
        save_capture_ga = 0x0
        capture_local = {ga_len = 23, ga_maxlen = 0, ga_itemsize = 21090416, ga_growsize = 0, ga_data = 0x17}
#22 0x000000000044cd48 in nlua_msgpack_nvim_exec (lstate=0x7fac3987e380) at src/nvim/auto/msgpack_lua_c_bindings.generated.c:1882
        err = {type = kErrorTypeNone, msg = 0x0}
        arg2 = false
        arg1 = {data = 0x141d070 "tabprevious | +tabclose", size = 23}
        ret = {data = 0x0, size = 0}
#23 0x000000000085c9bd in lj_BC_FUNCC ()
No symbol table info available.
#24 0x00000000008424a0 in lua_pcall (L=0x7fac3987e380, nargs=<optimized out>, nresults=<optimized out>, errfunc=<optimized out>) at lj_api.c:1169
        g = 0x7fac3987e3e0
        oldh = <optimized out>
        ef = 0
        status = <optimized out>
#25 0x00000000005e88fe in nlua_exec_file (path=0x13b7688 "./minimal.lua") at ../src/nvim/lua/executor.c:1420
        lstate = 0x7fac3987e380
#26 0x00000000005e8888 in ex_luafile (eap=0x7ffdf3bb3808) at ../src/nvim/lua/executor.c:1402
No locals.
#27 0x000000000056a9d8 in do_one_cmd (cmdlinep=0x7ffdf3bb3b98, flags=10, cstack=0x7ffdf3bb3ba0, fgetline=0x0, cookie=0x0) at ../src/nvim/ex_docmd.c:1964
        p = 0x13b7687 " ./minimal.lua"
        lnum = -1063752452066765312
        n = 0
        errormsg = 0x0
        after_modifier = 0x13b7680 "luafile ./minimal.lua"
        ea = {arg = 0x13b7688 "./minimal.lua", nextcmd = 0x0, cmd = 0x13b7680 "luafile ./minimal.lua", cmdlinep = 0x7ffdf3bb3b98, cmdidx = CMD_luafile, argt = 524445, skip = 0, forceit = 0, addr_count = 0, line1 = 1, line2 = 1, addr_type = ADDR_LINES, flags = 0, do_ecmd_cmd = 0x0, do_ecmd_lnum = 0, append = 0, usefilter = 0, amount = 0, regname = 0, force_bin = 0, read_edit = 0, force_ff = 0, force_enc = 0, bad_char = 0, useridx = 0, errmsg = 0x0, getline = 0x0, cookie = 0x0, cstack = 0x7ffdf3bb3ba0, verbose_save = -1, save_msg_silent = -1, did_esilent = 0, did_sandbox = false}
        save_msg_scroll = 1
        save_cmdmod = {split = 0, tab = 0, browse = false, confirm = false, hide = false, keepalt = false, keepjumps = false, keepmarks = false, keeppatterns = false, lockmarks = false, noswapfile = false, save_ei = 0x0, filter_regmatch = {regprog = 0x0, startp = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, endp = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, rm_ic = false}, filter_force = false}
        save_reg_executing = 0
        cmd = 0x13b7680 "luafile ./minimal.lua"
        ni = 0
#28 0x000000000056772e in do_cmdline (cmdline=0x7ffdf3bb4e6f "luafile ./minimal.lua", fgetline=0x0, cookie=0x0, flags=10) at ../src/nvim/ex_docmd.c:595
        recursive = 3
        call_depth = 3
        next_cmdline = 0x13b7680 "luafile ./minimal.lua"
        cmdline_copy = 0x13b7680 "luafile ./minimal.lua"
        used_getline = false
        msg_didout_before_start = false
        count = 1
        did_inc = 0
        retval = 1
        cstack = {cs_flags = {0 <repeats 50 times>}, cs_pending = '\000' <repeats 49 times>, cs_pend = {csp_rv = {0x0 <repeats 50 times>}, csp_ex = {0x0 <repeats 50 times>}}, cs_forinfo = {0x0 <repeats 50 times>}, cs_line = {0 <repeats 50 times>}, cs_idx = -1, cs_looplevel = 0, cs_trylevel = 0, cs_emsg_silent_list = 0x0, cs_lflags = 0}
        lines_ga = {ga_len = 0, ga_maxlen = 0, ga_itemsize = 16, ga_growsize = 10, ga_data = 0x0}
        current_line = 0
        fname = 0x0
        breakpoint = 0x0
        dbg_tick = 0x0
        debug_saved = {trylevel = 0, force_abort = 0, caught_stack = 0x0, vv_exception = 0x0, vv_throwpoint = 0x0, did_emsg = 0, got_int = 0, need_rethrow = 0, check_cstack = 0, current_exception = 0x0}
        initial_trylevel = 0
        saved_msg_list = 0x0
        private_msg_list = 0x0
        cmd_getline = 0x0
        cmd_cookie = 0x0
        cmd_loop_cookie = {lines_gap = 0x0, current_line = 0, repeating = 0, getline = 0x0, cookie = 0x0}
        real_cookie = 0x0
        getline_is_func = 0
#29 0x0000000000568614 in do_cmdline_cmd (cmd=0x7ffdf3bb4e6f "luafile ./minimal.lua") at ../src/nvim/ex_docmd.c:284
No locals.
#30 0x00000000005f2af3 in exe_commands (parmp=0x7ffdf3bb41f0) at ../src/nvim/main.c:1730
        i = 0
#31 0x00000000005f003b in main (argc=5, argv=0x7ffdf3bb43f8) at ../src/nvim/main.c:508
        fname = 0x0
        params = {argc = 5, argv = 0x7ffdf3bb43f8, use_vimrc = 0x7ffdf3bb4e69 "NORC", clean = false, n_commands = 2, commands = {0x7ffdf3bb4e6f "luafile ./minimal.lua", 0x7ffdf3bb4e86 "quitall!", 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, cmds_tofree = "\000\000\000\000\000\000\000\000\000", n_pre_commands = 0, pre_commands = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, edit_type = 0, tagname = 0x0, use_ef = 0x0, input_isatty = true, output_isatty = true, err_isatty = true, input_neverscript = false, no_swap_file = 0, use_debug_break_level = -1, window_count = 1, window_layout = 0, diff_mode = 0, listen_addr = 0x0}
        cwd = 0x0
        use_remote_ui = false
        use_builtin_ui = true
@notomo notomo added the bug issues reporting wrong behavior label Aug 9, 2021
@seandewar seandewar added the api libnvim, Nvim RPC API label Aug 9, 2021
@notomo
Copy link
Sponsor Contributor Author

notomo commented Aug 22, 2021

found more minimal reproduce code.

vim.cmd("tabedit")
local window_id = vim.api.nvim_open_win(0, true, {
  width = 50,
  height = 10,
  relative = "editor",
  row = 10,
  col = 10,
})
vim.cmd("tabprevious")
vim.api.nvim_win_close(window_id, true)
vim.api.nvim_tabpage_get_win(2)

@notomo notomo changed the title Aborted nvim_tabpage_get_win in WinClosed make tabpage's active window invalid by win_close from other tab Aug 22, 2021
muniter pushed a commit to muniter/neovim that referenced this issue Sep 8, 2021
seandewar pushed a commit to seandewar/neovim that referenced this issue Sep 16, 2021
bfredl added a commit that referenced this issue Nov 30, 2021
BREAKING CHANGES

* 32-bit windows builds are no longer provided.

* **build deps**: use libuv 1.42.0 upstream for WIN32 (#15889) (f6c0a37), closes #15889
  * removes Windows 7 support
  * removes support for mouse and alternate buffers in TUI for Windows 8 and 8.1

* **lsp/diagnostic:** highlight groups and signs for LSP diagnostics renamed (e.g. `LspDiagnosticsDefaultWarning` to `DiagnosticWarn`) (a5bbb93)

* **diagnostic:** make DiagnosticChanged a first class autocmd (#16098) (150a592), closes #16098
  * `au User LspDiagnosticsChanged` autocommands are not supported. Use the new first-class DiagnosticChanged event instead.

* **lua**: `register_keystroke_callback` => `on_key` (#15460) (69fe427)
  * **note**: this breaking change was included in 0.5.1

FEATURES

* **:source, nvim_exec:** defer script item creation until s:var access (da9b0ab)
* **:source, nvim_exec:** support script-local variables (d4ed51e), closes #13143 #11507
* **lua:** add trimempty optional parameter to vim.split (5fa26e2)
* **lua:** add vim.str_utf_{start,end} (#16129) (2230b57)
* **lua:** add vim.str_utf_pos function (d752cbc)
* **lsp:** aggregate code actions from all clients (#15121) (c36df20)
* **api:** add lua C bindings for xdiff (#14536) (3d3c0c6)
* **api:** evaluate statusline string #16020 (9086938)
* **api:** named marks set, get, delete #15346 (49fdc62)
* **api:** nvim_get_chan_info: include "argv" for jobs #15537 (0603eba), closes #15440
* **api:** win_viewport also sends line_count #15613 (086631c)
* **api:** support :terminal input callback in lua (9e41e82)
* **ci:** add backport PR action (#14766) (6cc456d)
* **decorations:** allow more than one stacked highlight in a virt_text (1495d36)
* **decorations:** support virtual lines (392c658) (8d7816c)
* **diagnostic:** move vim.lsp.diagnostic to vim.diagostic and support other sources (a5bbb93)
* **diagnostic:** add 'prefix' option to open_float (#16321) (3c74ba4)
* **diagnostic:** add option to include diagnostic source (d43151e)
* **diagnostic:** allow 'prefix' option to return highlight (cc48837)
* **diagnostic:** allow customized diagnostic messages (#15742) (d999c96)
* **diagnostic:** match(), tolist(), fromlist() #15704 (e61ea77)
* **diagnostic:** update jumplist on goto_next/prev (#15942) (b55944e)
* **diagnostic:** use `scope = 'line'` by default for `open_float()` (#16456) (217f9f8), closes #16453
* **diagnostic:** support severity_sort (32c0631)
* **checkhealth:** provide function for command line completion (8b43b07)
* **f_chansend:** support Blob data argument (7e9ea08)
* **job:** add parameter to close stdin (eb7f24b)
* **keywordprg:** use :terminal for external commands #15398 (a90513c), closes #2995 #2761
* **lsp:** add 'focus' option to open_floating_preview (#16465) (fff8827)
* **lsp:** add a registry for client side code action commands (6c03601)
* **lsp:** add client command support to codelens (#15820) (19a77cd)
* **lsp:** add codeAction/resolve support (#15818) (ec4731d)
* **lsp:** add exit_timeout flag (#16070) (80456cf)
* **lsp:** add formatexpr (#16186) (52fa1d2)
* **lsp:** add lsp healthcheck (e268026)
* **lsp:** add per-client commands (#16101) (519d8de)
* **lsp:** add tagfunc (#16103) (f940e7a)
* **lsp:** add warning message for large log size (e6777a7)
* **lsp:** allow configuring zindex for floating windows (#15086) (c487a73)
* **lsp:** allow diagnostics to be disabled for a buffer (#15134) (1aeb945)
* **lsp:** allow root_dir to be nil (#15430) (ff0833c)
* **lsp:** highlight active parameter in signature help (#15018) (af26371)
* **lsp:** improve vim.lsp.util.apply_text_edits (#15561) (41cfba6)
* **lsp:** include original request params in handler ctx (187579f)
* **lsp:** jump to diagnostics by position (#14795) (ea39ff5)
* **lsp:** Make line diagnostics display prettier (e43dbfd)
* **lsp:** make list handlers configurable (#15199) (3e00d4f)
* **lsp:** support textDocument/prepareRename (#15514) (c1f573f)
* **lsp:** use uv_spawn to check if server executable (#16430) (1a60580)
* **lsp:** use vim.ui.select() in codelenses (#16004) (e7ea54a)
* **lsp:** utilize textEdit.range for startbyte in omnifunc (#15957) (e9d6f7c)
* **lua:** add lua-cjson as vendored dependency (8decc9f)
* **lua:** add vim.mpack for msgpack support in lua (eaf661d)
* **lua:** allow passing handles to vim.b/w/t (6c5e7bd)
* **lua:** convert binary string with NULs to Blob (de9df82)
* **lua:** document support of packages with v:lua syntax (9dd371b)
* **lua:** enable stack traces in error output (#16228) (03b805a)
* **lua:** expose lua-cjson as vim.json (30fed27)
* **lua:** make vim.mpack support vim.NIL and vim.empty_dict() (0f59666)
* **match:** allow hl group to be defined after :match command (fca52f5)
* **msgpack:** convert Blobs to BIN strings (af6f454)
* **health:** support lua healthchecks (9249dcd), closes #15632
* **shada:** restore Blob globals properly (ef729fb)
* **terminal:** TermClose: set exit code in v:event.status #15406 (50b30de), closes #4713
* **treesitter:** add next, prev sibling method (1400841)
* **treesitter:** allow to set highlight priority for queries (242608e)
* **ui:** add `opt.kind` to `vim.ui.select` (#15838) (7ae86c1)
* **ui:** add vim.ui.input and use in lsp rename (#15959) (16d4af6)
* **ui:** add vim.ui.select and use in code actions (#15771) (63fde08)
* **vim script:** support calling v:lua as a method (b2994e3)

CHANGES

* **defaults:** auto-create backup dir (4600193)
* **defaults:** inccommand=nosplit #15395 (7215d35)
* **defaults:** set undo points in <C-U> and <C-W> (#15400) (2cb8db3)
* **defaults:** limit syntax cost on CmdwinEnter #15401 (622a36b), closes #6289 #6399
* **defaults:** map CTRL-L to search highlights, update diffs #15385 (0aa8128)
* **defaults:** map Y to y$ #13268 (5a111c1), closes #416 #6289
* **defaults:** remove 'options' from viewoptions #15397 (3954537), closes #6289
* **defaults:** set hidden (f6c72b7)
* **defaults:** set nojoinspaces (d417e67)
* **defaults:** switchbuf=uselast #15394 (4ba7495)
* **runtime:** add packages as `"/pack/*/start/*"` patterns to &rtp (9df7e02)
* **startup:** load builtin plugins with --clean #15893 (c7a63f3), closes #15605
* **terminal:** set cursorlineopt=number in terminal mode (#15493) (c61a386)
* **window:** skip non-focusable floats for :windo (#15378) (e8631cb)

PERFORMANCE IMPROVEMENTS

* **api:** avoid spurious allocations when converting small objects (705e8f1)
* **highlight:** use a hashtable for highlight group names (bb4b4d7)
* **lua:** optimize vim.deep_equal #15236 (4b452d4)
* **lua:** don't use regexes inside lua require'mod' (ea2023f), closes #15147 #15497
* **lsp:** improve json deserialization performance (#15854) (912a6e5)
* **map:** reduce double pointer indirection to single pointer indirection (9e651a9)
* **treesitter:** avoid string lookup of highlight name in hot loop (2460f0a)

FIXES

* **:source, nvim_exec:** handle Vimscript line continuations #14809 (6188926), closes #14807
* **:source:** copy curbuf lines to memory before sourcing #15111 (afdc9e6)
* allow str_utfindex second argument to be an explicit nil  (#16448) (512ec46)
* **api:** fix crash after set_option_value_for() #15390 (8b0e6cc), closes #14097 #13577
* **api:** fix nvim_buf_set_extmark (2338345)
* **autocmd:** fix conditions in block_autocmds, unblock_autocmds #15372 (29712ae), closes #6279
* **buffer_updates:** cleanup test behavior (54b2c68)
* **buffer_updates:** handle :delete of the very last line in buffer (8335e26)
* **buffer_updates:** handle :sort of already sorted buffer (ef687d3)
* **buffer_updates:** make `lockmarks` not affect extmarks and buffer updates. fixes #12861 (7d171b1)
* **bufupdates:** send correct updates for visual paste (1423146)
* **build:** add an env var to re-enable the colors (5087347)
* **build:** call find_package(Threads) before using its variables (f446ab3)
* **build:** export symbols on Windows (aa644b7)
* **build:** fix build failure in MinGW (0503e17)
* **build:** make vendored libmpack and libmpack-lua build properly (2a08aef)
* **channel:** throw error if sending to internal channel w/o terminal (3b89fee)
* **checkhealth:** duplicate checks if module name has "-" #15935 (a36c6e5)
* **checkhealth:** mitigate issues with duplicate healthchecks #15919 (acd5e83), closes #15259
* **ci:** disable broken test on openbsd on all CI due to resource constraints (a3e2636)
* **ci:** re-run GHA for ready_for_review events (#15377) (c6ef956)
* **decorations:** crash when :bdelete (extmark_free_all) after clear_namespace (cd353aa), closes #15212
* **defaults:** "syntax sync maxlines=1" on CmdwinEnter #15552 (5f8518b), closes #15401
* **defaults:** do not map Y in visual-mode #15387 (54726e8), closes #13268
* **diagnostic:** allow floats to be focusable (#16093) (427bac6)
* **diagnostic:** change default severity_sort order (938ed45)
* **diagnostic:** clamp line numbers in setqflist and setloclist (5b0d8f8)
* **diagnostic:** correctly handle folder level diagnostics (f87779a)
* **diagnostic:** deepcopy diagnostics before clamping line numbers (2abc799)
* **diagnostic:** do not focus floats in goto functions (#16433) (b5b025f)
* **diagnostic:** don't clamp line numbers in setqflist (0341c68)
* **diagnostic:** don't return nil when callers expect a table (#15765) (057606e)
* **diagnostic:** don't use nil col if missing from qflist (#16357) (5e46f64)
* **diagnostic:** error on invalid severity value (#15965) (d5dd0aa)
* **diagnostic:** fix navigation with diagnostics placed past end of line (34bb5fa)
* **diagnostic:** fix option resolution in open_float (#16229) (fd34784)
* **diagnostic:** fix wrong data type in setqflist() (3fd1450)
* **diagnostic:** get line count per buffer when clamping (c59f200)
* **diagnostic:** handle an unknown or missing client (#16242) (1fdbd29)
* **diagnostic:** handle diagnostics placed past the end of line (#16095) (a2994c8)
* **diagnostic:** make set() go through cache when calling show() (d93f47d)
* **diagnostic:** only update decorations for loaded buffers (#15715) (924e8e4)
* **diagnostic:** preserve fields from LSP diagnostics via user_data (#15735) (17b7968)
* **diagnostic:** remove useless highlight links (#15683) (c13242c), closes #15585
* disable clipboard when test registers (dd63d93)
* **docgen:** add tagfunc.lua (0746f00)
* **doc:** various fixes #15604 (4eb1ebb)
* **eval:** add the vimscript-1 feature to has() (18b32fc)
* **eval:** checking for a non-empty string is too strict (#15987) (1dbbaf8)
* **eval:** fix has('wsl') #16153 (16d06fa), closes #12642 #16143
* **eval:** fixup for empty modifier in fnamemodify (#16368) (a7ad509), closes #16367
* **extmark:** fix missing virt_lines when using id param of set_extmark (995dbd2)
* **extmarks:** splice extmarks on nv_Undo #15920 (e069361)
* **fileio:** replace characters over INT_MAX with U+FFFD (#16354) (a2e5c2f), closes #11877
* **float:** fix potential heap corruption in win_redr_border (de670f3)
* **float:** redraw if w_border_adj changed (7ff1bc1)
* **heath/provider.vim:** using list as string #16007 (5365f24), closes #15988
* **highlight:** remove syncolor.vim, always include syntax colors (9afa0d2), closes #15176 #12573 #15205
* **inccommand:** ignore trailing commands only for *previewed* command #15638 (1f8c91b), closes #8796 #7494
* include ci/ in exported tarball (d6f03aa), closes #15856
* **input:** never reinterpret unmapped ALT- chrods in Terminal mode (#16222) (5ce35ab)
* **input:** resolve isolated (non-ALT/META) mappings #13109 (c4857b6), closes #13042 #13086 #15869
* **jobwait:** always drain process event queues #15402 (3c081d0), closes #15349
* **lsp_spec:** tests depended on previous session (069d1de)
* **lsp:** accept file URIs without a hostname (a2c2a08)
* **lsp:** add done flag to messages returned in util.get_progress_messages() (#15985) (45fa70a)
* **lsp:** add placeholder cancel function (#16189) (4da0351)
* **lsp:** add textDocument/prepareRename to capability map (#15961) (fcc11d5), closes #15899
* **lsp:** adjust legacy show diagnostic functions to use correct scope (#16106) (dc6c9fe)
* **lsp:** allow diagnostic.clear to accept nil bufnr (#15137) (4ed2d4f)
* **lsp:** avoid duplicates in client attached buffers (#16099) (c5525f2)
* **lsp:** avoid serializing boolean as key (#15810) (96614f8)
* **lsp:** change rpc start notify level to warn (#16467) (04c7b55)
* **lsp:** change signature of buf_highlight_references (#16345) (eb3d591)
* **lsp:** correctly parse LSP snippets #15579 (516775e), closes #15522
* **lsp:** default to UTF-16 in make_position_params (2e3a474)
* **lsp:** do not index nil client in progress (#16262) (8f31b21)
* **lsp:** do not invoke handlers for unsupported methods (#15926) (d288daa)
* **lsp:** don't update active_clients on exit_timeout (#16192) (98f5782)
* **lsp:** enable additional capabilities (#15470) (5d63354)
* **lsp:** ensure buffers are re-attached on rename (#16266) (ee3a58d)
* **lsp:** Ensure users get feedback on references/symbols errors or empty results (256570a)
* **lsp:** expose ContentModified error code to callbacks (#15262) (3f09732)
* **lsp:** fix cursor row after textEdits (#16038) (bd2f61c)
* **lsp:** gracefully handle nil workspaceFolders (#16284) (0ecc58c)
* **lsp:** guard textDocument/codeAction command logic #15769 (433bda4)
* **lsp:** improve symbols_to_items performance (#16197) (5ad15c9)
* **lsp:** Include client name in handler error messages (#15227) (24f2b9e)
* **lsp:** pass bufnr for async formatting (#15084) (c31bc6e)
* **lsp:** persist diagnostic config for clients (bcc9ba5)
* **lsp:** prevent double <text> for cached plaintext markup (910967e)
* **lsp:** restore diagnostics extmarks on buffer changes (#15011) (77b33e4)
* **lsp:** rewrite incremental sync (#16252) (2ecf0a4)
* **lsp:** send buffer contents joined on fileformat-specific linebreak (#16334) (134a638)
* **lsp:** send textDocument/didChange for each buffer (#16431) (3451121)
* **lsp:** support duplicate params in signature help (#15032) (9132b76)
* **lsp:** update lsp-handler signature in call_hierarchy (#15738) (8164adc)
* **lsp:** update workspace/applyEdit handler signature (#15573) (3f526fe)
* **lua:** fix vim.deepcopy for metatables & cycled tables (#16435) (eb876a0)
* **lua:** preserve argument lists which are not lists (6896d22)
* **man.vim:** ensure buftype=nofile after :tag or :stag #15675 (29bc648), closes #15650
* **man.vim:** filetype=man is too eager #15488 (2548a9e), closes #15487 #15487
* **mouse:** fix mouse drag positions on multigrid #12667 (0dcfd0e), closes #15091
* **mouse:** correct dragged position in composed layout (810da1a)
* **multigrid:** mouse events crash neovim (28ac6c0)
* **nvim_open_win:** crash if autocmds delete buffer/window #15549 (0c06da1), closes #15548
* **options:** using :set fillchars should clear local value (7528bce)
* prevent K_EVENT from stopping Select mode CTRL-O #15688 (5f144ef)
* **provider:** compare versions as number, not string (python 3.10 support) #15937 (e16adbf), closes #14586
* **screen:** make display_tick monotonic up to 2^64. fixes #16152 (9e88c9c)
* **screen:** missing search highlights when redrawing from timer #15380 (db695cc), closes #13074 #14064
* **shared:** do not treat empty tables as list in deep extend (#15094) (526fc60)
* **sign:** reset auto sign column with minimum in float win minimal style (c8f57f6)
* **startup:** init.lua: set $MYVIMRC to absolute path #15748 (c76cddf)
* **termdebug:** replace mapset with nvim_set_keymap (#15699) (4d7dcbe)
* **termdebug:** replace term_getline with getbufline #15598 (11289ad)
* **terminal:** close without ! if the job is stopped (55defa1), closes #4683
* **terminal:** free terminal if close_buffer() closes a closed terminal (#16264) (14def4d)
* **test/dumplog:** tostring(rv) before formatting as string (ddaa0cc)
* **tests:** use isolated XDG_DATA_HOME in startup tests (8e663e2)
* **treesitter:** do not map hl_group when no mapping is set (f489d98)
* **treesitter:** run predicates more often in iter_matches (458f2aa)
* **tui:** extend smglr ignores to smglp and smgrp (#16239) (3ba800f)
* **tui:** remove obsolete $NVIM detection #15791 (4414584), closes #12937 #11390
* **tutor:** formatting, layout #15098 (c52ec8f), closes #15088
* **ui:** use nowait for q mapping in floating window (#16427) (c132144)
* **v:lua:** fix emsg when calling v:lua directly (da9005a)
* **vim-patch.sh:** run nvim with -u NONE -n #16179 (97ae0ab)
* **vim.opt:** vimL map string values not trimmed (#14982) (4906156)
* **window:** win_close from other tabpage #15454 (90b2da1), closes #15313
* **windowing:** positioning of relative floats (9065730)
Shougo pushed a commit to Shougo/neovim that referenced this issue Dec 1, 2021
BREAKING CHANGES

* 32-bit windows builds are no longer provided.

* **build deps**: use libuv 1.42.0 upstream for WIN32 (neovim#15889) (f6c0a37), closes neovim#15889
  * removes Windows 7 support
  * removes support for mouse and alternate buffers in TUI for Windows 8 and 8.1

* **lsp/diagnostic:** highlight groups and signs for LSP diagnostics renamed (e.g. `LspDiagnosticsDefaultWarning` to `DiagnosticWarn`) (a5bbb93)

* **diagnostic:** make DiagnosticChanged a first class autocmd (neovim#16098) (150a592), closes neovim#16098
  * `au User LspDiagnosticsChanged` autocommands are not supported. Use the new first-class DiagnosticChanged event instead.

* **lua**: `register_keystroke_callback` => `on_key` (neovim#15460) (69fe427)
  * **note**: this breaking change was included in 0.5.1

FEATURES

* **:source, nvim_exec:** defer script item creation until s:var access (da9b0ab)
* **:source, nvim_exec:** support script-local variables (d4ed51e), closes neovim#13143 neovim#11507
* **lua:** add trimempty optional parameter to vim.split (5fa26e2)
* **lua:** add vim.str_utf_{start,end} (neovim#16129) (2230b57)
* **lua:** add vim.str_utf_pos function (d752cbc)
* **lsp:** aggregate code actions from all clients (neovim#15121) (c36df20)
* **api:** add lua C bindings for xdiff (neovim#14536) (3d3c0c6)
* **api:** evaluate statusline string neovim#16020 (9086938)
* **api:** named marks set, get, delete neovim#15346 (49fdc62)
* **api:** nvim_get_chan_info: include "argv" for jobs neovim#15537 (0603eba), closes neovim#15440
* **api:** win_viewport also sends line_count neovim#15613 (086631c)
* **api:** support :terminal input callback in lua (9e41e82)
* **ci:** add backport PR action (neovim#14766) (6cc456d)
* **decorations:** allow more than one stacked highlight in a virt_text (1495d36)
* **decorations:** support virtual lines (392c658) (8d7816c)
* **diagnostic:** move vim.lsp.diagnostic to vim.diagostic and support other sources (a5bbb93)
* **diagnostic:** add 'prefix' option to open_float (neovim#16321) (3c74ba4)
* **diagnostic:** add option to include diagnostic source (d43151e)
* **diagnostic:** allow 'prefix' option to return highlight (cc48837)
* **diagnostic:** allow customized diagnostic messages (neovim#15742) (d999c96)
* **diagnostic:** match(), tolist(), fromlist() neovim#15704 (e61ea77)
* **diagnostic:** update jumplist on goto_next/prev (neovim#15942) (b55944e)
* **diagnostic:** use `scope = 'line'` by default for `open_float()` (neovim#16456) (217f9f8), closes neovim#16453
* **diagnostic:** support severity_sort (32c0631)
* **checkhealth:** provide function for command line completion (8b43b07)
* **f_chansend:** support Blob data argument (7e9ea08)
* **job:** add parameter to close stdin (eb7f24b)
* **keywordprg:** use :terminal for external commands neovim#15398 (a90513c), closes neovim#2995 neovim#2761
* **lsp:** add 'focus' option to open_floating_preview (neovim#16465) (fff8827)
* **lsp:** add a registry for client side code action commands (6c03601)
* **lsp:** add client command support to codelens (neovim#15820) (19a77cd)
* **lsp:** add codeAction/resolve support (neovim#15818) (ec4731d)
* **lsp:** add exit_timeout flag (neovim#16070) (80456cf)
* **lsp:** add formatexpr (neovim#16186) (52fa1d2)
* **lsp:** add lsp healthcheck (e268026)
* **lsp:** add per-client commands (neovim#16101) (519d8de)
* **lsp:** add tagfunc (neovim#16103) (f940e7a)
* **lsp:** add warning message for large log size (e6777a7)
* **lsp:** allow configuring zindex for floating windows (neovim#15086) (c487a73)
* **lsp:** allow diagnostics to be disabled for a buffer (neovim#15134) (1aeb945)
* **lsp:** allow root_dir to be nil (neovim#15430) (ff0833c)
* **lsp:** highlight active parameter in signature help (neovim#15018) (af26371)
* **lsp:** improve vim.lsp.util.apply_text_edits (neovim#15561) (41cfba6)
* **lsp:** include original request params in handler ctx (187579f)
* **lsp:** jump to diagnostics by position (neovim#14795) (ea39ff5)
* **lsp:** Make line diagnostics display prettier (e43dbfd)
* **lsp:** make list handlers configurable (neovim#15199) (3e00d4f)
* **lsp:** support textDocument/prepareRename (neovim#15514) (c1f573f)
* **lsp:** use uv_spawn to check if server executable (neovim#16430) (1a60580)
* **lsp:** use vim.ui.select() in codelenses (neovim#16004) (e7ea54a)
* **lsp:** utilize textEdit.range for startbyte in omnifunc (neovim#15957) (e9d6f7c)
* **lua:** add lua-cjson as vendored dependency (8decc9f)
* **lua:** add vim.mpack for msgpack support in lua (eaf661d)
* **lua:** allow passing handles to vim.b/w/t (6c5e7bd)
* **lua:** convert binary string with NULs to Blob (de9df82)
* **lua:** document support of packages with v:lua syntax (9dd371b)
* **lua:** enable stack traces in error output (neovim#16228) (03b805a)
* **lua:** expose lua-cjson as vim.json (30fed27)
* **lua:** make vim.mpack support vim.NIL and vim.empty_dict() (0f59666)
* **match:** allow hl group to be defined after :match command (fca52f5)
* **msgpack:** convert Blobs to BIN strings (af6f454)
* **health:** support lua healthchecks (9249dcd), closes neovim#15632
* **shada:** restore Blob globals properly (ef729fb)
* **terminal:** TermClose: set exit code in v:event.status neovim#15406 (50b30de), closes neovim#4713
* **treesitter:** add next, prev sibling method (1400841)
* **treesitter:** allow to set highlight priority for queries (242608e)
* **ui:** add `opt.kind` to `vim.ui.select` (neovim#15838) (7ae86c1)
* **ui:** add vim.ui.input and use in lsp rename (neovim#15959) (16d4af6)
* **ui:** add vim.ui.select and use in code actions (neovim#15771) (63fde08)
* **vim script:** support calling v:lua as a method (b2994e3)

CHANGES

* **defaults:** auto-create backup dir (4600193)
* **defaults:** inccommand=nosplit neovim#15395 (7215d35)
* **defaults:** set undo points in <C-U> and <C-W> (neovim#15400) (2cb8db3)
* **defaults:** limit syntax cost on CmdwinEnter neovim#15401 (622a36b), closes neovim#6289 neovim#6399
* **defaults:** map CTRL-L to search highlights, update diffs neovim#15385 (0aa8128)
* **defaults:** map Y to y$ neovim#13268 (5a111c1), closes neovim#416 neovim#6289
* **defaults:** remove 'options' from viewoptions neovim#15397 (3954537), closes neovim#6289
* **defaults:** set hidden (f6c72b7)
* **defaults:** set nojoinspaces (d417e67)
* **defaults:** switchbuf=uselast neovim#15394 (4ba7495)
* **runtime:** add packages as `"/pack/*/start/*"` patterns to &rtp (9df7e02)
* **startup:** load builtin plugins with --clean neovim#15893 (c7a63f3), closes neovim#15605
* **terminal:** set cursorlineopt=number in terminal mode (neovim#15493) (c61a386)
* **window:** skip non-focusable floats for :windo (neovim#15378) (e8631cb)

PERFORMANCE IMPROVEMENTS

* **api:** avoid spurious allocations when converting small objects (705e8f1)
* **highlight:** use a hashtable for highlight group names (bb4b4d7)
* **lua:** optimize vim.deep_equal neovim#15236 (4b452d4)
* **lua:** don't use regexes inside lua require'mod' (ea2023f), closes neovim#15147 neovim#15497
* **lsp:** improve json deserialization performance (neovim#15854) (912a6e5)
* **map:** reduce double pointer indirection to single pointer indirection (9e651a9)
* **treesitter:** avoid string lookup of highlight name in hot loop (2460f0a)

FIXES

* **:source, nvim_exec:** handle Vimscript line continuations neovim#14809 (6188926), closes neovim#14807
* **:source:** copy curbuf lines to memory before sourcing neovim#15111 (afdc9e6)
* allow str_utfindex second argument to be an explicit nil  (neovim#16448) (512ec46)
* **api:** fix crash after set_option_value_for() neovim#15390 (8b0e6cc), closes neovim#14097 neovim#13577
* **api:** fix nvim_buf_set_extmark (2338345)
* **autocmd:** fix conditions in block_autocmds, unblock_autocmds neovim#15372 (29712ae), closes neovim#6279
* **buffer_updates:** cleanup test behavior (54b2c68)
* **buffer_updates:** handle :delete of the very last line in buffer (8335e26)
* **buffer_updates:** handle :sort of already sorted buffer (ef687d3)
* **buffer_updates:** make `lockmarks` not affect extmarks and buffer updates. fixes neovim#12861 (7d171b1)
* **bufupdates:** send correct updates for visual paste (1423146)
* **build:** add an env var to re-enable the colors (5087347)
* **build:** call find_package(Threads) before using its variables (f446ab3)
* **build:** export symbols on Windows (aa644b7)
* **build:** fix build failure in MinGW (0503e17)
* **build:** make vendored libmpack and libmpack-lua build properly (2a08aef)
* **channel:** throw error if sending to internal channel w/o terminal (3b89fee)
* **checkhealth:** duplicate checks if module name has "-" neovim#15935 (a36c6e5)
* **checkhealth:** mitigate issues with duplicate healthchecks neovim#15919 (acd5e83), closes neovim#15259
* **ci:** disable broken test on openbsd on all CI due to resource constraints (a3e2636)
* **ci:** re-run GHA for ready_for_review events (neovim#15377) (c6ef956)
* **decorations:** crash when :bdelete (extmark_free_all) after clear_namespace (cd353aa), closes neovim#15212
* **defaults:** "syntax sync maxlines=1" on CmdwinEnter neovim#15552 (5f8518b), closes neovim#15401
* **defaults:** do not map Y in visual-mode neovim#15387 (54726e8), closes neovim#13268
* **diagnostic:** allow floats to be focusable (neovim#16093) (427bac6)
* **diagnostic:** change default severity_sort order (938ed45)
* **diagnostic:** clamp line numbers in setqflist and setloclist (5b0d8f8)
* **diagnostic:** correctly handle folder level diagnostics (f87779a)
* **diagnostic:** deepcopy diagnostics before clamping line numbers (2abc799)
* **diagnostic:** do not focus floats in goto functions (neovim#16433) (b5b025f)
* **diagnostic:** don't clamp line numbers in setqflist (0341c68)
* **diagnostic:** don't return nil when callers expect a table (neovim#15765) (057606e)
* **diagnostic:** don't use nil col if missing from qflist (neovim#16357) (5e46f64)
* **diagnostic:** error on invalid severity value (neovim#15965) (d5dd0aa)
* **diagnostic:** fix navigation with diagnostics placed past end of line (34bb5fa)
* **diagnostic:** fix option resolution in open_float (neovim#16229) (fd34784)
* **diagnostic:** fix wrong data type in setqflist() (3fd1450)
* **diagnostic:** get line count per buffer when clamping (c59f200)
* **diagnostic:** handle an unknown or missing client (neovim#16242) (1fdbd29)
* **diagnostic:** handle diagnostics placed past the end of line (neovim#16095) (a2994c8)
* **diagnostic:** make set() go through cache when calling show() (d93f47d)
* **diagnostic:** only update decorations for loaded buffers (neovim#15715) (924e8e4)
* **diagnostic:** preserve fields from LSP diagnostics via user_data (neovim#15735) (17b7968)
* **diagnostic:** remove useless highlight links (neovim#15683) (c13242c), closes neovim#15585
* disable clipboard when test registers (dd63d93)
* **docgen:** add tagfunc.lua (0746f00)
* **doc:** various fixes neovim#15604 (4eb1ebb)
* **eval:** add the vimscript-1 feature to has() (18b32fc)
* **eval:** checking for a non-empty string is too strict (neovim#15987) (1dbbaf8)
* **eval:** fix has('wsl') neovim#16153 (16d06fa), closes neovim#12642 neovim#16143
* **eval:** fixup for empty modifier in fnamemodify (neovim#16368) (a7ad509), closes neovim#16367
* **extmark:** fix missing virt_lines when using id param of set_extmark (995dbd2)
* **extmarks:** splice extmarks on nv_Undo neovim#15920 (e069361)
* **fileio:** replace characters over INT_MAX with U+FFFD (neovim#16354) (a2e5c2f), closes neovim#11877
* **float:** fix potential heap corruption in win_redr_border (de670f3)
* **float:** redraw if w_border_adj changed (7ff1bc1)
* **heath/provider.vim:** using list as string neovim#16007 (5365f24), closes neovim#15988
* **highlight:** remove syncolor.vim, always include syntax colors (9afa0d2), closes neovim#15176 neovim#12573 neovim#15205
* **inccommand:** ignore trailing commands only for *previewed* command neovim#15638 (1f8c91b), closes neovim#8796 neovim#7494
* include ci/ in exported tarball (d6f03aa), closes neovim#15856
* **input:** never reinterpret unmapped ALT- chrods in Terminal mode (neovim#16222) (5ce35ab)
* **input:** resolve isolated (non-ALT/META) mappings neovim#13109 (c4857b6), closes neovim#13042 neovim#13086 neovim#15869
* **jobwait:** always drain process event queues neovim#15402 (3c081d0), closes neovim#15349
* **lsp_spec:** tests depended on previous session (069d1de)
* **lsp:** accept file URIs without a hostname (a2c2a08)
* **lsp:** add done flag to messages returned in util.get_progress_messages() (neovim#15985) (45fa70a)
* **lsp:** add placeholder cancel function (neovim#16189) (4da0351)
* **lsp:** add textDocument/prepareRename to capability map (neovim#15961) (fcc11d5), closes neovim#15899
* **lsp:** adjust legacy show diagnostic functions to use correct scope (neovim#16106) (dc6c9fe)
* **lsp:** allow diagnostic.clear to accept nil bufnr (neovim#15137) (4ed2d4f)
* **lsp:** avoid duplicates in client attached buffers (neovim#16099) (c5525f2)
* **lsp:** avoid serializing boolean as key (neovim#15810) (96614f8)
* **lsp:** change rpc start notify level to warn (neovim#16467) (04c7b55)
* **lsp:** change signature of buf_highlight_references (neovim#16345) (eb3d591)
* **lsp:** correctly parse LSP snippets neovim#15579 (516775e), closes neovim#15522
* **lsp:** default to UTF-16 in make_position_params (2e3a474)
* **lsp:** do not index nil client in progress (neovim#16262) (8f31b21)
* **lsp:** do not invoke handlers for unsupported methods (neovim#15926) (d288daa)
* **lsp:** don't update active_clients on exit_timeout (neovim#16192) (98f5782)
* **lsp:** enable additional capabilities (neovim#15470) (5d63354)
* **lsp:** ensure buffers are re-attached on rename (neovim#16266) (ee3a58d)
* **lsp:** Ensure users get feedback on references/symbols errors or empty results (256570a)
* **lsp:** expose ContentModified error code to callbacks (neovim#15262) (3f09732)
* **lsp:** fix cursor row after textEdits (neovim#16038) (bd2f61c)
* **lsp:** gracefully handle nil workspaceFolders (neovim#16284) (0ecc58c)
* **lsp:** guard textDocument/codeAction command logic neovim#15769 (433bda4)
* **lsp:** improve symbols_to_items performance (neovim#16197) (5ad15c9)
* **lsp:** Include client name in handler error messages (neovim#15227) (24f2b9e)
* **lsp:** pass bufnr for async formatting (neovim#15084) (c31bc6e)
* **lsp:** persist diagnostic config for clients (bcc9ba5)
* **lsp:** prevent double <text> for cached plaintext markup (910967e)
* **lsp:** restore diagnostics extmarks on buffer changes (neovim#15011) (77b33e4)
* **lsp:** rewrite incremental sync (neovim#16252) (2ecf0a4)
* **lsp:** send buffer contents joined on fileformat-specific linebreak (neovim#16334) (134a638)
* **lsp:** send textDocument/didChange for each buffer (neovim#16431) (3451121)
* **lsp:** support duplicate params in signature help (neovim#15032) (9132b76)
* **lsp:** update lsp-handler signature in call_hierarchy (neovim#15738) (8164adc)
* **lsp:** update workspace/applyEdit handler signature (neovim#15573) (3f526fe)
* **lua:** fix vim.deepcopy for metatables & cycled tables (neovim#16435) (eb876a0)
* **lua:** preserve argument lists which are not lists (6896d22)
* **man.vim:** ensure buftype=nofile after :tag or :stag neovim#15675 (29bc648), closes neovim#15650
* **man.vim:** filetype=man is too eager neovim#15488 (2548a9e), closes neovim#15487 neovim#15487
* **mouse:** fix mouse drag positions on multigrid neovim#12667 (0dcfd0e), closes neovim#15091
* **mouse:** correct dragged position in composed layout (810da1a)
* **multigrid:** mouse events crash neovim (28ac6c0)
* **nvim_open_win:** crash if autocmds delete buffer/window neovim#15549 (0c06da1), closes neovim#15548
* **options:** using :set fillchars should clear local value (7528bce)
* prevent K_EVENT from stopping Select mode CTRL-O neovim#15688 (5f144ef)
* **provider:** compare versions as number, not string (python 3.10 support) neovim#15937 (e16adbf), closes neovim#14586
* **screen:** make display_tick monotonic up to 2^64. fixes neovim#16152 (9e88c9c)
* **screen:** missing search highlights when redrawing from timer neovim#15380 (db695cc), closes neovim#13074 neovim#14064
* **shared:** do not treat empty tables as list in deep extend (neovim#15094) (526fc60)
* **sign:** reset auto sign column with minimum in float win minimal style (c8f57f6)
* **startup:** init.lua: set $MYVIMRC to absolute path neovim#15748 (c76cddf)
* **termdebug:** replace mapset with nvim_set_keymap (neovim#15699) (4d7dcbe)
* **termdebug:** replace term_getline with getbufline neovim#15598 (11289ad)
* **terminal:** close without ! if the job is stopped (55defa1), closes neovim#4683
* **terminal:** free terminal if close_buffer() closes a closed terminal (neovim#16264) (14def4d)
* **test/dumplog:** tostring(rv) before formatting as string (ddaa0cc)
* **tests:** use isolated XDG_DATA_HOME in startup tests (8e663e2)
* **treesitter:** do not map hl_group when no mapping is set (f489d98)
* **treesitter:** run predicates more often in iter_matches (458f2aa)
* **tui:** extend smglr ignores to smglp and smgrp (neovim#16239) (3ba800f)
* **tui:** remove obsolete $NVIM detection neovim#15791 (4414584), closes neovim#12937 neovim#11390
* **tutor:** formatting, layout neovim#15098 (c52ec8f), closes neovim#15088
* **ui:** use nowait for q mapping in floating window (neovim#16427) (c132144)
* **v:lua:** fix emsg when calling v:lua directly (da9005a)
* **vim-patch.sh:** run nvim with -u NONE -n neovim#16179 (97ae0ab)
* **vim.opt:** vimL map string values not trimmed (neovim#14982) (4906156)
* **window:** win_close from other tabpage neovim#15454 (90b2da1), closes neovim#15313
* **windowing:** positioning of relative floats (9065730)
lewis6991 pushed a commit to lewis6991/neovim that referenced this issue Dec 12, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
api libnvim, Nvim RPC API bug issues reporting wrong behavior
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants