summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHugues Hiegel <hugues.hiegel@qosmos.com>2013-04-25 16:58:15 +0200
committerHugues Hiegel <hugues.hiegel@qosmos.com>2013-04-25 16:59:48 +0200
commitaf47b3d8e6875f093502e45fbed918263e693331 (patch)
tree55fbd2357a4fe2a5e0cf2ef2cc4787a0a4b67b77
parent002782c54670a1f02b6f0cd62e23b2a1b3b9660f (diff)
[AnsiEsc] Ansi Escapes plugin
-rw-r--r--autoload/AnsiEsc.vim848
-rw-r--r--doc/AnsiEsc.txt134
-rw-r--r--doc/tags76
-rw-r--r--plugin/AnsiEscPlugin.vim30
-rw-r--r--plugin/cecutil.vim536
5 files changed, 1624 insertions, 0 deletions
diff --git a/autoload/AnsiEsc.vim b/autoload/AnsiEsc.vim
new file mode 100644
index 0000000..be4fa5e
--- /dev/null
+++ b/autoload/AnsiEsc.vim
@@ -0,0 +1,848 @@
+" AnsiEsc.vim: Uses syntax highlighting. A vim 7.0 plugin!
+" Language: Text with ansi escape sequences
+" Maintainer: Charles E. Campbell <NdrOchipS@PcampbellAfamily.Mbiz>
+" Version: 12
+" Date: Dec 13, 2010
+"
+" Usage: :AnsiEsc
+"
+" Note: this plugin requires Vince Negri's conceal-ownsyntax patch
+" See http://groups.google.com/group/vim_dev/web/vim-patches, Patch#14
+"
+" GetLatestVimScripts: 302 1 :AutoInstall: AnsiEsc.vim
+"redraw!|call DechoSep()|call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+" ---------------------------------------------------------------------
+"DechoTabOn
+" Load Once: {{{1
+if exists("g:loaded_AnsiEsc")
+ finish
+endif
+let g:loaded_AnsiEsc = "v12"
+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 has("gui_running") && has("menu") && &go =~ 'm'
+ " menu support
+ exe 'silent! unmenu '.g:DrChipTopLvlMenu.'AnsiEsc'
+ exe 'menu '.g:DrChipTopLvlMenu.'AnsiEsc.Start<tab>:AnsiEsc :AnsiEsc<cr>'
+ 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 has("gui_running") && has("menu") && &go =~ 'm'
+ " menu support
+ exe 'silent! unmenu '.g:DrChipTopLvlMenu.'AnsiEsc'
+ exe 'menu '.g:DrChipTopLvlMenu.'AnsiEsc.Stop<tab>:AnsiEsc :AnsiEsc<cr>'
+ 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 conceal '\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
+
+ 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
+
+ syn region ansiBlackBg start="\e\[;\=0\{0,2};\=\%(1;\)\=40\%(1;\)\=m" end="\e\["me=e-2 contains=ansiConceal
+ syn region ansiRedBg start="\e\[;\=0\{0,2};\=\%(1;\)\=41\%(1;\)\=m" end="\e\["me=e-2 contains=ansiConceal
+ syn region ansiGreenBg start="\e\[;\=0\{0,2};\=\%(1;\)\=42\%(1;\)\=m" end="\e\["me=e-2 contains=ansiConceal
+ syn region ansiYellowBg start="\e\[;\=0\{0,2};\=\%(1;\)\=43\%(1;\)\=m" end="\e\["me=e-2 contains=ansiConceal
+ syn region ansiBlueBg start="\e\[;\=0\{0,2};\=\%(1;\)\=44\%(1;\)\=m" end="\e\["me=e-2 contains=ansiConceal
+ syn region ansiMagentaBg start="\e\[;\=0\{0,2};\=\%(1;\)\=45\%(1;\)\=m" end="\e\["me=e-2 contains=ansiConceal
+ syn region ansiCyanBg start="\e\[;\=0\{0,2};\=\%(1;\)\=46\%(1;\)\=m" end="\e\["me=e-2 contains=ansiConceal
+ syn region ansiWhiteBg start="\e\[;\=0\{0,2};\=\%(1;\)\=47\%(1;\)\=m" 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
+ syn region ansiBoldRed start="\e\[;\=0\{0,2};\=\%(1;31\|31;1\)m" 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 ansiBoldYellow start="\e\[;\=0\{0,2};\=\%(1;33\|33;1\)m" 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 ansiBoldMagenta start="\e\[;\=0\{0,2};\=\%(1;35\|35;1\)m" 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 ansiBoldWhite start="\e\[;\=0\{0,2};\=\%(1;37\|37;1\)m" 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 <esc>[38;5
+ let skip= 385
+" call Decho(" 1: building code=".code." skip=".skip.": mod<".mod."> fg<".fg."> bg<".bg.">")
+ continue
+ elseif skip == 385
+ " handling <esc>[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 <esc>[48;5
+ let skip= 485
+" call Decho(" 3: building code=".code." skip=".skip.": mod<".mod."> fg<".fg."> bg<".bg.">")
+ continue
+ elseif skip == 485
+ " handling <esc>[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/doc/AnsiEsc.txt b/doc/AnsiEsc.txt
new file mode 100644
index 0000000..4fe361e
--- /dev/null
+++ b/doc/AnsiEsc.txt
@@ -0,0 +1,134 @@
+*AnsiEsc.txt* Ansi Escape Sequence Visualization Dec 13, 2010
+
+Author: Charles E. Campbell, Jr. <NdrOchip@ScampbellPfamily.AbizM>
+ (remove NOSPAM from Campbell's email first)
+Copyright: (c) 2004-2010 by Charles E. Campbell, Jr. *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 mode.
+ For this, your vim must have +conceal. A typical way to get the
+ conceal feature:
+
+ * cd ..wherever../vim72/
+ * wget http://vince.negri.googlepages.com/conceal-ownsyntax.diff
+ * patch -p0 < conceal-ownsyntax.diff
+ * make distclean
+ * configure --with-features=huge
+ * make
+ * make install
+
+ Normal: -- 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!
+ (using Vince Negri's conceal option or vim 7.3)
+
+ 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
+ v12 Jul 23, 2010 * changed conc to |'cole'| to correspond to vim 7.3's
+ change
+ 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
+ v11 Apr 20, 2010 * AnsiEsc now supports enabling/disabling via a menu
+ * <esc>[K and <esc>[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/doc/tags b/doc/tags
new file mode 100644
index 0000000..db8d2f0
--- /dev/null
+++ b/doc/tags
@@ -0,0 +1,76 @@
+:CVSEdit vcscommand.txt /*:CVSEdit*
+:CVSEditors vcscommand.txt /*:CVSEditors*
+:CVSUnedit vcscommand.txt /*:CVSUnedit*
+:CVSWatch vcscommand.txt /*:CVSWatch*
+:CVSWatchAdd vcscommand.txt /*:CVSWatchAdd*
+:CVSWatchOff vcscommand.txt /*:CVSWatchOff*
+:CVSWatchOn vcscommand.txt /*:CVSWatchOn*
+:CVSWatchRemove vcscommand.txt /*:CVSWatchRemove*
+:CVSWatchers vcscommand.txt /*:CVSWatchers*
+:VCSAdd vcscommand.txt /*:VCSAdd*
+:VCSAnnotate vcscommand.txt /*:VCSAnnotate*
+:VCSBlame vcscommand.txt /*:VCSBlame*
+:VCSCommit vcscommand.txt /*:VCSCommit*
+:VCSDelete vcscommand.txt /*:VCSDelete*
+:VCSDiff vcscommand.txt /*:VCSDiff*
+:VCSGotoOriginal vcscommand.txt /*:VCSGotoOriginal*
+:VCSInfo vcscommand.txt /*:VCSInfo*
+:VCSLock vcscommand.txt /*:VCSLock*
+:VCSLog vcscommand.txt /*:VCSLog*
+:VCSRemove vcscommand.txt /*:VCSRemove*
+:VCSRevert vcscommand.txt /*:VCSRevert*
+:VCSReview vcscommand.txt /*:VCSReview*
+:VCSStatus vcscommand.txt /*:VCSStatus*
+:VCSUnlock vcscommand.txt /*:VCSUnlock*
+:VCSUpdate vcscommand.txt /*:VCSUpdate*
+:VCSVimDiff vcscommand.txt /*:VCSVimDiff*
+AnsiEsc AnsiEsc.txt /*AnsiEsc*
+AnsiEsc-contents AnsiEsc.txt /*AnsiEsc-contents*
+AnsiEsc-copyright AnsiEsc.txt /*AnsiEsc-copyright*
+AnsiEsc-history AnsiEsc.txt /*AnsiEsc-history*
+AnsiEsc-manual AnsiEsc.txt /*AnsiEsc-manual*
+AnsiEsc.txt AnsiEsc.txt /*AnsiEsc.txt*
+VCSCommandCVSDiffOpt vcscommand.txt /*VCSCommandCVSDiffOpt*
+VCSCommandCVSExec vcscommand.txt /*VCSCommandCVSExec*
+VCSCommandCommitOnWrite vcscommand.txt /*VCSCommandCommitOnWrite*
+VCSCommandDeleteOnHide vcscommand.txt /*VCSCommandDeleteOnHide*
+VCSCommandDiffSplit vcscommand.txt /*VCSCommandDiffSplit*
+VCSCommandDisableExtensionMappings vcscommand.txt /*VCSCommandDisableExtensionMappings*
+VCSCommandDisableMappings vcscommand.txt /*VCSCommandDisableMappings*
+VCSCommandEdit vcscommand.txt /*VCSCommandEdit*
+VCSCommandEnableBufferSetup vcscommand.txt /*VCSCommandEnableBufferSetup*
+VCSCommandResultBufferNameExtension vcscommand.txt /*VCSCommandResultBufferNameExtension*
+VCSCommandResultBufferNameFunction vcscommand.txt /*VCSCommandResultBufferNameFunction*
+VCSCommandSVKExec vcscommand.txt /*VCSCommandSVKExec*
+VCSCommandSVNDiffExt vcscommand.txt /*VCSCommandSVNDiffExt*
+VCSCommandSVNDiffOpt vcscommand.txt /*VCSCommandSVNDiffOpt*
+VCSCommandSVNExec vcscommand.txt /*VCSCommandSVNExec*
+VCSCommandSplit vcscommand.txt /*VCSCommandSplit*
+b:VCSCommandCommand vcscommand.txt /*b:VCSCommandCommand*
+b:VCSCommandOriginalBuffer vcscommand.txt /*b:VCSCommandOriginalBuffer*
+b:VCSCommandSourceFile vcscommand.txt /*b:VCSCommandSourceFile*
+b:VCSCommandVCSType vcscommand.txt /*b:VCSCommandVCSType*
+cvscommand-changes vcscommand.txt /*cvscommand-changes*
+vcscommand vcscommand.txt /*vcscommand*
+vcscommand-buffer-management vcscommand.txt /*vcscommand-buffer-management*
+vcscommand-buffer-variables vcscommand.txt /*vcscommand-buffer-variables*
+vcscommand-bugs vcscommand.txt /*vcscommand-bugs*
+vcscommand-commands vcscommand.txt /*vcscommand-commands*
+vcscommand-config vcscommand.txt /*vcscommand-config*
+vcscommand-contents vcscommand.txt /*vcscommand-contents*
+vcscommand-customize vcscommand.txt /*vcscommand-customize*
+vcscommand-events vcscommand.txt /*vcscommand-events*
+vcscommand-install vcscommand.txt /*vcscommand-install*
+vcscommand-intro vcscommand.txt /*vcscommand-intro*
+vcscommand-manual vcscommand.txt /*vcscommand-manual*
+vcscommand-mappings vcscommand.txt /*vcscommand-mappings*
+vcscommand-mappings-override vcscommand.txt /*vcscommand-mappings-override*
+vcscommand-naming vcscommand.txt /*vcscommand-naming*
+vcscommand-options vcscommand.txt /*vcscommand-options*
+vcscommand-ssh vcscommand.txt /*vcscommand-ssh*
+vcscommand-ssh-config vcscommand.txt /*vcscommand-ssh-config*
+vcscommand-ssh-env vcscommand.txt /*vcscommand-ssh-env*
+vcscommand-ssh-other vcscommand.txt /*vcscommand-ssh-other*
+vcscommand-ssh-wrapper vcscommand.txt /*vcscommand-ssh-wrapper*
+vcscommand-statusline vcscommand.txt /*vcscommand-statusline*
+vcscommand.txt vcscommand.txt /*vcscommand.txt*
diff --git a/plugin/AnsiEscPlugin.vim b/plugin/AnsiEscPlugin.vim
new file mode 100644
index 0000000..0dd710b
--- /dev/null
+++ b/plugin/AnsiEscPlugin.vim
@@ -0,0 +1,30 @@
+" AnsiEscPlugin.vim
+" Author: Charles E. Campbell, Jr.
+" Date: Apr 07, 2010
+" Version: 12
+" ---------------------------------------------------------------------
+" Load Once: {{{1
+if &cp || exists("g:loaded_AnsiEscPlugin")
+ finish
+endif
+let g:loaded_AnsiEscPlugin = "v12"
+let s:keepcpo = &cpo
+set cpo&vim
+
+" ---------------------------------------------------------------------
+" Public Interface: {{{1
+com! -bang -nargs=0 AnsiEsc :call AnsiEsc#AnsiEsc(<bang>0)
+
+" DrChip Menu Support: {{{2
+if has("gui_running") && has("menu") && &go =~ 'm'
+ if !exists("g:DrChipTopLvlMenu")
+ let g:DrChipTopLvlMenu= "DrChip."
+ endif
+ exe 'menu '.g:DrChipTopLvlMenu.'AnsiEsc.Start<tab>:AnsiEsc :AnsiEsc<cr>'
+endif
+
+" ---------------------------------------------------------------------
+" Restore: {{{1
+let &cpo= s:keepcpo
+unlet s:keepcpo
+" vim: ts=4 fdm=marker
diff --git a/plugin/cecutil.vim b/plugin/cecutil.vim
new file mode 100644
index 0000000..e45e798
--- /dev/null
+++ b/plugin/cecutil.vim
@@ -0,0 +1,536 @@
+" cecutil.vim : save/restore window position
+" save/restore mark position
+" save/restore selected user maps
+" Author: Charles E. Campbell, Jr.
+" Version: 18h ASTRO-ONLY
+" Date: Apr 05, 2010
+"
+" 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 <cr> to continue")|call inputrestore()
+
+" ---------------------------------------------------------------------
+" Load Once: {{{1
+if &cp || exists("g:loaded_cecutil")
+ finish
+endif
+let g:loaded_cecutil = "v18h"
+let s:keepcpo = &cpo
+set cpo&vim
+"DechoRemOn
+
+" =======================
+" Public Interface: {{{1
+" =======================
+
+" ---------------------------------------------------------------------
+" Map Interface: {{{2
+if !hasmapto('<Plug>SaveWinPosn')
+ map <unique> <Leader>swp <Plug>SaveWinPosn
+endif
+if !hasmapto('<Plug>RestoreWinPosn')
+ map <unique> <Leader>rwp <Plug>RestoreWinPosn
+endif
+nmap <silent> <Plug>SaveWinPosn :call SaveWinPosn()<CR>
+nmap <silent> <Plug>RestoreWinPosn :call RestoreWinPosn()<CR>
+
+" ---------------------------------------------------------------------
+" Command Interface: {{{2
+com! -bar -nargs=0 SWP call SaveWinPosn()
+com! -bar -nargs=? RWP call RestoreWinPosn(<args>)
+com! -bar -nargs=1 SM call SaveMark(<q-args>)
+com! -bar -nargs=1 RM call RestoreMark(<q-args>)
+com! -bar -nargs=1 DM call DestroyMark(<q-args>)
+
+com! -bar -nargs=1 WLR call s:WinLineRestore(<q-args>)
+
+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\<cr>"
+ if swwline > 0
+ let savedposn= savedposn.":".s:modifier."call s:WinLineRestore(".(swwline+1).")\<cr>"
+ endif
+ if swwcol > 0
+ let savedposn= savedposn.":".s:modifier."norm! 0".swwcol."zl\<cr>"
+ endif
+ let savedposn = savedposn.":".s:modifier."call cursor(".swline.",".swcol.")\<cr>"
+
+ " 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! \<c-y>"
+ 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 <f-args>, <q-args> is needed. {{{2
+" However, <q-args> 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 <buffer> qualifier
+" ex. "un" = Normal + unmapping
+" ex. "bn" = Normal + <buffer>
+" ex. "bun" = Normal + <buffer> + unmapping
+" ex. "ubn" = Normal + <buffer> + unmapping
+" maplead - see mapchx
+" mapchx - "<something>" handled as a single map item.
+" ex. "<left>"
+" - "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 = "<buffer> "
+ 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 == "\<c-v>"
+ let amap= "\<c-v>".amap
+ endif
+ let amap = a:maplead.amap
+ let s:restoremap_{a:suffix} = s:restoremap_{a:suffix}."|:silent! ".mapmode."unmap ".dobuffer.amap
+ if maparg(amap,mapmode) != ""
+ let maprhs = substitute(maparg(amap,mapmode),'|','<bar>','ge')
+ let s:restoremap_{a:suffix} = s:restoremap_{a:suffix}."|:".mapmode."map ".dobuffer.amap." ".maprhs
+ endif
+ if dounmap
+ exe "silent! ".mapmode."unmap ".dobuffer.amap
+ endif
+
+ " save single map <something>
+ elseif strpart(a:mapchx,0,1) == '<'
+" call Decho("save single map <something>")
+ let amap = a:mapchx
+ if amap == "|" || amap == "\<c-v>"
+ let amap= "\<c-v>".amap
+" call Decho("amap[[".amap."]]")
+ endif
+ let s:restoremap_{a:suffix} = s:restoremap_{a:suffix}."|silent! ".mapmode."unmap ".dobuffer.amap
+ if maparg(a:mapchx,mapmode) != ""
+ let maprhs = substitute(maparg(amap,mapmode),'|','<bar>','ge')
+ let s:restoremap_{a:suffix} = s:restoremap_{a:suffix}."|".mapmode."map ".dobuffer.amap." ".maprhs
+ endif
+ if dounmap
+ exe "silent! ".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 == "\<c-v>"
+ let amap= "\<c-v>".amap
+ endif
+ let s:restoremap_{a:suffix} = s:restoremap_{a:suffix}."|silent! ".mapmode."unmap ".dobuffer.amap
+ if maparg(amap,mapmode) != ""
+ let maprhs = substitute(maparg(amap,mapmode),'|','<bar>','ge')
+ let s:restoremap_{a:suffix} = s:restoremap_{a:suffix}."|".mapmode."map ".dobuffer.amap." ".maprhs
+ endif
+ if dounmap
+ exe "silent! ".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 "silent! ".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