neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit 9044d64af94dc818c16f0b9e9773237bf4300248
parent d589ce28b0020f71a53f0360e0a1d467da949a50
Author: Justin M. Keyes <justinkz@gmail.com>
Date:   Sat, 22 Nov 2025 14:58:10 -0500

feat: has('terminfo')

Problem:
No way to detect at runtime if the build includes unibilium (or whatever
terminfo layer we swap it with later).

Solution:
Support `has('terminfo')`.

Diffstat:
M.github/workflows/build.yml | 2+-
M.github/workflows/test.yml | 2+-
MBUILD.md | 2++
Msrc/nvim/eval/funcs.c | 3+++
Mtest/functional/vimscript/has_spec.lua | 11+++++++++++
5 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml @@ -55,7 +55,7 @@ jobs: run: make install use-existing-src: - name: Test USE_EXISTING_SRC_DIR=ON builds with no network access + name: Test offline build (USE_EXISTING_SRC_DIR=ON builds with no network access) runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml @@ -176,7 +176,7 @@ jobs: - name: Install run: | cmake --install build - "$INSTALL_PREFIX/bin/nvim" --version + "$INSTALL_PREFIX/bin/nvim" -V1 --version if ! "$INSTALL_PREFIX/bin/nvim" -u NONE -e -c ':help' -c ':qall'; then echo "Running ':help' in the installed nvim failed." echo "Maybe the helptags have not been generated properly." diff --git a/BUILD.md b/BUILD.md @@ -300,6 +300,8 @@ custom terminfo at runtime, use make CMAKE_EXTRA_FLAGS="-DENABLE_UNIBILIUM=0" DEPS_CMAKE_FLAGS="-DUSE_BUNDLED_UNIBILIUM=0" ``` +To confirm at runtime that unibilium was not included, check `has('terminfo') == 1`. + ### How to build static binary (on Linux) 1. Use a linux distribution which uses musl C. We will use Alpine Linux but any distro with musl should work. (glibc does not support static linking) diff --git a/src/nvim/eval/funcs.c b/src/nvim/eval/funcs.c @@ -2757,6 +2757,9 @@ static void f_has(typval_T *argvars, typval_T *rettv, EvalFuncData fptr) "tablineat", "tag_binary", "termguicolors", +#ifdef HAVE_UNIBILIUM + "terminfo", +#endif "termresponse", "textobjects", "timers", diff --git a/test/functional/vimscript/has_spec.lua b/test/functional/vimscript/has_spec.lua @@ -64,6 +64,17 @@ describe('has()', function() end end) + it('"terminfo"', function() + -- Looks like "HAVE_UNIBILIUM ", "HAVE_UNIBILIUM=1", "HAVE_UNIBILIUM off", …. + -- Capture group returns the "1"/"off"/…. + local build_flag = + vim.trim((n.exec_capture('verbose version'):match('HAVE_UNIBILIUM([^-]+)') or ''):lower()) + -- XXX: the match() above fails in CI so currently we assume CI always builds with unibilium. + local is_enabled = t.is_ci() + or not (build_flag == '' or build_flag == 'false' or build_flag == '0' or build_flag == 'off') + eq(is_enabled and 1 or 0, fn.has('terminfo')) + end) + it('"wsl"', function() local is_wsl = vim.uv.os_uname()['release']:lower():match('microsoft') and true or false if is_wsl then