view runtime/syntax/lss.vim @ 33674:021e5bb88513 v9.0.2074

patch 9.0.2074: Completion menu may be wrong Commit: https://github.com/vim/vim/commit/daef8c74375141974d61b85199b383017644978c Author: Christian Brabandt <cb@256bit.org> Date: Fri Oct 27 19:16:26 2023 +0200 patch 9.0.2074: Completion menu may be wrong Problem: Completion menu may be wrong Solution: Check for the original direction of the completion menu, add more tests, make it work with 'noselect' completion: move in right direction when filling completion_info() When moving through the insert completion menu and switching directions, we need to make sure we start at the correct position in the list and move correctly forward/backwards through it, so that we do not skip entries and the selected item points to the correct entry in the list of completion entries generated by the completion_info() function. The general case is this: 1) CTRL-X CTRL-N, we will traverse the list starting from compl_first_match and then go forwards (using the cp->next pointer) through the list (skipping the very first entry, which has the CP_ORIGINAL_TEXT flag set (since that is the empty/non-selected entry 2) CTRL-X CTRL-P, we will traverse the list starting from compl_first_match (which now points to the last entry). The previous entry will have the CP_ORIGINAL_TEXT flag set, so we need to start traversing the list from the second prev pointer. There are in fact 2 special cases after starting the completion menu with CTRL-X: 3) CTRL-N and then going backwards by pressing CTRL-P again. compl_first_match will point to the same entry as in step 1 above, but since compl_dir_foward() has been switched by pressing CTRL-P to backwards we need to pretend to be in still in case 1 and still traverse the list in forward direction using the cp_next pointer 4) CTRL-P and then going forwards by pressing CTRL-N again. compl_first_match will point to the same entry as in step 2 above, but since compl_dir_foward() has been switched by pressing CTRL-N to forwards we need to pretend to be in still in case 2 and still traverse the list in backward direction using the cp_prev pointer For the 'noselect' case however, this is slightly different again. When going backwards, we only need to go one cp_prev pointer back. And resting of the direction works again slightly different. So we need to take the noselect option into account when deciding in which direction to iterate through the list of matches. related: #13402 related: #12971 closes: #13408 Signed-off-by: Christian Brabandt <cb@256bit.org>
author Christian Brabandt <cb@256bit.org>
date Fri, 27 Oct 2023 19:30:05 +0200
parents d46f974fd69e
children
line wrap: on
line source

" Vim syntax file
" Language:	Lynx 2.7.1 style file
" Maintainer:	Scott Bigham <dsb@killerbunnies.org>
" Last Change:	2004 Oct 06

" quit when a syntax file was already loaded
if exists("b:current_syntax")
  finish
endif

" This setup is probably atypical for a syntax highlighting file, because
" most of it is not really intended to be overridable.  Instead, the
" highlighting is supposed to correspond to the highlighting specified by
" the .lss file entries themselves; ie. the "bold" keyword should be bold,
" the "red" keyword should be red, and so forth.  The exceptions to this
" are comments, of course, and the initial keyword identifying the affected
" element, which will inherit the usual Identifier highlighting.

syn match lssElement "^[^:]\+" nextgroup=lssMono

syn match lssMono ":[^:]\+" contained nextgroup=lssFgColor contains=lssReverse,lssUnderline,lssBold,lssStandout

syn keyword	lssBold		bold		contained
syn keyword	lssReverse	reverse		contained
syn keyword	lssUnderline	underline	contained
syn keyword	lssStandout	standout	contained

syn match lssFgColor ":[^:]\+" contained nextgroup=lssBgColor contains=lssRedFg,lssBlueFg,lssGreenFg,lssBrownFg,lssMagentaFg,lssCyanFg,lssLightgrayFg,lssGrayFg,lssBrightredFg,lssBrightgreenFg,lssYellowFg,lssBrightblueFg,lssBrightmagentaFg,lssBrightcyanFg

syn case ignore
syn keyword	lssRedFg		red		contained
syn keyword	lssBlueFg		blue		contained
syn keyword	lssGreenFg		green		contained
syn keyword	lssBrownFg		brown		contained
syn keyword	lssMagentaFg		magenta		contained
syn keyword	lssCyanFg		cyan		contained
syn keyword	lssLightgrayFg		lightgray	contained
syn keyword	lssGrayFg		gray		contained
syn keyword	lssBrightredFg		brightred	contained
syn keyword	lssBrightgreenFg	brightgreen	contained
syn keyword	lssYellowFg		yellow		contained
syn keyword	lssBrightblueFg		brightblue	contained
syn keyword	lssBrightmagentaFg	brightmagenta	contained
syn keyword	lssBrightcyanFg		brightcyan	contained
syn case match

syn match lssBgColor ":[^:]\+" contained contains=lssRedBg,lssBlueBg,lssGreenBg,lssBrownBg,lssMagentaBg,lssCyanBg,lssLightgrayBg,lssGrayBg,lssBrightredBg,lssBrightgreenBg,lssYellowBg,lssBrightblueBg,lssBrightmagentaBg,lssBrightcyanBg,lssWhiteBg

syn case ignore
syn keyword	lssRedBg		red		contained
syn keyword	lssBlueBg		blue		contained
syn keyword	lssGreenBg		green		contained
syn keyword	lssBrownBg		brown		contained
syn keyword	lssMagentaBg		magenta		contained
syn keyword	lssCyanBg		cyan		contained
syn keyword	lssLightgrayBg		lightgray	contained
syn keyword	lssGrayBg		gray		contained
syn keyword	lssBrightredBg		brightred	contained
syn keyword	lssBrightgreenBg	brightgreen	contained
syn keyword	lssYellowBg		yellow		contained
syn keyword	lssBrightblueBg		brightblue	contained
syn keyword	lssBrightmagentaBg	brightmagenta	contained
syn keyword	lssBrightcyanBg		brightcyan	contained
syn keyword	lssWhiteBg		white		contained
syn case match

syn match lssComment "#.*$"

" Define the default highlighting.
" Only when an item doesn't have highlighting yet
hi def link lssComment Comment
hi def link lssElement Identifier

hi def lssBold		term=bold cterm=bold
hi def lssReverse		term=reverse cterm=reverse
hi def lssUnderline		term=underline cterm=underline
hi def lssStandout		term=standout cterm=standout

hi def lssRedFg		ctermfg=red
hi def lssBlueFg		ctermfg=blue
hi def lssGreenFg		ctermfg=green
hi def lssBrownFg		ctermfg=brown
hi def lssMagentaFg		ctermfg=magenta
hi def lssCyanFg		ctermfg=cyan
hi def lssGrayFg		ctermfg=gray
if $COLORTERM == "rxvt"
  " On rxvt's, bright colors are activated by setting the bold attribute.
  hi def lssLightgrayFg	ctermfg=gray cterm=bold
  hi def lssBrightredFg	ctermfg=red cterm=bold
  hi def lssBrightgreenFg	ctermfg=green cterm=bold
  hi def lssYellowFg		ctermfg=yellow cterm=bold
  hi def lssBrightblueFg	ctermfg=blue cterm=bold
  hi def lssBrightmagentaFg	ctermfg=magenta cterm=bold
  hi def lssBrightcyanFg	ctermfg=cyan cterm=bold
else
  hi def lssLightgrayFg	ctermfg=lightgray
  hi def lssBrightredFg	ctermfg=lightred
  hi def lssBrightgreenFg	ctermfg=lightgreen
  hi def lssYellowFg		ctermfg=yellow
  hi def lssBrightblueFg	ctermfg=lightblue
  hi def lssBrightmagentaFg	ctermfg=lightmagenta
  hi def lssBrightcyanFg	ctermfg=lightcyan
endif

hi def lssRedBg		ctermbg=red
hi def lssBlueBg		ctermbg=blue
hi def lssGreenBg		ctermbg=green
hi def lssBrownBg		ctermbg=brown
hi def lssMagentaBg		ctermbg=magenta
hi def lssCyanBg		ctermbg=cyan
hi def lssLightgrayBg		ctermbg=lightgray
hi def lssGrayBg		ctermbg=gray
hi def lssBrightredBg		ctermbg=lightred
hi def lssBrightgreenBg	ctermbg=lightgreen
hi def lssYellowBg		ctermbg=yellow
hi def lssBrightblueBg	ctermbg=lightblue
hi def lssBrightmagentaBg	ctermbg=lightmagenta
hi def lssBrightcyanBg	ctermbg=lightcyan
hi def lssWhiteBg		ctermbg=white ctermfg=black

let b:current_syntax = "lss"

" vim: ts=8