aboutsummaryrefslogtreecommitdiff
path: root/src/gen/gen_terminfo.lua
Commit message (Collapse)AuthorAge
* feat(startup)!: "standalone" mode -ll is killbfredl2026-06-04
| | | | | | | | | | | | | | This was originally used because we needed a lua interpreter to run the standalone _busted_ lua application (except we used fuckery behind the scenes to fake its binary dependencies with our own binary dependencies). Now we longer do that, we instead run `test.harness` as a standard nvim -l script. as this mode is no longer used in tests it risks going to bitrot anyway. NB: -ll mode still had some theoretical benefits like quicker initialization and more "native" printing behavior, etc. But we can incrementally work on "nvim -l" mode instead of maintaining a separate special thing.
* feat(tui): $NVIM_TERMDEFS can override builtin terminfo #39555Kyle2026-05-17
| | | | | | | | | | | | | Problem: - Windows users can't use terminfo to configure their terminal capabilities. #37274 - Terminfo definitions sometimes get out of date or are simply inaccurate. - Eventually, we may want to drop terminfo, relying primarily on built-in definitions. Users will still need some flexibility. Solution: Support $NVIM_TERMDEFS environment variable, which is JSON data that defines "terminfo" definitions that override our builtin terminfo.
* fix(termkey): use terminfo for (shift+)left/right keysTomas Janousek2026-03-30
| | | | | | | | | | | | | | | Problem: Since neovim 0.12, shift + arrow keys no longer works in rxvt-unicode (TERM=rxvt-unicode-256color). Solution: Re-add `left` and `right` to `wanted_termkeys` so they're read from terminfo instead of being handled by driver-csi. There seems to be quite a few other terminals that define kLFT in terminfo.src and these are likely to be affected as well. Fixes: https://github.com/neovim/neovim/issues/38571 Fixes: 4b678a499c77 ("refactor(termkey): make termkey use internal terminfo properly")
* revert: "fix(scripts): gen_terminfo clears Windows terminfo definitions #36736"Tomas Janousek2026-03-30
| | | | | | | | | | | | | | | | | | | | | Problem: `gen_terminfo.lua`'s output is unpredictable and depends on the system ncurses version. Invoking `tic` on `scripts/windows.ti` alone makes it use the system terminfo definitions for the `use=…` fragments in `windows.ti` such as: use=xterm+256color, use=xterm+sl, use=xterm-new This is particularly problematic on Debian, as they build ncurses with `--with-xterm-kbs=del` [1], and thus some of the windows entries end up with different definitions for `kTermKey_left`, which is almost certainly not desired. [1]: https://salsa.debian.org/debian/ncurses/-/blob/2d238cf3875f1a0a7c874f0a9b14f7582d19907a/debian/rules#L149 Solution: This reverts commit 9f909929344287bc1246d6b4dab55d500b514396.
* fix: resolve all remaining LuaLS warnings in `src/`Riccardo Mazzarini2026-03-09
|
* feat(highlight): support more SGR attributes #37901Riccardo Mazzarini2026-02-20
| | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: TUI does not support several standard SGR text attributes: - dim/faint (SGR 2) - blink (SGR 5) - conceal (SGR 8) - overline (SGR 53) This means that when a program running in the embedded terminal emits one of these escape codes, we drop it and don't surface it to the outer terminal. Solution: - Add support for those attributes. - Also add corresponding flags to `nvim_set_hl` opts, so users can set these attributes in highlight groups. - refactor(highlight): widen `HlAttrFlags` from `int16_t` to `int32_t` Widen the `rgb_ae_attr` and `cterm_ae_attr` fields in HlAttrs from int16_t to int32_t to make room for new highlight attribute flags, since there was only one spare bit left. - The C flag is named HL_CONCEALED to avoid colliding with the existing HL_CONCEAL in syntax.h (which is a syntax group flag, not an SGR attribute). - Also note that libvterm doesn't currently support the dim and overline attributes, so e.g. `printf '\e[2mThis should be dim\n'` and `printf '\e[53mThis should have an overline\n'` are still not rendered correctly when run from the embedded terminal.
* docs: misc (#37280)zeertzjq2026-01-07
| | | | | | | | | | | | | | | | | | | | Close #36806 Close #36812 Close #37003 Close #37016 Close #37038 Close #37039 Close #37157 Close #37185 Close #37213 Co-authored-by: saroj_r <sarojregmi.official@gmail.com> Co-authored-by: Olivia Kinnear <git@superatomic.dev> Co-authored-by: Igor <igorlfs@ufmg.br> Co-authored-by: Justin Roberts <JustinEdwardLeo@gmail.com> Co-authored-by: "Mike J. McGuirk" <mike.j.mcguirk@gmail.com> Co-authored-by: Aymen Hafeez <49293546+aymenhafeez@users.noreply.github.com> Co-authored-by: Peter Cardenas <16930781+PeterCardenas@users.noreply.github.com> Co-authored-by: DrNayak2306 <dhruvgnk.work@gmail.com>
* feat(tui): ghostty builtin terminfo #36963Justin M. Keyes2025-12-15
| | | | | | | | | | Problem: The builtin terminfo defs don't include xterm-ghostty, so features like `kTerm_set_underline_style` are missing when building without unibilium. Solution: - Add ghostty to `gen_terminfo.lua`. - Note: The ncurses defs are somewhat different than what ghostty ships. - Special-case ghostty in `terminfo_from_builtin`.
* fix(tui): enable vtpcon strikethrough feature #36762Justin M. Keyes2025-11-30
| | | | | | | | | | | Problem: Strikethrough was not enabled for vtpcon thus preventing strikethrough text from being shown. Solution: Update `windows.ti`. Co-authored-by: ymich9963 <gmichael834@gmail.com> Co-authored-by: Justin M. Keyes <justinkz@gmail.com>
* fix(scripts): gen_terminfo clears Windows terminfo definitions #36736Justin M. Keyes2025-11-28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: `gen_terminfo.lua` clears out Windows terminfo definitions: rm -r /tmp/nvim_terminfo nvim -ll src/gen/gen_terminfo.lua `src/nvim/tui/terminfo_builtin.h`: static const TerminfoEntry vtpcon_terminfo = { .bce = false, .has_Tc_or_RGB = false, .Su = false, .max_colors = -1, .lines = -1, .columns = -1, .defs = { [kTerm_carriage_return] = NULL, [kTerm_change_scroll_region] = NULL, [kTerm_clear_screen] = NULL, [kTerm_clr_eol] = NULL, [kTerm_clr_eos] = NULL, [kTerm_cursor_address] = NULL, [kTerm_cursor_down] = NULL, [kTerm_cursor_invisible] = NULL, [kTerm_cursor_left] = NULL, [kTerm_cursor_home] = NULL, [kTerm_cursor_normal] = NULL, [kTerm_cursor_up] = NULL, [kTerm_cursor_right] = NULL, [kTerm_delete_line] = NULL, ... Solution: Generate the database in 2 steps, don't concatenate the sources.
* refactor(termkey): make termkey use internal terminfo properlybfredl2025-10-29
| | | | | | | | | | | | | | | | | problem: termkey/driver-ti.c had its internal dependency upon unibilium which would completely skip builtin terminfo defs. solution: add termkey info to TerminfoEntry struct NOTE: this disables a lot of named function keys which are present as terminfo "keys" both are mostly unset in terminfo entries for modern terminals, and also not recognized by nvim as mappable keys anyway, except a few ones like `<undo>` which this still will keep. We probably don't want to encode up to F63 keys forever. While only 12 physical keys are available on modern keybords, instead Chords using F-keys are usually encoded as high key numbers, like <C-S-F3> becoming <F39> . But reconsideirg that has implications for configuration that is best done as a separate (breaking) change.
* fix(tui): reset cursor style on exit (#36261)Gregory Anders2025-10-28
| | | | | | Fix the cursor style terminfo capability (should be Se, not se). Also include foot in the list of terminals that supports setting and resetting cursor style (see https://codeberg.org/dnkl/foot/issues/797#issuecomment-280305)
* perf(tui): faster implementation of terminfobfredl2025-10-18
The processing of terminfo can be separated into two steps: 1. The initialization of terminfo, which includes trying to find $TERM in a terminfo database file. As a fallback, common terminfo definitions are compiled in. After this, we apply a lot of ad-hoc patching to cover over limitations of terminfo. 2. While processing updates from nvim, actually using terminfo strings and formatting them with runtime values. for this part, terminfo essentially is a hyper-enhanced version of snprintf(), including a sm0l stack based virtual machine which can manipulate the runtime parameters. This PR completely replaces libuniblium for step 2, with code vendored from NetBSD's libtermkey which has been adapted to use typesafe input parameters and to write into an output buffer in place. The most immedatiate effects is a performance enhancement of update_attrs() which is a very hot function when profiling the TUI-process part of screen updates. In a stupid microbenchmark (essentially calling nvim__screenshot over and over in a loop) this leads to a speedup of ca 1.5x for redrawing the screen on the TUI-side. What this means in practise when using nvim as a text editor is probably no noticible effect at all, and when reabusing nvim as idk a full screen RGB ASCII art rendrer maybe an increase from 72 to 75 FPS LMAO. As nice side-effect, reduce the usage of unibilium to initialization only.. which will make it easier to remove, replace or make unibilium optional, adressing #31989. Specifically, the builtin fallback doesn't use unibilium at all, so a unibilium-free build is in principle possible if the builtin definitions are good enough. As a caveat, this PR doesn't touch libtermkey at all, which still has a conditional dependency on unibilium. This will be investigated in a follow-up PR Note: the check of $TERMCOLOR was moved from tui/tui.c to _defaults.lua in d7651b27d54a87c5783c0a579af11da9a16a39aa as we want to skip the logic in _defaults.lua if the env var was set, but there is no harm in TUI getting the right value when the TUI is trying to initialize its terminfo shenanigans. Also this check is needed when a TUI connects to a `--headless` server later, which will observe a different $TERMCOLOR value than the nvim core process itself.