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.
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.
If Neovide is run in forking mode with a terminal and the shell from
which it is invoked exits, Neovide is killed. This can be easily seen
with `env -u TMUX tmux new 'neovide --fork; sleep 3'`.
To avoid that, we must detach from the terminal using the double-fork
technique, which calls `setsid` and closes the file descriptors after
the first fork. Then, when the caller exits, we will not receive a
SIGHUP and will continue running.
This is implemented in the `fork` crate, which contains an analogue of
the `daemon` function found on Linux and the BSDs, so use that here to
detach properly.
Note that we still re-exec the process after the double fork because, at
least on macOS, by the time we've started the event loop, it is too late
to perform a fork because threads may have already been started and fork
destroys all threads but the calling one. Moving the command-line and
config parsing easier would be complicated and starting a clean process
is the easiest way of making sure that we have a reasonable internal
state. For this reason, we exit in this case if spawning the process
fails rather than continuing on.
* Caching shaper takes str
* Remove unneeded clone and equal
* Rename line to RenderedLine
* Pass a Line struct instead of Vec<LineFragment>
* Remove redundant redraw_line calls
* Pass the LineFragment text as ranges instead of String
The whole line is instead passed as a single string
* Pass cells range instead of start and width
* Remove duplicate code
* Calculate the word boundaries on the editor side
* Don't use unicode segmentation to assign text to cell
Instead use exactly what Neovim tells us
* Send the cluster sizes
* Position the glyphs according to the Neovim clustering rules
* Move the shaping log so that the text doesn't need to be generated twice
* Don't start new words with second part of double width cells
* Add some tests
* Fix clippy warnings
* Replace huge clusters by spaces to avoid overflow
* Replace test window macro by function
* Refactor the line related structs
* Upgrade winit to 0.30.12
* Upgrade to skia-safe 0.87
* Upgrade glamour to 0.18.0
* Upgrade more dependencies
* Upgrade xdg to 3.0.0
* Upgrade tracy-client-sys to 0.26.1
* Add comment about windows-sys requirement
* Remove unused dependencies
* Move platform specified dependences to where they belong
* Sort the dependencies
* Upgrade 4 groups of dependency libraries
* winit 0.30.9 -> 0.30.11
* glutin 0.32.2 -> 0.32.3
* copypasta 0.10.1 -> 0.10.2
* objc2 0.5.2 -> 0.6.1, objc2-* 0.2.2 -> 0.3.1
* Codes affected by breaking changes of objc2 are all migrated accordingly.
* MacOS display link vsync codes are now merged into one single file. Redundant
codes of unnecessary abstracting are removed.
* Some other codes of macOS part are also cleaned up.
* Remove pointless nvim_cmd_impl
The code was almost duplicate of create_platform_shell_command, but used
std::process::Command instead of tokio::process::Command
* Use nvim-rs handshake
* Simplify the shell launching
* Better error reporting when failing to launch nvim
Stderr output from Neovim are now logged for the whole session.
* Fix macOS
* Update nvim-rs
* chore: release 0.14.0
- update version numbers from `0.13.3` to `0.14.0` in `cargo.toml` and `info.plist`
* docs: update availability information for config files
- update availability information from `unreleased yet` to `available since 0.14.0` for the `config-file.md` file
- update availability information from `unreleased yet` to `available since 0.14.0` for the `configuration.md` file
* docs: update configuration information across files
- update the availability version information in the config-file.md and configuration.md files