we are now replacing the native tabs switcher into a Neovide-owned custom editor switcher.
Why?
The native tab overview was a temporary choice for this feature.
editors should be about moving between Neovide editors without limitations,
but tying it to the system tabs overview made the behavior depend on whether native
tabs to be enabled, plus hacking to make it work properly not affecting separate
windows.
users who prefers separate-window has been forced to merge
and detach windows just to present a choice to switcher windows easier which
made the single-window case fall back to pinned-window toggling. That
was a known gap.
now with a Neovide-owned custom switcher it gives both modes the
outcome.
NOTE: behavior-wise shouldn't change, besides the switcher appearing now even
for separate-window mode.
neovide started temporarily requesting external messages in #3504 so
startup errors from #3499 would not disappear behind a hit-enter prompt
before the first grid was rendered.
losing early startup errors is a bad failure mode and users should not have to
guess why Neovim is stuck before neovide has a real message area.
but this also made neovide advertise ext_messages and ext_cmdline during
plugin startup. noice.nvim explicitly checks nvim_list_uis() before
attaching its own UI and refuses to handle messages or the cmdline when
another UI client already owns those extensions.
we mistakenly added a theme option to the config file, but it is not
actually used anywhere, must be impl in the future.
let g:neovide_theme has no changes.
size and grid are not independent runtime options. together with
`maximized` they define one mutually exclusive geometry choice,
so we don't model them as separate hot reload events.
todo: we need to improve how we declare mutually exclusive config
options in the config file.
if reload emitted a size/grid independently, then a transition like size -> grid
would depend on event order and could briefly drive invalid state.
in the end, we make geometry hot reload work, but we do it in a way that preserves the
actual model. One geometry setting, one parser, one reload event, one place to
apply it.
we already know the style of the cell under the cursor. Not using the cell color
fallback when `guicursor` leaves fg/bg unset, not falling back means the block
cursor ignores the actual colors being shown in that cell.
In fact instead, neovim ui protocol leave this responsability up the client to impl,
which is reasonable.
we also add `neovide_cursor_cell_color_fallback` as an opt-in. If enabled, the cursor falls
back to the covered cell colors, while explicit cursor colors still override them.
the trail vfx now keep a stable per-particle emission color. each particle captures the
cursor color when it is spawned, and rendering uses that stored color instead of
re-resolving from the current cursor position.
Introduce route ids and route targeted events so ui
commands and redraws can be scoped per window. this
adds route cores for pre window startup.
This refactors event flow so each OS window is a routed endpoint.
The EventPayload now carries EventTarget and NeovimHandler tracks a
route_id + per-route UI channels, keeping redraw and UI traffic
pinned to the right window.
Also the window lifecycle code now uses per-route renderer state for grid
sync, IME positioning and resize decisions so multiple windows do
not share mutable state.
note: macos native tabs and navigation now ride on the same route aware flow.
add g:neovide_message_area_drag_selection with defaults to true so users can disable
the experimental client-se message drag selection when needed or if needed.
* Added underline_offset to config, now overrides font metrics and default offset
* Added documentation for underline_offset to config-file entry
* Invert underline offset setting value
* Made underline_offset an Option and updated documentation
* Format config-file.md
---------
Co-authored-by: Fred Sundvik <fsundvik@gmail.com>
* feat: add preedit support when enabled IME mode
related to neovide#1931
* feat: support multi-line editing when IME is enabled
* feat: add an API for handling IME events
Default action is to insert commited text after the cursor. And, you can
customize the behavior when preeditted or committed.
* Revert to previous behavior
If the text which you input is committed, process as key input
regardless of mode of neovim
* doc: update related contents of IME handling API
* feat: support sending raw text and cursor offset
* doc: add the content to enable preedit of IME
* fix: broken link in faq
* style: format ui_commands.rs
* style: format api.md and faq.md
* style: format api.md again
100 chars line len