| Commit message (Collapse) | Author | Age |
| ... | |
| |
|
| |
When use_builtin_ui is true, Nvim will exit before line 385 is reached.
|
| |
|
|
|
|
| |
After #21831 `in_fd` is no longer set to stderr when starting TUI, so
check for `stdin_isatty` instead.
Fix #22259.
|
| |
|
|
|
|
|
|
| |
Problem: uv_tty_set_mode on stdout in Windows exits with error.
Cause: Windows cannot set the properties of the output of a tty.
Solution: Remove call to uv_tty_set_mode.
Ref: #21445
Ref: https://github.com/libuv/libuv/commit/88634c1405097c19582e870d278dd0e29dc55455#r100598822
|
| | |
|
| |
|
|
|
|
| |
MSVC has 4 different warning levels: 1 (severe), 2 (significant), 3
(production quality) and 4 (informational). Enabling level 3 warnings
mostly revealed conversion problems, similar to GCC/clang -Wconversion
flag.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Problem:
1. Some calls to preserve_exit() don't put a message in IObuff, so the
IObuff printed by preserve_exit() contains unrelated information.
2. If a TUI client runs out of memory or receives a deadly signal, the
error message is shown on alternate screen and cannot be easily seen
because the TUI exits alternate screen soon afterwards.
Solution:
Pass error message to preserve_exit() and exit alternate screen before
printing it.
Note that this doesn't fix the problem that server error messages cannot
be easily seen on exit. This is tracked in #21608 and #21843.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Problem:
When a TUI client is suspended it still receives UI events from the
server, and has to process these accumulated events when it is resumed.
With mulitple TUI clients this is a bigger problem, considering the
following steps:
1. A TUI client is attached.
2. CTRL-Z is pressed and the first client is suspended.
3. Another TUI client is attached.
4. CTRL-Z is pressed and a "suspend" event is sent to both clients. The
second client is suspended, while the first client isn't able to
process the event because it has already been suspended.
5. The first client is resumed. It processes the accumulated "suspend"
event and suspends immediately.
Solution:
Make a TUI client detach on suspend and re-attach on resume.
|
| |
|
|
| |
This prevents the TUI from doing unexpected things when receiving a
deadly signal or running out of memory.
|
| |
|
|
| |
This allows us to get rid of the separate "nvim-test" target
|
| |
|
|
|
|
|
|
| |
This fixes a regression from #21605 that stdin is no longer set as
"blocking" after Nvim TUI exits, and the problems described in #2598
happen again.
I'm not sure if this should be done in TUI code or common exiting code.
I added this call in tui_stop() as it is also present in tui_suspend().
|
| | |
|
| |
|
|
| |
Saves two bits for reuse for new features
|
| | |
|
| |\
| |
| | |
fix(ui): re-organize tty fd handling and fix issues
|
| | |
| |
| |
| |
| |
| |
| | |
- Use the correct fd to replace stdin on windows (CONIN)
- Don't start the TUI if there are no tty fd (not a regression,
but makes sense regardless)
- De-mythologize "global input fd". it is just STDIN.
|
| |/
|
| |
Also add the EXITFREE definition to main_lib rather than the nvim target, as the header generation needs the EXITFREE flag to work properly.
|
| |
|
|
| |
fixes #21610
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- The defined interface for the UI is only the RPC protocol. The original
UI interface as an array of function pointers fill no function.
- On the server, all the UI:s are all RPC channels.
- ui.c is only used on the server.
- The compositor is a preprocessing step for single-grid UI:s
- on the client, ui_client and tui talk directly to each other
- we still do module separation, as ui_client.c could form the basis
of a libnvim client module later.
Items for later PR:s
- vim.ui_attach is still an unhappy child, reconsider based on plugin experience.
- the flags in ui_events.in.h are still a mess. Can be simplified now.
- UX for remote attachment needs more work.
- startup for client can be simplified further (think of the millisecs we can save)
|
| |
|
|
|
|
|
|
| |
Problem: When unibi_format() modifies params and data->buf overflows,
unibi_format() is called again, causing the params to be
modified twice. This can happen for escapes sequences that
use the %i terminfo format specifier (e.g. cursor_address),
which makes unibi_format() increase the param by 1.
Solution: Make a copy of data->params before calling unibi_format().
|
| | |
|
| |
|
|
| |
It is fine to initialize ui_client_termname to NULL as it is only used
after tui_start().
|
| |\
| |
| | |
feat(ui): refactor TUI from thread to separate process
|
| | | |
|
| | | |
|
| |/
|
|
|
|
|
|
|
| |
As neovim does have event handling, we are checking for CTRL-C
all the time, not once per second.
Also, do_sleep() reimplements the same loop as
LOOP_PROCESS_EVENTS_UNTIL() already contains internally. Fix the latter
to use the right integer type, so we do not need the extra indirection.
|
| |
|
|
|
|
| |
This is needed for #18375 for the obvious reasons.
note: verbose_terminfo_event is only temporarily needed
until the full TUI process refactor is merged.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Problem:
See #20628. Terminals supporting cursor color changing usually set the
"user-defined" `Cs` terminfo capability. Most terminals expect the parameter to
the capability to be a string (in hex format like `#0099ff` or like
`rgb:00/99/ff`), others may expect a number.
Nvim currently can't handle string parameters, causing terminals to receive
a bogus command.
Unfortunately, as the `Cs` capability is "user-defined", there's no strict
format. The parameter it takes isn't really standardized. It seems most
terminals in use follow xterm; iTerm appears to be an exception.
Solution:
Use the `Cs` capability more reliable by following terminfo and
sending the color in hex format, at the cost of using unibilium string vars.
Alternatively, could revert https://github.com/neovim/neovim/commit/34d41baf8a8e4ab8c006b7f29a8106e60e311aa2
and hardcode the specific format required by terminals, instead of reading
terminfo.
Fixes #20628
Fixes #19607
|
| |
|
|
|
|
|
|
|
|
| |
Allow Include What You Use to remove unnecessary includes and only
include what is necessary. This helps with reducing compilation times
and makes it easier to visualise which dependencies are actually
required.
Work on https://github.com/neovim/neovim/issues/549, but doesn't close
it since this only works fully for .c files and not headers.
|
| |
|
|
|
|
|
|
| |
Enable and fix bugprone-misplaced-widening-cast warning.
Fix some modernize-macro-to-enum and readability-else-after-return
warnings, but don't enable them. While the warnings can be useful, they
are in general too noisy to enable.
|
| |
|
|
|
|
|
| |
Update runtime files
https://github.com/vim/vim/commit/6ebe4f970b8b398087076a72a7aae6e680fb92da
Co-authored-by: Bram Moolenaar <Bram@vim.org>
|
| |
|
| |
Not doing anything is better than hanging.
|
| |
|
|
| |
Reduces #ifdef code.
|
| |
|
|
| |
It's confusing to mix vendored dependencies with neovim source code. A
clean separation is simpler to keep track of and simpler to document.
|
| | |
|
| |
|
|
|
|
|
| |
Problem: Macros for MS-Windows are inconsistent, using "32", "3264 and
others.
Solution: Use MSWIN for all MS-Windows builds. Use FEAT_GUI_MSWIN for the
GUI build. (Hirohito Higashi, closes vim/vim#3932)
https://github.com/vim/vim/commit/4f97475d326c2773a78561fb874e4f23c25cbcd9
|
| |
|
| |
Support was added in https://invent.kde.org/utilities/konsole/-/commit/76f879cd70fb494ab2334d2660b34679546f3d9d
|
| | |
|
| |
|
|
| |
Work on https://github.com/neovim/neovim/issues/459
|
| |
|
|
|
|
| |
Ref https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h3-Other-buttons
This works in xterm and kitty.
CSI < 66 ; x ; y M sequence is for ScrollWheelLeft.
CSI < 67 ; x ; y M sequence is for ScrollWheelRight.
|
| |
|
|
|
|
| |
Make the copy_object() family accept an optional arena. More than
half of the callsites should be refactored to use an arena later
anyway.
|
| |
|
|
|
| |
This is both simpler in client code and more effective (always reuse
block hottest in cache)
|
| |
|
|
|
|
|
| |
vim-patch:8.2.0559: clearing a struct is verbose
Problem: Clearing a struct is verbose.
Solution: Define and use CLEAR_FIELD() and CLEAR_POINTER().
https://github.com/vim/vim/commit/a80faa8930ed5a554beeb2727762538873135e83
|
| |
|
| |
Note: This only applies to ambiguous-width characters.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Problem
-------
In #19040, I reported two things that started happening somewhen in the
last three months when using neovim in hterm (the Chrome Secure Shell
terminal):
1. Under certain circumstances, the window title (set by nvim
[i0]) would appear over the line I was typing, corrupting the screen.
2. If I changed my $TERM from xterm-256color to the new hterm-256color
(available since ncurses >=20210320), the window title corruption
was gone, but pane scrolling was broken.
Both problems are due to changes in the termcap files, their source of
truth being the ncurses project. See "Timeline of ncurses changes" below
for details.
Cause: title corruption
-----------------------
The title corruption when using hterm + TERM=xterm-256color can be
explained by event #4 (ncurses 2022-03-12) in the ncurses timeline:
The xterm-256color termcap file gained status line termcodes in ncurses
2022-03-12. These termcodes are used by Neovim to set the title when.
hterm does not have a status line. Due to ncurses versions earlier than
2022-03-12 missing the xterm status line capability, Neovim manually
fixed up [t0] the terminfo file if $TERM was xterm-256color. So if
before Neovim manually added fsl/tsl capabilties, and after they were
in the termcap file, why did hterm suddenly start getting corruption?
The answer is that the termcodes for these capabilties are different
when Neovim fixes them up, versus the one in the new termcap database:
fsl=\E[0$} // from xterm-256color
tsl=\E[2$~\E[1$}\E[%i%p1%d` // from xterm-256color
fsl=\x07 // patched by Neovim
tsl=\x1b]0; // patched by Neovim
hterm ignores the latter, but corrupts the screen with the former.
Solution: Make hterm users set hterm-256color, which lacks the new
fsl/tsl codes. Also, to reduce superfluous work, stop patching in this
capability when hterm is detected (even if hterm would ignore the
patched version).
Cause: pane corruption
----------------------
The pane corruption when using hterm + TERM=hterm-256color, but NOT when
using hterm + TERM=xterm-256color can be explained by:
- Neovim uses DECSLRM when available [p1] for performant scrolling.
- Both the hterm-256color and xterm-256color termcap databases
advertise support for DECSLRM (ncurses timeline #1, #2 and #3).
- hterm does not support DESCLRM [p2] (note: it does support DESCTBM for
top/bottom scrolling, but it's broken [p3] and not used by Neovim)
- xterm-alikes that are not real xterm generally don't support DECSLRM
either, so Neovim patches it out [p4].
When using hterm-256color, hterm is no longer considered an xterm-alike
by Neovim. As a result, DECSLRM is not cleared. hterm does not support
it, so corruption ensues.
This is a problem with the hterm-256color termcap file, but we're stuck
with it so the best we can do is patch over it.
Timeline of ncurses changes
---------------------------
1. 2019-05-19: Part of the DECSLRM capability (smglr AKA set_lr_margin)
added to vt420+lrmm, which xterm-256color inherits [n1]
2. 2021-03-20: hterm-256color added, inheriting xterm-256colors. [n2]
3. 2021-09-25: The *parm versions of smglr (AKA set_lr_margin) were
added to vt420+lrmm [n3]. Namely:
1. smglp AKA set_left_margin_parm, and
2. smgrp AKA set_right_margin_parm
4. 2022-03-12: (new) codes for fsl, bsl and tsl added to xterm (add
dec+sl to xterm-new, per patch #371 -TD) [n4]
Fixes #19040.
[i0]: https://github.com/neovim/neovim/blob/3a4fa22badc5595afc0a994ead965ff32ccf6c76/src/nvim/tui/tui.c#L1377
[t0]: https://github.com/neovim/neovim/blob/3a4fa22badc5595afc0a994ead965ff32ccf6c76/src/nvim/tui/tui.c#L1728,L1729
[p1]: https://github.com/neovim/neovim/blob/3a4fa22badc5595afc0a994ead965ff32ccf6c76/src/nvim/tui/tui.c#L1196
[p2]: https://bugs.chromium.org/p/chromium/issues/detail?id=1175065&q=component%3APlatform%3EApps%3EDefault%3EHterm
[p3]: https://bugs.chromium.org/p/chromium/issues/detail?id=1298796&q=component%3APlatform%3EApps%3EDefault%3EHterm
[p4]: https://github.com/neovim/neovim/blob/3a4fa22badc5595afc0a994ead965ff32ccf6c76/src/nvim/tui/tui.c#L1740-L1752
[n1]: https://github.com/mirror/ncurses/commit/8f6d94b8d6211a2323caef53fa4c96c475ec9a6#diff-01544c577762d3308a1d232aa7afc79acf64b9a5057f88a004df82fda89549b7R2742
[n2]: https://github.com/mirror/ncurses/commit/c2650100f80134924eda8f22cd7cc1d1d919ee3d#diff-01544c577762d3308a1d232aa7afc79acf64b9a5057f88a004df82fda89549b7R5907
[n3]: https://github.com/mirror/ncurses/commit/f6b436c4fb50275df43ea10ba9c744fe195a327d#diff-01544c577762d3308a1d232aa7afc79acf64b9a5057f88a004df82fda89549b7R2842
[n4]: https://github.com/mirror/ncurses/commit/8bf8c836fe2c28238adbd62e71f03272efe155ad#diff-01544c577762d3308a1d232aa7afc79acf64b9a5057f88a004df82fda89549b7R4828
Signed-off-by: Nicolas Hillegeer <nicolas@hillegeer.com>
|
| | |
|
| |\
| |
| | |
feat(tui): recognize keypad keys when using kitty keyboard protocol
|
| | | |
|
| |/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* fix(test): screen.lua nil index
When actual_rows and expected_rows are different avoid a nil index.
* fix(tui): resize at startup
The deleted code is not needed after 402b4e8.
It caused the condition to false positive when the function was called
more than once before startup (first normal mode). Being itself what
set the dimension and not the user, locking the size of the screen to
an incorrect size.
Make got_winch an int to mitigate: tui_grid_resize changing the size
of the host terminal between the signal handler and the call to
sigwinch_cb. Since the actual signal handler uv__signal_handle doesn't
directly call the callback, the event loop does.
Fixes #17285
Fixes #15044
Fixes #11330
|
| |
|
|
|
|
| |
libuv does not call callback functions(uv_signal_cb) directly from signal
handlers. Therefore, there is no need to use volatile.
Ref. https://github.com/libuv/libuv/blob/1a91b51976a1adc6972081faa78b6b70022254d3/src/unix/signal.c#L183
|
| |
|
|
|
|
|
|
|
| |
Ref: https://github.com/vim/vim/commit/84f546363068e4ddfe14a8a2a2322bb8d3a25417
Rename:
- `underlineline` to `underdouble`
- `underdot` to `underdotted`
- `underdash` to `underdashed`
`underdouble` also now takes higher precedence than `undercurl`.
|