neovim

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

commit 09d76afe84dd5b895e102dcd8df8ce6271bebfef
parent f55213ce0e2b0053ded8416e8ae922a0e406012f
Author: Justin M. Keyes <justinkz@gmail.com>
Date:   Fri, 27 Sep 2024 08:53:30 -0700

feat(defaults): pretty :help headings #30544

Problem:
Headings in :help do not stand out visually.

Solution:
Define a non-standard `@markup.heading.1.delimiter` group and
special-case it in `highlight_group.c`.

FUTURE:
This is a cheap workaround until we have #25718 which will enable:
- fully driven by `vimdoc/highlights.scm` instead of using highlight
  tricks (`guibg=bg guifg=bg guisp=fg`)
- better support of "cterm" ('notermguicolors')
Diffstat:
Mruntime/doc/news.txt | 3+++
Mruntime/ftplugin/help.lua | 2+-
Mruntime/queries/vimdoc/highlights.scm | 4++--
Mruntime/syntax/help.vim | 2+-
Msrc/nvim/highlight_group.c | 5+++++
Mtest/functional/treesitter/highlight_spec.lua | 36++++++++++++++++++++++++++++++++++++
6 files changed, 48 insertions(+), 4 deletions(-)

diff --git a/runtime/doc/news.txt b/runtime/doc/news.txt @@ -119,6 +119,9 @@ API DEFAULTS +• Highlighting: + • Improved styling of :checkhealth and :help buffers. + • Mappings: • |grn| in Normal mode maps to |vim.lsp.buf.rename()| • |grr| in Normal mode maps to |vim.lsp.buf.references()| diff --git a/runtime/ftplugin/help.lua b/runtime/ftplugin/help.lua @@ -1,7 +1,7 @@ -- use treesitter over syntax (for highlighted code blocks) vim.treesitter.start() --- add custom highlights for list in `:h highlight-groups` +-- Add custom highlights for list in `:h highlight-groups`. local bufname = vim.fs.normalize(vim.api.nvim_buf_get_name(0)) if vim.endswith(bufname, '/doc/syntax.txt') then require('vim.vimhelp').highlight_groups({ diff --git a/runtime/queries/vimdoc/highlights.scm b/runtime/queries/vimdoc/highlights.scm @@ -1,9 +1,9 @@ (h1 - (delimiter) @markup.heading.1 + (delimiter) @markup.heading.1.delimiter (heading) @markup.heading.1) (h2 - (delimiter) @markup.heading.2 + (delimiter) @markup.heading.2.delimiter (heading) @markup.heading.2) (h3 diff --git a/runtime/syntax/help.vim b/runtime/syntax/help.vim @@ -15,7 +15,7 @@ set cpo&vim syn match helpHeadline "^[A-Z.][-A-Z0-9 .,()_']*?\=\ze\(\s\+\*\|$\)" syn match helpSectionDelim "^===.*===$" syn match helpSectionDelim "^---.*--$" -" Neovim: support language annotation in codeblocks +" Nvim: support language annotation in codeblocks if has("conceal") syn region helpExample matchgroup=helpIgnore start=" >[a-z0-9]*$" start="^>[a-z0-9]*$" end="^[^ \t]"me=e-1 end="^<" concealends else diff --git a/src/nvim/highlight_group.c b/src/nvim/highlight_group.c @@ -301,6 +301,11 @@ static const char *highlight_init_both[] = { "default link @tag Tag", "default link @tag.builtin Special", + // :help + // Higlight "===" and "---" heading delimiters specially. + "default @markup.heading.1.delimiter.vimdoc guibg=bg guifg=bg guisp=fg gui=underdouble,nocombine ctermbg=NONE ctermfg=NONE cterm=underdouble,nocombine", + "default @markup.heading.2.delimiter.vimdoc guibg=bg guifg=bg guisp=fg gui=underline,nocombine ctermbg=NONE ctermfg=NONE cterm=underline,nocombine", + // LSP semantic tokens "default link @lsp.type.class @type", "default link @lsp.type.comment @comment", diff --git a/test/functional/treesitter/highlight_spec.lua b/test/functional/treesitter/highlight_spec.lua @@ -894,9 +894,45 @@ describe('treesitter highlighting (help)', function() [3] = { bold = true, foreground = Screen.colors.Brown }, [4] = { foreground = Screen.colors.Cyan4 }, [5] = { foreground = Screen.colors.Magenta1 }, + title = { bold = true, foreground = Screen.colors.Magenta1 }, + h1_delim = { nocombine = true, underdouble = true }, + h2_delim = { nocombine = true, underline = true }, } end) + it('defaults in vimdoc/highlights.scm', function() + -- Avoid regressions when syncing upstream vimdoc queries. + + insert [[ + ============================================================================== + NVIM DOCUMENTATION + + ------------------------------------------------------------------------------ + ABOUT NVIM *tag-1* *tag-2* + + |news| News + |nvim| NVim + ]] + + feed('gg') + exec_lua(function() + vim.wo.wrap = false + vim.bo.filetype = 'help' + vim.treesitter.start() + end) + + screen:expect({ + grid = [[ + {h1_delim:^========================================}| + {title:NVIM DOCUMENTATION} | + | + {h2_delim:----------------------------------------}| + {title:ABOUT NVIM} | + | + ]], + }) + end) + it('correctly redraws added/removed injections', function() insert [[ >ruby