mirror of
				https://github.com/neovim/neovim.git
				synced 2025-11-04 09:44:31 +00:00 
			
		
		
		
	fix(runtime): clean up one-off scripts
Problem: Some runtime files no longer spark joy. Solution: Kondo the place up. Still sparks _some_ joy (moved to new `runtime/scripts` folder): * `macros/less.*` * `mswin.vim` * `tools/emoji_list.lua` No longer sparks joy (removed): * `macmap.vim` (gvimrc file; not useful in Nvim) * `tools/check_colors.vim` (no longer useful with new default colorscheme and treesitter) * `macros/editexisting.vim` (throws error on current Nvim) * `macros/justify.vim` (obsolete shim for `packadd! justify`) * `macros/matchit.vim` (same) * `macros/shellmenu.vim` (same) * `macros/swapmous.vim` (same)
This commit is contained in:
		
				
					committed by
					
						
						Christian Clason
					
				
			
			
				
	
			
			
			
						parent
						
							ea5b748f24
						
					
				
				
					commit
					82b02ae2f2
				
			@@ -118,4 +118,4 @@ foreach(D ${RUNTIME_DIRS})
 | 
			
		||||
endforeach()
 | 
			
		||||
 | 
			
		||||
# only foo.sh script in runtime/
 | 
			
		||||
install_helper(PROGRAMS ${CMAKE_CURRENT_SOURCE_DIR}/macros/less.sh DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/nvim/runtime/macros/)
 | 
			
		||||
install_helper(PROGRAMS ${CMAKE_CURRENT_SOURCE_DIR}/scripts/less.sh DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/nvim/runtime/scripts/)
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ gzip.vim	for editing compressed files
 | 
			
		||||
netrw*.vim	browsing (remote) directories and editing remote files
 | 
			
		||||
tar.vim		browsing tar files
 | 
			
		||||
zip.vim		browsing zip files
 | 
			
		||||
paste.vim	common code for mswin.vim, menu.vim and macmap.vim
 | 
			
		||||
paste.vim	common code for mswin.vim and menu.vim
 | 
			
		||||
spellfile.vim	downloading of a missing spell file
 | 
			
		||||
 | 
			
		||||
Omni completion files:
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@
 | 
			
		||||
" Former Maintainer:	Bram Moolenaar <Bram@vim.org>
 | 
			
		||||
 | 
			
		||||
" Define the string to use for items that are present both in Edit, Popup and
 | 
			
		||||
" Toolbar menu.  Also used in mswin.vim and macmap.vim.
 | 
			
		||||
" Toolbar menu.  Also used in mswin.vim.
 | 
			
		||||
 | 
			
		||||
let paste#paste_cmd = {'n': ":call paste#Paste()<CR>"}
 | 
			
		||||
let paste#paste_cmd['v'] = '"-c<Esc>' . paste#paste_cmd['n']
 | 
			
		||||
 
 | 
			
		||||
@@ -84,9 +84,6 @@ The default color settings can be found in the source file
 | 
			
		||||
If you think you have a color scheme that is good enough to be used by others,
 | 
			
		||||
please check the following items:
 | 
			
		||||
 | 
			
		||||
- Source the $VIMRUNTIME/colors/tools/check_colors.vim script to check for
 | 
			
		||||
  common mistakes.
 | 
			
		||||
 | 
			
		||||
- Does it work in a color terminal as well as in the GUI? Is it consistent?
 | 
			
		||||
 | 
			
		||||
- Is "g:colors_name" set to a meaningful value?  In case of doubt you can do
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								runtime/doc/builtin.txt
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								runtime/doc/builtin.txt
									
									
									
										generated
									
									
									
								
							@@ -8702,7 +8702,7 @@ setcellwidths({list})                                          *setcellwidths()*
 | 
			
		||||
		To clear the overrides pass an empty {list}: >vim
 | 
			
		||||
		   call setcellwidths([])
 | 
			
		||||
 | 
			
		||||
<		You can use the script $VIMRUNTIME/tools/emoji_list.lua to see
 | 
			
		||||
<		You can use the script $VIMRUNTIME/scripts/emoji_list.lua to see
 | 
			
		||||
		the effect for known emoji characters.  Move the cursor
 | 
			
		||||
		through the text to check if the cell widths of your terminal
 | 
			
		||||
		match with what Vim knows about each emoji.  If it doesn't
 | 
			
		||||
 
 | 
			
		||||
@@ -548,9 +548,9 @@ gO			Show a filetype-specific, navigable "outline" of the
 | 
			
		||||
 | 
			
		||||
If you use the less or more program to view a file, you don't get syntax
 | 
			
		||||
highlighting.  Thus you would like to use Vim instead.  You can do this by
 | 
			
		||||
using the shell script "$VIMRUNTIME/macros/less.sh".
 | 
			
		||||
using the shell script "$VIMRUNTIME/scripts/less.sh".
 | 
			
		||||
 | 
			
		||||
This shell script uses the Vim script "$VIMRUNTIME/macros/less.vim".  It sets
 | 
			
		||||
This shell script uses the Vim script "$VIMRUNTIME/scripts/less.vim".  It sets
 | 
			
		||||
up mappings to simulate the commands that less supports.  Otherwise, you can
 | 
			
		||||
still use the Vim commands.
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -801,6 +801,10 @@ Plugins:
 | 
			
		||||
- logiPat
 | 
			
		||||
- rrhelper
 | 
			
		||||
- *vimball*
 | 
			
		||||
- macmap.vim
 | 
			
		||||
- tools/check_colors.vim
 | 
			
		||||
- macros/{justify,matchit,shellmenu,swapmous}.vim: use `packadd! justify` etc.
 | 
			
		||||
  directly
 | 
			
		||||
 | 
			
		||||
Providers:
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -103,7 +103,7 @@ endif
 | 
			
		||||
if !exists ("b:match_words")  &&
 | 
			
		||||
  \ exists ("loaded_matchit")
 | 
			
		||||
   "
 | 
			
		||||
   " The following lines enable the macros/matchit.vim plugin for
 | 
			
		||||
   " The following lines enable the matchit.vim plugin for
 | 
			
		||||
   " Ada-specific extended matching with the % key.
 | 
			
		||||
   "
 | 
			
		||||
   let s:notend      = '\%(\<end\s\+\)\@<!'
 | 
			
		||||
 
 | 
			
		||||
@@ -97,7 +97,7 @@ if !exists('*ErlangFoldText')
 | 
			
		||||
  endfunction
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
" The following lines enable the macros/matchit.vim plugin for extended
 | 
			
		||||
" The following lines enable the matchit.vim plugin for extended
 | 
			
		||||
" matching with the % key.
 | 
			
		||||
let b:match_ignorecase = 0
 | 
			
		||||
let b:match_words =
 | 
			
		||||
 
 | 
			
		||||
@@ -22,7 +22,7 @@ let b:undo_ftplugin .= "| unlet! b:match_ignorecase b:match_skip b:match_words"
 | 
			
		||||
let &l:define .= '\|\\new\(count\|dimen\|skip\|muskip\|box\|toks\|read\|write'
 | 
			
		||||
	\ .	'\|fam\|insert\)'
 | 
			
		||||
 | 
			
		||||
" The following lines enable the macros/matchit.vim plugin for
 | 
			
		||||
" The following lines enable the matchit.vim plugin for
 | 
			
		||||
" extended matching with the % key.
 | 
			
		||||
" There is no default meaning for \(...\) etc., but many users define one.
 | 
			
		||||
if exists("loaded_matchit")
 | 
			
		||||
 
 | 
			
		||||
@@ -210,7 +210,7 @@ if !exists("*s:ParseRpmVars")
 | 
			
		||||
    endfunction
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
" The following lines, along with the macros/matchit.vim plugin,
 | 
			
		||||
" The following lines, along with the matchit.vim plugin,
 | 
			
		||||
" make it easy to navigate the different sections of a spec file
 | 
			
		||||
" with the % key (thanks to Max Ischenko).
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -32,7 +32,7 @@ let &l:include .= '\|\\include{'
 | 
			
		||||
" TeX file has \include{fname} (LaTeX only), strip everything except "fname".
 | 
			
		||||
let &l:includeexpr = "substitute(v:fname, '^.\\{-}{\\|}.*', '', 'g')"
 | 
			
		||||
 | 
			
		||||
" The following lines enable the macros/matchit.vim plugin for
 | 
			
		||||
" The following lines enable the matchit.vim plugin for
 | 
			
		||||
" extended matching with the % key.
 | 
			
		||||
" ftplugin/plaintex.vim already defines b:match_skip and b:match_ignorecase
 | 
			
		||||
" and matches \(, \), \[, \], \{, and \} .
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								runtime/lua/vim/_meta/vimfn.lua
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								runtime/lua/vim/_meta/vimfn.lua
									
									
									
										generated
									
									
									
								
							@@ -7923,7 +7923,7 @@ function vim.fn.setbufvar(buf, varname, val) end
 | 
			
		||||
--- To clear the overrides pass an empty {list}: >vim
 | 
			
		||||
---    call setcellwidths([])
 | 
			
		||||
---
 | 
			
		||||
--- <You can use the script $VIMRUNTIME/tools/emoji_list.lua to see
 | 
			
		||||
--- <You can use the script $VIMRUNTIME/scripts/emoji_list.lua to see
 | 
			
		||||
--- the effect for known emoji characters.  Move the cursor
 | 
			
		||||
--- through the text to check if the cell widths of your terminal
 | 
			
		||||
--- match with what Vim knows about each emoji.  If it doesn't
 | 
			
		||||
 
 | 
			
		||||
@@ -1,75 +0,0 @@
 | 
			
		||||
" System gvimrc file for Mac OS X
 | 
			
		||||
" Author:	Benji Fisher <benji@member.AMS.org>
 | 
			
		||||
" Last Change: Thu Mar 09 09:00 AM 2006 EST
 | 
			
		||||
"
 | 
			
		||||
" Define Mac-standard keyboard shortcuts.
 | 
			
		||||
 | 
			
		||||
" We don't change 'cpoptions' here, because it would not be set properly when
 | 
			
		||||
" a .vimrc file is found later.  Thus don't use line continuation and use
 | 
			
		||||
" <special> in mappings.
 | 
			
		||||
 | 
			
		||||
nnoremap <special> <D-n> :confirm enew<CR>
 | 
			
		||||
vmap <special> <D-n> <Esc><D-n>gv
 | 
			
		||||
imap <special> <D-n> <C-O><D-n>
 | 
			
		||||
cmap <special> <D-n> <C-C><D-n>
 | 
			
		||||
omap <special> <D-n> <Esc><D-n>
 | 
			
		||||
 | 
			
		||||
nnoremap <special> <D-o> :browse confirm e<CR>
 | 
			
		||||
vmap <special> <D-o> <Esc><D-o>gv
 | 
			
		||||
imap <special> <D-o> <C-O><D-o>
 | 
			
		||||
cmap <special> <D-o> <C-C><D-o>
 | 
			
		||||
omap <special> <D-o> <Esc><D-o>
 | 
			
		||||
 | 
			
		||||
nnoremap <silent> <special> <D-w> :if winheight(2) < 0 <Bar> confirm enew <Bar> else <Bar> confirm close <Bar> endif<CR>
 | 
			
		||||
vmap <special> <D-w> <Esc><D-w>gv
 | 
			
		||||
imap <special> <D-w> <C-O><D-w>
 | 
			
		||||
cmap <special> <D-w> <C-C><D-w>
 | 
			
		||||
omap <special> <D-w> <Esc><D-w>
 | 
			
		||||
 | 
			
		||||
nnoremap <silent> <special> <D-s> :if expand("%") == ""<Bar>browse confirm w<Bar> else<Bar>confirm w<Bar>endif<CR>
 | 
			
		||||
vmap <special> <D-s> <Esc><D-s>gv
 | 
			
		||||
imap <special> <D-s> <C-O><D-s>
 | 
			
		||||
cmap <special> <D-s> <C-C><D-s>
 | 
			
		||||
omap <special> <D-s> <Esc><D-s>
 | 
			
		||||
 | 
			
		||||
nnoremap <special> <D-S-s> :browse confirm saveas<CR>
 | 
			
		||||
vmap <special> <D-S-s> <Esc><D-s>gv
 | 
			
		||||
imap <special> <D-S-s> <C-O><D-s>
 | 
			
		||||
cmap <special> <D-S-s> <C-C><D-s>
 | 
			
		||||
omap <special> <D-S-s> <Esc><D-s>
 | 
			
		||||
 | 
			
		||||
" From the Edit menu of SimpleText:
 | 
			
		||||
nnoremap <special> <D-z> u
 | 
			
		||||
vmap <special> <D-z> <Esc><D-z>gv
 | 
			
		||||
imap <special> <D-z> <C-O><D-z>
 | 
			
		||||
cmap <special> <D-z> <C-C><D-z>
 | 
			
		||||
omap <special> <D-z> <Esc><D-z>
 | 
			
		||||
 | 
			
		||||
vnoremap <special> <D-x> "+x
 | 
			
		||||
 | 
			
		||||
vnoremap <special> <D-c> "+y
 | 
			
		||||
 | 
			
		||||
cnoremap <special> <D-c> <C-Y>
 | 
			
		||||
 | 
			
		||||
nnoremap <special> <D-v> "+gP
 | 
			
		||||
cnoremap <special> <D-v> <C-R>+
 | 
			
		||||
execute 'vnoremap <script> <special> <D-v>' paste#paste_cmd['v']
 | 
			
		||||
execute 'inoremap <script> <special> <D-v>' paste#paste_cmd['i']
 | 
			
		||||
 | 
			
		||||
nnoremap <silent> <special> <D-a> :if &slm != ""<Bar>exe ":norm gggH<C-O>G"<Bar> else<Bar>exe ":norm ggVG"<Bar>endif<CR>
 | 
			
		||||
vmap <special> <D-a> <Esc><D-a>
 | 
			
		||||
imap <special> <D-a> <Esc><D-a>
 | 
			
		||||
cmap <special> <D-a> <C-C><D-a>
 | 
			
		||||
omap <special> <D-a> <Esc><D-a>
 | 
			
		||||
 | 
			
		||||
nnoremap <special> <D-f> /
 | 
			
		||||
vmap <special> <D-f> <Esc><D-f>
 | 
			
		||||
imap <special> <D-f> <Esc><D-f>
 | 
			
		||||
cmap <special> <D-f> <C-C><D-f>
 | 
			
		||||
omap <special> <D-f> <Esc><D-f>
 | 
			
		||||
 | 
			
		||||
nnoremap <special> <D-g> n
 | 
			
		||||
vmap <special> <D-g> <Esc><D-g>
 | 
			
		||||
imap <special> <D-g> <C-O><D-g>
 | 
			
		||||
cmap <special> <D-g> <C-C><D-g>
 | 
			
		||||
omap <special> <D-g> <Esc><D-g>
 | 
			
		||||
@@ -1,119 +0,0 @@
 | 
			
		||||
" Vim Plugin:	Edit the file with an existing Vim if possible
 | 
			
		||||
" Maintainer:	The Vim Project <https://github.com/vim/vim>
 | 
			
		||||
" Last Change:	2023 Aug 13
 | 
			
		||||
 | 
			
		||||
" This is a plugin, drop it in your (Unix) ~/.vim/plugin or (Win32)
 | 
			
		||||
" $VIM/vimfiles/plugin directory.  Or make a symbolic link, so that you
 | 
			
		||||
" automatically use the latest version.
 | 
			
		||||
 | 
			
		||||
" This plugin serves two purposes:
 | 
			
		||||
" 1. On startup, if we were invoked with one file name argument and the file
 | 
			
		||||
"    is not modified then try to find another Vim instance that is editing
 | 
			
		||||
"    this file.  If there is one then bring it to the foreground and exit.
 | 
			
		||||
" 2. When a file is edited and a swap file exists for it, try finding that
 | 
			
		||||
"    other Vim and bring it to the foreground.  Requires Vim 7, because it
 | 
			
		||||
"    uses the SwapExists autocommand event.
 | 
			
		||||
if v:version < 700
 | 
			
		||||
  finish
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
" Function that finds the Vim instance that is editing "filename" and brings
 | 
			
		||||
" it to the foreground.
 | 
			
		||||
func s:EditElsewhere(filename)
 | 
			
		||||
  let fname_esc = substitute(a:filename, "'", "''", "g")
 | 
			
		||||
 | 
			
		||||
  let servers = serverlist()
 | 
			
		||||
  while servers != ''
 | 
			
		||||
    " Get next server name in "servername"; remove it from "servers".
 | 
			
		||||
    let i = match(servers, "\n")
 | 
			
		||||
    if i == -1
 | 
			
		||||
      let servername = servers
 | 
			
		||||
      let servers = ''
 | 
			
		||||
    else
 | 
			
		||||
      let servername = strpart(servers, 0, i)
 | 
			
		||||
      let servers = strpart(servers, i + 1)
 | 
			
		||||
    endif
 | 
			
		||||
 | 
			
		||||
    " Skip ourselves.
 | 
			
		||||
    if servername ==? v:servername
 | 
			
		||||
      continue
 | 
			
		||||
    endif
 | 
			
		||||
 | 
			
		||||
    " Check if this server is editing our file.
 | 
			
		||||
    if remote_expr(servername, "bufloaded('" . fname_esc . "')")
 | 
			
		||||
      " Yes, bring it to the foreground.
 | 
			
		||||
      if has("win32")
 | 
			
		||||
	call remote_foreground(servername)
 | 
			
		||||
      endif
 | 
			
		||||
      call remote_expr(servername, "foreground()")
 | 
			
		||||
 | 
			
		||||
      if remote_expr(servername, "exists('*EditExisting')")
 | 
			
		||||
	" Make sure the file is visible in a window (not hidden).
 | 
			
		||||
	" If v:swapcommand exists and is set, send it to the server.
 | 
			
		||||
	if exists("v:swapcommand")
 | 
			
		||||
	  let c = substitute(v:swapcommand, "'", "''", "g")
 | 
			
		||||
	  call remote_expr(servername, "EditExisting('" . fname_esc . "', '" . c . "')")
 | 
			
		||||
	else
 | 
			
		||||
	  call remote_expr(servername, "EditExisting('" . fname_esc . "', '')")
 | 
			
		||||
	endif
 | 
			
		||||
      endif
 | 
			
		||||
 | 
			
		||||
      if !(has('vim_starting') && has('gui_running') && has('gui_win32'))
 | 
			
		||||
	" Tell the user what is happening.  Not when the GUI is starting
 | 
			
		||||
	" though, it would result in a message box.
 | 
			
		||||
	echomsg "File is being edited by " . servername
 | 
			
		||||
	sleep 2
 | 
			
		||||
      endif
 | 
			
		||||
      return 'q'
 | 
			
		||||
    endif
 | 
			
		||||
  endwhile
 | 
			
		||||
  return ''
 | 
			
		||||
endfunc
 | 
			
		||||
 | 
			
		||||
" When the plugin is loaded and there is one file name argument: Find another
 | 
			
		||||
" Vim server that is editing this file right now.
 | 
			
		||||
if argc() == 1 && !&modified
 | 
			
		||||
  if s:EditElsewhere(expand("%:p")) == 'q'
 | 
			
		||||
    quit
 | 
			
		||||
  endif
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
" Setup for handling the situation that an existing swap file is found.
 | 
			
		||||
try
 | 
			
		||||
  au! SwapExists * let v:swapchoice = s:EditElsewhere(expand("<afile>:p"))
 | 
			
		||||
catch
 | 
			
		||||
  " Without SwapExists we don't do anything for ":edit" commands
 | 
			
		||||
endtry
 | 
			
		||||
 | 
			
		||||
" Function used on the server to make the file visible and possibly execute a
 | 
			
		||||
" command.
 | 
			
		||||
func! EditExisting(fname, command)
 | 
			
		||||
  " Get the window number of the file in the current tab page.
 | 
			
		||||
  let winnr = bufwinnr(a:fname)
 | 
			
		||||
  if winnr <= 0
 | 
			
		||||
    " Not found, look in other tab pages.
 | 
			
		||||
    let bufnr = bufnr(a:fname)
 | 
			
		||||
    for i in range(tabpagenr('$'))
 | 
			
		||||
      if index(tabpagebuflist(i + 1), bufnr) >= 0
 | 
			
		||||
	" Make this tab page the current one and find the window number.
 | 
			
		||||
	exe 'tabnext ' . (i + 1)
 | 
			
		||||
	let winnr = bufwinnr(a:fname)
 | 
			
		||||
	break
 | 
			
		||||
      endif
 | 
			
		||||
    endfor
 | 
			
		||||
  endif
 | 
			
		||||
 | 
			
		||||
  if winnr > 0
 | 
			
		||||
    exe winnr . "wincmd w"
 | 
			
		||||
  elseif exists('*fnameescape')
 | 
			
		||||
    exe "split " . fnameescape(a:fname)
 | 
			
		||||
  else
 | 
			
		||||
    exe "split " . escape(a:fname, " \t\n*?[{`$\\%#'\"|!<")
 | 
			
		||||
  endif
 | 
			
		||||
 | 
			
		||||
  if a:command != ''
 | 
			
		||||
    exe "normal! " . a:command
 | 
			
		||||
  endif
 | 
			
		||||
 | 
			
		||||
  redraw
 | 
			
		||||
endfunc
 | 
			
		||||
@@ -1,3 +0,0 @@
 | 
			
		||||
" Load the justify package.
 | 
			
		||||
" For those users who were loading the justify plugin from here.
 | 
			
		||||
packadd justify
 | 
			
		||||
@@ -1,2 +0,0 @@
 | 
			
		||||
" This file is a compatibility stub for any plugins which source it.
 | 
			
		||||
" Nvim already loads the matchit plugin by default; see ':help pi_matchit.txt'.
 | 
			
		||||
@@ -1,3 +0,0 @@
 | 
			
		||||
" Load the shellmenu package.
 | 
			
		||||
" For those users who were loading the shellmenu plugin from here.
 | 
			
		||||
packadd shellmenu
 | 
			
		||||
@@ -1,3 +0,0 @@
 | 
			
		||||
" Load the swapmouse package.
 | 
			
		||||
" For those users who were loading the swapmous plugin from here.
 | 
			
		||||
packadd swapmouse
 | 
			
		||||
@@ -4,7 +4,7 @@ rem Read stdin if no arguments were given.
 | 
			
		||||
rem Written by Ken Takata.
 | 
			
		||||
 | 
			
		||||
if "%1"=="" (
 | 
			
		||||
  nvim --cmd "let no_plugin_maps = 1" -c "runtime! macros/less.vim" -
 | 
			
		||||
  nvim --cmd "let no_plugin_maps = 1" -c "runtime! scripts/less.vim" -
 | 
			
		||||
) else (
 | 
			
		||||
  nvim --cmd "let no_plugin_maps = 1" -c "runtime! macros/less.vim" %*
 | 
			
		||||
  nvim --cmd "let no_plugin_maps = 1" -c "runtime! scripts/less.vim" %*
 | 
			
		||||
)
 | 
			
		||||
@@ -8,9 +8,9 @@ if test -t 1; then
 | 
			
		||||
      echo "Missing filename" 1>&2
 | 
			
		||||
      exit
 | 
			
		||||
    fi
 | 
			
		||||
    nvim --cmd 'let no_plugin_maps = 1' -c 'runtime! macros/less.vim' -
 | 
			
		||||
    nvim --cmd 'let no_plugin_maps = 1' -c 'runtime! scripts/less.vim' -
 | 
			
		||||
  else
 | 
			
		||||
    nvim --cmd 'let no_plugin_maps = 1' -c 'runtime! macros/less.vim' "$@"
 | 
			
		||||
    nvim --cmd 'let no_plugin_maps = 1' -c 'runtime! scripts/less.vim' "$@"
 | 
			
		||||
  fi
 | 
			
		||||
else
 | 
			
		||||
  # Output is not a terminal, cat arguments or stdin
 | 
			
		||||
@@ -1,252 +0,0 @@
 | 
			
		||||
" This script tests a color scheme for some errors and lists potential errors.
 | 
			
		||||
" Load the scheme and source this script, like this:
 | 
			
		||||
"    :edit colors/desert.vim | :so tools/check_colors.vim
 | 
			
		||||
 | 
			
		||||
let s:save_cpo= &cpo
 | 
			
		||||
set cpo&vim
 | 
			
		||||
 | 
			
		||||
func! Test_check_colors()
 | 
			
		||||
  let l:savedview = winsaveview()
 | 
			
		||||
  call cursor(1,1)
 | 
			
		||||
 | 
			
		||||
  " err is
 | 
			
		||||
  " {
 | 
			
		||||
  "    colors_name: "message",
 | 
			
		||||
  "    init: "message",
 | 
			
		||||
  "    background: "message",
 | 
			
		||||
  "    ....etc
 | 
			
		||||
  "    highlight: {
 | 
			
		||||
  "       'Normal': "Missing ...",
 | 
			
		||||
  "       'Conceal': "Missing ..."
 | 
			
		||||
  "       ....etc
 | 
			
		||||
  "    }
 | 
			
		||||
  " }
 | 
			
		||||
  let err = {}
 | 
			
		||||
 | 
			
		||||
  " 1) Check g:colors_name is existing
 | 
			
		||||
  if search('\<\%(g:\)\?colors_name\>', 'cnW') == 0
 | 
			
		||||
    let err['colors_name'] = 'g:colors_name not set'
 | 
			
		||||
  else
 | 
			
		||||
    let err['colors_name'] = 'OK'
 | 
			
		||||
  endif
 | 
			
		||||
 | 
			
		||||
  " 2) Check for some well-defined highlighting groups
 | 
			
		||||
  let hi_groups = [
 | 
			
		||||
        \ 'ColorColumn',
 | 
			
		||||
        \ 'Comment',
 | 
			
		||||
        \ 'Conceal',
 | 
			
		||||
        \ 'Constant',
 | 
			
		||||
        \ 'Cursor',
 | 
			
		||||
        \ 'CursorColumn',
 | 
			
		||||
        \ 'CursorLine',
 | 
			
		||||
        \ 'CursorLineNr',
 | 
			
		||||
        \ 'DiffAdd',
 | 
			
		||||
        \ 'DiffChange',
 | 
			
		||||
        \ 'DiffDelete',
 | 
			
		||||
        \ 'DiffText',
 | 
			
		||||
        \ 'Directory',
 | 
			
		||||
        \ 'EndOfBuffer',
 | 
			
		||||
        \ 'Error',
 | 
			
		||||
        \ 'ErrorMsg',
 | 
			
		||||
        \ 'FoldColumn',
 | 
			
		||||
        \ 'Folded',
 | 
			
		||||
        \ 'Identifier',
 | 
			
		||||
        \ 'Ignore',
 | 
			
		||||
        \ 'IncSearch',
 | 
			
		||||
        \ 'LineNr',
 | 
			
		||||
        \ 'MatchParen',
 | 
			
		||||
        \ 'ModeMsg',
 | 
			
		||||
        \ 'MoreMsg',
 | 
			
		||||
        \ 'NonText',
 | 
			
		||||
        \ 'Normal',
 | 
			
		||||
        \ 'Pmenu',
 | 
			
		||||
        \ 'PmenuSbar',
 | 
			
		||||
        \ 'PmenuSel',
 | 
			
		||||
        \ 'PmenuThumb',
 | 
			
		||||
        \ 'PreProc',
 | 
			
		||||
        \ 'Question',
 | 
			
		||||
        \ 'QuickFixLine',
 | 
			
		||||
        \ 'Search',
 | 
			
		||||
        \ 'SignColumn',
 | 
			
		||||
        \ 'Special',
 | 
			
		||||
        \ 'SpecialKey',
 | 
			
		||||
        \ 'SpellBad',
 | 
			
		||||
        \ 'SpellCap',
 | 
			
		||||
        \ 'SpellLocal',
 | 
			
		||||
        \ 'SpellRare',
 | 
			
		||||
        \ 'Statement',
 | 
			
		||||
        \ 'StatusLine',
 | 
			
		||||
        \ 'StatusLineNC',
 | 
			
		||||
        \ 'StatusLineTerm',
 | 
			
		||||
        \ 'StatusLineTermNC',
 | 
			
		||||
        \ 'TabLine',
 | 
			
		||||
        \ 'TabLineFill',
 | 
			
		||||
        \ 'TabLineSel',
 | 
			
		||||
        \ 'Title',
 | 
			
		||||
        \ 'Todo',
 | 
			
		||||
        \ 'ToolbarButton',
 | 
			
		||||
        \ 'ToolbarLine',
 | 
			
		||||
        \ 'Type',
 | 
			
		||||
        \ 'Underlined',
 | 
			
		||||
        \ 'VertSplit',
 | 
			
		||||
        \ 'Visual',
 | 
			
		||||
        \ 'VisualNOS',
 | 
			
		||||
        \ 'WarningMsg',
 | 
			
		||||
        \ 'WildMenu',
 | 
			
		||||
        \ ]
 | 
			
		||||
  let groups = {}
 | 
			
		||||
  for group in hi_groups
 | 
			
		||||
    if search('\c@suppress\s\+\<' .. group .. '\>', 'cnW')
 | 
			
		||||
      " skip check, if the script contains a line like
 | 
			
		||||
      " @suppress Visual:
 | 
			
		||||
      continue
 | 
			
		||||
    endif
 | 
			
		||||
    if search('hi\%[ghlight]!\= \+link \+' .. group, 'cnW') " Linked group
 | 
			
		||||
      continue
 | 
			
		||||
    endif
 | 
			
		||||
    if !search('hi\%[ghlight] \+\<' .. group .. '\>', 'cnW')
 | 
			
		||||
      let groups[group] = 'No highlight definition for ' .. group
 | 
			
		||||
      continue
 | 
			
		||||
    endif
 | 
			
		||||
    if !search('hi\%[ghlight] \+\<' .. group .. '\>.*[bf]g=', 'cnW')
 | 
			
		||||
      let groups[group] = 'Missing foreground or background color for ' .. group
 | 
			
		||||
      continue
 | 
			
		||||
    endif
 | 
			
		||||
    if search('hi\%[ghlight] \+\<' .. group .. '\>.*guibg=', 'cnW') &&
 | 
			
		||||
        \ !search('hi\%[ghlight] \+\<' .. group .. '\>.*ctermbg=', 'cnW')
 | 
			
		||||
	\ && group != 'Cursor'
 | 
			
		||||
      let groups[group] = 'Missing bg terminal color for ' .. group
 | 
			
		||||
      continue
 | 
			
		||||
    endif
 | 
			
		||||
    if !search('hi\%[ghlight] \+\<' .. group .. '\>.*guifg=', 'cnW')
 | 
			
		||||
	  \ && group !~ '^Diff'
 | 
			
		||||
      let groups[group] = 'Missing guifg definition for ' .. group
 | 
			
		||||
      continue
 | 
			
		||||
    endif
 | 
			
		||||
    if !search('hi\%[ghlight] \+\<' .. group .. '\>.*ctermfg=', 'cnW')
 | 
			
		||||
	  \ && group !~ '^Diff'
 | 
			
		||||
	  \ && group != 'Cursor'
 | 
			
		||||
      let groups[group] = 'Missing ctermfg definition for ' .. group
 | 
			
		||||
      continue
 | 
			
		||||
    endif
 | 
			
		||||
    " do not check for background colors, they could be intentionally left out
 | 
			
		||||
    call cursor(1,1)
 | 
			
		||||
  endfor
 | 
			
		||||
  let err['highlight'] = groups
 | 
			
		||||
 | 
			
		||||
  " 3) Check, that it does not set background highlighting
 | 
			
		||||
  " Doesn't ':hi Normal ctermfg=253 ctermfg=233' also set the background sometimes?
 | 
			
		||||
  let bg_set = '\(set\?\|setl\(ocal\)\?\) .*\(background\|bg\)=\(dark\|light\)'
 | 
			
		||||
  let bg_let = 'let \%([&]\%([lg]:\)\?\)\%(background\|bg\)\s*=\s*\([''"]\?\)\w\+\1'
 | 
			
		||||
  let bg_pat = '\%(' .. bg_set .. '\|' .. bg_let .. '\)'
 | 
			
		||||
  let line = search(bg_pat, 'cnW')
 | 
			
		||||
  if search(bg_pat, 'cnW')
 | 
			
		||||
    exe line
 | 
			
		||||
    if search('hi \U\w\+\s\+\S', 'cbnW')
 | 
			
		||||
      let err['background'] = 'Should not set background option after :hi statement'
 | 
			
		||||
    endif
 | 
			
		||||
  else
 | 
			
		||||
    let err['background'] = 'OK'
 | 
			
		||||
  endif
 | 
			
		||||
  call cursor(1,1)
 | 
			
		||||
 | 
			
		||||
  " 4) Check, that t_Co is checked
 | 
			
		||||
  let pat = '[&]t_Co\s*[<>=]=\?\s*\d\+'
 | 
			
		||||
  if !search(pat, 'ncW')
 | 
			
		||||
    let err['t_Co'] = 'Does not check terminal for capable colors'
 | 
			
		||||
  endif
 | 
			
		||||
 | 
			
		||||
  " 5) Initializes correctly, e.g. should have a section like
 | 
			
		||||
  " hi clear
 | 
			
		||||
  " if exists("syntax_on")
 | 
			
		||||
  " syntax reset
 | 
			
		||||
  " endif
 | 
			
		||||
  let pat = 'hi\%[ghlight]\s*clear\n\s*if\s*exists(\([''"]\)syntax_on\1)\n\s*syn\%[tax]\s*reset\n\s*endif'
 | 
			
		||||
  if !search(pat, 'cnW')
 | 
			
		||||
    let err['init'] = 'No initialization'
 | 
			
		||||
  endif
 | 
			
		||||
 | 
			
		||||
  " 6) Does not use :syn on
 | 
			
		||||
  if search('syn\%[tax]\s\+on', 'cnW')
 | 
			
		||||
    let err['background'] = 'Should not issue :syn on'
 | 
			
		||||
  endif
 | 
			
		||||
 | 
			
		||||
  " 7) Does not define filetype specific groups like vimCommand, htmlTag,
 | 
			
		||||
  let hi_groups = filter(getcompletion('', 'filetype'), { _,v -> v !~# '\%[no]syn\%(color\|load\|tax\)' })
 | 
			
		||||
  let ft_groups = []
 | 
			
		||||
  " let group = '\%('.join(hi_groups, '\|').'\)' " More efficient than a for loop, but less informative
 | 
			
		||||
  for group in hi_groups
 | 
			
		||||
    let pat = '\Chi\%[ghlight]!\= *\%[link] \+\zs' .. group .. '\w\+\>\ze \+.' " Skips `hi clear`
 | 
			
		||||
    if search(pat, 'cW')
 | 
			
		||||
      call add(ft_groups, matchstr(getline('.'), pat))
 | 
			
		||||
    endif
 | 
			
		||||
    call cursor(1,1)
 | 
			
		||||
  endfor
 | 
			
		||||
  if !empty(ft_groups)
 | 
			
		||||
    let err['filetype'] = get(err, 'filetype', 'Should not define: ') . join(uniq(sort(ft_groups)))
 | 
			
		||||
  endif
 | 
			
		||||
 | 
			
		||||
  " 8) Were debugPC and debugBreakpoint defined?
 | 
			
		||||
  for group in ['debugPC', 'debugBreakpoint']
 | 
			
		||||
    let pat = '\Chi\%[ghlight]!\= *\%[link] \+\zs' .. group .. '\>'
 | 
			
		||||
    if search(pat, 'cnW')
 | 
			
		||||
      let line = search(pat, 'cW')
 | 
			
		||||
      let err['filetype'] = get(err, 'filetype', 'Should not define: ') . matchstr(getline('.'), pat). ' '
 | 
			
		||||
    endif
 | 
			
		||||
    call cursor(1,1)
 | 
			
		||||
  endfor
 | 
			
		||||
 | 
			
		||||
  " 9) Normal should be defined first, not use reverse, fg or bg
 | 
			
		||||
  call cursor(1,1)
 | 
			
		||||
  let pat = 'hi\%[ghlight] \+\%(link\|clear\)\@!\w\+\>'
 | 
			
		||||
  call search(pat, 'cW') " Look for the first hi def, skipping `hi link` and `hi clear`
 | 
			
		||||
  if getline('.') !~# '\m\<Normal\>'
 | 
			
		||||
    let err['highlight']['Normal'] = 'Should be defined first'
 | 
			
		||||
  elseif getline('.') =~# '\m\%(=\%(fg\|bg\)\)'
 | 
			
		||||
    let err['highlight']['Normal'] = "Should not use 'fg' or 'bg'"
 | 
			
		||||
  elseif getline('.') =~# '\m=\%(inv\|rev\)erse'
 | 
			
		||||
    let err['highlight']['Normal'] = 'Should not use reverse mode'
 | 
			
		||||
  endif
 | 
			
		||||
 | 
			
		||||
  call winrestview(l:savedview)
 | 
			
		||||
  let g:err = err
 | 
			
		||||
 | 
			
		||||
  " print Result
 | 
			
		||||
  call Result(err)
 | 
			
		||||
endfu
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
fu! Result(err)
 | 
			
		||||
  let do_groups = 0
 | 
			
		||||
  echohl Title|echomsg "---------------"|echohl Normal
 | 
			
		||||
  for key in sort(keys(a:err))
 | 
			
		||||
    if key ==# 'highlight'
 | 
			
		||||
      let do_groups = !empty(a:err[key])
 | 
			
		||||
      continue
 | 
			
		||||
    else
 | 
			
		||||
      if a:err[key] !~ 'OK'
 | 
			
		||||
        echohl Title
 | 
			
		||||
      endif
 | 
			
		||||
      echomsg printf("%15s: %s", key, a:err[key])
 | 
			
		||||
      echohl Normal
 | 
			
		||||
    endif
 | 
			
		||||
  endfor
 | 
			
		||||
  echohl Title|echomsg "---------------"|echohl Normal
 | 
			
		||||
  if do_groups
 | 
			
		||||
    echohl Title | echomsg "Groups" | echohl Normal
 | 
			
		||||
    for v1 in sort(keys(a:err['highlight']))
 | 
			
		||||
      echomsg printf("%25s: %s", v1, a:err['highlight'][v1])
 | 
			
		||||
    endfor
 | 
			
		||||
  endif
 | 
			
		||||
endfu
 | 
			
		||||
 | 
			
		||||
try
 | 
			
		||||
  call Test_check_colors()
 | 
			
		||||
catch
 | 
			
		||||
  echohl ErrorMsg
 | 
			
		||||
  echomsg v:exception
 | 
			
		||||
  echohl NONE
 | 
			
		||||
finally
 | 
			
		||||
  let &cpo = s:save_cpo
 | 
			
		||||
  unlet s:save_cpo
 | 
			
		||||
endtry
 | 
			
		||||
@@ -9540,7 +9540,7 @@ M.funcs = {
 | 
			
		||||
      To clear the overrides pass an empty {list}: >vim
 | 
			
		||||
         call setcellwidths([])
 | 
			
		||||
 | 
			
		||||
      <You can use the script $VIMRUNTIME/tools/emoji_list.lua to see
 | 
			
		||||
      <You can use the script $VIMRUNTIME/scripts/emoji_list.lua to see
 | 
			
		||||
      the effect for known emoji characters.  Move the cursor
 | 
			
		||||
      through the text to check if the cell widths of your terminal
 | 
			
		||||
      match with what Vim knows about each emoji.  If it doesn't
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user