Mercurial > vim
view runtime/import/dist/vimhighlight.vim @ 34538:c865c2f93a04 v9.1.0171
patch 9.1.0171: Small split-move related improvements
Commit: https://github.com/vim/vim/commit/5cac1a9bee0798d70a7fd80363a1f697759638e8
Author: Sean Dewar <6256228+seandewar@users.noreply.github.com>
Date: Tue Mar 12 21:11:39 2024 +0100
patch 9.1.0171: Small split-move related improvements
Problem: small improvements can be made to split-move related
functions.
Solution: apply them (Sean Dewar):
- Improve some doc comments (frame_flatten should still work for non-current
tabpages, despite the topframe check, which looks benign, though I'm unsure if
it's still needed; see #2467).
- f_win_splitmove should check_split_disallowed on wp, not targetwin, as that's
what win_splitmove checks (though it's probably unnecessary to check
b_locked_split at all; see #14109, which I hope to get around to finishing at
some point).
- Make winframe_restore restore window positions for the altframe, which
winframe_remove changes. This doesn't affect the prior behaviour, as we called
win_comp_pos after, but as win_comp_pos only works for curtab, and
winframe_remove supports non-current tabpages, we should undo it. Regardless,
this should mean we don't need win_comp_pos anymore; adjust tests to check
that window positions remain unchanged.
I'm not sure win_comp_pos is needed after last_status anyway if it doesn't
steal rows from another frame to make room for a new statusline, which
shouldn't be the case after winframe_remove? To be safe, I'll leave it as is.
closes: #14185
Signed-off-by: Sean Dewar <6256228+seandewar@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Tue, 12 Mar 2024 21:15:03 +0100 |
parents | 50e447c67247 |
children |
line wrap: on
line source
vim9script # Maintainer: github user lacygoill # Last Change: 2023 Mar 08 # Init {{{1 const LINK: string = '->' # Interface {{{1 export def HighlightTest() # {{{2 # Open a new window if the current one isn't empty if line('$') != 1 || getline(1) != '' new endif edit Highlight\ test # `:help scratch-buffer` &l:bufhidden = 'hide' &l:buftype = 'nofile' &l:swapfile = false var report: list<string> =<< trim END Highlighting groups for various occasions ----------------------------------------- END var various_groups: list<string> = GetVariousGroups() ->filter((_, group: string): bool => group->hlexists() && !group->IsCleared()) ->sort() ->uniq() report->extend(various_groups->FollowChains()) var language_section: list<string> =<< trim END Highlighting groups for language syntaxes ----------------------------------------- END report->extend(language_section) var syntax_groups: list<string> = getcompletion('', 'highlight') ->filter((_, group: string): bool => various_groups->index(group) == -1 && !group->IsCleared() && group !~ '^HighlightTest') # put the report report ->extend(syntax_groups->FollowChains()) ->setline(1) # highlight the group names execute $'silent! global /^\w\+\%(\%(\s*{LINK}\s*\)\w\+\)*$/ Highlight({bufnr('%')})' cursor(1, 1) enddef # }}}1 # Core {{{1 def Highlight(buf: number) # {{{2 var lnum: number = line('.') for group: string in getline('.')->split($'\s*{LINK}\s*') silent! prop_type_add($'highlight-test-{group}', { bufnr: buf, highlight: group, combine: false, }) prop_add(lnum, col('.'), { length: group->strlen(), type: $'highlight-test-{group}' }) search('\<\w\+\>', '', lnum) endfor enddef # }}}1 # Util {{{1 def IsCleared(name: string): bool # {{{2 return name ->hlget() ->get(0, {}) ->get('cleared') enddef def FollowChains(groups: list<string>): list<string> # {{{2 # A group might be linked to another, which itself might be linked... # We want the whole chain, for every group. var chains: list<string> for group: string in groups var target: string = group->LinksTo() var chain: string = group while !target->empty() chain ..= $' {LINK} {target}' target = target->LinksTo() endwhile var a_link_is_cleared: bool = chain ->split($'\s*{LINK}\s*') ->indexof((_, g: string): bool => g->IsCleared()) >= 0 if a_link_is_cleared continue endif chains->add(chain) endfor return chains enddef def LinksTo(group: string): string # {{{2 return group ->hlget() ->get(0, {}) ->get('linksto', '') enddef def GetVariousGroups(): list<string> # {{{2 return getcompletion('hl-', 'help') ->filter((_, helptag: string): bool => helptag =~ '^hl-\w\+$') ->map((_, helptag: string) => helptag->substitute('^hl-', '', '')) ->extend(range(1, 9)->map((_, n: number) => $'User{n}')) enddef