From 2107958b2ef7a92fa8f7302d74ddfa372e9178ee Mon Sep 17 00:00:00 2001 From: Maxim Likhachev Date: Wed, 16 Jul 2014 16:15:28 +0600 Subject: [PATCH] =?UTF-8?q?vim:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=BF=D0=BB=D0=B0=D0=B3=D0=B8=D0=BD=20AnsiESC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- etc/soft/vim/vim/+plugins/AnsiESC/README.md | 49 + .../vim/vim/+plugins/AnsiESC/autoload/AnsiEsc.vim | 1057 ++++++++++++++++++++ etc/soft/vim/vim/+plugins/AnsiESC/doc/AnsiEsc.txt | 135 +++ .../vim/+plugins/AnsiESC/plugin/AnsiEscPlugin.vim | 32 + .../vim/vim/+plugins/AnsiESC/plugin/cecutil.vim | 538 ++++++++++ 5 files changed, 1811 insertions(+) create mode 100644 etc/soft/vim/vim/+plugins/AnsiESC/README.md create mode 100644 etc/soft/vim/vim/+plugins/AnsiESC/autoload/AnsiEsc.vim create mode 100644 etc/soft/vim/vim/+plugins/AnsiESC/doc/AnsiEsc.txt create mode 100644 etc/soft/vim/vim/+plugins/AnsiESC/plugin/AnsiEscPlugin.vim create mode 100644 etc/soft/vim/vim/+plugins/AnsiESC/plugin/cecutil.vim diff --git a/etc/soft/vim/vim/+plugins/AnsiESC/README.md b/etc/soft/vim/vim/+plugins/AnsiESC/README.md new file mode 100644 index 0000000..a932bb6 --- /dev/null +++ b/etc/soft/vim/vim/+plugins/AnsiESC/README.md @@ -0,0 +1,49 @@ +# Improved AnsiEsc.vim + +This is a [Vim script №302: AnsiEsc.vim](http://www.vim.org/scripts/script.php?script_id=302) +updated to [latest author's version](http://www.drchip.org/astronaut/vim/index.html#ANSIESC) +with several fixes/improvements. + +Download .zip/.vmb from http://www.vim.org/scripts/script.php?script_id=4979 + +## Changes + +* updated to latest author's version: **13e** (Dec 06, 2012) +* add support for simple ANSI sequences like "bold" (without defining color) +* add support for 16-color 'light' escape sequences (by Andy Berdan, merged from https://github.com/berdandy/AnsiEsc.vim) +* disable `\swp` and `\rwp` maps if `g:no_plugin_maps` or `g:no_cecutil_maps` exists +* disable DrChip/AnsiEsc menu if `g:no_drchip_menu` or `g:no_ansiesc_menu` exists +* add support for simple ANSI sequences like disable bold/italic/etc. + +## Original README + +This is a mirror of http://www.vim.org/scripts/script.php?script_id=302 + +Files with ANSI escape sequences look good when dumped onto a terminal that accepts them, but have been a distracting clutter when edited via vim. The AnsiEsc.vim file, when sourced, will conceal Ansi escape sequences but will cause subsequent text to be colored as the escape sequence specifies when used with Vince Negri's conceal patch. AnsiEsc.vim v3 or later uses the conceal patch to accomplish this. + +Without that conceal patch, the best that can be done is to suppress Ansi escape sequences with "Ignore" highlighting. AnsiEsc.vim v2 does that. + +### VIM Developer's Corner: + +Vince Negri's "conceal" patch to vim6.3 and vim7.0 allows one to suppress strings within a line; ie. in-line folding! This feature is ideal for Ansi escape sequence handling. Starting with AnsiEsc's version 3 the script makes use of that new capability to display Ansi-sequence containing files. The Ansi escape sequences themselves are concealed (except for the line where the cursor is), but they have their desired colorizing effect. Note that you must have Vim7.0 with the +conceal option for the latest (v8) to work. Apply Vince Negri's patch to the Vim 7.0 source code and compile Vim for "huge" features. Once you've done that, simply source the file in when you want to see Ansi-escape sequenced text in Vim. + +### Typical Compiling Directions: + +To use the AnsiEsc v2, just source it in when you wish to; your vim version needs +syntax, which is fairly common. + +To use the conceal-mode AnsiEsc (those with versions >= 3), you'll need to have a Vim that has been patched with Vince Negri's concealownsyntax patch; the version will show both +syntax and +conceal. + +Typical compiling directions: + +* cd ..wherever../vim70/ +* browse http://sites.google.com/site/vincenegri/ for the conceal/ownsyntax patch +* patch -p0 < conceal-ownsyntax.diff +* make distclean +* configure --with-features=huge +* make +* make install + + +(also see: vimtip#1308) +(alpha/beta version available at http://mysite.verizon.net/astronaut/vim/index.html#ANSIESC) + diff --git a/etc/soft/vim/vim/+plugins/AnsiESC/autoload/AnsiEsc.vim b/etc/soft/vim/vim/+plugins/AnsiESC/autoload/AnsiEsc.vim new file mode 100644 index 0000000..970579c --- /dev/null +++ b/etc/soft/vim/vim/+plugins/AnsiESC/autoload/AnsiEsc.vim @@ -0,0 +1,1057 @@ +" AnsiEsc.vim: Uses syntax highlighting. A vim 7.0 plugin! +" Language: Text with ansi escape sequences +" Maintainer: Charles E. Campbell +" Version: 13e ASTRO-ONLY +" Date: Dec 06, 2012 +" +" Usage: :AnsiEsc +" Note: This plugin requires +conceal +" +" GetLatestVimScripts: 302 1 :AutoInstall: AnsiEsc.vim +"redraw!|call DechoSep()|call inputsave()|call input("Press to continue")|call inputrestore() +" --------------------------------------------------------------------- +"DechoTabOn +" Load Once: {{{1 +if exists("g:loaded_AnsiEsc") + finish +endif +let g:loaded_AnsiEsc = "v13e" +if v:version < 700 + echohl WarningMsg + echo "***warning*** this version of AnsiEsc needs vim 7.0" + echohl Normal + finish +endif +let s:keepcpo= &cpo +set cpo&vim + +" --------------------------------------------------------------------- +" AnsiEsc#AnsiEsc: toggles ansi-escape code visualization {{{2 +fun! AnsiEsc#AnsiEsc(rebuild) +" call Dfunc("AnsiEsc#AnsiEsc(rebuild=".a:rebuild.")") + if a:rebuild +" call Decho("rebuilding AnsiEsc tables") + call AnsiEsc#AnsiEsc(0) + call AnsiEsc#AnsiEsc(0) +" call Dret("AnsiEsc#AnsiEsc") + return + endif + let bn= bufnr("%") + if !exists("s:AnsiEsc_enabled_{bn}") + let s:AnsiEsc_enabled_{bn}= 0 + endif + if s:AnsiEsc_enabled_{bn} + " disable AnsiEsc highlighting +" call Decho("disable AnsiEsc highlighting: s:AnsiEsc_ft_".bn."<".s:AnsiEsc_ft_{bn}."> bn#".bn) + if exists("g:colors_name")|let colorname= g:colors_name|endif + if exists("s:conckeep_{bufnr('%')}")|let &l:conc= s:conckeep_{bufnr('%')}|unlet s:conckeep_{bufnr('%')}|endif + if exists("s:colekeep_{bufnr('%')}")|let &l:cole= s:colekeep_{bufnr('%')}|unlet s:colekeep_{bufnr('%')}|endif + if exists("s:cocukeep_{bufnr('%')}")|let &l:cocu= s:cocukeep_{bufnr('%')}|unlet s:cocukeep_{bufnr('%')}|endif + hi! link ansiStop NONE + syn clear + hi clear + syn reset + exe "set ft=".s:AnsiEsc_ft_{bn} + if exists("colorname")|exe "colors ".colorname|endif + let s:AnsiEsc_enabled_{bn}= 0 + if !exists('g:no_drchip_menu') && !exists('g:no_ansiesc_menu') + if has("gui_running") && has("menu") && &go =~# 'm' + " menu support + exe 'silent! unmenu '.g:DrChipTopLvlMenu.'AnsiEsc' + exe 'menu '.g:DrChipTopLvlMenu.'AnsiEsc.Start:AnsiEsc :AnsiEsc' + endif + endif + let &l:hl= s:hlkeep_{bufnr("%")} +" call Dret("AnsiEsc#AnsiEsc") + return + else + let s:AnsiEsc_ft_{bn} = &ft + let s:AnsiEsc_enabled_{bn} = 1 +" call Decho("enable AnsiEsc highlighting: s:AnsiEsc_ft_".bn."<".s:AnsiEsc_ft_{bn}."> bn#".bn) + if !exists('g:no_drchip_menu') && !exists('g:no_ansiesc_menu') + if has("gui_running") && has("menu") && &go =~# 'm' + " menu support + exe 'silent! unmenu '.g:DrChipTopLvlMenu.'AnsiEsc' + exe 'menu '.g:DrChipTopLvlMenu.'AnsiEsc.Stop:AnsiEsc :AnsiEsc' + endif + endif + + " ----------------- + " Conceal Support: {{{2 + " ----------------- + if has("conceal") + if v:version < 703 + if &l:conc != 3 + let s:conckeep_{bufnr('%')}= &cole + setlocal conc=3 +" call Decho("l:conc=".&l:conc) + endif + else + if &l:cole != 3 || &l:cocu != "nv" + let s:colekeep_{bufnr('%')}= &l:cole + let s:cocukeep_{bufnr('%')}= &l:cocu + setlocal cole=3 cocu=nv +" call Decho("l:cole=".&l:cole." l:cocu=".&l:cocu) + endif + endif + endif + endif + + syn clear + + " suppress escaped sequences that don't involve colors (which may or may not be ansi-compliant) + if has("conceal") + syn match ansiSuppress conceal '\e\[[0-9;]*[^m]' + syn match ansiSuppress conceal '\e\[?\d*[^m]' + syn match ansiSuppress conceal '\b' + else + syn match ansiSuppress '\e\[[0-9;]*[^m]' + syn match ansiSuppress '\e\[?\d*[^m]' + syn match ansiSuppress '\b' + endif + + " ------------------------------ + " Ansi Escape Sequence Handling: {{{2 + " ------------------------------ + syn region ansiNone start="\e\[[01;]m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiNone start="\e\[m" end="\e\["me=e-2 contains=ansiConceal + + " disable bold/italic/etc. - no way to disable one attribute, so disable them all + syn region ansiNone start="\e\[22m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiNone start="\e\[23m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiNone start="\e\[24m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiNone start="\e\[27m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiNone start="\e\[29m" end="\e\["me=e-2 contains=ansiConceal + + syn region ansiBlack start="\e\[;\=0\{0,2};\=30m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiRed start="\e\[;\=0\{0,2};\=31m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiGreen start="\e\[;\=0\{0,2};\=32m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiYellow start="\e\[;\=0\{0,2};\=33m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiBlue start="\e\[;\=0\{0,2};\=34m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiMagenta start="\e\[;\=0\{0,2};\=35m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiCyan start="\e\[;\=0\{0,2};\=36m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiWhite start="\e\[;\=0\{0,2};\=37m" end="\e\["me=e-2 contains=ansiConceal + " set default ansi to white + syn region ansiWhite start="\e\[;\=0\{0,2};\=39m" end="\e\["me=e-2 contains=ansiConceal + + syn region ansiBold start="\e\[;\=0\{0,2};\=1m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiBoldBlack start="\e\[;\=0\{0,2};\=\%(1;30\|30;1\)m" end="\e\["me=e-2 contains=ansiConceal + " this is supposed to be bold-black, ie, dark grey, but it doesn't work well + " on a lot of displays. We'll settle for non-bold white + syn region ansiWhite start="\e\[;\=0\{0,2};\=90m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiBoldRed start="\e\[;\=0\{0,2};\=\%(1;31\|31;1\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiBoldRed start="\e\[;\=0\{0,2};\=91m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiBoldGreen start="\e\[;\=0\{0,2};\=\%(1;32\|32;1\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiBoldGreen start="\e\[;\=0\{0,2};\=92m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiBoldYellow start="\e\[;\=0\{0,2};\=\%(1;33\|33;1\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiBoldYellow start="\e\[;\=0\{0,2};\=93m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiBoldBlue start="\e\[;\=0\{0,2};\=\%(1;34\|34;1\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiBoldBlue start="\e\[;\=0\{0,2};\=94m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiBoldMagenta start="\e\[;\=0\{0,2};\=\%(1;35\|35;1\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiBoldMagenta start="\e\[;\=0\{0,2};\=95m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiBoldCyan start="\e\[;\=0\{0,2};\=\%(1;36\|36;1\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiBoldCyan start="\e\[;\=0\{0,2};\=96m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiBoldWhite start="\e\[;\=0\{0,2};\=\%(1;37\|37;1\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiBoldWhite start="\e\[;\=0\{0,2};\=97m" end="\e\["me=e-2 contains=ansiConceal + + syn region ansiStandout start="\e\[;\=0\{0,2};\=\%(1;\)\=3m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiStandoutBlack start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(3;30\|30;3\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiStandoutRed start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(3;31\|31;3\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiStandoutGreen start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(3;32\|32;3\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiStandoutYellow start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(3;33\|33;3\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiStandoutBlue start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(3;34\|34;3\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiStandoutMagenta start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(3;35\|35;3\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiStandoutCyan start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(3;36\|36;3\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiStandoutWhite start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(3;37\|37;3\)m" end="\e\["me=e-2 contains=ansiConceal + + syn region ansiItalic start="\e\[;\=0\{0,2};\=\%(1;\)\=2m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiItalicBlack start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(2;30\|30;2\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiItalicRed start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(2;31\|31;2\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiItalicGreen start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(2;32\|32;2\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiItalicYellow start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(2;33\|33;2\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiItalicBlue start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(2;34\|34;2\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiItalicMagenta start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(2;35\|35;2\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiItalicCyan start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(2;36\|36;2\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiItalicWhite start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(2;37\|37;2\)m" end="\e\["me=e-2 contains=ansiConceal + + syn region ansiUnderline start="\e\[;\=0\{0,2};\=\%(1;\)\=4m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiUnderlineBlack start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(4;30\|30;4\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiUnderlineRed start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(4;31\|31;4\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiUnderlineGreen start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(4;32\|32;4\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiUnderlineYellow start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(4;33\|33;4\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiUnderlineBlue start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(4;34\|34;4\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiUnderlineMagenta start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(4;35\|35;4\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiUnderlineCyan start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(4;36\|36;4\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiUnderlineWhite start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(4;37\|37;4\)m" end="\e\["me=e-2 contains=ansiConceal + + syn region ansiBlink start="\e\[;\=0\{0,2};\=\%(1;\)\=5m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiBlinkBlack start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(5;30\|30;5\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiBlinkRed start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(5;31\|31;5\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiBlinkGreen start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(5;32\|32;5\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiBlinkYellow start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(5;33\|33;5\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiBlinkBlue start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(5;34\|34;5\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiBlinkMagenta start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(5;35\|35;5\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiBlinkCyan start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(5;36\|36;5\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiBlinkWhite start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(5;37\|37;5\)m" end="\e\["me=e-2 contains=ansiConceal + + syn region ansiRapidBlink start="\e\[;\=0\{0,2};\=\%(1;\)\=6m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiRapidBlinkBlack start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(6;30\|30;6\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiRapidBlinkRed start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(6;31\|31;6\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiRapidBlinkGreen start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(6;32\|32;6\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiRapidBlinkYellow start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(6;33\|33;6\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiRapidBlinkBlue start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(6;34\|34;6\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiRapidBlinkMagenta start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(6;35\|35;6\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiRapidBlinkCyan start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(6;36\|36;6\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiRapidBlinkWhite start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(6;37\|37;6\)m" end="\e\["me=e-2 contains=ansiConceal + + syn region ansiRV start="\e\[;\=0\{0,2};\=\%(1;\)\=7m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiRVBlack start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(7;30\|30;7\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiRVRed start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(7;31\|31;7\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiRVGreen start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(7;32\|32;7\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiRVYellow start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(7;33\|33;7\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiRVBlue start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(7;34\|34;7\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiRVMagenta start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(7;35\|35;7\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiRVCyan start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(7;36\|36;7\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiRVWhite start="\e\[;\=0\{0,2};\=\%(1;\)\=\%(7;37\|37;7\)m" end="\e\["me=e-2 contains=ansiConceal + + if v:version >= 703 + " handles implicit background highlighting +" call Decho("installing implicit background highlighting") + + syn cluster AnsiBlackBgGroup contains=ansiFgBlackBlack,ansiFgRedBlack,ansiFgGreenBlack,ansiFgYellowBlack,ansiFgBlueBlack,ansiFgMagentaBlack,ansiFgCyanBlack,ansiFgWhiteBlack + syn region ansiBlackBg start="\e\[;\=0\{0,2};\=\%(1;\)\=40\%(1;\)\=m" end="\e\[[04]"me=e-3 contains=ansiConceal,@ansiBlackBgGroup + syn region ansiFgBlackBlack contained start="\e\[30m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgRedBlack contained start="\e\[31m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgGreenBlack contained start="\e\[32m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgYellowBlack contained start="\e\[33m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgBlueBlack contained start="\e\[34m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgMagentaBlack contained start="\e\[35m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgCyanBlack contained start="\e\[36m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgWhiteBlack contained start="\e\[37m" end="\e\["me=e-2 contains=ansiConceal + hi link ansiFgBlackBlack ansiBlackBlack + hi link ansiFgRedBlack ansiRedBlack + hi link ansiFgGreenBlack ansiGreenBlack + hi link ansiFgYellowBlack ansiYellowBlack + hi link ansiFgBlueBlack ansiBlueBlack + hi link ansiFgMagentaBlack ansiMagentaBlack + hi link ansiFgCyanBlack ansiCyanBlack + hi link ansiFgWhiteBlack ansiWhiteBlack + + syn cluster AnsiRedBgGroup contains=ansiFgBlackRed,ansiFgRedRed,ansiFgGreenRed,ansiFgYellowRed,ansiFgBlueRed,ansiFgMagentaRed,ansiFgCyanRed,ansiFgWhiteRed + syn region ansiRedBg start="\e\[;\=0\{0,2};\=\%(1;\)\=41\%(1;\)\=m" end="\e\[[04]"me=e-3 contains=ansiConceal,@ansiRedBgGroup + syn region ansiFgBlackRed contained start="\e\[30m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgRedRed contained start="\e\[31m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgGreenRed contained start="\e\[32m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgYellowRed contained start="\e\[33m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgBlueRed contained start="\e\[34m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgMagentaRed contained start="\e\[35m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgCyanRed contained start="\e\[36m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgWhiteRed contained start="\e\[37m" end="\e\["me=e-2 contains=ansiConceal + hi link ansiFgBlackRed ansiBlackRed + hi link ansiFgRedRed ansiRedRed + hi link ansiFgGreenRed ansiGreenRed + hi link ansiFgYellowRed ansiYellowRed + hi link ansiFgBlueRed ansiBlueRed + hi link ansiFgMagentaRed ansiMagentaRed + hi link ansiFgCyanRed ansiCyanRed + hi link ansiFgWhiteRed ansiWhiteRed + + syn cluster AnsiGreenBgGroup contains=ansiFgBlackGreen,ansiFgRedGreen,ansiFgGreenGreen,ansiFgYellowGreen,ansiFgBlueGreen,ansiFgMagentaGreen,ansiFgCyanGreen,ansiFgWhiteGreen + syn region ansiGreenBg start="\e\[;\=0\{0,2};\=\%(1;\)\=42\%(1;\)\=m" end="\e\[[04]"me=e-3 contains=ansiConceal,@ansiGreenBgGroup + syn region ansiFgBlackGreen contained start="\e\[30m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgRedGreen contained start="\e\[31m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgGreenGreen contained start="\e\[32m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgYellowGreen contained start="\e\[33m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgBlueGreen contained start="\e\[34m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgMagentaGreen contained start="\e\[35m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgCyanGreen contained start="\e\[36m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgWhiteGreen contained start="\e\[37m" end="\e\["me=e-2 contains=ansiConceal + hi link ansiFgBlackGreen ansiBlackGreen + hi link ansiFgGreenGreen ansiGreenGreen + hi link ansiFgGreenGreen ansiGreenGreen + hi link ansiFgYellowGreen ansiYellowGreen + hi link ansiFgBlueGreen ansiBlueGreen + hi link ansiFgMagentaGreen ansiMagentaGreen + hi link ansiFgCyanGreen ansiCyanGreen + hi link ansiFgWhiteGreen ansiWhiteGreen + + syn cluster AnsiYellowBgGroup contains=ansiFgBlackYellow,ansiFgRedYellow,ansiFgGreenYellow,ansiFgYellowYellow,ansiFgBlueYellow,ansiFgMagentaYellow,ansiFgCyanYellow,ansiFgWhiteYellow + syn region ansiYellowBg start="\e\[;\=0\{0,2};\=\%(1;\)\=43\%(1;\)\=m" end="\e\[[04]"me=e-3 contains=ansiConceal,@ansiYellowBgGroup + syn region ansiFgBlackYellow contained start="\e\[30m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgRedYellow contained start="\e\[31m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgGreenYellow contained start="\e\[32m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgYellowYellow contained start="\e\[33m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgBlueYellow contained start="\e\[34m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgMagentaYellow contained start="\e\[35m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgCyanYellow contained start="\e\[36m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgWhiteYellow contained start="\e\[37m" end="\e\["me=e-2 contains=ansiConceal + hi link ansiFgBlackYellow ansiBlackYellow + hi link ansiFgYellowYellow ansiYellowYellow + hi link ansiFgGreenYellow ansiGreenYellow + hi link ansiFgYellowYellow ansiYellowYellow + hi link ansiFgBlueYellow ansiBlueYellow + hi link ansiFgMagentaYellow ansiMagentaYellow + hi link ansiFgCyanYellow ansiCyanYellow + hi link ansiFgWhiteYellow ansiWhiteYellow + + syn cluster AnsiBlueBgGroup contains=ansiFgBlackBlue,ansiFgRedBlue,ansiFgGreenBlue,ansiFgYellowBlue,ansiFgBlueBlue,ansiFgMagentaBlue,ansiFgCyanBlue,ansiFgWhiteBlue + syn region ansiBlueBg contained start="\e\[;\=0\{0,2};\=\%(1;\)\=44\%(1;\)\=m" end="\e\[[04]"me=e-3 contains=ansiConceal,@ansiBlueBgGroup + syn region ansiFgBlackBlue contained start="\e\[30m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgRedBlue contained start="\e\[31m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgGreenBlue contained start="\e\[32m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgYellowBlue contained start="\e\[33m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgBlueBlue contained start="\e\[34m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgMagentaBlue contained start="\e\[35m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgCyanBlue contained start="\e\[36m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgWhiteBlue contained start="\e\[37m" end="\e\["me=e-2 contains=ansiConceal + hi link ansiFgBlackBlue ansiBlackBlue + hi link ansiFgBlueBlue ansiBlueBlue + hi link ansiFgGreenBlue ansiGreenBlue + hi link ansiFgYellowBlue ansiYellowBlue + hi link ansiFgBlueBlue ansiBlueBlue + hi link ansiFgMagentaBlue ansiMagentaBlue + hi link ansiFgCyanBlue ansiCyanBlue + hi link ansiFgWhiteBlue ansiWhiteBlue + + syn cluster AnsiBlueBgGroup contains=ansiFgBlackBlue,ansiFgRedBlue,ansiFgGreenBlue,ansiFgYellowBlue,ansiFgBlueBlue,ansiFgMagentaBlue,ansiFgCyanBlue,ansiFgWhiteBlue + syn region ansiFgBlackBlue contained start="\e\[30m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgRedBlue contained start="\e\[31m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgGreenBlue contained start="\e\[32m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgYellowBlue contained start="\e\[33m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgBlueBlue contained start="\e\[34m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgMagentaBlue contained start="\e\[35m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgCyanBlue contained start="\e\[36m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgWhiteBlue contained start="\e\[37m" end="\e\["me=e-2 contains=ansiConceal + hi link ansiFgBlackBlue ansiBlackBlue + hi link ansiFgBlueBlue ansiBlueBlue + hi link ansiFgGreenBlue ansiGreenBlue + hi link ansiFgYellowBlue ansiYellowBlue + hi link ansiFgBlueBlue ansiBlueBlue + hi link ansiFgMagentaBlue ansiMagentaBlue + hi link ansiFgCyanBlue ansiCyanBlue + hi link ansiFgWhiteBlue ansiWhiteBlue + + syn cluster AnsiMagentaBgGroup contains=ansiFgBlackMagenta,ansiFgRedMagenta,ansiFgGreenMagenta,ansiFgYellowMagenta,ansiFgBlueMagenta,ansiFgMagentaMagenta,ansiFgCyanMagenta,ansiFgWhiteMagenta + syn region ansiMagentaBg contained start="\e\[;\=0\{0,2};\=\%(1;\)\=45\%(1;\)\=m" end="\e\[[04]"me=e-3 contains=ansiConceal,@ansiMagentaBgGroup + syn region ansiFgBlackMagenta contained start="\e\[30m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgRedMagenta contained start="\e\[31m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgGreenMagenta contained start="\e\[32m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgYellowMagenta contained start="\e\[33m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgBlueMagenta contained start="\e\[34m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgMagentaMagenta contained start="\e\[35m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgCyanMagenta contained start="\e\[36m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgWhiteMagenta contained start="\e\[37m" end="\e\["me=e-2 contains=ansiConceal + hi link ansiFgBlackMagenta ansiBlackMagenta + hi link ansiFgMagentaMagenta ansiMagentaMagenta + hi link ansiFgGreenMagenta ansiGreenMagenta + hi link ansiFgYellowMagenta ansiYellowMagenta + hi link ansiFgBlueMagenta ansiBlueMagenta + hi link ansiFgMagentaMagenta ansiMagentaMagenta + hi link ansiFgCyanMagenta ansiCyanMagenta + hi link ansiFgWhiteMagenta ansiWhiteMagenta + + syn cluster AnsiCyanBgGroup contains=ansiFgBlackCyan,ansiFgRedCyan,ansiFgGreenCyan,ansiFgYellowCyan,ansiFgBlueCyan,ansiFgMagentaCyan,ansiFgCyanCyan,ansiFgWhiteCyan + syn region ansiCyanBg start="\e\[;\=0\{0,2};\=\%(1;\)\=46\%(1;\)\=m" end="\e\[[04]"me=e-3 contains=ansiConceal,@ansiCyanBgGroup + syn region ansiFgBlackCyan contained start="\e\[30m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgRedCyan contained start="\e\[31m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgGreenCyan contained start="\e\[32m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgYellowCyan contained start="\e\[33m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgBlueCyan contained start="\e\[34m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgMagentaCyan contained start="\e\[35m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgCyanCyan contained start="\e\[36m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgWhiteCyan contained start="\e\[37m" end="\e\["me=e-2 contains=ansiConceal + hi link ansiFgBlackCyan ansiBlackCyan + hi link ansiFgCyanCyan ansiCyanCyan + hi link ansiFgGreenCyan ansiGreenCyan + hi link ansiFgYellowCyan ansiYellowCyan + hi link ansiFgBlueCyan ansiBlueCyan + hi link ansiFgMagentaCyan ansiMagentaCyan + hi link ansiFgCyanCyan ansiCyanCyan + hi link ansiFgWhiteCyan ansiWhiteCyan + + syn cluster AnsiWhiteBgGroup contains=ansiFgBlackWhite,ansiFgRedWhite,ansiFgGreenWhite,ansiFgYellowWhite,ansiFgBlueWhite,ansiFgMagentaWhite,ansiFgCyanWhite,ansiFgWhiteWhite + syn region ansiWhiteBg start="\e\[;\=0\{0,2};\=\%(1;\)\=47\%(1;\)\=m" end="\e\[[04]"me=e-3 contains=ansiConceal,@ansiWhiteBgGroup + syn region ansiFgBlackWhite contained start="\e\[30m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgRedWhite contained start="\e\[31m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgGreenWhite contained start="\e\[32m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgYellowWhite contained start="\e\[33m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgBlueWhite contained start="\e\[34m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgMagentaWhite contained start="\e\[35m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgCyanWhite contained start="\e\[36m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiFgWhiteWhite contained start="\e\[37m" end="\e\["me=e-2 contains=ansiConceal + hi link ansiFgBlackWhite ansiBlackWhite + hi link ansiFgWhiteWhite ansiWhiteWhite + hi link ansiFgGreenWhite ansiGreenWhite + hi link ansiFgYellowWhite ansiYellowWhite + hi link ansiFgBlueWhite ansiBlueWhite + hi link ansiFgMagentaWhite ansiMagentaWhite + hi link ansiFgCyanWhite ansiCyanWhite + hi link ansiFgWhiteWhite ansiWhiteWhite + + endif + + if has("conceal") + syn match ansiStop conceal "\e\[;\=0\{1,2}m" + syn match ansiStop conceal "\e\[K" + syn match ansiStop conceal "\e\[H" + syn match ansiStop conceal "\e\[2J" + else + syn match ansiStop "\e\[;\=0\{0,2}m" + syn match ansiStop "\e\[K" + syn match ansiStop "\e\[H" + syn match ansiStop "\e\[2J" + endif + + "syn match ansiIgnore conceal "\e\[\([56];3[0-9]\|3[0-9];[56]\)m" + "syn match ansiIgnore conceal "\e\[\([0-9]\+;\)\{2,}[0-9]\+m" + + " --------------------------------------------------------------------- + " Some Color Combinations: - can't do 'em all, the qty of highlighting groups is limited! {{{2 + " --------------------------------------------------------------------- + syn region ansiBlackBlack start="\e\[0\{0,2};\=\(30;40\|40;30\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiRedBlack start="\e\[0\{0,2};\=\(31;40\|40;31\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiGreenBlack start="\e\[0\{0,2};\=\(32;40\|40;32\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiYellowBlack start="\e\[0\{0,2};\=\(33;40\|40;33\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiBlueBlack start="\e\[0\{0,2};\=\(34;40\|40;34\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiMagentaBlack start="\e\[0\{0,2};\=\(35;40\|40;35\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiCyanBlack start="\e\[0\{0,2};\=\(36;40\|40;36\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiWhiteBlack start="\e\[0\{0,2};\=\(37;40\|40;37\)m" end="\e\["me=e-2 contains=ansiConceal + + syn region ansiBlackRed start="\e\[0\{0,2};\=\(30;41\|41;30\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiRedRed start="\e\[0\{0,2};\=\(31;41\|41;31\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiGreenRed start="\e\[0\{0,2};\=\(32;41\|41;32\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiYellowRed start="\e\[0\{0,2};\=\(33;41\|41;33\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiBlueRed start="\e\[0\{0,2};\=\(34;41\|41;34\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiMagentaRed start="\e\[0\{0,2};\=\(35;41\|41;35\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiCyanRed start="\e\[0\{0,2};\=\(36;41\|41;36\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiWhiteRed start="\e\[0\{0,2};\=\(37;41\|41;37\)m" end="\e\["me=e-2 contains=ansiConceal + + syn region ansiBlackGreen start="\e\[0\{0,2};\=\(30;42\|42;30\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiRedGreen start="\e\[0\{0,2};\=\(31;42\|42;31\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiGreenGreen start="\e\[0\{0,2};\=\(32;42\|42;32\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiYellowGreen start="\e\[0\{0,2};\=\(33;42\|42;33\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiBlueGreen start="\e\[0\{0,2};\=\(34;42\|42;34\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiMagentaGreen start="\e\[0\{0,2};\=\(35;42\|42;35\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiCyanGreen start="\e\[0\{0,2};\=\(36;42\|42;36\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiWhiteGreen start="\e\[0\{0,2};\=\(37;42\|42;37\)m" end="\e\["me=e-2 contains=ansiConceal + + syn region ansiBlackYellow start="\e\[0\{0,2};\=\(30;43\|43;30\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiRedYellow start="\e\[0\{0,2};\=\(31;43\|43;31\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiGreenYellow start="\e\[0\{0,2};\=\(32;43\|43;32\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiYellowYellow start="\e\[0\{0,2};\=\(33;43\|43;33\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiBlueYellow start="\e\[0\{0,2};\=\(34;43\|43;34\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiMagentaYellow start="\e\[0\{0,2};\=\(35;43\|43;35\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiCyanYellow start="\e\[0\{0,2};\=\(36;43\|43;36\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiWhiteYellow start="\e\[0\{0,2};\=\(37;43\|43;37\)m" end="\e\["me=e-2 contains=ansiConceal + + syn region ansiBlackBlue start="\e\[0\{0,2};\=\(30;44\|44;30\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiRedBlue start="\e\[0\{0,2};\=\(31;44\|44;31\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiGreenBlue start="\e\[0\{0,2};\=\(32;44\|44;32\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiYellowBlue start="\e\[0\{0,2};\=\(33;44\|44;33\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiBlueBlue start="\e\[0\{0,2};\=\(34;44\|44;34\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiMagentaBlue start="\e\[0\{0,2};\=\(35;44\|44;35\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiCyanBlue start="\e\[0\{0,2};\=\(36;44\|44;36\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiWhiteBlue start="\e\[0\{0,2};\=\(37;44\|44;37\)m" end="\e\["me=e-2 contains=ansiConceal + + syn region ansiBlackMagenta start="\e\[0\{0,2};\=\(30;45\|45;30\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiRedMagenta start="\e\[0\{0,2};\=\(31;45\|45;31\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiGreenMagenta start="\e\[0\{0,2};\=\(32;45\|45;32\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiYellowMagenta start="\e\[0\{0,2};\=\(33;45\|45;33\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiBlueMagenta start="\e\[0\{0,2};\=\(34;45\|45;34\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiMagentaMagenta start="\e\[0\{0,2};\=\(35;45\|45;35\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiCyanMagenta start="\e\[0\{0,2};\=\(36;45\|45;36\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiWhiteMagenta start="\e\[0\{0,2};\=\(37;45\|45;37\)m" end="\e\["me=e-2 contains=ansiConceal + + syn region ansiBlackCyan start="\e\[0\{0,2};\=\(30;46\|46;30\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiRedCyan start="\e\[0\{0,2};\=\(31;46\|46;31\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiGreenCyan start="\e\[0\{0,2};\=\(32;46\|46;32\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiYellowCyan start="\e\[0\{0,2};\=\(33;46\|46;33\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiBlueCyan start="\e\[0\{0,2};\=\(34;46\|46;34\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiMagentaCyan start="\e\[0\{0,2};\=\(35;46\|46;35\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiCyanCyan start="\e\[0\{0,2};\=\(36;46\|46;36\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiWhiteCyan start="\e\[0\{0,2};\=\(37;46\|46;37\)m" end="\e\["me=e-2 contains=ansiConceal + + syn region ansiBlackWhite start="\e\[0\{0,2};\=\(30;47\|47;30\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiRedWhite start="\e\[0\{0,2};\=\(31;47\|47;31\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiGreenWhite start="\e\[0\{0,2};\=\(32;47\|47;32\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiYellowWhite start="\e\[0\{0,2};\=\(33;47\|47;33\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiBlueWhite start="\e\[0\{0,2};\=\(34;47\|47;34\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiMagentaWhite start="\e\[0\{0,2};\=\(35;47\|47;35\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiCyanWhite start="\e\[0\{0,2};\=\(36;47\|47;36\)m" end="\e\["me=e-2 contains=ansiConceal + syn region ansiWhiteWhite start="\e\[0\{0,2};\=\(37;47\|47;37\)m" end="\e\["me=e-2 contains=ansiConceal + + syn match ansiExtended "\e\[;\=\(0;\)\=[34]8;\(\d*;\)*\d*m" contains=ansiConceal + + if has("conceal") + syn match ansiConceal contained conceal "\e\[\(\d*;\)*\d*m" + else + syn match ansiConceal contained "\e\[\(\d*;\)*\d*m" + endif + + " ------------- + " Highlighting: {{{2 + " ------------- + if !has("conceal") + " -------------- + " ansiesc_ignore: {{{3 + " -------------- + hi def link ansiConceal Ignore + hi def link ansiSuppress Ignore + hi def link ansiIgnore ansiStop + hi def link ansiStop Ignore + hi def link ansiExtended Ignore + endif + let s:hlkeep_{bufnr("%")}= &l:hl + exe "setlocal hl=".substitute(&hl,'8:[^,]\{-},','8:Ignore,',"") + + " handle 3 or more element ansi escape sequences by building syntax and highlighting rules + " specific to the current file + call s:MultiElementHandler() + + hi ansiNone cterm=NONE gui=NONE + + if &t_Co == 8 || &t_Co == 256 + " --------------------- + " eight-color handling: {{{3 + " --------------------- +" call Decho("set up 8-color highlighting groups") + hi ansiBlack ctermfg=black guifg=black cterm=none gui=none + hi ansiRed ctermfg=red guifg=red cterm=none gui=none + hi ansiGreen ctermfg=green guifg=green cterm=none gui=none + hi ansiYellow ctermfg=yellow guifg=yellow cterm=none gui=none + hi ansiBlue ctermfg=blue guifg=blue cterm=none gui=none + hi ansiMagenta ctermfg=magenta guifg=magenta cterm=none gui=none + hi ansiCyan ctermfg=cyan guifg=cyan cterm=none gui=none + hi ansiWhite ctermfg=white guifg=white cterm=none gui=none + + hi ansiBlackBg ctermbg=black guibg=black cterm=none gui=none + hi ansiRedBg ctermbg=red guibg=red cterm=none gui=none + hi ansiGreenBg ctermbg=green guibg=green cterm=none gui=none + hi ansiYellowBg ctermbg=yellow guibg=yellow cterm=none gui=none + hi ansiBlueBg ctermbg=blue guibg=blue cterm=none gui=none + hi ansiMagentaBg ctermbg=magenta guibg=magenta cterm=none gui=none + hi ansiCyanBg ctermbg=cyan guibg=cyan cterm=none gui=none + hi ansiWhiteBg ctermbg=white guibg=white cterm=none gui=none + + hi ansiBold cterm=bold gui=bold + hi ansiBoldBlack ctermfg=black guifg=black cterm=bold gui=bold + hi ansiBoldRed ctermfg=red guifg=red cterm=bold gui=bold + hi ansiBoldGreen ctermfg=green guifg=green cterm=bold gui=bold + hi ansiBoldYellow ctermfg=yellow guifg=yellow cterm=bold gui=bold + hi ansiBoldBlue ctermfg=blue guifg=blue cterm=bold gui=bold + hi ansiBoldMagenta ctermfg=magenta guifg=magenta cterm=bold gui=bold + hi ansiBoldCyan ctermfg=cyan guifg=cyan cterm=bold gui=bold + hi ansiBoldWhite ctermfg=white guifg=white cterm=bold gui=bold + + hi ansiStandout cterm=standout gui=standout + hi ansiStandoutBlack ctermfg=black guifg=black cterm=standout gui=standout + hi ansiStandoutRed ctermfg=red guifg=red cterm=standout gui=standout + hi ansiStandoutGreen ctermfg=green guifg=green cterm=standout gui=standout + hi ansiStandoutYellow ctermfg=yellow guifg=yellow cterm=standout gui=standout + hi ansiStandoutBlue ctermfg=blue guifg=blue cterm=standout gui=standout + hi ansiStandoutMagenta ctermfg=magenta guifg=magenta cterm=standout gui=standout + hi ansiStandoutCyan ctermfg=cyan guifg=cyan cterm=standout gui=standout + hi ansiStandoutWhite ctermfg=white guifg=white cterm=standout gui=standout + + hi ansiItalic cterm=italic gui=italic + hi ansiItalicBlack ctermfg=black guifg=black cterm=italic gui=italic + hi ansiItalicRed ctermfg=red guifg=red cterm=italic gui=italic + hi ansiItalicGreen ctermfg=green guifg=green cterm=italic gui=italic + hi ansiItalicYellow ctermfg=yellow guifg=yellow cterm=italic gui=italic + hi ansiItalicBlue ctermfg=blue guifg=blue cterm=italic gui=italic + hi ansiItalicMagenta ctermfg=magenta guifg=magenta cterm=italic gui=italic + hi ansiItalicCyan ctermfg=cyan guifg=cyan cterm=italic gui=italic + hi ansiItalicWhite ctermfg=white guifg=white cterm=italic gui=italic + + hi ansiUnderline cterm=underline gui=underline + hi ansiUnderlineBlack ctermfg=black guifg=black cterm=underline gui=underline + hi ansiUnderlineRed ctermfg=red guifg=red cterm=underline gui=underline + hi ansiUnderlineGreen ctermfg=green guifg=green cterm=underline gui=underline + hi ansiUnderlineYellow ctermfg=yellow guifg=yellow cterm=underline gui=underline + hi ansiUnderlineBlue ctermfg=blue guifg=blue cterm=underline gui=underline + hi ansiUnderlineMagenta ctermfg=magenta guifg=magenta cterm=underline gui=underline + hi ansiUnderlineCyan ctermfg=cyan guifg=cyan cterm=underline gui=underline + hi ansiUnderlineWhite ctermfg=white guifg=white cterm=underline gui=underline + + hi ansiBlink cterm=standout gui=undercurl + hi ansiBlinkBlack ctermfg=black guifg=black cterm=standout gui=undercurl + hi ansiBlinkRed ctermfg=red guifg=red cterm=standout gui=undercurl + hi ansiBlinkGreen ctermfg=green guifg=green cterm=standout gui=undercurl + hi ansiBlinkYellow ctermfg=yellow guifg=yellow cterm=standout gui=undercurl + hi ansiBlinkBlue ctermfg=blue guifg=blue cterm=standout gui=undercurl + hi ansiBlinkMagenta ctermfg=magenta guifg=magenta cterm=standout gui=undercurl + hi ansiBlinkCyan ctermfg=cyan guifg=cyan cterm=standout gui=undercurl + hi ansiBlinkWhite ctermfg=white guifg=white cterm=standout gui=undercurl + + hi ansiRapidBlink cterm=standout gui=undercurl + hi ansiRapidBlinkBlack ctermfg=black guifg=black cterm=standout gui=undercurl + hi ansiRapidBlinkRed ctermfg=red guifg=red cterm=standout gui=undercurl + hi ansiRapidBlinkGreen ctermfg=green guifg=green cterm=standout gui=undercurl + hi ansiRapidBlinkYellow ctermfg=yellow guifg=yellow cterm=standout gui=undercurl + hi ansiRapidBlinkBlue ctermfg=blue guifg=blue cterm=standout gui=undercurl + hi ansiRapidBlinkMagenta ctermfg=magenta guifg=magenta cterm=standout gui=undercurl + hi ansiRapidBlinkCyan ctermfg=cyan guifg=cyan cterm=standout gui=undercurl + hi ansiRapidBlinkWhite ctermfg=white guifg=white cterm=standout gui=undercurl + + hi ansiRV cterm=reverse gui=reverse + hi ansiRVBlack ctermfg=black guifg=black cterm=reverse gui=reverse + hi ansiRVRed ctermfg=red guifg=red cterm=reverse gui=reverse + hi ansiRVGreen ctermfg=green guifg=green cterm=reverse gui=reverse + hi ansiRVYellow ctermfg=yellow guifg=yellow cterm=reverse gui=reverse + hi ansiRVBlue ctermfg=blue guifg=blue cterm=reverse gui=reverse + hi ansiRVMagenta ctermfg=magenta guifg=magenta cterm=reverse gui=reverse + hi ansiRVCyan ctermfg=cyan guifg=cyan cterm=reverse gui=reverse + hi ansiRVWhite ctermfg=white guifg=white cterm=reverse gui=reverse + + hi ansiBlackBlack ctermfg=black ctermbg=black guifg=Black guibg=Black cterm=none gui=none + hi ansiRedBlack ctermfg=red ctermbg=black guifg=Red guibg=Black cterm=none gui=none + hi ansiGreenBlack ctermfg=green ctermbg=black guifg=Green guibg=Black cterm=none gui=none + hi ansiYellowBlack ctermfg=yellow ctermbg=black guifg=Yellow guibg=Black cterm=none gui=none + hi ansiBlueBlack ctermfg=blue ctermbg=black guifg=Blue guibg=Black cterm=none gui=none + hi ansiMagentaBlack ctermfg=magenta ctermbg=black guifg=Magenta guibg=Black cterm=none gui=none + hi ansiCyanBlack ctermfg=cyan ctermbg=black guifg=Cyan guibg=Black cterm=none gui=none + hi ansiWhiteBlack ctermfg=white ctermbg=black guifg=White guibg=Black cterm=none gui=none + + hi ansiBlackRed ctermfg=black ctermbg=red guifg=Black guibg=Red cterm=none gui=none + hi ansiRedRed ctermfg=red ctermbg=red guifg=Red guibg=Red cterm=none gui=none + hi ansiGreenRed ctermfg=green ctermbg=red guifg=Green guibg=Red cterm=none gui=none + hi ansiYellowRed ctermfg=yellow ctermbg=red guifg=Yellow guibg=Red cterm=none gui=none + hi ansiBlueRed ctermfg=blue ctermbg=red guifg=Blue guibg=Red cterm=none gui=none + hi ansiMagentaRed ctermfg=magenta ctermbg=red guifg=Magenta guibg=Red cterm=none gui=none + hi ansiCyanRed ctermfg=cyan ctermbg=red guifg=Cyan guibg=Red cterm=none gui=none + hi ansiWhiteRed ctermfg=white ctermbg=red guifg=White guibg=Red cterm=none gui=none + + hi ansiBlackGreen ctermfg=black ctermbg=green guifg=Black guibg=Green cterm=none gui=none + hi ansiRedGreen ctermfg=red ctermbg=green guifg=Red guibg=Green cterm=none gui=none + hi ansiGreenGreen ctermfg=green ctermbg=green guifg=Green guibg=Green cterm=none gui=none + hi ansiYellowGreen ctermfg=yellow ctermbg=green guifg=Yellow guibg=Green cterm=none gui=none + hi ansiBlueGreen ctermfg=blue ctermbg=green guifg=Blue guibg=Green cterm=none gui=none + hi ansiMagentaGreen ctermfg=magenta ctermbg=green guifg=Magenta guibg=Green cterm=none gui=none + hi ansiCyanGreen ctermfg=cyan ctermbg=green guifg=Cyan guibg=Green cterm=none gui=none + hi ansiWhiteGreen ctermfg=white ctermbg=green guifg=White guibg=Green cterm=none gui=none + + hi ansiBlackYellow ctermfg=black ctermbg=yellow guifg=Black guibg=Yellow cterm=none gui=none + hi ansiRedYellow ctermfg=red ctermbg=yellow guifg=Red guibg=Yellow cterm=none gui=none + hi ansiGreenYellow ctermfg=green ctermbg=yellow guifg=Green guibg=Yellow cterm=none gui=none + hi ansiYellowYellow ctermfg=yellow ctermbg=yellow guifg=Yellow guibg=Yellow cterm=none gui=none + hi ansiBlueYellow ctermfg=blue ctermbg=yellow guifg=Blue guibg=Yellow cterm=none gui=none + hi ansiMagentaYellow ctermfg=magenta ctermbg=yellow guifg=Magenta guibg=Yellow cterm=none gui=none + hi ansiCyanYellow ctermfg=cyan ctermbg=yellow guifg=Cyan guibg=Yellow cterm=none gui=none + hi ansiWhiteYellow ctermfg=white ctermbg=yellow guifg=White guibg=Yellow cterm=none gui=none + + hi ansiBlackBlue ctermfg=black ctermbg=blue guifg=Black guibg=Blue cterm=none gui=none + hi ansiRedBlue ctermfg=red ctermbg=blue guifg=Red guibg=Blue cterm=none gui=none + hi ansiGreenBlue ctermfg=green ctermbg=blue guifg=Green guibg=Blue cterm=none gui=none + hi ansiYellowBlue ctermfg=yellow ctermbg=blue guifg=Yellow guibg=Blue cterm=none gui=none + hi ansiBlueBlue ctermfg=blue ctermbg=blue guifg=Blue guibg=Blue cterm=none gui=none + hi ansiMagentaBlue ctermfg=magenta ctermbg=blue guifg=Magenta guibg=Blue cterm=none gui=none + hi ansiCyanBlue ctermfg=cyan ctermbg=blue guifg=Cyan guibg=Blue cterm=none gui=none + hi ansiWhiteBlue ctermfg=white ctermbg=blue guifg=White guibg=Blue cterm=none gui=none + + hi ansiBlackMagenta ctermfg=black ctermbg=magenta guifg=Black guibg=Magenta cterm=none gui=none + hi ansiRedMagenta ctermfg=red ctermbg=magenta guifg=Red guibg=Magenta cterm=none gui=none + hi ansiGreenMagenta ctermfg=green ctermbg=magenta guifg=Green guibg=Magenta cterm=none gui=none + hi ansiYellowMagenta ctermfg=yellow ctermbg=magenta guifg=Yellow guibg=Magenta cterm=none gui=none + hi ansiBlueMagenta ctermfg=blue ctermbg=magenta guifg=Blue guibg=Magenta cterm=none gui=none + hi ansiMagentaMagenta ctermfg=magenta ctermbg=magenta guifg=Magenta guibg=Magenta cterm=none gui=none + hi ansiCyanMagenta ctermfg=cyan ctermbg=magenta guifg=Cyan guibg=Magenta cterm=none gui=none + hi ansiWhiteMagenta ctermfg=white ctermbg=magenta guifg=White guibg=Magenta cterm=none gui=none + + hi ansiBlackCyan ctermfg=black ctermbg=cyan guifg=Black guibg=Cyan cterm=none gui=none + hi ansiRedCyan ctermfg=red ctermbg=cyan guifg=Red guibg=Cyan cterm=none gui=none + hi ansiGreenCyan ctermfg=green ctermbg=cyan guifg=Green guibg=Cyan cterm=none gui=none + hi ansiYellowCyan ctermfg=yellow ctermbg=cyan guifg=Yellow guibg=Cyan cterm=none gui=none + hi ansiBlueCyan ctermfg=blue ctermbg=cyan guifg=Blue guibg=Cyan cterm=none gui=none + hi ansiMagentaCyan ctermfg=magenta ctermbg=cyan guifg=Magenta guibg=Cyan cterm=none gui=none + hi ansiCyanCyan ctermfg=cyan ctermbg=cyan guifg=Cyan guibg=Cyan cterm=none gui=none + hi ansiWhiteCyan ctermfg=white ctermbg=cyan guifg=White guibg=Cyan cterm=none gui=none + + hi ansiBlackWhite ctermfg=black ctermbg=white guifg=Black guibg=White cterm=none gui=none + hi ansiRedWhite ctermfg=red ctermbg=white guifg=Red guibg=White cterm=none gui=none + hi ansiGreenWhite ctermfg=green ctermbg=white guifg=Green guibg=White cterm=none gui=none + hi ansiYellowWhite ctermfg=yellow ctermbg=white guifg=Yellow guibg=White cterm=none gui=none + hi ansiBlueWhite ctermfg=blue ctermbg=white guifg=Blue guibg=White cterm=none gui=none + hi ansiMagentaWhite ctermfg=magenta ctermbg=white guifg=Magenta guibg=White cterm=none gui=none + hi ansiCyanWhite ctermfg=cyan ctermbg=white guifg=Cyan guibg=White cterm=none gui=none + hi ansiWhiteWhite ctermfg=white ctermbg=white guifg=White guibg=White cterm=none gui=none + + if v:version >= 700 && exists("+t_Co") && &t_Co == 256 && exists("g:ansiesc_256color") + " --------------------------- + " handle 256-color terminals: {{{3 + " --------------------------- +" call Decho("set up 256-color highlighting groups") + let icolor= 1 + while icolor < 256 + let jcolor= 1 + exe "hi ansiHL_".icolor."_0 ctermfg=".icolor + exe "hi ansiHL_0_".icolor." ctermbg=".icolor +" call Decho("exe hi ansiHL_".icolor." ctermfg=".icolor) + while jcolor < 256 + exe "hi ansiHL_".icolor."_".jcolor." ctermfg=".icolor." ctermbg=".jcolor +" call Decho("exe hi ansiHL_".icolor."_".jcolor." ctermfg=".icolor." ctermbg=".jcolor) + let jcolor= jcolor + 1 + endwhile + let icolor= icolor + 1 + endwhile + endif + + else + " ---------------------------------- + " not 8 or 256 color terminals (gui): {{{3 + " ---------------------------------- +" call Decho("set up gui highlighting groups") + hi ansiBlack ctermfg=black guifg=black cterm=none gui=none + hi ansiRed ctermfg=red guifg=red cterm=none gui=none + hi ansiGreen ctermfg=green guifg=green cterm=none gui=none + hi ansiYellow ctermfg=yellow guifg=yellow cterm=none gui=none + hi ansiBlue ctermfg=blue guifg=blue cterm=none gui=none + hi ansiMagenta ctermfg=magenta guifg=magenta cterm=none gui=none + hi ansiCyan ctermfg=cyan guifg=cyan cterm=none gui=none + hi ansiWhite ctermfg=white guifg=white cterm=none gui=none + + hi ansiBlackBg ctermbg=black guibg=black cterm=none gui=none + hi ansiRedBg ctermbg=red guibg=red cterm=none gui=none + hi ansiGreenBg ctermbg=green guibg=green cterm=none gui=none + hi ansiYellowBg ctermbg=yellow guibg=yellow cterm=none gui=none + hi ansiBlueBg ctermbg=blue guibg=blue cterm=none gui=none + hi ansiMagentaBg ctermbg=magenta guibg=magenta cterm=none gui=none + hi ansiCyanBg ctermbg=cyan guibg=cyan cterm=none gui=none + hi ansiWhiteBg ctermbg=white guibg=white cterm=none gui=none + + hi ansiBold cterm=bold gui=bold + hi ansiBoldBlack ctermfg=black guifg=black cterm=bold gui=bold + hi ansiBoldRed ctermfg=red guifg=red cterm=bold gui=bold + hi ansiBoldGreen ctermfg=green guifg=green cterm=bold gui=bold + hi ansiBoldYellow ctermfg=yellow guifg=yellow cterm=bold gui=bold + hi ansiBoldBlue ctermfg=blue guifg=blue cterm=bold gui=bold + hi ansiBoldMagenta ctermfg=magenta guifg=magenta cterm=bold gui=bold + hi ansiBoldCyan ctermfg=cyan guifg=cyan cterm=bold gui=bold + hi ansiBoldWhite ctermfg=white guifg=white cterm=bold gui=bold + + hi ansiStandout cterm=standout gui=standout + hi ansiStandoutBlack ctermfg=black guifg=black cterm=standout gui=standout + hi ansiStandoutRed ctermfg=red guifg=red cterm=standout gui=standout + hi ansiStandoutGreen ctermfg=green guifg=green cterm=standout gui=standout + hi ansiStandoutYellow ctermfg=yellow guifg=yellow cterm=standout gui=standout + hi ansiStandoutBlue ctermfg=blue guifg=blue cterm=standout gui=standout + hi ansiStandoutMagenta ctermfg=magenta guifg=magenta cterm=standout gui=standout + hi ansiStandoutCyan ctermfg=cyan guifg=cyan cterm=standout gui=standout + hi ansiStandoutWhite ctermfg=white guifg=white cterm=standout gui=standout + + hi ansiItalic cterm=italic gui=italic + hi ansiItalicBlack ctermfg=black guifg=black cterm=italic gui=italic + hi ansiItalicRed ctermfg=red guifg=red cterm=italic gui=italic + hi ansiItalicGreen ctermfg=green guifg=green cterm=italic gui=italic + hi ansiItalicYellow ctermfg=yellow guifg=yellow cterm=italic gui=italic + hi ansiItalicBlue ctermfg=blue guifg=blue cterm=italic gui=italic + hi ansiItalicMagenta ctermfg=magenta guifg=magenta cterm=italic gui=italic + hi ansiItalicCyan ctermfg=cyan guifg=cyan cterm=italic gui=italic + hi ansiItalicWhite ctermfg=white guifg=white cterm=italic gui=italic + + hi ansiUnderline cterm=underline gui=underline + hi ansiUnderlineBlack ctermfg=black guifg=black cterm=underline gui=underline + hi ansiUnderlineRed ctermfg=red guifg=red cterm=underline gui=underline + hi ansiUnderlineGreen ctermfg=green guifg=green cterm=underline gui=underline + hi ansiUnderlineYellow ctermfg=yellow guifg=yellow cterm=underline gui=underline + hi ansiUnderlineBlue ctermfg=blue guifg=blue cterm=underline gui=underline + hi ansiUnderlineMagenta ctermfg=magenta guifg=magenta cterm=underline gui=underline + hi ansiUnderlineCyan ctermfg=cyan guifg=cyan cterm=underline gui=underline + hi ansiUnderlineWhite ctermfg=white guifg=white cterm=underline gui=underline + + hi ansiBlink cterm=standout gui=undercurl + hi ansiBlinkBlack ctermfg=black guifg=black cterm=standout gui=undercurl + hi ansiBlinkRed ctermfg=red guifg=red cterm=standout gui=undercurl + hi ansiBlinkGreen ctermfg=green guifg=green cterm=standout gui=undercurl + hi ansiBlinkYellow ctermfg=yellow guifg=yellow cterm=standout gui=undercurl + hi ansiBlinkBlue ctermfg=blue guifg=blue cterm=standout gui=undercurl + hi ansiBlinkMagenta ctermfg=magenta guifg=magenta cterm=standout gui=undercurl + hi ansiBlinkCyan ctermfg=cyan guifg=cyan cterm=standout gui=undercurl + hi ansiBlinkWhite ctermfg=white guifg=white cterm=standout gui=undercurl + + hi ansiRapidBlink cterm=standout gui=undercurl + hi ansiRapidBlinkBlack ctermfg=black guifg=black cterm=standout gui=undercurl + hi ansiRapidBlinkRed ctermfg=red guifg=red cterm=standout gui=undercurl + hi ansiRapidBlinkGreen ctermfg=green guifg=green cterm=standout gui=undercurl + hi ansiRapidBlinkYellow ctermfg=yellow guifg=yellow cterm=standout gui=undercurl + hi ansiRapidBlinkBlue ctermfg=blue guifg=blue cterm=standout gui=undercurl + hi ansiRapidBlinkMagenta ctermfg=magenta guifg=magenta cterm=standout gui=undercurl + hi ansiRapidBlinkCyan ctermfg=cyan guifg=cyan cterm=standout gui=undercurl + hi ansiRapidBlinkWhite ctermfg=white guifg=white cterm=standout gui=undercurl + + hi ansiRV cterm=reverse gui=reverse + hi ansiRVBlack ctermfg=black guifg=black cterm=reverse gui=reverse + hi ansiRVRed ctermfg=red guifg=red cterm=reverse gui=reverse + hi ansiRVGreen ctermfg=green guifg=green cterm=reverse gui=reverse + hi ansiRVYellow ctermfg=yellow guifg=yellow cterm=reverse gui=reverse + hi ansiRVBlue ctermfg=blue guifg=blue cterm=reverse gui=reverse + hi ansiRVMagenta ctermfg=magenta guifg=magenta cterm=reverse gui=reverse + hi ansiRVCyan ctermfg=cyan guifg=cyan cterm=reverse gui=reverse + hi ansiRVWhite ctermfg=white guifg=white cterm=reverse gui=reverse + + hi ansiBlackBlack ctermfg=black ctermbg=black guifg=Black guibg=Black cterm=none gui=none + hi ansiRedBlack ctermfg=black ctermbg=black guifg=Black guibg=Black cterm=none gui=none + hi ansiRedBlack ctermfg=red ctermbg=black guifg=Red guibg=Black cterm=none gui=none + hi ansiGreenBlack ctermfg=green ctermbg=black guifg=Green guibg=Black cterm=none gui=none + hi ansiYellowBlack ctermfg=yellow ctermbg=black guifg=Yellow guibg=Black cterm=none gui=none + hi ansiBlueBlack ctermfg=blue ctermbg=black guifg=Blue guibg=Black cterm=none gui=none + hi ansiMagentaBlack ctermfg=magenta ctermbg=black guifg=Magenta guibg=Black cterm=none gui=none + hi ansiCyanBlack ctermfg=cyan ctermbg=black guifg=Cyan guibg=Black cterm=none gui=none + hi ansiWhiteBlack ctermfg=white ctermbg=black guifg=White guibg=Black cterm=none gui=none + + hi ansiBlackRed ctermfg=black ctermbg=red guifg=Black guibg=Red cterm=none gui=none + hi ansiRedRed ctermfg=red ctermbg=red guifg=Red guibg=Red cterm=none gui=none + hi ansiGreenRed ctermfg=green ctermbg=red guifg=Green guibg=Red cterm=none gui=none + hi ansiYellowRed ctermfg=yellow ctermbg=red guifg=Yellow guibg=Red cterm=none gui=none + hi ansiBlueRed ctermfg=blue ctermbg=red guifg=Blue guibg=Red cterm=none gui=none + hi ansiMagentaRed ctermfg=magenta ctermbg=red guifg=Magenta guibg=Red cterm=none gui=none + hi ansiCyanRed ctermfg=cyan ctermbg=red guifg=Cyan guibg=Red cterm=none gui=none + hi ansiWhiteRed ctermfg=white ctermbg=red guifg=White guibg=Red cterm=none gui=none + + hi ansiBlackGreen ctermfg=black ctermbg=green guifg=Black guibg=Green cterm=none gui=none + hi ansiRedGreen ctermfg=red ctermbg=green guifg=Red guibg=Green cterm=none gui=none + hi ansiGreenGreen ctermfg=green ctermbg=green guifg=Green guibg=Green cterm=none gui=none + hi ansiYellowGreen ctermfg=yellow ctermbg=green guifg=Yellow guibg=Green cterm=none gui=none + hi ansiBlueGreen ctermfg=blue ctermbg=green guifg=Blue guibg=Green cterm=none gui=none + hi ansiMagentaGreen ctermfg=magenta ctermbg=green guifg=Magenta guibg=Green cterm=none gui=none + hi ansiCyanGreen ctermfg=cyan ctermbg=green guifg=Cyan guibg=Green cterm=none gui=none + hi ansiWhiteGreen ctermfg=white ctermbg=green guifg=White guibg=Green cterm=none gui=none + + hi ansiBlackYellow ctermfg=black ctermbg=yellow guifg=Black guibg=Yellow cterm=none gui=none + hi ansiRedYellow ctermfg=red ctermbg=yellow guifg=Red guibg=Yellow cterm=none gui=none + hi ansiGreenYellow ctermfg=green ctermbg=yellow guifg=Green guibg=Yellow cterm=none gui=none + hi ansiYellowYellow ctermfg=yellow ctermbg=yellow guifg=Yellow guibg=Yellow cterm=none gui=none + hi ansiBlueYellow ctermfg=blue ctermbg=yellow guifg=Blue guibg=Yellow cterm=none gui=none + hi ansiMagentaYellow ctermfg=magenta ctermbg=yellow guifg=Magenta guibg=Yellow cterm=none gui=none + hi ansiCyanYellow ctermfg=cyan ctermbg=yellow guifg=Cyan guibg=Yellow cterm=none gui=none + hi ansiWhiteYellow ctermfg=white ctermbg=yellow guifg=White guibg=Yellow cterm=none gui=none + + hi ansiBlackBlue ctermfg=black ctermbg=blue guifg=Black guibg=Blue cterm=none gui=none + hi ansiRedBlue ctermfg=red ctermbg=blue guifg=Red guibg=Blue cterm=none gui=none + hi ansiGreenBlue ctermfg=green ctermbg=blue guifg=Green guibg=Blue cterm=none gui=none + hi ansiYellowBlue ctermfg=yellow ctermbg=blue guifg=Yellow guibg=Blue cterm=none gui=none + hi ansiBlueBlue ctermfg=blue ctermbg=blue guifg=Blue guibg=Blue cterm=none gui=none + hi ansiMagentaBlue ctermfg=magenta ctermbg=blue guifg=Magenta guibg=Blue cterm=none gui=none + hi ansiCyanBlue ctermfg=cyan ctermbg=blue guifg=Cyan guibg=Blue cterm=none gui=none + hi ansiWhiteBlue ctermfg=white ctermbg=blue guifg=White guibg=Blue cterm=none gui=none + + hi ansiBlackMagenta ctermfg=black ctermbg=magenta guifg=Black guibg=Magenta cterm=none gui=none + hi ansiRedMagenta ctermfg=red ctermbg=magenta guifg=Red guibg=Magenta cterm=none gui=none + hi ansiGreenMagenta ctermfg=green ctermbg=magenta guifg=Green guibg=Magenta cterm=none gui=none + hi ansiYellowMagenta ctermfg=yellow ctermbg=magenta guifg=Yellow guibg=Magenta cterm=none gui=none + hi ansiBlueMagenta ctermfg=blue ctermbg=magenta guifg=Blue guibg=Magenta cterm=none gui=none + hi ansiMagentaMagenta ctermfg=magenta ctermbg=magenta guifg=Magenta guibg=Magenta cterm=none gui=none + hi ansiCyanMagenta ctermfg=cyan ctermbg=magenta guifg=Cyan guibg=Magenta cterm=none gui=none + hi ansiWhiteMagenta ctermfg=white ctermbg=magenta guifg=White guibg=Magenta cterm=none gui=none + + hi ansiBlackCyan ctermfg=black ctermbg=cyan guifg=Black guibg=Cyan cterm=none gui=none + hi ansiRedCyan ctermfg=red ctermbg=cyan guifg=Red guibg=Cyan cterm=none gui=none + hi ansiGreenCyan ctermfg=green ctermbg=cyan guifg=Green guibg=Cyan cterm=none gui=none + hi ansiYellowCyan ctermfg=yellow ctermbg=cyan guifg=Yellow guibg=Cyan cterm=none gui=none + hi ansiBlueCyan ctermfg=blue ctermbg=cyan guifg=Blue guibg=Cyan cterm=none gui=none + hi ansiMagentaCyan ctermfg=magenta ctermbg=cyan guifg=Magenta guibg=Cyan cterm=none gui=none + hi ansiCyanCyan ctermfg=cyan ctermbg=cyan guifg=Cyan guibg=Cyan cterm=none gui=none + hi ansiWhiteCyan ctermfg=white ctermbg=cyan guifg=White guibg=Cyan cterm=none gui=none + + hi ansiBlackWhite ctermfg=black ctermbg=white guifg=Black guibg=White cterm=none gui=none + hi ansiRedWhite ctermfg=red ctermbg=white guifg=Red guibg=White cterm=none gui=none + hi ansiGreenWhite ctermfg=green ctermbg=white guifg=Green guibg=White cterm=none gui=none + hi ansiYellowWhite ctermfg=yellow ctermbg=white guifg=Yellow guibg=White cterm=none gui=none + hi ansiBlueWhite ctermfg=blue ctermbg=white guifg=Blue guibg=White cterm=none gui=none + hi ansiMagentaWhite ctermfg=magenta ctermbg=white guifg=Magenta guibg=White cterm=none gui=none + hi ansiCyanWhite ctermfg=cyan ctermbg=white guifg=Cyan guibg=White cterm=none gui=none + hi ansiWhiteWhite ctermfg=white ctermbg=white guifg=White guibg=White cterm=none gui=none + endif +" call Dret("AnsiEsc#AnsiEsc") +endfun + +" --------------------------------------------------------------------- +" s:MultiElementHandler: builds custom syntax highlighting for three or more element ansi escape sequences {{{2 +fun! s:MultiElementHandler() +" call Dfunc("s:MultiElementHandler()") + let curwp= SaveWinPosn(0) + keepj 1 + keepj norm! 0 + let mehcnt = 0 + let mehrules = [] + while search('\e\[;\=\d\+;\d\+;\d\+\(;\d\+\)*m','cW') + let curcol = col(".")+1 + call search('m','cW') + let mcol = col(".") + let ansiesc = strpart(getline("."),curcol,mcol - curcol) + let aecodes = split(ansiesc,'[;m]') +" call Decho("ansiesc<".ansiesc."> aecodes=".string(aecodes)) + let skip = 0 + let mod = "NONE," + let fg = "" + let bg = "" + + " if the ansiesc is + if index(mehrules,ansiesc) == -1 + let mehrules+= [ansiesc] + + for code in aecodes + + " handle multi-code sequences (38;5;color and 48;5;color) + if skip == 38 && code == 5 + " handling [38;5 + let skip= 385 +" call Decho(" 1: building code=".code." skip=".skip.": mod<".mod."> fg<".fg."> bg<".bg.">") + continue + elseif skip == 385 + " handling [38;5;... + if has("gui") && has("gui_running") + let fg= s:Ansi2Gui(code) + else + let fg= code + endif + let skip= 0 +" call Decho(" 2: building code=".code." skip=".skip.": mod<".mod."> fg<".fg."> bg<".bg.">") + continue + + elseif skip == 48 && code == 5 + " handling [48;5 + let skip= 485 +" call Decho(" 3: building code=".code." skip=".skip.": mod<".mod."> fg<".fg."> bg<".bg.">") + continue + elseif skip == 485 + " handling [48;5;... + if has("gui") && has("gui_running") + let bg= s:Ansi2Gui(code) + else + let bg= code + endif + let skip= 0 +" call Decho(" 4: building code=".code." skip=".skip.": mod<".mod."> fg<".fg."> bg<".bg.">") + continue + + else + let skip= 0 + endif + + " handle single-code sequences + if code == 1 + let mod=mod."bold," + elseif code == 2 + let mod=mod."italic," + elseif code == 3 + let mod=mod."standout," + elseif code == 4 + let mod=mod."underline," + elseif code == 5 || code == 6 + let mod=mod."undercurl," + elseif code == 7 + let mod=mod."reverse," + + elseif code == 30 + let fg= "black" + elseif code == 31 + let fg= "red" + elseif code == 32 + let fg= "green" + elseif code == 33 + let fg= "yellow" + elseif code == 34 + let fg= "blue" + elseif code == 35 + let fg= "magenta" + elseif code == 36 + let fg= "cyan" + elseif code == 37 + let fg= "white" + + elseif code == 40 + let bg= "black" + elseif code == 41 + let bg= "red" + elseif code == 42 + let bg= "green" + elseif code == 43 + let bg= "yellow" + elseif code == 44 + let bg= "blue" + elseif code == 45 + let bg= "magenta" + elseif code == 46 + let bg= "cyan" + elseif code == 47 + let bg= "white" + + elseif code == 38 + let skip= 38 + + elseif code == 48 + let skip= 48 + endif + +" call Decho(" 5: building code=".code." skip=".skip.": mod<".mod."> fg<".fg."> bg<".bg.">") + endfor + + " fixups + let mod= substitute(mod,',$','','') + + " build syntax-recognition rule + let mehcnt = mehcnt + 1 + let synrule = "syn region ansiMEH".mehcnt + let synrule = synrule.' start="\e\['.ansiesc.'"' + let synrule = synrule.' end="\e\["me=e-2' + let synrule = synrule." contains=ansiConceal" +" call Decho(" exe synrule: ".synrule) + exe synrule + + " build highlighting rule + let hirule= "hi ansiMEH".mehcnt + if has("gui") && has("gui_running") + let hirule=hirule." gui=".mod + if fg != ""| let hirule=hirule." guifg=".fg| endif + if bg != ""| let hirule=hirule." guibg=".bg| endif + else + let hirule=hirule." cterm=".mod + if fg != ""| let hirule=hirule." ctermfg=".fg| endif + if bg != ""| let hirule=hirule." ctermbg=".bg| endif + endif +" call Decho(" exe hirule: ".hirule) + exe hirule + endif + + endwhile + + call RestoreWinPosn(curwp) +" call Dret("s:MultiElementHandler") +endfun + +" --------------------------------------------------------------------- +" s:Ansi2Gui: converts an ansi-escape sequence (for 256-color xterms) {{{2 +" to an equivalent gui color +" colors 0- 15: +" colors 16-231: 6x6x6 color cube, code= 16+r*36+g*6+b with r,g,b each in [0,5] +" colors 232-255: grayscale ramp, code= 10*gray + 8 with gray in [0,23] (black,white left out) +fun! s:Ansi2Gui(code) +" call Dfunc("s:Ansi2Gui(code=)".a:code) + let guicolor= a:code + if a:code < 16 + let code2rgb = [ "black", "red3", "green3", "yellow3", "blue3", "magenta3", "cyan3", "gray70", "gray40", "red", "green", "yellow", "royalblue3", "magenta", "cyan", "white"] + let guicolor = code2rgb[a:code] + elseif a:code >= 232 + let code = a:code - 232 + let code = 10*code + 8 + let guicolor = printf("#%02x%02x%02x",code,code,code) + else + let code = a:code - 16 + let code2rgb = [43,85,128,170,213,255] + let r = code2rgb[code/36] + let g = code2rgb[(code%36)/6] + let b = code2rgb[code%6] + let guicolor = printf("#%02x%02x%02x",r,g,b) + endif +" call Dret("s:Ansi2Gui ".guicolor) + return guicolor +endfun + +" --------------------------------------------------------------------- +" Restore: {{{1 +let &cpo= s:keepcpo +unlet s:keepcpo + +" --------------------------------------------------------------------- +" Modelines: {{{1 +" vim: ts=12 fdm=marker diff --git a/etc/soft/vim/vim/+plugins/AnsiESC/doc/AnsiEsc.txt b/etc/soft/vim/vim/+plugins/AnsiESC/doc/AnsiEsc.txt new file mode 100644 index 0000000..dfb3b54 --- /dev/null +++ b/etc/soft/vim/vim/+plugins/AnsiESC/doc/AnsiEsc.txt @@ -0,0 +1,135 @@ +*AnsiEsc.txt* Ansi Escape Sequence Visualization Nov 19, 2012 + +Author: Charles E. Campbell + (remove NOSPAM from Campbell's email first) +Copyright: (c) 2004-2012 by Charles E. Campbell *AnsiEsc-copyright* + The VIM LICENSE applies to AnsiEsc.vim and AnsiEsc.txt + (see |copyright|) except use "AnsiEsc" instead of "Vim". + No warranty, express or implied. Use At-Your-Own-Risk. + +============================================================================== +1. Contents *AnsiEsc* *AnsiEsc-contents* + 1. Contents ...................................|AnsiEsc-contents| + 2. AnsiEsc Manual ...................................|AnsiEsc| + 3. AnsiEsc History ...................................|AnsiEsc-history| + +============================================================================== +2. Manual *AnsiEsc-manual* + + + CONCEAL~ + The best option: for this, your vim must have +conceal. Try either > + :version + :echo has("conceal") +< if you have vim v7.3. Your vim needs to have been compiled + for "big" or "huge" and to support syntax highlighting. + + Vim: (v7.2 or earlier) -- ansi escape sequences themselves are Ignore'd~ + Ansi escape sequences have the expected effect on subsequent + text, but the ansi escape sequences themselves still take up + screen columns. The sequences are displayed using "Ignore" + highlighting; depending on your colorscheme, this should either + make the sequences blend into your background or be visually + suppressed. If the sequences aren't suppressed, you need to + improve your colorscheme! + + USAGE~ + :AnsiEsc -- toggles Ansi escape sequence highlighting + :AnsiEsc! -- rebuilds highlighting for new/removed three + or more element Ansi escape sequences. + + RESULT~ + Ansi escape sequences become concealed or ignored (depending + on whether your vim supports Negri's conceal mode), and their + effect on subsequent text is emulated with Vim's syntax + highlighting. + + Syntax highlighting for one and two element codes are + hard-coded into AnsiEsc.vim. There are too many possibilities + for three or more element codes; these are supported by + examining the file for such sequences and only building syntax + highlighting rules for such sequences as are actually present + in the document. + + EXAMPLE~ + + You'll want to use :AnsiEsc to see the following properly! + + Color Escape Sequences + -   1   2   3   4   5   7  +black black black black black black black +red red red red red red red +green green green green green green green +yellow yellow yellow yellow yellow yellow yellow +blue blue blue blue blue blue blue +magenta magenta magenta magenta magenta magenta magenta +cyan cyan cyan cyan cyan cyan cyan +white white white white white white white + +Black B B B B B B B B +Red R R R R R R R R +Green G G G G G G G G +Yellow Y Y Y Y Y Y Y Y +Blue B B B B B B B B +Magenta M M M M M M M M +Cyan C C C C C C C C +White W W W W W W W W + + Here's the vim logo: + + / \ + / \ + / \ + / \ + +----+ +----+ \ + ++ ++ +- | \ + /| | / / \ +X | | / /O \ + \| | / /+-+ +-\//-+ + | |/ / | | | v | + | / / | | | + +| + | / | |/| |\/|| + +----\ +-+ +-+ ++ + \ / + \ / + + +============================================================================== +3. AnsiEsc History *AnsiEsc-history* {{{1 + v13 Apr 12, 2012 * (Peter Brant) a "conceal" was left on a syntax + definition in a no-conceal-support if block. + Fixed. + Apr 17, 2012 * (Ingo Karkat) support for the "reverse" attribute + v12 Jul 23, 2010 * changed conc to |'cole'| to correspond to vim 7.3's + change + * for menus, &go =~# used to insure correct case + Aug 10, 2010 * (Rainer M Schmid) changed conceallevel setting to + depend on whether the version is before vim 7.3; + for 7.3, also sets concealcursor + * Restores conc/cole/cocu settings when AnsiEsc is + toggled off. + Dec 13, 2010 * Included some additional sequences involving 0 + Feb 22, 2011 * for menus, &go =~# used to insure correct case + v11 Apr 20, 2010 * AnsiEsc now supports enabling/disabling via a menu + * [K and [00m now supported (as + grep --color=always issues them) + v10 May 06, 2009 * Three or more codes in an ANSI escape sequence are + supported by building custom syntax and highlighting + commands. + May 20, 2009 * cecutil bugfix + v9 May 12, 2008 * Now in plugin + autoload format. Provides :AnsiEsc + command to toggle Ansi-escape sequence processing. + Jan 01, 2009 * Applies Ignore highlighting to extended Ansi escape + sequences support 256-colors. + Mar 18, 2009 * Includes "rapid blink" ansi escape sequences. Vim + doesn't have a blinking attribute, so such text uses + "standout" for vim and "undercurl" for gvim. + v8 Aug 16, 2006 * Uses undercurl, and so is only available for vim 7.0 + v7 Dec 14, 2004 * Works better with vim2ansi output and Vince Negri's + conceal patch for vim 6.x. + v2 Nov 24, 2004 * This version didn't use Vince Negri's conceal patch + (used Ignore highlighting) + +============================================================================== +Modelines: {{{1 +vim:tw=78:ts=8:ft=help:fdm=marker: diff --git a/etc/soft/vim/vim/+plugins/AnsiESC/plugin/AnsiEscPlugin.vim b/etc/soft/vim/vim/+plugins/AnsiESC/plugin/AnsiEscPlugin.vim new file mode 100644 index 0000000..dbad436 --- /dev/null +++ b/etc/soft/vim/vim/+plugins/AnsiESC/plugin/AnsiEscPlugin.vim @@ -0,0 +1,32 @@ +" AnsiEscPlugin.vim +" Author: Charles E. Campbell +" Date: Apr 07, 2010 +" Version: 13e +" --------------------------------------------------------------------- +" Load Once: {{{1 +if &cp || exists("g:loaded_AnsiEscPlugin") + finish +endif +let g:loaded_AnsiEscPlugin = "v13e" +let s:keepcpo = &cpo +set cpo&vim + +" --------------------------------------------------------------------- +" Public Interface: {{{1 +com! -bang -nargs=0 AnsiEsc :call AnsiEsc#AnsiEsc(0) + +" DrChip Menu Support: {{{2 +if !exists('g:no_drchip_menu') && !exists('g:no_ansiesc_menu') + if has("gui_running") && has("menu") && &go =~ 'm' + if !exists("g:DrChipTopLvlMenu") + let g:DrChipTopLvlMenu= "DrChip." + endif + exe 'menu '.g:DrChipTopLvlMenu.'AnsiEsc.Start:AnsiEsc :AnsiEsc' + endif +endif + +" --------------------------------------------------------------------- +" Restore: {{{1 +let &cpo= s:keepcpo +unlet s:keepcpo +" vim: ts=4 fdm=marker diff --git a/etc/soft/vim/vim/+plugins/AnsiESC/plugin/cecutil.vim b/etc/soft/vim/vim/+plugins/AnsiESC/plugin/cecutil.vim new file mode 100644 index 0000000..5d74266 --- /dev/null +++ b/etc/soft/vim/vim/+plugins/AnsiESC/plugin/cecutil.vim @@ -0,0 +1,538 @@ +" cecutil.vim : save/restore window position +" save/restore mark position +" save/restore selected user maps +" Author: Charles E. Campbell +" Version: 18i ASTRO-ONLY +" Date: Oct 21, 2013 +" +" Saving Restoring Destroying Marks: {{{1 +" call SaveMark(markname) let savemark= SaveMark(markname) +" call RestoreMark(markname) call RestoreMark(savemark) +" call DestroyMark(markname) +" commands: SM RM DM +" +" Saving Restoring Destroying Window Position: {{{1 +" call SaveWinPosn() let winposn= SaveWinPosn() +" call RestoreWinPosn() call RestoreWinPosn(winposn) +" \swp : save current window/buffer's position +" \rwp : restore current window/buffer's previous position +" commands: SWP RWP +" +" Saving And Restoring User Maps: {{{1 +" call SaveUserMaps(mapmode,maplead,mapchx,suffix) +" call RestoreUserMaps(suffix) +" +" GetLatestVimScripts: 1066 1 :AutoInstall: cecutil.vim +" +" You believe that God is one. You do well. The demons also {{{1 +" believe, and shudder. But do you want to know, vain man, that +" faith apart from works is dead? (James 2:19,20 WEB) +"redraw!|call inputsave()|call input("Press to continue")|call inputrestore() + +" --------------------------------------------------------------------- +" Load Once: {{{1 +if &cp || exists("g:loaded_cecutil") + finish +endif +let g:loaded_cecutil = "v18i" +let s:keepcpo = &cpo +set cpo&vim +"DechoRemOn + +" ======================= +" Public Interface: {{{1 +" ======================= + +" --------------------------------------------------------------------- +" Map Interface: {{{2 +if !exists('g:no_plugin_maps') && !exists('g:no_cecutil_maps') + if !hasmapto('SaveWinPosn') + map swp SaveWinPosn + endif + if !hasmapto('RestoreWinPosn') + map rwp RestoreWinPosn + endif +endif +nmap SaveWinPosn :call SaveWinPosn() +nmap RestoreWinPosn :call RestoreWinPosn() + +" --------------------------------------------------------------------- +" Command Interface: {{{2 +com! -bar -nargs=0 SWP call SaveWinPosn() +com! -bar -nargs=? RWP call RestoreWinPosn() +com! -bar -nargs=1 SM call SaveMark() +com! -bar -nargs=1 RM call RestoreMark() +com! -bar -nargs=1 DM call DestroyMark() + +com! -bar -nargs=1 WLR call s:WinLineRestore() + +if v:version < 630 + let s:modifier= "sil! " +else + let s:modifier= "sil! keepj " +endif + +" =============== +" Functions: {{{1 +" =============== + +" --------------------------------------------------------------------- +" SaveWinPosn: {{{2 +" let winposn= SaveWinPosn() will save window position in winposn variable +" call SaveWinPosn() will save window position in b:cecutil_winposn{b:cecutil_iwinposn} +" let winposn= SaveWinPosn(0) will *only* save window position in winposn variable (no stacking done) +fun! SaveWinPosn(...) +" echomsg "Decho: SaveWinPosn() a:0=".a:0 + if line("$") == 1 && getline(1) == "" +" echomsg "Decho: SaveWinPosn : empty buffer" + return "" + endif + let so_keep = &l:so + let siso_keep = &siso + let ss_keep = &l:ss + setlocal so=0 siso=0 ss=0 + + let swline = line(".") " save-window line in file + let swcol = col(".") " save-window column in file + if swcol >= col("$") + let swcol= swcol + virtcol(".") - virtcol("$") " adjust for virtual edit (cursor past end-of-line) + endif + let swwline = winline() - 1 " save-window window line + let swwcol = virtcol(".") - wincol() " save-window window column + let savedposn = "" +" echomsg "Decho: sw[".swline.",".swcol."] sww[".swwline.",".swwcol."]" + let savedposn = "call GoWinbufnr(".winbufnr(0).")" + let savedposn = savedposn."|".s:modifier.swline + let savedposn = savedposn."|".s:modifier."norm! 0z\" + if swwline > 0 + let savedposn= savedposn.":".s:modifier."call s:WinLineRestore(".(swwline+1).")\" + endif + if swwcol > 0 + let savedposn= savedposn.":".s:modifier."norm! 0".swwcol."zl\" + endif + let savedposn = savedposn.":".s:modifier."call cursor(".swline.",".swcol.")\" + + " save window position in + " b:cecutil_winposn_{iwinposn} (stack) + " only when SaveWinPosn() is used + if a:0 == 0 + if !exists("b:cecutil_iwinposn") + let b:cecutil_iwinposn= 1 + else + let b:cecutil_iwinposn= b:cecutil_iwinposn + 1 + endif +" echomsg "Decho: saving posn to SWP stack" + let b:cecutil_winposn{b:cecutil_iwinposn}= savedposn + endif + + let &l:so = so_keep + let &siso = siso_keep + let &l:ss = ss_keep + +" if exists("b:cecutil_iwinposn") " Decho +" echomsg "Decho: b:cecutil_winpos{".b:cecutil_iwinposn."}[".b:cecutil_winposn{b:cecutil_iwinposn}."]" +" else " Decho +" echomsg "Decho: b:cecutil_iwinposn doesn't exist" +" endif " Decho +" echomsg "Decho: SaveWinPosn [".savedposn."]" + return savedposn +endfun + +" --------------------------------------------------------------------- +" RestoreWinPosn: {{{2 +" call RestoreWinPosn() +" call RestoreWinPosn(winposn) +fun! RestoreWinPosn(...) +" echomsg "Decho: RestoreWinPosn() a:0=".a:0 +" echomsg "Decho: getline(1)<".getline(1).">" +" echomsg "Decho: line(.)=".line(".") + if line("$") == 1 && getline(1) == "" +" echomsg "Decho: RestoreWinPosn : empty buffer" + return "" + endif + let so_keep = &l:so + let siso_keep = &l:siso + let ss_keep = &l:ss + setlocal so=0 siso=0 ss=0 + + if a:0 == 0 || a:1 == "" + " use saved window position in b:cecutil_winposn{b:cecutil_iwinposn} if it exists + if exists("b:cecutil_iwinposn") && exists("b:cecutil_winposn{b:cecutil_iwinposn}") +" echomsg "Decho: using stack b:cecutil_winposn{".b:cecutil_iwinposn."}<".b:cecutil_winposn{b:cecutil_iwinposn}.">" + try + exe s:modifier.b:cecutil_winposn{b:cecutil_iwinposn} + catch /^Vim\%((\a\+)\)\=:E749/ + " ignore empty buffer error messages + endtry + " normally drop top-of-stack by one + " but while new top-of-stack doesn't exist + " drop top-of-stack index by one again + if b:cecutil_iwinposn >= 1 + unlet b:cecutil_winposn{b:cecutil_iwinposn} + let b:cecutil_iwinposn= b:cecutil_iwinposn - 1 + while b:cecutil_iwinposn >= 1 && !exists("b:cecutil_winposn{b:cecutil_iwinposn}") + let b:cecutil_iwinposn= b:cecutil_iwinposn - 1 + endwhile + if b:cecutil_iwinposn < 1 + unlet b:cecutil_iwinposn + endif + endif + else + echohl WarningMsg + echomsg "***warning*** need to SaveWinPosn first!" + echohl None + endif + + else " handle input argument +" echomsg "Decho: using input a:1<".a:1.">" + " use window position passed to this function + exe a:1 + " remove a:1 pattern from b:cecutil_winposn{b:cecutil_iwinposn} stack + if exists("b:cecutil_iwinposn") + let jwinposn= b:cecutil_iwinposn + while jwinposn >= 1 " search for a:1 in iwinposn..1 + if exists("b:cecutil_winposn{jwinposn}") " if it exists + if a:1 == b:cecutil_winposn{jwinposn} " and the pattern matches + unlet b:cecutil_winposn{jwinposn} " unlet it + if jwinposn == b:cecutil_iwinposn " if at top-of-stack + let b:cecutil_iwinposn= b:cecutil_iwinposn - 1 " drop stacktop by one + endif + endif + endif + let jwinposn= jwinposn - 1 + endwhile + endif + endif + + " Seems to be something odd: vertical motions after RWP + " cause jump to first column. The following fixes that. + " Note: was using wincol()>1, but with signs, a cursor + " at column 1 yields wincol()==3. Beeping ensued. + let vekeep= &ve + set ve=all + if virtcol('.') > 1 + exe s:modifier."norm! hl" + elseif virtcol(".") < virtcol("$") + exe s:modifier."norm! lh" + endif + let &ve= vekeep + + let &l:so = so_keep + let &l:siso = siso_keep + let &l:ss = ss_keep + +" echomsg "Decho: RestoreWinPosn" +endfun + +" --------------------------------------------------------------------- +" s:WinLineRestore: {{{2 +fun! s:WinLineRestore(swwline) +" echomsg "Decho: s:WinLineRestore(swwline=".a:swwline.")" + while winline() < a:swwline + let curwinline= winline() + exe s:modifier."norm! \" + if curwinline == winline() + break + endif + endwhile +" echomsg "Decho: s:WinLineRestore" +endfun + +" --------------------------------------------------------------------- +" GoWinbufnr: go to window holding given buffer (by number) {{{2 +" Prefers current window; if its buffer number doesn't match, +" then will try from topleft to bottom right +fun! GoWinbufnr(bufnum) +" call Dfunc("GoWinbufnr(".a:bufnum.")") + if winbufnr(0) == a:bufnum +" call Dret("GoWinbufnr : winbufnr(0)==a:bufnum") + return + endif + winc t + let first=1 + while winbufnr(0) != a:bufnum && (first || winnr() != 1) + winc w + let first= 0 + endwhile +" call Dret("GoWinbufnr") +endfun + +" --------------------------------------------------------------------- +" SaveMark: sets up a string saving a mark position. {{{2 +" For example, SaveMark("a") +" Also sets up a global variable, g:savemark_{markname} +fun! SaveMark(markname) +" call Dfunc("SaveMark(markname<".a:markname.">)") + let markname= a:markname + if strpart(markname,0,1) !~ '\a' + let markname= strpart(markname,1,1) + endif +" call Decho("markname=".markname) + + let lzkeep = &lz + set lz + + if 1 <= line("'".markname) && line("'".markname) <= line("$") + let winposn = SaveWinPosn(0) + exe s:modifier."norm! `".markname + let savemark = SaveWinPosn(0) + let g:savemark_{markname} = savemark + let savemark = markname.savemark + call RestoreWinPosn(winposn) + else + let g:savemark_{markname} = "" + let savemark = "" + endif + + let &lz= lzkeep + +" call Dret("SaveMark : savemark<".savemark.">") + return savemark +endfun + +" --------------------------------------------------------------------- +" RestoreMark: {{{2 +" call RestoreMark("a") -or- call RestoreMark(savemark) +fun! RestoreMark(markname) +" call Dfunc("RestoreMark(markname<".a:markname.">)") + + if strlen(a:markname) <= 0 +" call Dret("RestoreMark : no such mark") + return + endif + let markname= strpart(a:markname,0,1) + if markname !~ '\a' + " handles 'a -> a styles + let markname= strpart(a:markname,1,1) + endif +" call Decho("markname=".markname." strlen(a:markname)=".strlen(a:markname)) + + let lzkeep = &lz + set lz + let winposn = SaveWinPosn(0) + + if strlen(a:markname) <= 2 + if exists("g:savemark_{markname}") && strlen(g:savemark_{markname}) != 0 + " use global variable g:savemark_{markname} +" call Decho("use savemark list") + call RestoreWinPosn(g:savemark_{markname}) + exe "norm! m".markname + endif + else + " markname is a savemark command (string) +" call Decho("use savemark command") + let markcmd= strpart(a:markname,1) + call RestoreWinPosn(markcmd) + exe "norm! m".markname + endif + + call RestoreWinPosn(winposn) + let &lz = lzkeep + +" call Dret("RestoreMark") +endfun + +" --------------------------------------------------------------------- +" DestroyMark: {{{2 +" call DestroyMark("a") -- destroys mark +fun! DestroyMark(markname) +" call Dfunc("DestroyMark(markname<".a:markname.">)") + + " save options and set to standard values + let reportkeep= &report + let lzkeep = &lz + set lz report=10000 + + let markname= strpart(a:markname,0,1) + if markname !~ '\a' + " handles 'a -> a styles + let markname= strpart(a:markname,1,1) + endif +" call Decho("markname=".markname) + + let curmod = &mod + let winposn = SaveWinPosn(0) + 1 + let lineone = getline(".") + exe "k".markname + d + put! =lineone + let &mod = curmod + call RestoreWinPosn(winposn) + + " restore options to user settings + let &report = reportkeep + let &lz = lzkeep + +" call Dret("DestroyMark") +endfun + +" --------------------------------------------------------------------- +" QArgSplitter: to avoid \ processing by , is needed. {{{2 +" However, doesn't split at all, so this one returns a list +" with splits at all whitespace (only!), plus a leading length-of-list. +" The resulting list: qarglist[0] corresponds to a:0 +" qarglist[i] corresponds to a:{i} +fun! QArgSplitter(qarg) +" call Dfunc("QArgSplitter(qarg<".a:qarg.">)") + let qarglist = split(a:qarg) + let qarglistlen = len(qarglist) + let qarglist = insert(qarglist,qarglistlen) +" call Dret("QArgSplitter ".string(qarglist)) + return qarglist +endfun + +" --------------------------------------------------------------------- +" ListWinPosn: {{{2 +"fun! ListWinPosn() " Decho +" if !exists("b:cecutil_iwinposn") || b:cecutil_iwinposn == 0 " Decho +" call Decho("nothing on SWP stack") " Decho +" else " Decho +" let jwinposn= b:cecutil_iwinposn " Decho +" while jwinposn >= 1 " Decho +" if exists("b:cecutil_winposn{jwinposn}") " Decho +" call Decho("winposn{".jwinposn."}<".b:cecutil_winposn{jwinposn}.">") " Decho +" else " Decho +" call Decho("winposn{".jwinposn."} -- doesn't exist") " Decho +" endif " Decho +" let jwinposn= jwinposn - 1 " Decho +" endwhile " Decho +" endif " Decho +"endfun " Decho +"com! -nargs=0 LWP call ListWinPosn() " Decho + +" --------------------------------------------------------------------- +" SaveUserMaps: this function sets up a script-variable (s:restoremap) {{{2 +" which can be used to restore user maps later with +" call RestoreUserMaps() +" +" mapmode - see :help maparg for details (n v o i c l "") +" ex. "n" = Normal +" The letters "b" and "u" are optional prefixes; +" The "u" means that the map will also be unmapped +" The "b" means that the map has a qualifier +" ex. "un" = Normal + unmapping +" ex. "bn" = Normal + +" ex. "bun" = Normal + + unmapping +" ex. "ubn" = Normal + + unmapping +" maplead - see mapchx +" mapchx - "" handled as a single map item. +" ex. "" +" - "string" a string of single letters which are actually +" multiple two-letter maps (using the maplead: +" maplead . each_character_in_string) +" ex. maplead="\" and mapchx="abc" saves user mappings for +" \a, \b, and \c +" Of course, if maplead is "", then for mapchx="abc", +" mappings for a, b, and c are saved. +" - :something handled as a single map item, w/o the ":" +" ex. mapchx= ":abc" will save a mapping for "abc" +" suffix - a string unique to your plugin +" ex. suffix= "DrawIt" +fun! SaveUserMaps(mapmode,maplead,mapchx,suffix) +" call Dfunc("SaveUserMaps(mapmode<".a:mapmode."> maplead<".a:maplead."> mapchx<".a:mapchx."> suffix<".a:suffix.">)") + + if !exists("s:restoremap_{a:suffix}") + " initialize restoremap_suffix to null string + let s:restoremap_{a:suffix}= "" + endif + + " set up dounmap: if 1, then save and unmap (a:mapmode leads with a "u") + " if 0, save only + let mapmode = a:mapmode + let dounmap = 0 + let dobuffer = "" + while mapmode =~ '^[bu]' + if mapmode =~ '^u' + let dounmap = 1 + let mapmode = strpart(a:mapmode,1) + elseif mapmode =~ '^b' + let dobuffer = " " + let mapmode = strpart(a:mapmode,1) + endif + endwhile +" call Decho("dounmap=".dounmap." dobuffer<".dobuffer.">") + + " save single map :...something... + if strpart(a:mapchx,0,1) == ':' +" call Decho("save single map :...something...") + let amap= strpart(a:mapchx,1) + if amap == "|" || amap == "\" + let amap= "\".amap + endif + let amap = a:maplead.amap + let s:restoremap_{a:suffix} = s:restoremap_{a:suffix}."|:sil! ".mapmode."unmap ".dobuffer.amap + if maparg(amap,mapmode) != "" + let maprhs = substitute(maparg(amap,mapmode),'|','','ge') + let s:restoremap_{a:suffix} = s:restoremap_{a:suffix}."|:".mapmode."map ".dobuffer.amap." ".maprhs + endif + if dounmap + exe "sil! ".mapmode."unmap ".dobuffer.amap + endif + + " save single map + elseif strpart(a:mapchx,0,1) == '<' +" call Decho("save single map ") + let amap = a:mapchx + if amap == "|" || amap == "\" + let amap= "\".amap +" call Decho("amap[[".amap."]]") + endif + let s:restoremap_{a:suffix} = s:restoremap_{a:suffix}."|sil! ".mapmode."unmap ".dobuffer.amap + if maparg(a:mapchx,mapmode) != "" + let maprhs = substitute(maparg(amap,mapmode),'|','','ge') + let s:restoremap_{a:suffix} = s:restoremap_{a:suffix}."|".mapmode."map ".dobuffer.amap." ".maprhs + endif + if dounmap + exe "sil! ".mapmode."unmap ".dobuffer.amap + endif + + " save multiple maps + else +" call Decho("save multiple maps") + let i= 1 + while i <= strlen(a:mapchx) + let amap= a:maplead.strpart(a:mapchx,i-1,1) + if amap == "|" || amap == "\" + let amap= "\".amap + endif + let s:restoremap_{a:suffix} = s:restoremap_{a:suffix}."|sil! ".mapmode."unmap ".dobuffer.amap + if maparg(amap,mapmode) != "" + let maprhs = substitute(maparg(amap,mapmode),'|','','ge') + let s:restoremap_{a:suffix} = s:restoremap_{a:suffix}."|".mapmode."map ".dobuffer.amap." ".maprhs + endif + if dounmap + exe "sil! ".mapmode."unmap ".dobuffer.amap + endif + let i= i + 1 + endwhile + endif +" call Dret("SaveUserMaps : restoremap_".a:suffix.": ".s:restoremap_{a:suffix}) +endfun + +" --------------------------------------------------------------------- +" RestoreUserMaps: {{{2 +" Used to restore user maps saved by SaveUserMaps() +fun! RestoreUserMaps(suffix) +" call Dfunc("RestoreUserMaps(suffix<".a:suffix.">)") + if exists("s:restoremap_{a:suffix}") + let s:restoremap_{a:suffix}= substitute(s:restoremap_{a:suffix},'|\s*$','','e') + if s:restoremap_{a:suffix} != "" +" call Decho("exe ".s:restoremap_{a:suffix}) + exe "sil! ".s:restoremap_{a:suffix} + endif + unlet s:restoremap_{a:suffix} + endif +" call Dret("RestoreUserMaps") +endfun + +" ============== +" Restore: {{{1 +" ============== +let &cpo= s:keepcpo +unlet s:keepcpo + +" ================ +" Modelines: {{{1 +" ================ +" vim: ts=4 fdm=marker