aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim/range.lua
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2026-08-22 16:24:05 -0400
committerGitHub <noreply@github.com>2026-08-22 16:24:05 -0400
commitb296666e419cdf7a673fdac7c348d0d95577f5ac (patch)
tree0728bfa4a8081d0394a17459eb4a4b447198a7d4 /runtime/lua/vim/range.lua
parent9b0bc7edef82200a7461332b75208a2160854226 (diff)
downloadrneovim-b296666e419cdf7a673fdac7c348d0d95577f5ac.tar.gz
rneovim-b296666e419cdf7a673fdac7c348d0d95577f5ac.tar.bz2
rneovim-b296666e419cdf7a673fdac7c348d0d95577f5ac.zip
fix(cwd): stale buffer names after temp context-switch #41433
Problem: 1. `ctx_dirs_restore()` is the only chdir site that doesn't re-shorten buffer names; `post_chdir()`, `update_cwd()` and `do_autochdir()` all call `shorten_fnames(true)`. So after a temp window-context switch that moved the CWD, every buffer's `b_fname` is still relative to the other directory. ui2 renders messages in a float, and entering it is such a switch, so with a `:bcd` in a `BufReadPost` handler 'statusline' "%f" shows ".config/nvim/init.lua" while the CWD is already `~/.config/nvim`, and :write resolves the name against it: ``` E212: Can't open file for writing: no such file or directory ``` 2. `msg_multihl()` leaves `msg_ext_id` pointing at the caller's storage when nothing was emitted (e.g. 'msg_silent'): the reset only ran on a flush that produced chunks. The next message then ships a dead stack frame as its msg_show id. After ":silent write" the id is buf_write()'s `msg_id[MAXPATHL + 32]`: ``` id = "\0\0\0\0\0\0\0\0\29\0(<C6>k\24R\17p<C7><C7><C7>\1\0\0\0..." ``` Solution: 1. `shorten_fnames(true)` after restoring the CWD. Drop `cs_save_sfname`, which was a partial workaround for the same bug. 2. Release the id in `msg_multihl()`, where it is set and the caller's frame is still alive. Stop reading `.data.integer` out of a String union member.
Diffstat (limited to 'runtime/lua/vim/range.lua')
0 files changed, 0 insertions, 0 deletions