Skip to content

Conversation

etircopyh
Copy link
Contributor

Since we now have $XDG_STATE_HOME to stash our session state data.

Copy link
Member

@justinmk justinmk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can add stdpath('state') I guess. But moving all of backupdir, swapfiles, etc to XDG "state" location feels arbitrary and not worth the additional churn, having already changed the location in 0.5.

The distinction feels pedantic. What is the use-case? What harm is there in storing this data in the "data" dir?

@etircopyh
Copy link
Contributor Author

etircopyh commented Sep 6, 2021

The distinction feels pedantic. What is the use-case? What harm is there in storing this data in the "data" dir?

It seems obvious. Like if you want kinda take your session to your other devices/setups. All it takes is to copy that ~/.local/state/nvim folder or whatever your set your $XDG_STATE_HOME to.

Anyway I think sooner or later change like this will be made here as well as in other software. So it will bring some more portability and more importantly distinction, because a lot of apps can't agree on where to put this data and it ends up all over the place.

@etircopyh etircopyh requested a review from justinmk September 7, 2021 00:52
@clason
Copy link
Member

clason commented Sep 7, 2021

That still doesn't explain why you can't do the same with .local/share/nvim -- isn't this exactly what stdpath('data') is for? Why do we need a fourth stdpath directory?

@gpanders
Copy link
Member

gpanders commented Sep 7, 2021

In fairness, XDG_STATE_HOME does sound like the correct place for many of the files currently under XDG_DATA_HOME:

The $XDG_STATE_HOME contains state data that should persist between (application) restarts, but that is not important or portable enough to the user that it should be stored in $XDG_DATA_HOME. It may contain:

  • actions history (logs, history, recently used files, …)
  • current state of the application that can be reused on a restart (view, layout, open files, undo history, …)

The explanation of XDG_DATA_HOME is much more vague:

$XDG_DATA_HOME defines the base directory relative to which user specific data files should be stored.

"User specific data files" can of course be interpreted to apply to everything listed under XDG_STATE_HOME as well.

I do think Nvim should adhere to defined standards, but even more importantly we should follow the principle of least surprise. Will users know or expect to look under XDG_STATE_HOME (I personally had never heard of it until this PR, but I'm likely not a representative sample)?

@etircopyh
Copy link
Contributor Author

etircopyh commented Sep 7, 2021

Will users know or expect to look under XDG_STATE_HOME?

I think users that do not trouble themselves with directories like ~/.cache ~/.config ~/.local/blah-blah won't even notice the difference as they probably don't even have these directories shown in their File Manager (or whatever they using). As for more curious users I'm sure they know their way around system. And it's not like we move user configuration, session data not even supposed to be touched in most cases, let alone pushed to dotfiles repo or whatever.

I personally had never heard of it until this PR

I'm myself didn't know about it too, until pipewire/pipewire@55c264d2. I was actually surprised as it is a good addition which brings distinction and portability.

@clason
Copy link
Member

clason commented Sep 7, 2021

I think users that do not trouble themselves with directories like ~/.cache ~/.config ~/.local/blah-blah won't even notice the difference as they probably don't even have these directories shown in their File Manager (or whatever they using). As for more curious users I'm sure they know their way around system.

I don't think that's a safe assumption -- I for one would consider myself as someone who knows their way around my system, but having neovim files suddenly split over more directories would definitely confuse me.

And it's not like we move user configuration, session data not even supposed to be touched in most cases, let alone pushed to dotfiles repo or whatever.

Yes, but there's possibly other data that is not synced but should be preserved. It's also a question about the plugin ecosystem -- for example, telescope-frecency stores the MRU database there. Is this also state, or should it remain in data?

@clason clason added compatibility compatibility with Vim or older Neovim defaults Nvim defaults for options, colorscheme/theme, autocmds/events, etc. enhancement needs:discussion issue needs attention from an expert, or PR proposes significant changes to architecture or API labels Sep 7, 2021
@etircopyh
Copy link
Contributor Author

but having neovim files suddenly split over more directories would definitely confuse me.

But we're not splitting something important or related to data that supposed to be in $XDG_DATA_HOME, are we? AFAIK session data like *.swp files is not even kept after you successfully save a file. For undodir content to be persistent you have to set undofile as it is disabled by default. So it mostly separates files that nobody would consider editing nor touching, unless for some specific cases. For user that will want to mess with somethings in $XDG_DATA_HOME it's just a clutter.

Yes, but there's possibly other data that is not synced but should be preserved.

As I already said all of this data is temporal by default.

It's also a question about the plugin ecosystem -- for example, telescope-frecency stores the MRU database there. Is this also state, or should it remain in data?

Plugin specific settings and data should be handled by plugin itself, amirite? https://github.com/nvim-telescope/telescope-frecency.nvim#configuration If to change particular plugin defaults it is to be done in plugin's upstream. There's not much n/vim can do about it.

Also, it can be argued whether to put database file to 'data' or to 'state' IMO. But that's slightly off-topic.

@clason
Copy link
Member

clason commented Sep 7, 2021

But we're not splitting something important or related to data that supposed to be in $XDG_DATA_HOME, are we? AFAIK session data like *.swp files is not even kept after you successfully save a file. For undodir content to be persistent you have to set undofile as it is disabled by default. So it mostly separates files that nobody would consider editing nor touching, unless for some specific cases. For user that will want to mess with somethings in $XDG_DATA_HOME it's just a clutter.

My point is not to be too quick to assume what users want...

As I already said all of this data is temporal by default.

Then why isn't it in stdpath('cache')?

Plugin specific settings and data should be handled by plugin itself, amirite? https://github.com/nvim-telescope/telescope-frecency.nvim#configuration If to change particular plugin defaults it is to be done in plugin's upstream. There's not much n/vim can do about it.

Plugins (should) follow Neovim's conventions. If we change, they (have to) change, otherwise it'll be a mess.

Also, it can be argued whether to put database file to 'data' or to 'state' IMO. But that's slightly off-topic.

No, that is exactly the point here: adding this distinction will create confusion, so there should be a clear and sufficient benefit to offset this. And I'm not seeing it yet.

@etircopyh
Copy link
Contributor Author

My point is not to be too quick to assume what users want...

I didn't assume what users want because it's not even possible here. It's as if users cared whether some specific code lies in file filename1.c or in filename2.c. These file is not important enough for users to care. They just logical parts of neovim functional.

Then why isn't it in stdpath('cache')?

$XDG_CACHE_HOME (~/.cache by default) assumed to contain data that is useless enough to delete (cache in other words) at any moment. I saw some people even set XDG_CACHE_HOME to /tmp which is not persistent (like neovim session data can be and should be, sometimes). I'm not sure we're on the same page since you ask questions like this.

Plugins (should) follow Neovim's conventions. If we change, they (have to) change, otherwise it'll be a mess.

It always was a mess, not only for n\vim but for any software with plugin system that's not being supervised by parenting project.

No, that is exactly the point here: adding this distinction will create confusion, so there should be a clear and sufficient benefit to offset this. And I'm not seeing it yet.

What I meant is particular database should be session specific to be placed into XDG_STATE_HOME. Meaning not just any database. @gpanders provided pretty clear description right from the specs, doesn't seem to be confusing at all.

@gpanders
Copy link
Member

gpanders commented Sep 7, 2021

To go back to @justinmk's original question:

The distinction feels pedantic. What is the use-case? What harm is there in storing this data in the "data" dir?

Given that XDG_STATE_HOME is now part of the XDG specification (and assuming Neovim wants to adhere to common standards), it seems likely that we will eventually want to move this data to XDG_STATE_HOME anyway (at some point users will associate "state data" with XDG_STATE_HOME and be surprised that Neovim doesn't use it). So the churn either happens now and we just get it over with, or it happens later.

This also seems especially low-risk given that the files that are being moved are very rarely viewed manually.

I also don't see any problem with having Neovim state data (e.g. swap file, backups, undo history, etc.) in one location and plugin data in another (e.g. XDG_DATA_HOME). Plugins can use either directory (or any arbitrary directory they want, really) and it won't have any impact on Neovim.

@justinmk
Copy link
Member

justinmk commented Sep 7, 2021

This also seems especially low-risk given that the files that are being moved are very rarely viewed manually.

There is some risk in that it's alarming to lose undo info (though obviously it isn't lost, but users might think it is). However, I'm not opposed to this change. But we should wait a bit for user feedback. Maybe have a twitter poll...

I also don't see any problem with having Neovim state data (e.g. swap file, backups, undo history, etc.) in one location and plugin data in another (e.g. XDG_DATA_HOME). Plugins can use either directory (or any arbitrary directory they want, really) and it won't have any impact on Neovim.

This means in practice users would need to carry both dirs anyways. So we need to give clear guidance to plugin authors.

@ruifm
Copy link

ruifm commented Sep 7, 2021

But we should wait a bit for user feedback.

Random user here. I support this change and the reasons are:

  • I like that my tools follow well recognized specs as close as possible. I get that XDG_STATE_HOME is kind of recent but such a change would take a while to reach a release.
    m
  • The more separation the better. I don't like logs, backups,swap files and others hanging around the place where I have my plugins, it makes zero sense to me. If I need to backup my plugins, I would inevitably backup the logs and other ephemeral non essential files.
  • I don't see how this will upset users. Beginners will not care where those files are, they never noticed them and experienced users will end up reading the docs/changelog/breaking changes anyway specially if they move to a new release.

@mjlbach
Copy link
Contributor

mjlbach commented Sep 7, 2021

I don't like logs, backups,swap files and others

Logs currently do not live in XDG_DATA_HOME because I moved them (controversially, which may get reverted) to XDG_CACHE_DIR before XDG_STATE_HOME was a thing.

If we do this, logs should also be moved.

@justinmk
Copy link
Member

justinmk commented Sep 8, 2021

The more separation the better.

Well, except that the XDG dir spec emerged to solve the problem of too much separation :)

If we do this, logs should also be moved.

Hmm, really? The use-case presented in #15583 (comment) is carrying a session around, without the "data" or "cache". btw, wtf goes in XDG_DATA_HOME then? :)

From #15583 (comment)

The $XDG_STATE_HOME contains state data that should persist between (application) restarts, but that is not important or portable enough to the user that it should be stored in $XDG_DATA_HOME.

@etircopyh that description contradicts the "obvious" use-case you described in #15583 (comment) . "Take a session to other devices/setups" implies portable state.

  • undofiles are not portable, they assume a particular filesystem layout
  • swapfiles are not portable for the same reason
  • backupdirs are not portable for the same reason

@justinmk justinmk closed this Sep 8, 2021
@justinmk justinmk reopened this Sep 8, 2021
@mjlbach
Copy link
Contributor

mjlbach commented Sep 8, 2021

@justinmk I was just going off the description in the XDG spec which lists logging/MRU info

    The $XDG_STATE_HOME contains state data that should persist between (application) restarts, but that is not important or portable enough to the user that it should be stored in $XDG_DATA_HOME. It may contain:

    actions history (logs, history, recently used files, …)

    current state of the application that can be reused on a restart (view, layout, open files, undo history, …)

@gpanders
Copy link
Member

gpanders commented Sep 8, 2021

Windows CI is failing functionaltests:

[  ERROR   ] test/functional\options\defaults_spec.lua @ 617: stdpath() returns a String with "state" doesn't expand ~/
test\helpers.lua:73: Expected objects to be the same.
Passed in:
(string) '~\frobnitz\nvim'
Expected:
(string) '~\frobnitz\nvim-data'

You'll also need to modify your commit messages to pass the commit linter. Commits that update or modify the tests should begin with test: and the other commits should begin with feat: (indicating a new feature, i.e. support for XDG_STATE_HOME).

@etircopyh etircopyh force-pushed the stdpaths-xdg-state branch 2 times, most recently from 81616e0 to 96f4bee Compare September 9, 2021 17:16
Copy link
Member

@justinmk justinmk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks like :help stdpath() needs an update to mention "state" and "log"

@etircopyh etircopyh force-pushed the stdpaths-xdg-state branch 3 times, most recently from 9e6d96c to 195f8f0 Compare May 7, 2022 18:33
@etircopyh etircopyh force-pushed the stdpaths-xdg-state branch from 195f8f0 to b063627 Compare May 12, 2022 10:05
justinmk pushed a commit to etircopyh/neovim that referenced this pull request May 12, 2022
See: https://gitlab.freedesktop.org/xdg/xdg-specs/-/commit/4f2884e16db35f2962d9b64312917c81be5cb54b

- Move session persistent data to $XDG_STATE_HOME Change 'directory',
  'backupdir', 'undodir', 'viewdir' and 'shadafile' default location to
  $XDG_STATE_HOME/nvim.
- Move logs to $XDG_STATE_HOME, too.
- Add stdpath('log') support.

Fixes: neovim#14805
@justinmk justinmk force-pushed the stdpaths-xdg-state branch from b063627 to bffff55 Compare May 12, 2022 14:12
data_dirs List Other data directories.
log String Logs directory (for use by plugins too).
state String Session state directory: storage for file
drafts, undo history, shada, etc.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I rearranged this to maintain alphabetical order.

See: https://gitlab.freedesktop.org/xdg/xdg-specs/-/commit/4f2884e16db35f2962d9b64312917c81be5cb54b

- Move session persistent data to $XDG_STATE_HOME Change 'directory',
  'backupdir', 'undodir', 'viewdir' and 'shadafile' default location to
  $XDG_STATE_HOME/nvim.
- Move logs to $XDG_STATE_HOME, too.
- Add stdpath('log') support.

Fixes: neovim#14805
@justinmk justinmk force-pushed the stdpaths-xdg-state branch from bffff55 to 78a1e6b Compare May 12, 2022 14:13
@justinmk justinmk merged commit 78a1e6b into neovim:master May 12, 2022
@justinmk
Copy link
Member

@etircopyh thanks for your persistence here, it increases trust in the result.

I squashed the commits because they were over-granular and I think this fits as a single unit.

@dundargoc
Copy link
Member

The windows jobs are failing.

kmk3 added a commit to kmk3/firejail that referenced this pull request May 12, 2022
Default paths as of neovim 0.7.0:

* backupdir:  $XDG_DATA_HOME/nvim/backup//
* directory:  $XDG_DATA_HOME/nvim/swap//
* undodir:    $XDG_DATA_HOME/nvim/undo//
* viewdir:    $XDG_DATA_HOME/nvim/view//
* shada file: $XDG_DATA_HOME/nvim/shada/main.shada
* log dir:    $XDG_CACHE_HOME/nvim/log

Default paths as of [1]:

* backupdir:  $XDG_STATE_HOME/nvim/backup//
* directory:  $XDG_STATE_HOME/nvim/swap//
* undodir:    $XDG_STATE_HOME/nvim/undo//
* viewdir:    $XDG_STATE_HOME/nvim/view//
* shada file: $XDG_STATE_HOME/nvim/shada/main.shada
* log dir:    $XDG_STATE_HOME/nvim/log

[1] neovim/neovim#15583
justinmk pushed a commit that referenced this pull request May 12, 2022
kraftwerk28 pushed a commit to kraftwerk28/neovim that referenced this pull request Jun 1, 2022
See: https://gitlab.freedesktop.org/xdg/xdg-specs/-/commit/4f2884e16db35f2962d9b64312917c81be5cb54b

- Move session persistent data to $XDG_STATE_HOME Change 'directory',
  'backupdir', 'undodir', 'viewdir' and 'shadafile' default location to
  $XDG_STATE_HOME/nvim.
- Move logs to $XDG_STATE_HOME, too.
- Add stdpath('log') support.

Fixes: neovim#14805
kraftwerk28 pushed a commit to kraftwerk28/neovim that referenced this pull request Jun 1, 2022
bfredl added a commit that referenced this pull request Sep 30, 2022
BREAKING CHANGES
- Remove 'insertmode' 'remap' and 'terse' options
- highlight: Rename attributes to match Vim (#19159)
- highlight: Error on invalid names and allow '.' and '@'
- terminal: Drop winpty, require Windows 10 #18253
- treesitter: Use @foo.bar style highlight groups
- treesitter: Do not merge queries by default (#20105)

FEATURES
- runtime: Enable filetype.lua by default (#19216)
- Add `undo!`
- Add "prerelease" to version dict
- Click support for 'statusline', 'winbar' #18650
- Add preview functionality to user commands
- allow cmdheight=0 (EXPERIMENTAL) #16251
- Stdpath('run'), /tmp/nvim.user/ #18993
- Add 'mousescroll' option (#12355)
- Allow :wincmd to accept a count (#19815)
- Multibuffer preview support for inccommand
- Man: Port to Lua (#19912)
- api: Ui options relevant for remote TUI
- api: Add `nvim_parse_cmd` And `nvim_cmd`
- api: Support handling stdin stream in remote ui
- api: Add `group_name` to `nvim_get_autocmds`
- api: Enable nvim_exec_autocmds to pass arbitrary data (#18613)
- api: Support pattern array for exec_autocmds
- api: Add `unsilent` to command APIs
- api: Add replace_keycodes to nvim_set_keymap (#19598)
- api: Add support for :horizontal modifier
- api: Add "move" to nvim_input_mouse
- api/ui: "ui_watched" option for ui-side extmarks
- build: Add_glob_target runs only on changed files #19070
- checkhealth: Check for slow shell #17829
- defaults: Session data in $XDG_STATE_HOME #15583
- defaults: Search selection by * and # in visual mode (#18538)
- defaults: Nnoremap & :&&<CR> #19365
- defaults: enable mouse by default (set mouse=nvi)  #19290
- diagnostic: Pass diagnostics as data to DiagnosticChanged autocmd (#20173)
- docs: Gen_help_html.lua
- edit: Insert an unsimplified key using CTRL-SHIFT-V
- treesitter: Full support for spelling
- filetype: Convert more patterns to filetype.lua
- filetype: Remove side effects from vim.filetype.match (#18894)
- filetype: Expand environment variables in filetype patterns (#20145)
- fs: Add vim.fs functions: parents() dirname() basename() dir() find() normalize()
- highlight: Implement CurSearch highlight
- highlight: Support scoped @spam.eggs.baked_beans groups
- input: Delay all simplifications
- l10n: Turkish translations #19441
- l10n: Improve zh_CN translations (#19483)
- lsp: Remove capabilities sanitization (#17814)
- lsp: Show feedback on empty hover response (#18308)
- lsp: Options to filter and auto-apply code actions (#18221)
- lsp: Add vim.lsp.buf.format (#18193)
- lsp: Add logging level "OFF" (#18379)
- lsp: Add LspAttach and LspDetach autocommands
- lsp: Add filter to vim.lsp.get_active_clients()
- lsp: Option to reuse_win for jump actions (#18577)
- lsp: Add a start function (#18631)
- lsp: Send didChangeConfiguration after init (#18847)
- lsp: Defaults: tagfunc, omnifunc, formatexpr (#19003, #19677)
- lsp: Allow passing custom list handler to LSP functions that return lists (#19213)
- lsp: Provide feedback if server can't compute rename result (#19546)
- lsp: Add range option to code_action; deprecate range_code_action (#19551)
- lsp: Disable exit_timeout by default (#19672)
- lsp: Add tcp support
- lua: Vim.deprecate() #18320
- lua: Vim.cmd() with kwargs acts like nvim_cmd() #18523
- lua: Allow some vim script functions to run in fast callbacks
- lua: Measure require in --startuptime
- lua: Allow vim.cmd to be indexed (#19238)
- lua: Print source locations of lua callbacks (#19597)
- lua: Add vim.iconv (#18286)
- lua: Vim.ui_attach to get ui events from lua (EXPERIMENTAL)
- man.vim: List command flags in "gO" outline #17558
- mappings: Do not replace existing mapping for simplified form
- mappings: Allow special keys and modifiers in <Cmd> mapping
- mapset: Support restoring "replace_keycodes" and "desc"
- mapset: Support restoring Lua callback (#20024)
- marks: Restore viewport on jump #15831
- nvim_create_user_command: Pass structured modifiers to commands
- pum: Pretend 'mousemoveevent' is set when showing right-click menu
- server: Set $NVIM, unset $NVIM_LISTEN_ADDRESS #11009
- server: Instance "name", store pipes in stdpath(state)
- term: Add support for libvterm >= 0.2
- terminal: Implement <c-\><c-o> for terminal mode
- terminal: Recognize underdouble and undercurl
- terminfo: Bump built-in terminfo entries (#18570)
- treesitter: Allow customizing language symbol name
- treesitter: Add ability to retreive a tree/node given a range
- treesitter: Upstream node methods from nvim-treesitter
- treesitter: Include language in invalid query error (#14053)
- treesitter: Bundle Lua parser and queries
- treesitter: Add viml parser and queries
- treesitter: Add injections
- treesitter: Add vim.treesitter.start(), enable for Lua
- treesitter: Bundle :help parser and queries
- tui: Query terminal for CSI u support (#18181)
- tui: Recognize keypad keys when using kitty keyboard protocol
- tui: Try terminfo for [re]set_cursor_color OSC #19255
- tui: Allow grid and host to disagree on ambiguous-width chars (#19686)
- tui: Recognize sidescroll events (#19992)
- tui: Support 'mousemoveevent'
- ui: Add `'winbar'`
- ui: Clear message history explicitly with msg_history_clear event
- ui: Make right-click menu work properly with ext_multigrid
- ui: Allow to set the highlight namespace per window
- ui: Use msg_grid based implementation for cmdheight=0
- ui-ext: Make 'mousemoveevent' a ui_option
- eval: Make Lua Funcref work as method and in substitute() (#20217)
- eval: Input() support any type for "cancelreturn" in a dict (#19357)

BUG FIXES
- Show autocmd output when F is in shortmess (#18251)
- Has() should preserve v:shell_error #18280
- Suppress "is a directory" messages with shortmess 'F' (#18296)
- Display global statusline correctly with ext_messages
- Correct nlua_wait error message #18867
- Right-click in clickable statusline #19252
- Remote UI may get invalid 'pumblend' value #19379
- Assertion failure when requiring missing module in autocmd
- api: Nvim_eval_statusline should validate input #18347
- api: Check error after getting win/buf handle (#19052)
- api: Check for inclusive buffer line index out of bounds correctly (#19056)
- api: Change default value of 'pattern' in nvim_exec_autocmds (#19115)
- api: Do not switch win/buf if getting option in current win/buf (#19383)
- api: Make nvim_set_hl(ns=0, ...) redraw screen properly
- api: Nvim_set_hl bail out on invalid group name (#20021)
- api: Notify dict watchers on nvim_set_var and vim.g setter
- api/command: Fargs behavior when no arguments are passed (#19862)
- autocmds: Separate command from desc (#18617)
- buffer: Disable buffer-updates before removing from window #18933
- build: Missing definitions for sizeof macros #16393
- build: Only pass -municode if MINGW #19049
- build: Strip trailing newline from variable (#19084)
- build: Don't disable byte precompilation on debug builds
- build: Fails if git is missing #19366
- charclass: Make behavior with empty str match latest Vim (#19749)
- checkhealth: Skip vim.health #18816
- ci: Remove 2000ms blocking wait in many plugin/lsp_spec.lua tests
- cmd: Make :-tabmove work with modifiers (#18447)
- cmdheight=0: Various issues part3 #19816
- cmdline: Fix passing -1 as char
- cmdline: Trigger CmdlineEnter and ModeChanged earlier (#19474)
- cmdline: Do not trigger completion at wrong time (#19920)
- cmdline: Don't send invalid cursor with incsearch and cmdheight=0
- column: Move sign sentinel after inserting/deleting lines (#20400)
- completion: Remove wrong FUNC_ATTR_NONNULL_ALL (#19627)
- diagnostic: Use nvim_exec_autocmds to trigger DiagnosticChanged (#18188)
- diagnostic: Check for negative column value (#18868)
- diagnostic: Remove buf from cache on `BufWipeout` (#20099)
- diagnostic: Populate data key in DiagnosticChanged autocmd in reset (#20207)
- docs: Correct obsolete note about 'writedelay' in dev docs
- docs: Remove internal function from docs
- edit.c: Indentkeys double indent after "!" #12894
- eval: Check for v:lua when calling callback (#19855)
- eval/f_getmatches: Return empty list for invalid win argument (#18893)
- events: Make CursorHold behave as documented
- ex_cmds: Correct flags for :const (#19387)
- exceptions: Restore `did_throw` (#20000)
- exmode: Do not throttle messages when pressing enter to print line
- extmarks: Make virt_lines always start at 0 virtcol
- filetype: Fix and improve filetype patterns
- fillchars: Change fallback after setcellwidths()
- float: Make `screen*()` functions respect floating windows
- float: Fix glitch when making float window with border a split
- float: Fix mouse drag position if float window turned to a split
- folds: Fix fold regression with :move (#18685)
- folds: Fix fold remains when :delete makes buffer empty (#19673)
- ftdetect: Source plugins in autogroup (#18237)
- gen_vimdoc.py: Handle missing luajit
- getchar: Flush screen before doing a blocking wait
- handlers: More specific error messages (#16772)
- health: Correct shada file path #18603
- health: Handle non-existent log file #18610
- highlight: Use ctermbg/fg instead of bg/fg when use_rgb=false #18982
- highlight: Add missing 'nocombine' to nvim_get_hl apis (#19586)
- highlight: Set the window namespace when redrawing statusline
- hl: Set Normal hl group sg_attr value #18820
- hl: Return cterm fg/bg even if they match Normal #18981
- inccommand: Do not try to preview an ambiguous command (#18827)
- inccommand: Avoid crash if callback changes inccommand option (#18830)
- inccommand: Clear cmdpreview state if preview is not shown (#18923)
- inccommand: Skip split window if not enough room #18937
- inccommand: Never preview if parsing command failed (#18944)
- inccommand: Parse the command to check if it is previewable
- inccommand: Deal with unsynced undo (#20041)
- input: Allow Ctrl-C to interrupt a recursive mapping even if mapped (#18885)
- input: Fix macro recording with ALT and special key (#18917)
- input: Use correct grid when restoring cursor for <expr> mapping (#19047)
- input: Do no reinterpret mouse keys with ALT modifiers
- input: Use click number of last click for mouse drag (#20300)
- inspect: Escape identifiers that are lua keywords (#19898)
- keywordprg: Default to :help if set to empty string (#19983)
- l10n: Improve zh_CN and zh_TW translations (#19969)
- log: Back even again
- logging: Skip recursion, fix crash #18764
- logging: Make logmsg() thread-safe again
- logging: Try harder to resolve Nvim "name" #19016
- lsp: Unify progress message handling (#18040)
- lsp: Fix unnecessary buffers being added on empty diagnostics (#18275)
- lsp: Fix infinite loop in resolved_capabilities deprecation message (#18333)
- lsp: Add missing bufnr argument (#18382)
- lsp: Fix rename capability checks and multi client support (#18441)
- lsp: Detach spawned LSP server processes (#18477)
- lsp: Perform client side filtering of code actions (#18392)
- lsp: Only send diagnostics from current buffer in code_action() (#18639)
- lsp: Respect global syntax setting in open float preview (#15225)
- lsp: Include cancellable in progress message table (#18809)
- lsp: Adjust offset encoding in lsp.buf.rename() (#18829)
- lsp: Set buflisted before switching to buffer (#18854)
- lsp: Fix multi client handling in code action (#18869)
- lsp: Small bugs in snippet-parser #18998
- lsp: Pcall nvim_del_augroup_by_name (#19302)
- lsp: Abort pending changes after flush when debouncing (#19314)
- lsp: Don't attach a client in lsp.start() if there is none (#19328)
- lsp: Account for initializing servers in vim.lsp.start (#19329)
- lsp: Move augroup define to if statement (#19406)
- lsp: Set workspace.configuration capability (#19548)
- lsp: Send didOpen if name changes on write (#19583)
- lsp: Prevent unexpected position jumps (#19370)
- lsp: Avoid  ^M character in hover window on Windows (#19640)
- lsp: Set end_col in formatexpr (#19676)
- lsp: Handle multiple clients with incremental sync (#19658)
- lsp: Fix some type annotations in lsp.rpc (#19714)
- lsp: Avoid pipe leaks if lsp cmd isn't executable (#19717)
- lsp: Handle nil client in onexit callback (#19722)
- lsp: Fix nil value error in get_group (#19735)
- lsp: Clean the diagnostic cache when buffer delete (#19449)
- lsp: When buffer detach remove buffer from client attached buffers (#20081)
- lsp: Schedule removal of client object (#20148)
- lsp: Support `false` result in handlers (#20252)
- lsp: Out of bounds error in lsp.util.apply_text_edits (#20137)
- lsp: Use correct function name in deprecated message (#20308)
- lsp: Create missing directory before creating file (#19835)
- lua: Don't mutate opts parameter of vim.keymap.del (#18227)
- lua: Stop pending highlight.on_yank timer, if any (#18824)
- lua: Highlight.on_yank can close timer in twice #18976
- lua: Clear got_int when calling vim.on_key() callback (#18979)
- lua: Don't leak memory on error
- lua: Double entries in :lua completion #19410
- lua: Make it possible to cancel vim.wait() with Ctrl-C (#19217)
- lua: Make ui_attach()/ui_detach() take effect immediately (#20037)
- lua: Make vim.str_utfindex and vim.str_byteindex handle NUL bytes
- lua: Free vim.ui_attach callback before lua close (#20205)
- lua: Fix architecture-dependent behavior in usercmd "reg" (#20384)
- mac: Use same $LANG fallback mechanism as Vim
- mac: Add CoreServices to flake.nix #18358
- man.vim: Q in "$MANPAGER mode" does not quit #18443
- maparg: Remove double allocation (#20033)
- mappings: Fix double-free when unmapping simplifiable Lua mapping
- mapset: Remove existing abbreviation of same lhs (#20320)
- mark: Set mark fnum from buffer (#19195)
- mark: Mark without a view restores at topline #19224
- mark: Fix unexpected cursor movements (#19253)
- mark: Give correct error message when mark is in another buffer (#19454)
- menu: Make :menu still print header when there are no menus
- messages: Add color when showing nvim_echo in :messages history
- messages: Do not crash on cmdheight=0 and g< redisplay
- messages: Validate msg_grid before silent! message with cmdheight=0
- mksession: Don't store floats in session #18635
- mouse: Click on global statusline with splits (#19390)
- mouse: Fix using uninitialized memory with K_MOUSEMOVE (#19480)
- mpack: Make sure a `bool` always is a `bool`
- normal: Fix segfault with bracket command jumping to a mark
- options: Properly free string options (#19510)
- options: Mark `winhighlight` as list style  (#19477)
- packaging: Remove excess forward slash in Wix Patch (#18121)
- paste: Ignore mappings in Cmdline mode (#18114)
- path: Path_is_url returns false for "foo:/" #19797
- powershell: Filter ":!" commands with args #19268
- pum: Make right drag in anchor grid to select work in multigrid UI (#19382)
- query: Fix unnatural order for inherits in treesitter queries (#20298)
- redraw: Make sure :redraw! redraws command line
- redraw: Handle switching to a tabpage with larger p_ch value
- redraw: Avoid unnecessary redraws and glitches with floats+messages
- redraw: Make redrawdebug=nodelta handle all the cases
- rpc: Break nvim_error_event feedback loop between two nvim instances
- runtime/genvimvim: Omit s[ubstitute] from vimCommand #18480
- screen: Restart win_update() if a decor provider changes signcols (#18768)
- screen: Check for col instead of vcol when drawing fold (#19572)
- session: Respect sessionoptions=terminal #19497
- shared: Avoid indexing unindexable values in vim.tbl_get() (#18337)
- signs: Priority of extmark signs (#19718)
- source: Make changing 'shellslash' change expand() result
- source: Fix expand('<sfile>') no longer works for Lua
- spell: Make setting 'encoding' clear word list
- spell: Correct spell move behavior without "noplainbuffer" (#20386)
- startup: Nvim with --clean should not load user rplugins
- substitute: Subtract number of backslashes later
- tabpage: Check if ROWS_AVAIL changed for resize (#19620)
- terminal: Invalid pointer comparison #18453
- terminal: Do not trim whitespace that is actually in the terminal (#16423)
- terminal: Scrollback delete lines immediately #18832
- terminal: Coverity USE_AFTER_FREE #18978
- terminal: Crash if TermClose deletes own buffer #19222
- terminal: Avoid reading over the end of cell.chars (#19580)
- terminal: Skip aucmd_win when checking terminal size (#19668)
- terminal: Adopt altscreen test for libvterm 0.2 changes
- terminfo: Disable smglr for vtpcon and conemu (#18855)
- termopen: Avoid ambiguity in URI when CWD is root dir (#16988)
- tests: Fix some screen.lua warnings
- tests: Fix some issues with ui/inccommand_spec.lua causing slowness
- tests: Unreliable parser_spec #18911
- tests: Check for EOF on exit of nvim properly
- tests: Missing clear() #18927
- tests: Remove misleading $TEST_PATH segment #19050
- tests: Remove irrelevant usage of display-=msgsep
- tests: Use pending_c_parser when needed
- tests: Indicate in test logs when nvim exit times out
- tmpdir: Invalid tempname() if username has slashes #19323
- treesitter: Create new parser if language is not the same as cached parser (#18149)
- treesitter: Bump match limit up
- treesitter: Offset directive associates range with capture (#18276)
- treesitter: Correct region for string parser (#18794)
- treesitter: New iter if folded
- treesitter: Don't error when node argument of predicate is nil (#19355)
- treesitter: Free memory on removing parser (#19933)
- treesitter: More efficient node:root()
- treesitter: Make it get_captures_at_position
- treesitter: Do not link @error by default
- treesitter: Don't support legacy syntax in start()
- treesitter: Use the right loading order for base queries (#20117)
- treesitter: Prevent endless loop on self-inheritence
- treesitter: Return full metadata for get_captures_at_position (#20203)
- ts: Do not clobber spelloptions (#20095)
- tui: Update modifyOtherKeys reporting (#18158)
- tui: Disable extended keys before exiting alternate screen (#18318)
- tui: Piping nodejs to nvim breaks input handling #18932
- tui: Resize at startup #17795
- tui: Add fixups for hterm family #19078
- tui: Handle padding requirements for visual bell (#20238)
- ui: Require window-local value to show winbar on floating windows (#18773)
- ui: Do not call showmode() when setting window height (#18969)
- ui: Set redraw_cmdline when setting window height (#19630)
- ui: Don't allow decor provider with ns_id==0
- ui: Ui compositor does not correctly free event callbacks
- ui: Allow redrawing statusline when msgsep is used (#20337)
- ui: Redraw end of buffer if last line is modified (#20354)
- unittests: Coredump when running unit tests #18663
- usercmd: Also check for whitespace after escaped character (#19942)
- version.c: Mark N/A vim patches #18587
- vim.ui.input: Accept nil or empty "opts"  #19109
- window: Close floats first when closing buffer in other tab (#20284)
- window: Fix equalization with cmdheight=0 (#20369)
- windows: Stdpath("state") => "nvim-data" #18546
- windows: Exepath, stdpath return wrong slashes #19111
- winhl: Do not crash when unsetting winhl in just opened window
- Make :undo! notify buffer update callbacks (#20344)
- eval: Make Vim functions return inner window width and height (#19743)

BUILD SYSTEM
- Bump Doxyfile to minimum required version 1.9.0 #18118
- Bump msgpack to 4.0.0
- Enable EXITFREE on Debug builds (#17783)
- Add formatting targets for c and lua files (#19488)
- clang-format: Align with project style #18192
- clint: Remove all python2-isms with pyupgrade
- clint: Remove "function size is too large" warning
- clint: Remove rules for includes, whitespace, tabs #18611
- cmake: Simplify and speed up the uninstall target
- cmake: Simplify def_cmd_target function
- cmake: Use glob_wrapper instead of file(GLOB in main CMakeLists
- cmake: Fix static `libintl` test on macOS
- deps: Bump LuaJIT, Luv and libuv
- deps: Support universal builds on macOS
- deps: Bump tree-sitter to v0.20.7 (#20067)
- deps: Bump tree-sitter parsers
- deps: Bump required libvterm to v0.3 (#20222)
- deps: Require libtermkey version 0.22
- deps: update neovim-qt, win32tools.zip

PERFORMANCE
- Only redraw for CurSearch when it is currently in use
- highlight: Allocate permanent names in an arena for fun and cache locality
- highlight: Use binary search to lookup RGB color names
- map: Visit only one hash bucket instead of all, like an actual hash table
- memory: Get rid of extraneous heap allocations
- memory: implement arena memory allocation with a shared freelist
- memory: Use an arena for RPC decoding and some API return values
- messages: Don't call ui_flush() per message line in various places
- treesitter: Use a reuse list for query cursors
- ui: Reduce allocations when encoding and decoding "redraw" events
- ui: Avoid ui_flush() work in headless mode

REFACTOR
- checkhealth: Rename to vim.health, move logic to Lua #18720
- Add pure attribute to pure functions
- Replace char_u variables and functions with char
- Enable -Wconversion warning for all Nvim source files
- Add warnings for deprecated functions (#18662)
- Change type of linenr_T from long to int32_t
- Use nvim_get/set_option_value for vim.{b,w}o
- Remove functions marked for deprecation in 0.8 (#19299)
- Rename function prefix mb to the more accurate utf_cp (#19590)
- Remove some unused includes
- Change remaining sourcing_name/sourcing_lnum to exestack
- Change FALSE/TRUE to false/true
- api: Use a hashy hash for looking up api method and event names
- api: Use a unpacker based on libmpack instead of msgpack-c
- api: restructure api/vim.c and api/private/helpers.c code in separate files
- api: Remove redundant fields of CmdParseInfo
- aucmd: Call define_autocmd() directly for default autocmds
- ci: Cleanup release.yml #19132
- cmd: Format do_one_cmd()
- cmd: Hoist out some code into functions
- cmd: Unify execute_cmd with do_one_cmd
- decor: Use decor levels properly
- drawline.c: Factor out utf8 multibyte check
- eval: Use Hashy McHashFace instead of gperf
- eval.c: Resolve all clint issues (#19774)
- eval/funcs.c: Resolve all clint errors
- events: Remove unnecessary fudging of updating_screen
- ex_cd: Add an early return to fix clint warning
- ex_docmd.c: Resolve most clint errors (#19775)
- filetype: Allow vim.filetype.match to accept buf and filename (#19114)
- highlight: Make hlattrs2dict always use pre-allocated dict
- log: Simplify log_path_init #18898
- log: Use msg_schedule_semsg #18950
- lsp: Remove redundant client cleanup (#18744)
- lsp: Make the use of local aliases more consistent
- lsp: Use autocmd api (#19407)
- lsp: Factor out read_loop function
- lsp: Encapsulate rpc uv handle
- lsp: Extract rpc client from rpc.start
- lua: Replace hard-coded gsub with vim.pesc() (#18407)
- lua: Reformat with stylua 0.14.0 (#19264)
- lua: Git-blame-ignore stylua update PR (#19273)
- lua: Replace vim.cmd use with API calls (#19283)
- map: Simplify free_all_mem handling
- map: Statically initialize maphash array
- map: Simplify add_map params
- normal: Convert function comments to doxygen format
- object: Get rid of redundant FIXED_TEMP_ARRAY
- ops: Doxygen docstrings #17743
- option: DRY get/set option value #19038
- plines: Use a struct for chartabsize state
- provider: Use list comprehension #19027
- regexp_nfa.c: Match where Vim calls fopen() (#18778)
- runtime: Convert dist#ft functions to lua (#18247)
- runtime: Convert more dist#ft functions to lua (#18430)
- runtime: Convert the remaining dist#ft functions to lua (#18623)
- runtime: Port remaining patterns from filetype.vim to filetype.lua (#18814)
- runtime: Refactor filetype.lua (#18813)
- runtime: Port scripts.vim to lua (#18710)
- setcellwidths: Use TV_LIST_ITEM_NEXT properly
- signs: Handle non-sign attrs separately (#19784)
- tests: Introduce testprg()
- treesitter: Get_{nodes,captures}_at_{position,cursor}
- typval: Change FC_CFUNC abstraction into FC_LUAREF
- ui: Simplify stdin handling
- uncrustify: Format all c code under /src/nvim/
- vim.opt: Remove del arg
- vim.opt: Unify vim.bo/wo building
- vim.opt: Optimize append/prepend/remove
- Format runtime with stylua
@DusanLesan
Copy link

@etircopyh I lost a lot of time debugging my configs to see why nvim started making a new directory in my .local
I do not use XDG_STATE_HOME so I just set it as $HOME/.local/share but can I set storage location just for nvim in its configs?

@justinmk
Copy link
Member

justinmk commented Oct 1, 2022

but can I set storage location just for nvim in its configs?

Yes, by setting the various XDG_ env vars documented at :help standard-path.

@sisrfeng
Copy link
Contributor

sisrfeng commented Oct 6, 2022

but can I set storage location just for nvim in its configs?

Yes, by setting the various XDG_ env vars documented at :help standard-path.

This answer suggests users to set XDG_STATE_HOME, but what @DusanLesan wants is something only affect nvim, right?

@sisrfeng
Copy link
Contributor

sisrfeng commented Oct 6, 2022

@etircopyh I lost a lot of time debugging my configs to see why nvim started making a new directory in my .local I do not use XDG_STATE_HOME so I just set it as $HOME/.local/share but can I set storage location just for nvim in its configs?

This lesson tells us the necessity of following this issue #14090.
(I can not find the message in the release note of nvim 0.8)
(update: I find it in features: defaults: Session data in $XDG_STATE_HOME )

@zeertzjq zeertzjq removed the needs:discussion issue needs attention from an expert, or PR proposes significant changes to architecture or API label Oct 6, 2022
lvimuser pushed a commit to lvimuser/neovim that referenced this pull request Oct 6, 2022
BREAKING CHANGES
- Remove 'insertmode' 'remap' and 'terse' options
- highlight: Rename attributes to match Vim (neovim#19159)
- highlight: Error on invalid names and allow '.' and '@'
- terminal: Drop winpty, require Windows 10 neovim#18253
- treesitter: Use @foo.bar style highlight groups
- treesitter: Do not merge queries by default (neovim#20105)

FEATURES
- runtime: Enable filetype.lua by default (neovim#19216)
- Add `undo!`
- Add "prerelease" to version dict
- Click support for 'statusline', 'winbar' neovim#18650
- Add preview functionality to user commands
- allow cmdheight=0 (EXPERIMENTAL) neovim#16251
- Stdpath('run'), /tmp/nvim.user/ neovim#18993
- Add 'mousescroll' option (neovim#12355)
- Allow :wincmd to accept a count (neovim#19815)
- Multibuffer preview support for inccommand
- Man: Port to Lua (neovim#19912)
- api: Ui options relevant for remote TUI
- api: Add `nvim_parse_cmd` And `nvim_cmd`
- api: Support handling stdin stream in remote ui
- api: Add `group_name` to `nvim_get_autocmds`
- api: Enable nvim_exec_autocmds to pass arbitrary data (neovim#18613)
- api: Support pattern array for exec_autocmds
- api: Add `unsilent` to command APIs
- api: Add replace_keycodes to nvim_set_keymap (neovim#19598)
- api: Add support for :horizontal modifier
- api: Add "move" to nvim_input_mouse
- api/ui: "ui_watched" option for ui-side extmarks
- build: Add_glob_target runs only on changed files neovim#19070
- checkhealth: Check for slow shell neovim#17829
- defaults: Session data in $XDG_STATE_HOME neovim#15583
- defaults: Search selection by * and # in visual mode (neovim#18538)
- defaults: Nnoremap & :&&<CR> neovim#19365
- defaults: enable mouse by default (set mouse=nvi)  neovim#19290
- diagnostic: Pass diagnostics as data to DiagnosticChanged autocmd (neovim#20173)
- docs: Gen_help_html.lua
- edit: Insert an unsimplified key using CTRL-SHIFT-V
- treesitter: Full support for spelling
- filetype: Convert more patterns to filetype.lua
- filetype: Remove side effects from vim.filetype.match (neovim#18894)
- filetype: Expand environment variables in filetype patterns (neovim#20145)
- fs: Add vim.fs functions: parents() dirname() basename() dir() find() normalize()
- highlight: Implement CurSearch highlight
- highlight: Support scoped @spam.eggs.baked_beans groups
- input: Delay all simplifications
- l10n: Turkish translations neovim#19441
- l10n: Improve zh_CN translations (neovim#19483)
- lsp: Remove capabilities sanitization (neovim#17814)
- lsp: Show feedback on empty hover response (neovim#18308)
- lsp: Options to filter and auto-apply code actions (neovim#18221)
- lsp: Add vim.lsp.buf.format (neovim#18193)
- lsp: Add logging level "OFF" (neovim#18379)
- lsp: Add LspAttach and LspDetach autocommands
- lsp: Add filter to vim.lsp.get_active_clients()
- lsp: Option to reuse_win for jump actions (neovim#18577)
- lsp: Add a start function (neovim#18631)
- lsp: Send didChangeConfiguration after init (neovim#18847)
- lsp: Defaults: tagfunc, omnifunc, formatexpr (neovim#19003, neovim#19677)
- lsp: Allow passing custom list handler to LSP functions that return lists (neovim#19213)
- lsp: Provide feedback if server can't compute rename result (neovim#19546)
- lsp: Add range option to code_action; deprecate range_code_action (neovim#19551)
- lsp: Disable exit_timeout by default (neovim#19672)
- lsp: Add tcp support
- lua: Vim.deprecate() neovim#18320
- lua: Vim.cmd() with kwargs acts like nvim_cmd() neovim#18523
- lua: Allow some vim script functions to run in fast callbacks
- lua: Measure require in --startuptime
- lua: Allow vim.cmd to be indexed (neovim#19238)
- lua: Print source locations of lua callbacks (neovim#19597)
- lua: Add vim.iconv (neovim#18286)
- lua: Vim.ui_attach to get ui events from lua (EXPERIMENTAL)
- man.vim: List command flags in "gO" outline neovim#17558
- mappings: Do not replace existing mapping for simplified form
- mappings: Allow special keys and modifiers in <Cmd> mapping
- mapset: Support restoring "replace_keycodes" and "desc"
- mapset: Support restoring Lua callback (neovim#20024)
- marks: Restore viewport on jump neovim#15831
- nvim_create_user_command: Pass structured modifiers to commands
- pum: Pretend 'mousemoveevent' is set when showing right-click menu
- server: Set $NVIM, unset $NVIM_LISTEN_ADDRESS neovim#11009
- server: Instance "name", store pipes in stdpath(state)
- term: Add support for libvterm >= 0.2
- terminal: Implement <c-\><c-o> for terminal mode
- terminal: Recognize underdouble and undercurl
- terminfo: Bump built-in terminfo entries (neovim#18570)
- treesitter: Allow customizing language symbol name
- treesitter: Add ability to retreive a tree/node given a range
- treesitter: Upstream node methods from nvim-treesitter
- treesitter: Include language in invalid query error (neovim#14053)
- treesitter: Bundle Lua parser and queries
- treesitter: Add viml parser and queries
- treesitter: Add injections
- treesitter: Add vim.treesitter.start(), enable for Lua
- treesitter: Bundle :help parser and queries
- tui: Query terminal for CSI u support (neovim#18181)
- tui: Recognize keypad keys when using kitty keyboard protocol
- tui: Try terminfo for [re]set_cursor_color OSC neovim#19255
- tui: Allow grid and host to disagree on ambiguous-width chars (neovim#19686)
- tui: Recognize sidescroll events (neovim#19992)
- tui: Support 'mousemoveevent'
- ui: Add `'winbar'`
- ui: Clear message history explicitly with msg_history_clear event
- ui: Make right-click menu work properly with ext_multigrid
- ui: Allow to set the highlight namespace per window
- ui: Use msg_grid based implementation for cmdheight=0
- ui-ext: Make 'mousemoveevent' a ui_option
- eval: Make Lua Funcref work as method and in substitute() (neovim#20217)
- eval: Input() support any type for "cancelreturn" in a dict (neovim#19357)

BUG FIXES
- Show autocmd output when F is in shortmess (neovim#18251)
- Has() should preserve v:shell_error neovim#18280
- Suppress "is a directory" messages with shortmess 'F' (neovim#18296)
- Display global statusline correctly with ext_messages
- Correct nlua_wait error message neovim#18867
- Right-click in clickable statusline neovim#19252
- Remote UI may get invalid 'pumblend' value neovim#19379
- Assertion failure when requiring missing module in autocmd
- api: Nvim_eval_statusline should validate input neovim#18347
- api: Check error after getting win/buf handle (neovim#19052)
- api: Check for inclusive buffer line index out of bounds correctly (neovim#19056)
- api: Change default value of 'pattern' in nvim_exec_autocmds (neovim#19115)
- api: Do not switch win/buf if getting option in current win/buf (neovim#19383)
- api: Make nvim_set_hl(ns=0, ...) redraw screen properly
- api: Nvim_set_hl bail out on invalid group name (neovim#20021)
- api: Notify dict watchers on nvim_set_var and vim.g setter
- api/command: Fargs behavior when no arguments are passed (neovim#19862)
- autocmds: Separate command from desc (neovim#18617)
- buffer: Disable buffer-updates before removing from window neovim#18933
- build: Missing definitions for sizeof macros neovim#16393
- build: Only pass -municode if MINGW neovim#19049
- build: Strip trailing newline from variable (neovim#19084)
- build: Don't disable byte precompilation on debug builds
- build: Fails if git is missing neovim#19366
- charclass: Make behavior with empty str match latest Vim (neovim#19749)
- checkhealth: Skip vim.health neovim#18816
- ci: Remove 2000ms blocking wait in many plugin/lsp_spec.lua tests
- cmd: Make :-tabmove work with modifiers (neovim#18447)
- cmdheight=0: Various issues part3 neovim#19816
- cmdline: Fix passing -1 as char
- cmdline: Trigger CmdlineEnter and ModeChanged earlier (neovim#19474)
- cmdline: Do not trigger completion at wrong time (neovim#19920)
- cmdline: Don't send invalid cursor with incsearch and cmdheight=0
- column: Move sign sentinel after inserting/deleting lines (neovim#20400)
- completion: Remove wrong FUNC_ATTR_NONNULL_ALL (neovim#19627)
- diagnostic: Use nvim_exec_autocmds to trigger DiagnosticChanged (neovim#18188)
- diagnostic: Check for negative column value (neovim#18868)
- diagnostic: Remove buf from cache on `BufWipeout` (neovim#20099)
- diagnostic: Populate data key in DiagnosticChanged autocmd in reset (neovim#20207)
- docs: Correct obsolete note about 'writedelay' in dev docs
- docs: Remove internal function from docs
- edit.c: Indentkeys double indent after "!" neovim#12894
- eval: Check for v:lua when calling callback (neovim#19855)
- eval/f_getmatches: Return empty list for invalid win argument (neovim#18893)
- events: Make CursorHold behave as documented
- ex_cmds: Correct flags for :const (neovim#19387)
- exceptions: Restore `did_throw` (neovim#20000)
- exmode: Do not throttle messages when pressing enter to print line
- extmarks: Make virt_lines always start at 0 virtcol
- filetype: Fix and improve filetype patterns
- fillchars: Change fallback after setcellwidths()
- float: Make `screen*()` functions respect floating windows
- float: Fix glitch when making float window with border a split
- float: Fix mouse drag position if float window turned to a split
- folds: Fix fold regression with :move (neovim#18685)
- folds: Fix fold remains when :delete makes buffer empty (neovim#19673)
- ftdetect: Source plugins in autogroup (neovim#18237)
- gen_vimdoc.py: Handle missing luajit
- getchar: Flush screen before doing a blocking wait
- handlers: More specific error messages (neovim#16772)
- health: Correct shada file path neovim#18603
- health: Handle non-existent log file neovim#18610
- highlight: Use ctermbg/fg instead of bg/fg when use_rgb=false neovim#18982
- highlight: Add missing 'nocombine' to nvim_get_hl apis (neovim#19586)
- highlight: Set the window namespace when redrawing statusline
- hl: Set Normal hl group sg_attr value neovim#18820
- hl: Return cterm fg/bg even if they match Normal neovim#18981
- inccommand: Do not try to preview an ambiguous command (neovim#18827)
- inccommand: Avoid crash if callback changes inccommand option (neovim#18830)
- inccommand: Clear cmdpreview state if preview is not shown (neovim#18923)
- inccommand: Skip split window if not enough room neovim#18937
- inccommand: Never preview if parsing command failed (neovim#18944)
- inccommand: Parse the command to check if it is previewable
- inccommand: Deal with unsynced undo (neovim#20041)
- input: Allow Ctrl-C to interrupt a recursive mapping even if mapped (neovim#18885)
- input: Fix macro recording with ALT and special key (neovim#18917)
- input: Use correct grid when restoring cursor for <expr> mapping (neovim#19047)
- input: Do no reinterpret mouse keys with ALT modifiers
- input: Use click number of last click for mouse drag (neovim#20300)
- inspect: Escape identifiers that are lua keywords (neovim#19898)
- keywordprg: Default to :help if set to empty string (neovim#19983)
- l10n: Improve zh_CN and zh_TW translations (neovim#19969)
- log: Back even again
- logging: Skip recursion, fix crash neovim#18764
- logging: Make logmsg() thread-safe again
- logging: Try harder to resolve Nvim "name" neovim#19016
- lsp: Unify progress message handling (neovim#18040)
- lsp: Fix unnecessary buffers being added on empty diagnostics (neovim#18275)
- lsp: Fix infinite loop in resolved_capabilities deprecation message (neovim#18333)
- lsp: Add missing bufnr argument (neovim#18382)
- lsp: Fix rename capability checks and multi client support (neovim#18441)
- lsp: Detach spawned LSP server processes (neovim#18477)
- lsp: Perform client side filtering of code actions (neovim#18392)
- lsp: Only send diagnostics from current buffer in code_action() (neovim#18639)
- lsp: Respect global syntax setting in open float preview (neovim#15225)
- lsp: Include cancellable in progress message table (neovim#18809)
- lsp: Adjust offset encoding in lsp.buf.rename() (neovim#18829)
- lsp: Set buflisted before switching to buffer (neovim#18854)
- lsp: Fix multi client handling in code action (neovim#18869)
- lsp: Small bugs in snippet-parser neovim#18998
- lsp: Pcall nvim_del_augroup_by_name (neovim#19302)
- lsp: Abort pending changes after flush when debouncing (neovim#19314)
- lsp: Don't attach a client in lsp.start() if there is none (neovim#19328)
- lsp: Account for initializing servers in vim.lsp.start (neovim#19329)
- lsp: Move augroup define to if statement (neovim#19406)
- lsp: Set workspace.configuration capability (neovim#19548)
- lsp: Send didOpen if name changes on write (neovim#19583)
- lsp: Prevent unexpected position jumps (neovim#19370)
- lsp: Avoid  ^M character in hover window on Windows (neovim#19640)
- lsp: Set end_col in formatexpr (neovim#19676)
- lsp: Handle multiple clients with incremental sync (neovim#19658)
- lsp: Fix some type annotations in lsp.rpc (neovim#19714)
- lsp: Avoid pipe leaks if lsp cmd isn't executable (neovim#19717)
- lsp: Handle nil client in onexit callback (neovim#19722)
- lsp: Fix nil value error in get_group (neovim#19735)
- lsp: Clean the diagnostic cache when buffer delete (neovim#19449)
- lsp: When buffer detach remove buffer from client attached buffers (neovim#20081)
- lsp: Schedule removal of client object (neovim#20148)
- lsp: Support `false` result in handlers (neovim#20252)
- lsp: Out of bounds error in lsp.util.apply_text_edits (neovim#20137)
- lsp: Use correct function name in deprecated message (neovim#20308)
- lsp: Create missing directory before creating file (neovim#19835)
- lua: Don't mutate opts parameter of vim.keymap.del (neovim#18227)
- lua: Stop pending highlight.on_yank timer, if any (neovim#18824)
- lua: Highlight.on_yank can close timer in twice neovim#18976
- lua: Clear got_int when calling vim.on_key() callback (neovim#18979)
- lua: Don't leak memory on error
- lua: Double entries in :lua completion neovim#19410
- lua: Make it possible to cancel vim.wait() with Ctrl-C (neovim#19217)
- lua: Make ui_attach()/ui_detach() take effect immediately (neovim#20037)
- lua: Make vim.str_utfindex and vim.str_byteindex handle NUL bytes
- lua: Free vim.ui_attach callback before lua close (neovim#20205)
- lua: Fix architecture-dependent behavior in usercmd "reg" (neovim#20384)
- mac: Use same $LANG fallback mechanism as Vim
- mac: Add CoreServices to flake.nix neovim#18358
- man.vim: Q in "$MANPAGER mode" does not quit neovim#18443
- maparg: Remove double allocation (neovim#20033)
- mappings: Fix double-free when unmapping simplifiable Lua mapping
- mapset: Remove existing abbreviation of same lhs (neovim#20320)
- mark: Set mark fnum from buffer (neovim#19195)
- mark: Mark without a view restores at topline neovim#19224
- mark: Fix unexpected cursor movements (neovim#19253)
- mark: Give correct error message when mark is in another buffer (neovim#19454)
- menu: Make :menu still print header when there are no menus
- messages: Add color when showing nvim_echo in :messages history
- messages: Do not crash on cmdheight=0 and g< redisplay
- messages: Validate msg_grid before silent! message with cmdheight=0
- mksession: Don't store floats in session neovim#18635
- mouse: Click on global statusline with splits (neovim#19390)
- mouse: Fix using uninitialized memory with K_MOUSEMOVE (neovim#19480)
- mpack: Make sure a `bool` always is a `bool`
- normal: Fix segfault with bracket command jumping to a mark
- options: Properly free string options (neovim#19510)
- options: Mark `winhighlight` as list style  (neovim#19477)
- packaging: Remove excess forward slash in Wix Patch (neovim#18121)
- paste: Ignore mappings in Cmdline mode (neovim#18114)
- path: Path_is_url returns false for "foo:/" neovim#19797
- powershell: Filter ":!" commands with args neovim#19268
- pum: Make right drag in anchor grid to select work in multigrid UI (neovim#19382)
- query: Fix unnatural order for inherits in treesitter queries (neovim#20298)
- redraw: Make sure :redraw! redraws command line
- redraw: Handle switching to a tabpage with larger p_ch value
- redraw: Avoid unnecessary redraws and glitches with floats+messages
- redraw: Make redrawdebug=nodelta handle all the cases
- rpc: Break nvim_error_event feedback loop between two nvim instances
- runtime/genvimvim: Omit s[ubstitute] from vimCommand neovim#18480
- screen: Restart win_update() if a decor provider changes signcols (neovim#18768)
- screen: Check for col instead of vcol when drawing fold (neovim#19572)
- session: Respect sessionoptions=terminal neovim#19497
- shared: Avoid indexing unindexable values in vim.tbl_get() (neovim#18337)
- signs: Priority of extmark signs (neovim#19718)
- source: Make changing 'shellslash' change expand() result
- source: Fix expand('<sfile>') no longer works for Lua
- spell: Make setting 'encoding' clear word list
- spell: Correct spell move behavior without "noplainbuffer" (neovim#20386)
- startup: Nvim with --clean should not load user rplugins
- substitute: Subtract number of backslashes later
- tabpage: Check if ROWS_AVAIL changed for resize (neovim#19620)
- terminal: Invalid pointer comparison neovim#18453
- terminal: Do not trim whitespace that is actually in the terminal (neovim#16423)
- terminal: Scrollback delete lines immediately neovim#18832
- terminal: Coverity USE_AFTER_FREE neovim#18978
- terminal: Crash if TermClose deletes own buffer neovim#19222
- terminal: Avoid reading over the end of cell.chars (neovim#19580)
- terminal: Skip aucmd_win when checking terminal size (neovim#19668)
- terminal: Adopt altscreen test for libvterm 0.2 changes
- terminfo: Disable smglr for vtpcon and conemu (neovim#18855)
- termopen: Avoid ambiguity in URI when CWD is root dir (neovim#16988)
- tests: Fix some screen.lua warnings
- tests: Fix some issues with ui/inccommand_spec.lua causing slowness
- tests: Unreliable parser_spec neovim#18911
- tests: Check for EOF on exit of nvim properly
- tests: Missing clear() neovim#18927
- tests: Remove misleading $TEST_PATH segment neovim#19050
- tests: Remove irrelevant usage of display-=msgsep
- tests: Use pending_c_parser when needed
- tests: Indicate in test logs when nvim exit times out
- tmpdir: Invalid tempname() if username has slashes neovim#19323
- treesitter: Create new parser if language is not the same as cached parser (neovim#18149)
- treesitter: Bump match limit up
- treesitter: Offset directive associates range with capture (neovim#18276)
- treesitter: Correct region for string parser (neovim#18794)
- treesitter: New iter if folded
- treesitter: Don't error when node argument of predicate is nil (neovim#19355)
- treesitter: Free memory on removing parser (neovim#19933)
- treesitter: More efficient node:root()
- treesitter: Make it get_captures_at_position
- treesitter: Do not link @error by default
- treesitter: Don't support legacy syntax in start()
- treesitter: Use the right loading order for base queries (neovim#20117)
- treesitter: Prevent endless loop on self-inheritence
- treesitter: Return full metadata for get_captures_at_position (neovim#20203)
- ts: Do not clobber spelloptions (neovim#20095)
- tui: Update modifyOtherKeys reporting (neovim#18158)
- tui: Disable extended keys before exiting alternate screen (neovim#18318)
- tui: Piping nodejs to nvim breaks input handling neovim#18932
- tui: Resize at startup neovim#17795
- tui: Add fixups for hterm family neovim#19078
- tui: Handle padding requirements for visual bell (neovim#20238)
- ui: Require window-local value to show winbar on floating windows (neovim#18773)
- ui: Do not call showmode() when setting window height (neovim#18969)
- ui: Set redraw_cmdline when setting window height (neovim#19630)
- ui: Don't allow decor provider with ns_id==0
- ui: Ui compositor does not correctly free event callbacks
- ui: Allow redrawing statusline when msgsep is used (neovim#20337)
- ui: Redraw end of buffer if last line is modified (neovim#20354)
- unittests: Coredump when running unit tests neovim#18663
- usercmd: Also check for whitespace after escaped character (neovim#19942)
- version.c: Mark N/A vim patches neovim#18587
- vim.ui.input: Accept nil or empty "opts"  neovim#19109
- window: Close floats first when closing buffer in other tab (neovim#20284)
- window: Fix equalization with cmdheight=0 (neovim#20369)
- windows: Stdpath("state") => "nvim-data" neovim#18546
- windows: Exepath, stdpath return wrong slashes neovim#19111
- winhl: Do not crash when unsetting winhl in just opened window
- Make :undo! notify buffer update callbacks (neovim#20344)
- eval: Make Vim functions return inner window width and height (neovim#19743)

BUILD SYSTEM
- Bump Doxyfile to minimum required version 1.9.0 neovim#18118
- Bump msgpack to 4.0.0
- Enable EXITFREE on Debug builds (neovim#17783)
- Add formatting targets for c and lua files (neovim#19488)
- clang-format: Align with project style neovim#18192
- clint: Remove all python2-isms with pyupgrade
- clint: Remove "function size is too large" warning
- clint: Remove rules for includes, whitespace, tabs neovim#18611
- cmake: Simplify and speed up the uninstall target
- cmake: Simplify def_cmd_target function
- cmake: Use glob_wrapper instead of file(GLOB in main CMakeLists
- cmake: Fix static `libintl` test on macOS
- deps: Bump LuaJIT, Luv and libuv
- deps: Support universal builds on macOS
- deps: Bump tree-sitter to v0.20.7 (neovim#20067)
- deps: Bump tree-sitter parsers
- deps: Bump required libvterm to v0.3 (neovim#20222)
- deps: Require libtermkey version 0.22
- deps: update neovim-qt, win32tools.zip

PERFORMANCE
- Only redraw for CurSearch when it is currently in use
- highlight: Allocate permanent names in an arena for fun and cache locality
- highlight: Use binary search to lookup RGB color names
- map: Visit only one hash bucket instead of all, like an actual hash table
- memory: Get rid of extraneous heap allocations
- memory: implement arena memory allocation with a shared freelist
- memory: Use an arena for RPC decoding and some API return values
- messages: Don't call ui_flush() per message line in various places
- treesitter: Use a reuse list for query cursors
- ui: Reduce allocations when encoding and decoding "redraw" events
- ui: Avoid ui_flush() work in headless mode

REFACTOR
- checkhealth: Rename to vim.health, move logic to Lua neovim#18720
- Add pure attribute to pure functions
- Replace char_u variables and functions with char
- Enable -Wconversion warning for all Nvim source files
- Add warnings for deprecated functions (neovim#18662)
- Change type of linenr_T from long to int32_t
- Use nvim_get/set_option_value for vim.{b,w}o
- Remove functions marked for deprecation in 0.8 (neovim#19299)
- Rename function prefix mb to the more accurate utf_cp (neovim#19590)
- Remove some unused includes
- Change remaining sourcing_name/sourcing_lnum to exestack
- Change FALSE/TRUE to false/true
- api: Use a hashy hash for looking up api method and event names
- api: Use a unpacker based on libmpack instead of msgpack-c
- api: restructure api/vim.c and api/private/helpers.c code in separate files
- api: Remove redundant fields of CmdParseInfo
- aucmd: Call define_autocmd() directly for default autocmds
- ci: Cleanup release.yml neovim#19132
- cmd: Format do_one_cmd()
- cmd: Hoist out some code into functions
- cmd: Unify execute_cmd with do_one_cmd
- decor: Use decor levels properly
- drawline.c: Factor out utf8 multibyte check
- eval: Use Hashy McHashFace instead of gperf
- eval.c: Resolve all clint issues (neovim#19774)
- eval/funcs.c: Resolve all clint errors
- events: Remove unnecessary fudging of updating_screen
- ex_cd: Add an early return to fix clint warning
- ex_docmd.c: Resolve most clint errors (neovim#19775)
- filetype: Allow vim.filetype.match to accept buf and filename (neovim#19114)
- highlight: Make hlattrs2dict always use pre-allocated dict
- log: Simplify log_path_init neovim#18898
- log: Use msg_schedule_semsg neovim#18950
- lsp: Remove redundant client cleanup (neovim#18744)
- lsp: Make the use of local aliases more consistent
- lsp: Use autocmd api (neovim#19407)
- lsp: Factor out read_loop function
- lsp: Encapsulate rpc uv handle
- lsp: Extract rpc client from rpc.start
- lua: Replace hard-coded gsub with vim.pesc() (neovim#18407)
- lua: Reformat with stylua 0.14.0 (neovim#19264)
- lua: Git-blame-ignore stylua update PR (neovim#19273)
- lua: Replace vim.cmd use with API calls (neovim#19283)
- map: Simplify free_all_mem handling
- map: Statically initialize maphash array
- map: Simplify add_map params
- normal: Convert function comments to doxygen format
- object: Get rid of redundant FIXED_TEMP_ARRAY
- ops: Doxygen docstrings neovim#17743
- option: DRY get/set option value neovim#19038
- plines: Use a struct for chartabsize state
- provider: Use list comprehension neovim#19027
- regexp_nfa.c: Match where Vim calls fopen() (neovim#18778)
- runtime: Convert dist#ft functions to lua (neovim#18247)
- runtime: Convert more dist#ft functions to lua (neovim#18430)
- runtime: Convert the remaining dist#ft functions to lua (neovim#18623)
- runtime: Port remaining patterns from filetype.vim to filetype.lua (neovim#18814)
- runtime: Refactor filetype.lua (neovim#18813)
- runtime: Port scripts.vim to lua (neovim#18710)
- setcellwidths: Use TV_LIST_ITEM_NEXT properly
- signs: Handle non-sign attrs separately (neovim#19784)
- tests: Introduce testprg()
- treesitter: Get_{nodes,captures}_at_{position,cursor}
- typval: Change FC_CFUNC abstraction into FC_LUAREF
- ui: Simplify stdin handling
- uncrustify: Format all c code under /src/nvim/
- vim.opt: Remove del arg
- vim.opt: Unify vim.bo/wo building
- vim.opt: Optimize append/prepend/remove
- Format runtime with stylua
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
breaking-change compatibility compatibility with Vim or older Neovim defaults Nvim defaults for options, colorscheme/theme, autocmds/events, etc.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

10 participants