all repos — dotfiles @ e04b8ecd3898a329203432f91675e297fb5ff689

linux dotfiles

add ...its 4 am and I haven't slept
prithugoswami prithugoswami524@gmail.com
Mon, 24 Dec 2018 05:21:22 +0530
commit

e04b8ecd3898a329203432f91675e297fb5ff689

parent

4c347b8677d26f98274b972758d5c3968016271d

3 files changed, 3144 insertions(+), 0 deletions(-)

jump to
A .vim/autoload/Colorizer.vim

@@ -0,0 +1,2595 @@

+" Plugin: Highlight Colornames and Values +" Maintainer: Christian Brabandt <cb@256bit.org> +" URL: http://www.github.com/chrisbra/color_highlight +" Last Change: Thu, 15 Jan 2015 21:49:17 +0100 +" Licence: Vim License (see :h License) +" Version: 0.11 +" GetLatestVimScripts: 3963 11 :AutoInstall: Colorizer.vim +" +" This plugin was inspired by the css_color.vim plugin from Nikolaus Hofer. +" Changes made: - make terminal colors work more reliably and with all +" color terminals +" - performance improvements, coloring is almost instantenously +" - detect rgb colors like this: rgb(R,G,B) +" - detect hvl coloring: hvl(H,V,L) +" - fix small bugs +" - Color ANSI Term values and hide terminal escape sequences + +" Init some variables "{{{1 +let s:cpo_save = &cpo +set cpo&vim + +" the 6 value iterations in the xterm color cube "{{{2 +let s:valuerange6 = [ 0x00, 0x5F, 0x87, 0xAF, 0xD7, 0xFF ] + +"" the 4 value iterations in the 88 color xterm cube "{{{2 +let s:valuerange4 = [ 0x00, 0x8B, 0xCD, 0xFF ] +" +"" 16 basic colors "{{{2 +let s:basic16 = [ + \ [ 0x00, 0x00, 0x00 ], + \ [ 0xCD, 0x00, 0x00 ], + \ [ 0x00, 0xCD, 0x00 ], + \ [ 0xCD, 0xCD, 0x00 ], + \ [ 0x00, 0x00, 0xEE ], + \ [ 0xCD, 0x00, 0xCD ], + \ [ 0x00, 0xCD, 0xCD ], + \ [ 0xE5, 0xE5, 0xE5 ], + \ [ 0x7F, 0x7F, 0x7F ], + \ [ 0xFF, 0x00, 0x00 ], + \ [ 0x00, 0xFF, 0x00 ], + \ [ 0xFF, 0xFF, 0x00 ], + \ [ 0x5C, 0x5C, 0xFF ], + \ [ 0xFF, 0x00, 0xFF ], + \ [ 0x00, 0xFF, 0xFF ], + \ [ 0xFF, 0xFF, 0xFF ] + \ ] + +" Cygwin / Window console / ConEmu has different color codes +if ($ComSpec =~# '^\%(command\.com\|cmd\.exe\)$' && + \ !s:HasGui()) || + \ (exists("$ConEmuPID") && + \ $ConEmuANSI ==# "OFF") || + \ ($TERM ==# 'cygwin' && &t_Co == 16) " Cygwin terminal + + " command.com/ConEmu Color Cube (currently only supports 16 colors) + let s:basic16 = [ + \ [ 0x00, 0x00, 0x00 ], + \ [ 0x00, 0x00, 0x80 ], + \ [ 0x00, 0x80, 0x00 ], + \ [ 0x00, 0x80, 0x80 ], + \ [ 0x80, 0x00, 0x00 ], + \ [ 0x80, 0x00, 0x80 ], + \ [ 0xFF, 0xFF, 0x00 ], + \ [ 0xFF, 0xFF, 0xFF ], + \ [ 0xC0, 0xC0, 0xC0 ], + \ [ 0x00, 0x00, 0xFF ], + \ [ 0x00, 0xFF, 0x00 ], + \ [ 0x00, 0xFF, 0xFF ], + \ [ 0xFF, 0x00, 0x00 ], + \ [ 0xFF, 0x00, 0xFF ], + \ [ 0xFF, 0xFF, 0x00 ], + \ [ 0xFF, 0xFF, 0xFF ] + \ ] + let &t_Co=16 +endif + +" xterm-8 colors "{{{2 +let s:xterm_8colors = { +\ 'black': '#000000', +\ 'darkblue': '#00008B', +\ 'darkgreen': '#00CD00', +\ 'darkcyan': '#00CDCD', +\ 'darkred': '#CD0000', +\ 'darkmagenta': '#8B008B', +\ 'brown': '#CDCD00', +\ 'darkyellow': '#CDCD00', +\ 'lightgrey': '#E5E5E5', +\ 'lightgray': '#E5E5E5', +\ 'gray': '#E5E5E5', +\ 'grey': '#E5E5E5' +\ } + +" xterm-16 colors "{{{2 +let s:xterm_16colors = { +\ 'darkgrey': '#7F7F7F', +\ 'darkgray': '#7F7F7F', +\ 'blue': '#5C5CFF', +\ 'lightblue': '#5C5CFF', +\ 'green': '#00FF00', +\ 'lightgreen': '#00FF00', +\ 'cyan': '#00FFFF', +\ 'lightcyan': '#00FFFF', +\ 'red': '#FF0000', +\ 'lightred': '#FF0000', +\ 'magenta': '#FF00FF', +\ 'lightmagenta': '#FF00FF', +\ 'yellow': '#FFFF00', +\ 'lightyellow': '#FFFF00', +\ 'white': '#FFFFFF', +\ } +" add the items from the 8 color xterm variable to the 16 color xterm +call extend(s:xterm_16colors, s:xterm_8colors) + +" W3C Colors "{{{2 +let s:w3c_color_names = { +\ 'aliceblue': '#F0F8FF', +\ 'antiquewhite': '#FAEBD7', +\ 'aqua': '#00FFFF', +\ 'aquamarine': '#7FFFD4', +\ 'azure': '#F0FFFF', +\ 'beige': '#F5F5DC', +\ 'bisque': '#FFE4C4', +\ 'black': '#000000', +\ 'blanchedalmond': '#FFEBCD', +\ 'blue': '#0000FF', +\ 'blueviolet': '#8A2BE2', +\ 'brown': '#A52A2A', +\ 'burlywood': '#DEB887', +\ 'cadetblue': '#5F9EA0', +\ 'chartreuse': '#7FFF00', +\ 'chocolate': '#D2691E', +\ 'coral': '#FF7F50', +\ 'cornflowerblue': '#6495ED', +\ 'cornsilk': '#FFF8DC', +\ 'crimson': '#DC143C', +\ 'cyan': '#00FFFF', +\ 'darkblue': '#00008B', +\ 'darkcyan': '#008B8B', +\ 'darkgoldenrod': '#B8860B', +\ 'darkgray': '#A9A9A9', +\ 'darkgreen': '#006400', +\ 'darkkhaki': '#BDB76B', +\ 'darkmagenta': '#8B008B', +\ 'darkolivegreen': '#556B2F', +\ 'darkorange': '#FF8C00', +\ 'darkorchid': '#9932CC', +\ 'darkred': '#8B0000', +\ 'darksalmon': '#E9967A', +\ 'darkseagreen': '#8FBC8F', +\ 'darkslateblue': '#483D8B', +\ 'darkslategray': '#2F4F4F', +\ 'darkturquoise': '#00CED1', +\ 'darkviolet': '#9400D3', +\ 'deeppink': '#FF1493', +\ 'deepskyblue': '#00BFFF', +\ 'dimgray': '#696969', +\ 'dodgerblue': '#1E90FF', +\ 'firebrick': '#B22222', +\ 'floralwhite': '#FFFAF0', +\ 'forestgreen': '#228B22', +\ 'fuchsia': '#FF00FF', +\ 'gainsboro': '#DCDCDC', +\ 'ghostwhite': '#F8F8FF', +\ 'gold': '#FFD700', +\ 'goldenrod': '#DAA520', +\ 'gray': '#808080', +\ 'green': '#008000', +\ 'greenyellow': '#ADFF2F', +\ 'honeydew': '#F0FFF0', +\ 'hotpink': '#FF69B4', +\ 'indianred': '#CD5C5C', +\ 'indigo': '#4B0082', +\ 'ivory': '#FFFFF0', +\ 'khaki': '#F0E68C', +\ 'lavender': '#E6E6FA', +\ 'lavenderblush': '#FFF0F5', +\ 'lawngreen': '#7CFC00', +\ 'lemonchiffon': '#FFFACD', +\ 'lightblue': '#ADD8E6', +\ 'lightcoral': '#F08080', +\ 'lightcyan': '#E0FFFF', +\ 'lightgoldenrodyellow': '#FAFAD2', +\ 'lightgray': '#D3D3D3', +\ 'lightgreen': '#90EE90', +\ 'lightpink': '#FFB6C1', +\ 'lightsalmon': '#FFA07A', +\ 'lightseagreen': '#20B2AA', +\ 'lightskyblue': '#87CEFA', +\ 'lightslategray': '#778899', +\ 'lightsteelblue': '#B0C4DE', +\ 'lightyellow': '#FFFFE0', +\ 'lime': '#00FF00', +\ 'limegreen': '#32CD32', +\ 'linen': '#FAF0E6', +\ 'magenta': '#FF00FF', +\ 'maroon': '#800000', +\ 'mediumaquamarine': '#66CDAA', +\ 'mediumblue': '#0000CD', +\ 'mediumorchid': '#BA55D3', +\ 'mediumpurple': '#9370D8', +\ 'mediumseagreen': '#3CB371', +\ 'mediumslateblue': '#7B68EE', +\ 'mediumspringgreen': '#00FA9A', +\ 'mediumturquoise': '#48D1CC', +\ 'mediumvioletred': '#C71585', +\ 'midnightblue': '#191970', +\ 'mintcream': '#F5FFFA', +\ 'mistyrose': '#FFE4E1', +\ 'moccasin': '#FFE4B5', +\ 'navajowhite': '#FFDEAD', +\ 'navy': '#000080', +\ 'oldlace': '#FDF5E6', +\ 'olive': '#808000', +\ 'olivedrab': '#6B8E23', +\ 'orange': '#FFA500', +\ 'orangered': '#FF4500', +\ 'orchid': '#DA70D6', +\ 'palegoldenrod': '#EEE8AA', +\ 'palegreen': '#98FB98', +\ 'paleturquoise': '#AFEEEE', +\ 'palevioletred': '#D87093', +\ 'papayawhip': '#FFEFD5', +\ 'peachpuff': '#FFDAB9', +\ 'peru': '#CD853F', +\ 'pink': '#FFC0CB', +\ 'plum': '#DDA0DD', +\ 'powderblue': '#B0E0E6', +\ 'purple': '#800080', +\ 'red': '#FF0000', +\ 'rosybrown': '#BC8F8F', +\ 'royalblue': '#4169E1', +\ 'saddlebrown': '#8B4513', +\ 'salmon': '#FA8072', +\ 'sandybrown': '#F4A460', +\ 'seagreen': '#2E8B57', +\ 'seashell': '#FFF5EE', +\ 'sienna': '#A0522D', +\ 'silver': '#C0C0C0', +\ 'skyblue': '#87CEEB', +\ 'slateblue': '#6A5ACD', +\ 'slategray': '#708090', +\ 'snow': '#FFFAFA', +\ 'springgreen': '#00FF7F', +\ 'steelblue': '#4682B4', +\ 'tan': '#D2B48C', +\ 'teal': '#008080', +\ 'thistle': '#D8BFD8', +\ 'tomato': '#FF6347', +\ 'turquoise': '#40E0D0', +\ 'violet': '#EE82EE', +\ 'wheat': '#F5DEB3', +\ 'white': '#FFFFFF', +\ 'whitesmoke': '#F5F5F5', +\ 'yellow': '#FFFF00', +\ 'yellowgreen': '#9ACD32' +\ } + +" X11 color names taken from "{{{2 +" http://cvsweb.xfree86.org/cvsweb/*checkout*/xc/programs/rgb/rgb.txt?rev=1.2 +let s:x11_color_names = { +\ 'snow': '#FFFAFA', +\ 'ghostwhite': '#F8F8FF', +\ 'whitesmoke': '#F5F5F5', +\ 'gainsboro': '#DCDCDC', +\ 'floralwhite': '#FFFAF0', +\ 'oldlace': '#FDF5E6', +\ 'linen': '#FAF0E6', +\ 'antiquewhite': '#FAEBD7', +\ 'papayawhip': '#FFEFD5', +\ 'blanchedalmond': '#FFEBCD', +\ 'bisque': '#FFE4C4', +\ 'peachpuff': '#FFDAB9', +\ 'navajowhite': '#FFDEAD', +\ 'moccasin': '#FFE4B5', +\ 'cornsilk': '#FFF8DC', +\ 'ivory': '#FFFFF0', +\ 'lemonchiffon': '#FFFACD', +\ 'seashell': '#FFF5EE', +\ 'honeydew': '#F0FFF0', +\ 'mintcream': '#F5FFFA', +\ 'azure': '#F0FFFF', +\ 'aliceblue': '#F0F8FF', +\ 'lavender': '#E6E6FA', +\ 'lavenderblush': '#FFF0F5', +\ 'mistyrose': '#FFE4E1', +\ 'white': '#FFFFFF', +\ 'black': '#000000', +\ 'darkslategray': '#2F4F4F', +\ 'darkslategrey': '#2F4F4F', +\ 'dimgray': '#696969', +\ 'dimgrey': '#696969', +\ 'slategray': '#708090', +\ 'slategrey': '#708090', +\ 'lightslategray': '#778899', +\ 'lightslategrey': '#778899', +\ 'gray': '#BEBEBE', +\ 'grey': '#BEBEBE', +\ 'lightgrey': '#D3D3D3', +\ 'lightgray': '#D3D3D3', +\ 'midnightblue': '#191970', +\ 'navy': '#000080', +\ 'navyblue': '#000080', +\ 'cornflowerblue': '#6495ED', +\ 'darkslateblue': '#483D8B', +\ 'slateblue': '#6A5ACD', +\ 'mediumslateblue': '#7B68EE', +\ 'lightslateblue': '#8470FF', +\ 'mediumblue': '#0000CD', +\ 'royalblue': '#4169E1', +\ 'blue': '#0000FF', +\ 'dodgerblue': '#1E90FF', +\ 'deepskyblue': '#00BFFF', +\ 'skyblue': '#87CEEB', +\ 'lightskyblue': '#87CEFA', +\ 'steelblue': '#4682B4', +\ 'lightsteelblue': '#B0C4DE', +\ 'lightblue': '#ADD8E6', +\ 'powderblue': '#B0E0E6', +\ 'paleturquoise': '#AFEEEE', +\ 'darkturquoise': '#00CED1', +\ 'mediumturquoise': '#48D1CC', +\ 'turquoise': '#40E0D0', +\ 'cyan': '#00FFFF', +\ 'lightcyan': '#E0FFFF', +\ 'cadetblue': '#5F9EA0', +\ 'mediumaquamarine': '#66CDAA', +\ 'aquamarine': '#7FFFD4', +\ 'darkgreen': '#006400', +\ 'darkolivegreen': '#556B2F', +\ 'darkseagreen': '#8FBC8F', +\ 'seagreen': '#2E8B57', +\ 'mediumseagreen': '#3CB371', +\ 'lightseagreen': '#20B2AA', +\ 'palegreen': '#98FB98', +\ 'springgreen': '#00FF7F', +\ 'lawngreen': '#7CFC00', +\ 'green': '#00FF00', +\ 'chartreuse': '#7FFF00', +\ 'mediumspringgreen': '#00FA9A', +\ 'greenyellow': '#ADFF2F', +\ 'limegreen': '#32CD32', +\ 'yellowgreen': '#9ACD32', +\ 'forestgreen': '#228B22', +\ 'olivedrab': '#6B8E23', +\ 'darkkhaki': '#BDB76B', +\ 'khaki': '#F0E68C', +\ 'palegoldenrod': '#EEE8AA', +\ 'lightgoldenrodyellow': '#FAFAD2', +\ 'lightyellow': '#FFFFE0', +\ 'yellow': '#FFFF00', +\ 'gold': '#FFD700', +\ 'lightgoldenrod': '#EEDD82', +\ 'goldenrod': '#DAA520', +\ 'darkgoldenrod': '#B8860B', +\ 'rosybrown': '#BC8F8F', +\ 'indianred': '#CD5C5C', +\ 'saddlebrown': '#8B4513', +\ 'sienna': '#A0522D', +\ 'peru': '#CD853F', +\ 'burlywood': '#DEB887', +\ 'beige': '#F5F5DC', +\ 'wheat': '#F5DEB3', +\ 'sandybrown': '#F4A460', +\ 'tan': '#D2B48C', +\ 'chocolate': '#D2691E', +\ 'firebrick': '#B22222', +\ 'brown': '#A52A2A', +\ 'darksalmon': '#E9967A', +\ 'salmon': '#FA8072', +\ 'lightsalmon': '#FFA07A', +\ 'orange': '#FFA500', +\ 'darkorange': '#FF8C00', +\ 'coral': '#FF7F50', +\ 'lightcoral': '#F08080', +\ 'tomato': '#FF6347', +\ 'orangered': '#FF4500', +\ 'red': '#FF0000', +\ 'hotpink': '#FF69B4', +\ 'deeppink': '#FF1493', +\ 'pink': '#FFC0CB', +\ 'lightpink': '#FFB6C1', +\ 'palevioletred': '#DB7093', +\ 'maroon': '#B03060', +\ 'mediumvioletred': '#C71585', +\ 'violetred': '#D02090', +\ 'magenta': '#FF00FF', +\ 'violet': '#EE82EE', +\ 'plum': '#DDA0DD', +\ 'orchid': '#DA70D6', +\ 'mediumorchid': '#BA55D3', +\ 'darkorchid': '#9932CC', +\ 'darkviolet': '#9400D3', +\ 'blueviolet': '#8A2BE2', +\ 'purple': '#A020F0', +\ 'mediumpurple': '#9370DB', +\ 'thistle': '#D8BFD8', +\ 'snow1': '#FFFAFA', +\ 'snow2': '#EEE9E9', +\ 'snow3': '#CDC9C9', +\ 'snow4': '#8B8989', +\ 'seashell1': '#FFF5EE', +\ 'seashell2': '#EEE5DE', +\ 'seashell3': '#CDC5BF', +\ 'seashell4': '#8B8682', +\ 'antiquewhite1': '#FFEFDB', +\ 'antiquewhite2': '#EEDFCC', +\ 'antiquewhite3': '#CDC0B0', +\ 'antiquewhite4': '#8B8378', +\ 'bisque1': '#FFE4C4', +\ 'bisque2': '#EED5B7', +\ 'bisque3': '#CDB79E', +\ 'bisque4': '#8B7D6B', +\ 'peachpuff1': '#FFDAB9', +\ 'peachpuff2': '#EECBAD', +\ 'peachpuff3': '#CDAF95', +\ 'peachpuff4': '#8B7765', +\ 'navajowhite1': '#FFDEAD', +\ 'navajowhite2': '#EECFA1', +\ 'navajowhite3': '#CDB38B', +\ 'navajowhite4': '#8B795E', +\ 'lemonchiffon1': '#FFFACD', +\ 'lemonchiffon2': '#EEE9BF', +\ 'lemonchiffon3': '#CDC9A5', +\ 'lemonchiffon4': '#8B8970', +\ 'cornsilk1': '#FFF8DC', +\ 'cornsilk2': '#EEE8CD', +\ 'cornsilk3': '#CDC8B1', +\ 'cornsilk4': '#8B8878', +\ 'ivory1': '#FFFFF0', +\ 'ivory2': '#EEEEE0', +\ 'ivory3': '#CDCDC1', +\ 'ivory4': '#8B8B83', +\ 'honeydew1': '#F0FFF0', +\ 'honeydew2': '#E0EEE0', +\ 'honeydew3': '#C1CDC1', +\ 'honeydew4': '#838B83', +\ 'lavenderblush1': '#FFF0F5', +\ 'lavenderblush2': '#EEE0E5', +\ 'lavenderblush3': '#CDC1C5', +\ 'lavenderblush4': '#8B8386', +\ 'mistyrose1': '#FFE4E1', +\ 'mistyrose2': '#EED5D2', +\ 'mistyrose3': '#CDB7B5', +\ 'mistyrose4': '#8B7D7B', +\ 'azure1': '#F0FFFF', +\ 'azure2': '#E0EEEE', +\ 'azure3': '#C1CDCD', +\ 'azure4': '#838B8B', +\ 'slateblue1': '#836FFF', +\ 'slateblue2': '#7A67EE', +\ 'slateblue3': '#6959CD', +\ 'slateblue4': '#473C8B', +\ 'royalblue1': '#4876FF', +\ 'royalblue2': '#436EEE', +\ 'royalblue3': '#3A5FCD', +\ 'royalblue4': '#27408B', +\ 'blue1': '#0000FF', +\ 'blue2': '#0000EE', +\ 'blue3': '#0000CD', +\ 'blue4': '#00008B', +\ 'dodgerblue1': '#1E90FF', +\ 'dodgerblue2': '#1C86EE', +\ 'dodgerblue3': '#1874CD', +\ 'dodgerblue4': '#104E8B', +\ 'steelblue1': '#63B8FF', +\ 'steelblue2': '#5CACEE', +\ 'steelblue3': '#4F94CD', +\ 'steelblue4': '#36648B', +\ 'deepskyblue1': '#00BFFF', +\ 'deepskyblue2': '#00B2EE', +\ 'deepskyblue3': '#009ACD', +\ 'deepskyblue4': '#00688B', +\ 'skyblue1': '#87CEFF', +\ 'skyblue2': '#7EC0EE', +\ 'skyblue3': '#6CA6CD', +\ 'skyblue4': '#4A708B', +\ 'lightskyblue1': '#B0E2FF', +\ 'lightskyblue2': '#A4D3EE', +\ 'lightskyblue3': '#8DB6CD', +\ 'lightskyblue4': '#607B8B', +\ 'slategray1': '#C6E2FF', +\ 'slategray2': '#B9D3EE', +\ 'slategray3': '#9FB6CD', +\ 'slategray4': '#6C7B8B', +\ 'lightsteelblue1': '#CAE1FF', +\ 'lightsteelblue2': '#BCD2EE', +\ 'lightsteelblue3': '#A2B5CD', +\ 'lightsteelblue4': '#6E7B8B', +\ 'lightblue1': '#BFEFFF', +\ 'lightblue2': '#B2DFEE', +\ 'lightblue3': '#9AC0CD', +\ 'lightblue4': '#68838B', +\ 'lightcyan1': '#E0FFFF', +\ 'lightcyan2': '#D1EEEE', +\ 'lightcyan3': '#B4CDCD', +\ 'lightcyan4': '#7A8B8B', +\ 'paleturquoise1': '#BBFFFF', +\ 'paleturquoise2': '#AEEEEE', +\ 'paleturquoise3': '#96CDCD', +\ 'paleturquoise4': '#668B8B', +\ 'cadetblue1': '#98F5FF', +\ 'cadetblue2': '#8EE5EE', +\ 'cadetblue3': '#7AC5CD', +\ 'cadetblue4': '#53868B', +\ 'turquoise1': '#00F5FF', +\ 'turquoise2': '#00E5EE', +\ 'turquoise3': '#00C5CD', +\ 'turquoise4': '#00868B', +\ 'cyan1': '#00FFFF', +\ 'cyan2': '#00EEEE', +\ 'cyan3': '#00CDCD', +\ 'cyan4': '#008B8B', +\ 'darkslategray1': '#97FFFF', +\ 'darkslategray2': '#8DEEEE', +\ 'darkslategray3': '#79CDCD', +\ 'darkslategray4': '#528B8B', +\ 'aquamarine1': '#7FFFD4', +\ 'aquamarine2': '#76EEC6', +\ 'aquamarine3': '#66CDAA', +\ 'aquamarine4': '#458B74', +\ 'darkseagreen1': '#C1FFC1', +\ 'darkseagreen2': '#B4EEB4', +\ 'darkseagreen3': '#9BCD9B', +\ 'darkseagreen4': '#698B69', +\ 'seagreen1': '#54FF9F', +\ 'seagreen2': '#4EEE94', +\ 'seagreen3': '#43CD80', +\ 'seagreen4': '#2E8B57', +\ 'palegreen1': '#9AFF9A', +\ 'palegreen2': '#90EE90', +\ 'palegreen3': '#7CCD7C', +\ 'palegreen4': '#548B54', +\ 'springgreen1': '#00FF7F', +\ 'springgreen2': '#00EE76', +\ 'springgreen3': '#00CD66', +\ 'springgreen4': '#008B45', +\ 'green1': '#00FF00', +\ 'green2': '#00EE00', +\ 'green3': '#00CD00', +\ 'green4': '#008B00', +\ 'chartreuse1': '#7FFF00', +\ 'chartreuse2': '#76EE00', +\ 'chartreuse3': '#66CD00', +\ 'chartreuse4': '#458B00', +\ 'olivedrab1': '#C0FF3E', +\ 'olivedrab2': '#B3EE3A', +\ 'olivedrab3': '#9ACD32', +\ 'olivedrab4': '#698B22', +\ 'darkolivegreen1': '#CAFF70', +\ 'darkolivegreen2': '#BCEE68', +\ 'darkolivegreen3': '#A2CD5A', +\ 'darkolivegreen4': '#6E8B3D', +\ 'khaki1': '#FFF68F', +\ 'khaki2': '#EEE685', +\ 'khaki3': '#CDC673', +\ 'khaki4': '#8B864E', +\ 'lightgoldenrod1': '#FFEC8B', +\ 'lightgoldenrod2': '#EEDC82', +\ 'lightgoldenrod3': '#CDBE70', +\ 'lightgoldenrod4': '#8B814C', +\ 'lightyellow1': '#FFFFE0', +\ 'lightyellow2': '#EEEED1', +\ 'lightyellow3': '#CDCDB4', +\ 'lightyellow4': '#8B8B7A', +\ 'yellow1': '#FFFF00', +\ 'yellow2': '#EEEE00', +\ 'yellow3': '#CDCD00', +\ 'yellow4': '#8B8B00', +\ 'gold1': '#FFD700', +\ 'gold2': '#EEC900', +\ 'gold3': '#CDAD00', +\ 'gold4': '#8B7500', +\ 'goldenrod1': '#FFC125', +\ 'goldenrod2': '#EEB422', +\ 'goldenrod3': '#CD9B1D', +\ 'goldenrod4': '#8B6914', +\ 'darkgoldenrod1': '#FFB90F', +\ 'darkgoldenrod2': '#EEAD0E', +\ 'darkgoldenrod3': '#CD950C', +\ 'darkgoldenrod4': '#8B6508', +\ 'rosybrown1': '#FFC1C1', +\ 'rosybrown2': '#EEB4B4', +\ 'rosybrown3': '#CD9B9B', +\ 'rosybrown4': '#8B6969', +\ 'indianred1': '#FF6A6A', +\ 'indianred2': '#EE6363', +\ 'indianred3': '#CD5555', +\ 'indianred4': '#8B3A3A', +\ 'sienna1': '#FF8247', +\ 'sienna2': '#EE7942', +\ 'sienna3': '#CD6839', +\ 'sienna4': '#8B4726', +\ 'burlywood1': '#FFD39B', +\ 'burlywood2': '#EEC591', +\ 'burlywood3': '#CDAA7D', +\ 'burlywood4': '#8B7355', +\ 'wheat1': '#FFE7BA', +\ 'wheat2': '#EED8AE', +\ 'wheat3': '#CDBA96', +\ 'wheat4': '#8B7E66', +\ 'tan1': '#FFA54F', +\ 'tan2': '#EE9A49', +\ 'tan3': '#CD853F', +\ 'tan4': '#8B5A2B', +\ 'chocolate1': '#FF7F24', +\ 'chocolate2': '#EE7621', +\ 'chocolate3': '#CD661D', +\ 'chocolate4': '#8B4513', +\ 'firebrick1': '#FF3030', +\ 'firebrick2': '#EE2C2C', +\ 'firebrick3': '#CD2626', +\ 'firebrick4': '#8B1A1A', +\ 'brown1': '#FF4040', +\ 'brown2': '#EE3B3B', +\ 'brown3': '#CD3333', +\ 'brown4': '#8B2323', +\ 'salmon1': '#FF8C69', +\ 'salmon2': '#EE8262', +\ 'salmon3': '#CD7054', +\ 'salmon4': '#8B4C39', +\ 'lightsalmon1': '#FFA07A', +\ 'lightsalmon2': '#EE9572', +\ 'lightsalmon3': '#CD8162', +\ 'lightsalmon4': '#8B5742', +\ 'orange1': '#FFA500', +\ 'orange2': '#EE9A00', +\ 'orange3': '#CD8500', +\ 'orange4': '#8B5A00', +\ 'darkorange1': '#FF7F00', +\ 'darkorange2': '#EE7600', +\ 'darkorange3': '#CD6600', +\ 'darkorange4': '#8B4500', +\ 'coral1': '#FF7256', +\ 'coral2': '#EE6A50', +\ 'coral3': '#CD5B45', +\ 'coral4': '#8B3E2F', +\ 'tomato1': '#FF6347', +\ 'tomato2': '#EE5C42', +\ 'tomato3': '#CD4F39', +\ 'tomato4': '#8B3626', +\ 'orangered1': '#FF4500', +\ 'orangered2': '#EE4000', +\ 'orangered3': '#CD3700', +\ 'orangered4': '#8B2500', +\ 'red1': '#FF0000', +\ 'red2': '#EE0000', +\ 'red3': '#CD0000', +\ 'red4': '#8B0000', +\ 'deeppink1': '#FF1493', +\ 'deeppink2': '#EE1289', +\ 'deeppink3': '#CD1076', +\ 'deeppink4': '#8B0A50', +\ 'hotpink1': '#FF6EB4', +\ 'hotpink2': '#EE6AA7', +\ 'hotpink3': '#CD6090', +\ 'hotpink4': '#8B3A62', +\ 'pink1': '#FFB5C5', +\ 'pink2': '#EEA9B8', +\ 'pink3': '#CD919E', +\ 'pink4': '#8B636C', +\ 'lightpink1': '#FFAEB9', +\ 'lightpink2': '#EEA2AD', +\ 'lightpink3': '#CD8C95', +\ 'lightpink4': '#8B5F65', +\ 'palevioletred1': '#FF82AB', +\ 'palevioletred2': '#EE799F', +\ 'palevioletred3': '#CD6889', +\ 'palevioletred4': '#8B475D', +\ 'maroon1': '#FF34B3', +\ 'maroon2': '#EE30A7', +\ 'maroon3': '#CD2990', +\ 'maroon4': '#8B1C62', +\ 'violetred1': '#FF3E96', +\ 'violetred2': '#EE3A8C', +\ 'violetred3': '#CD3278', +\ 'violetred4': '#8B2252', +\ 'magenta1': '#FF00FF', +\ 'magenta2': '#EE00EE', +\ 'magenta3': '#CD00CD', +\ 'magenta4': '#8B008B', +\ 'orchid1': '#FF83FA', +\ 'orchid2': '#EE7AE9', +\ 'orchid3': '#CD69C9', +\ 'orchid4': '#8B4789', +\ 'plum1': '#FFBBFF', +\ 'plum2': '#EEAEEE', +\ 'plum3': '#CD96CD', +\ 'plum4': '#8B668B', +\ 'mediumorchid1': '#E066FF', +\ 'mediumorchid2': '#D15FEE', +\ 'mediumorchid3': '#B452CD', +\ 'mediumorchid4': '#7A378B', +\ 'darkorchid1': '#BF3EFF', +\ 'darkorchid2': '#B23AEE', +\ 'darkorchid3': '#9A32CD', +\ 'darkorchid4': '#68228B', +\ 'purple1': '#9B30FF', +\ 'purple2': '#912CEE', +\ 'purple3': '#7D26CD', +\ 'purple4': '#551A8B', +\ 'mediumpurple1': '#AB82FF', +\ 'mediumpurple2': '#9F79EE', +\ 'mediumpurple3': '#8968CD', +\ 'mediumpurple4': '#5D478B', +\ 'thistle1': '#FFE1FF', +\ 'thistle2': '#EED2EE', +\ 'thistle3': '#CDB5CD', +\ 'thistle4': '#8B7B8B', +\ 'gray0': '#000000', +\ 'grey0': '#000000', +\ 'gray1': '#030303', +\ 'grey1': '#030303', +\ 'gray2': '#050505', +\ 'grey2': '#050505', +\ 'gray3': '#080808', +\ 'grey3': '#080808', +\ 'gray4': '#0A0A0A', +\ 'grey4': '#0A0A0A', +\ 'gray5': '#0D0D0D', +\ 'grey5': '#0D0D0D', +\ 'gray6': '#0F0F0F', +\ 'grey6': '#0F0F0F', +\ 'gray7': '#121212', +\ 'grey7': '#121212', +\ 'gray8': '#141414', +\ 'grey8': '#141414', +\ 'gray9': '#171717', +\ 'grey9': '#171717', +\ 'gray10': '#1A1A1A', +\ 'grey10': '#1A1A1A', +\ 'gray11': '#1C1C1C', +\ 'grey11': '#1C1C1C', +\ 'gray12': '#1F1F1F', +\ 'grey12': '#1F1F1F', +\ 'gray13': '#212121', +\ 'grey13': '#212121', +\ 'gray14': '#242424', +\ 'grey14': '#242424', +\ 'gray15': '#262626', +\ 'grey15': '#262626', +\ 'gray16': '#292929', +\ 'grey16': '#292929', +\ 'gray17': '#2B2B2B', +\ 'grey17': '#2B2B2B', +\ 'gray18': '#2E2E2E', +\ 'grey18': '#2E2E2E', +\ 'gray19': '#303030', +\ 'grey19': '#303030', +\ 'gray20': '#333333', +\ 'grey20': '#333333', +\ 'gray21': '#363636', +\ 'grey21': '#363636', +\ 'gray22': '#383838', +\ 'grey22': '#383838', +\ 'gray23': '#3B3B3B', +\ 'grey23': '#3B3B3B', +\ 'gray24': '#3D3D3D', +\ 'grey24': '#3D3D3D', +\ 'gray25': '#404040', +\ 'grey25': '#404040', +\ 'gray26': '#424242', +\ 'grey26': '#424242', +\ 'gray27': '#454545', +\ 'grey27': '#454545', +\ 'gray28': '#474747', +\ 'grey28': '#474747', +\ 'gray29': '#4A4A4A', +\ 'grey29': '#4A4A4A', +\ 'gray30': '#4D4D4D', +\ 'grey30': '#4D4D4D', +\ 'gray31': '#4F4F4F', +\ 'grey31': '#4F4F4F', +\ 'gray32': '#525252', +\ 'grey32': '#525252', +\ 'gray33': '#545454', +\ 'grey33': '#545454', +\ 'gray34': '#575757', +\ 'grey34': '#575757', +\ 'gray35': '#595959', +\ 'grey35': '#595959', +\ 'gray36': '#5C5C5C', +\ 'grey36': '#5C5C5C', +\ 'gray37': '#5E5E5E', +\ 'grey37': '#5E5E5E', +\ 'gray38': '#616161', +\ 'grey38': '#616161', +\ 'gray39': '#636363', +\ 'grey39': '#636363', +\ 'gray40': '#666666', +\ 'grey40': '#666666', +\ 'gray41': '#696969', +\ 'grey41': '#696969', +\ 'gray42': '#6B6B6B', +\ 'grey42': '#6B6B6B', +\ 'gray43': '#6E6E6E', +\ 'grey43': '#6E6E6E', +\ 'gray44': '#707070', +\ 'grey44': '#707070', +\ 'gray45': '#737373', +\ 'grey45': '#737373', +\ 'gray46': '#757575', +\ 'grey46': '#757575', +\ 'gray47': '#787878', +\ 'grey47': '#787878', +\ 'gray48': '#7A7A7A', +\ 'grey48': '#7A7A7A', +\ 'gray49': '#7D7D7D', +\ 'grey49': '#7D7D7D', +\ 'gray50': '#7F7F7F', +\ 'grey50': '#7F7F7F', +\ 'gray51': '#828282', +\ 'grey51': '#828282', +\ 'gray52': '#858585', +\ 'grey52': '#858585', +\ 'gray53': '#878787', +\ 'grey53': '#878787', +\ 'gray54': '#8A8A8A', +\ 'grey54': '#8A8A8A', +\ 'gray55': '#8C8C8C', +\ 'grey55': '#8C8C8C', +\ 'gray56': '#8F8F8F', +\ 'grey56': '#8F8F8F', +\ 'gray57': '#919191', +\ 'grey57': '#919191', +\ 'gray58': '#949494', +\ 'grey58': '#949494', +\ 'gray59': '#969696', +\ 'grey59': '#969696', +\ 'gray60': '#999999', +\ 'grey60': '#999999', +\ 'gray61': '#9C9C9C', +\ 'grey61': '#9C9C9C', +\ 'gray62': '#9E9E9E', +\ 'grey62': '#9E9E9E', +\ 'gray63': '#A1A1A1', +\ 'grey63': '#A1A1A1', +\ 'gray64': '#A3A3A3', +\ 'grey64': '#A3A3A3', +\ 'gray65': '#A6A6A6', +\ 'grey65': '#A6A6A6', +\ 'gray66': '#A8A8A8', +\ 'grey66': '#A8A8A8', +\ 'gray67': '#ABABAB', +\ 'grey67': '#ABABAB', +\ 'gray68': '#ADADAD', +\ 'grey68': '#ADADAD', +\ 'gray69': '#B0B0B0', +\ 'grey69': '#B0B0B0', +\ 'gray70': '#B3B3B3', +\ 'grey70': '#B3B3B3', +\ 'gray71': '#B5B5B5', +\ 'grey71': '#B5B5B5', +\ 'gray72': '#B8B8B8', +\ 'grey72': '#B8B8B8', +\ 'gray73': '#BABABA', +\ 'grey73': '#BABABA', +\ 'gray74': '#BDBDBD', +\ 'grey74': '#BDBDBD', +\ 'gray75': '#BFBFBF', +\ 'grey75': '#BFBFBF', +\ 'gray76': '#C2C2C2', +\ 'grey76': '#C2C2C2', +\ 'gray77': '#C4C4C4', +\ 'grey77': '#C4C4C4', +\ 'gray78': '#C7C7C7', +\ 'grey78': '#C7C7C7', +\ 'gray79': '#C9C9C9', +\ 'grey79': '#C9C9C9', +\ 'gray80': '#CCCCCC', +\ 'grey80': '#CCCCCC', +\ 'gray81': '#CFCFCF', +\ 'grey81': '#CFCFCF', +\ 'gray82': '#D1D1D1', +\ 'grey82': '#D1D1D1', +\ 'gray83': '#D4D4D4', +\ 'grey83': '#D4D4D4', +\ 'gray84': '#D6D6D6', +\ 'grey84': '#D6D6D6', +\ 'gray85': '#D9D9D9', +\ 'grey85': '#D9D9D9', +\ 'gray86': '#DBDBDB', +\ 'grey86': '#DBDBDB', +\ 'gray87': '#DEDEDE', +\ 'grey87': '#DEDEDE', +\ 'gray88': '#E0E0E0', +\ 'grey88': '#E0E0E0', +\ 'gray89': '#E3E3E3', +\ 'grey89': '#E3E3E3', +\ 'gray90': '#E5E5E5', +\ 'grey90': '#E5E5E5', +\ 'gray91': '#E8E8E8', +\ 'grey91': '#E8E8E8', +\ 'gray92': '#EBEBEB', +\ 'grey92': '#EBEBEB', +\ 'gray93': '#EDEDED', +\ 'grey93': '#EDEDED', +\ 'gray94': '#F0F0F0', +\ 'grey94': '#F0F0F0', +\ 'gray95': '#F2F2F2', +\ 'grey95': '#F2F2F2', +\ 'gray96': '#F5F5F5', +\ 'grey96': '#F5F5F5', +\ 'gray97': '#F7F7F7', +\ 'grey97': '#F7F7F7', +\ 'gray98': '#FAFAFA', +\ 'grey98': '#FAFAFA', +\ 'gray99': '#FCFCFC', +\ 'grey99': '#FCFCFC', +\ 'gray100': '#FFFFFF', +\ 'grey100': '#FFFFFF', +\ 'darkgrey': '#A9A9A9', +\ 'darkgray': '#A9A9A9', +\ 'darkblue': '#00008B', +\ 'darkcyan': '#008B8B', +\ 'darkmagenta': '#8B008B', +\ 'darkred': '#8B0000', +\ 'lightgreen': '#90EE90' +\ } + +" Functions, to highlight certain types {{{1 +function! s:ColorRGBValues(val) "{{{2 + let s:position = getpos('.') + if <sid>IsInComment() + " skip coloring comments + return + endif + " strip parantheses and split on comma + let rgb = s:StripParentheses(a:val) + if empty(rgb) + call s:Warn("Error in expression". a:val. "! Please report as bug.") + return + endif + for i in range(3) + if rgb[i][-1:-1] == '%' + let val = matchstr(rgb[i], '\d\+') + if (val + 0 > 100) + let rgb[1] = 100 + endif + let rgb[i] = float2nr((val + 0.0)*255/100) + else + if rgb[i] + 0 > 255 + let rgb[i] = 255 + endif + endif + endfor + if len(rgb) == 4 + let rgb = s:ApplyAlphaValue(rgb) + endif + let clr = printf("%02X%02X%02X", rgb[0],rgb[1],rgb[2]) + call s:SetMatcher(a:val, {'bg': clr}) +endfunction + +function! s:ColorHSLValues(val) "{{{2 + let s:position = getpos('.') + if <sid>IsInComment() + " skip coloring comments + return + endif + " strip parantheses and split on comma + let hsl = s:StripParentheses(a:val) + if empty(hsl) + call s:Warn("Error in expression". a:val. "! Please report as bug.") + return + endif + let str = s:PrepareHSLArgs(hsl) + + call s:SetMatcher(a:val, {'bg': str}) + return +endfu + +function! s:PreviewColorName(color) "{{{2 + let s:position = getpos('.') + let name=tolower(a:color) + let clr = s:colors[name] + " Skip color-name, e.g. white-space property + call s:SetMatcher('-\@<!\<'.name.'\>\c-\@!', {'bg': clr[1:]}) +endfu + +function! s:PreviewColorHex(match) "{{{2 + let s:position = getpos('.') + if <sid>IsInComment() + " skip coloring comments + return + endif + let color = (a:match[0] == '#' ? a:match[1:] : a:match) + let pattern = color + if len(color) == 3 + let color = substitute(color, '.', '&&', 'g') + endif + if &t_Co == 8 && !s:HasGui() + " The first 12 color names, can be displayed by 8 color terminals + let list = values(s:xterm_8colors) + let idx = match(list, a:match) + if idx == -1 + " Color can't be displayed by 8 color terminal + return + else + let color = list[idx] + endif + endif + if len(split(pattern, '\zs')) == 8 + " apply alpha value + let l = split(pattern, '..\zs') + call map(l, 'printf("%2d", "0x".v:val)') + let l[3] = string(str2float(l[3])/255) " normalize to 0-1 + let l = s:ApplyAlphaValue(l) + let color = printf("%02X%02X%02X", l[0], l[1], l[2]) + endif + call s:SetMatcher(s:hex_pattern[0]. pattern. s:hex_pattern[2], {'bg': color}) +endfunction + +function! s:PreviewColorTerm(pre, text, post) "{{{2 + " a:pre: Ansi-Sequences determining the highlighting + " a:text: Text to color + " a:post: Ansi-Sequences resetting the coloring (might be empty) + let s:position = getpos('.') + let color = s:Ansi2Color(a:pre) + let clr_Dict = {} + + if &t_Co == 8 && !s:HasGui() + " The first 12 color names, can be displayed by 8 color terminals + let i = 0 + for clr in color + let list = values(s:xterm_8colors) + let idx = match(list, clr) + if idx == -1 + " Color can't be displayed by 8 color terminal + let color[i] = NONE + else + let color[i] = list[idx] + endif + let i+=1 + endfor + endif + let clr_Dict.fg = color[0] + let clr_Dict.bg = color[1] + let pre = escape(a:pre, '[]') + let post = escape(a:post, '[]') + let txt = escape(a:text, '\^$.*~[]') + " limit the pattern to the belonging line (should make syntax matching + " faster!) + let pattern = '\%(\%'.line('.').'l\)\%('. pre. '\)\@<='.txt. '\('.post.'\)\@=' + " needs matchaddpos + let clr_Dict.pos = [[ line('.'), col('.'), strlen(a:pre. a:text. a:post)]] + call s:SetMatcher(pattern, clr_Dict) +endfunction +function! s:PreviewColorNroff(match) "{{{2 + let s:position = getpos('.') + let clr_Dict = {} + let color = [] + if a:match[0] == '_' + let special = 'underline' + else + let special = 'bold' + endif + let synid=synIDtrans(synID(line('.'), col('.'), 1)) + if synid == 0 + let synid = hlID('Normal') + endif + let color=[synIDattr(synid, 'fg'), synIDattr(synid, 'bg')] + if color == [0, 0] || color == ['', ''] + let color = [synIDattr(hlID('Normal'), 'fg'), synIDattr(hlID('Normal'), 'bg')] + endif + + let clr_Dict.fg = color[0] + let clr_Dict.bg = color[1] + let clr_Dict.special=special + " limit the pattern to the belonging line (should make syntax matching + " faster!) + let pattern = '\%(\%'.line('.').'l\)'.a:match + " needs matchaddpos + let clr_Dict.pos = [[ line('.'), col('.'), 3]] + call s:SetMatcher(pattern, clr_Dict) +endfunction +function! s:PreviewTaskWarriorColors(submatch) "{{{2 + " a:submatch is something like 'black on rgb141' + + " this highlighting should overrule e.g. colorname highlighting + let s:position = getpos('.') + let s:default_match_priority += 1 + let color = ['', 'NONE', 'NONE'] + let color_Dict = {} + " The submatch is everything after the first equalsign! + let tpat = '\(inverse\|underline\|bright\|bold\)\?\%(\s*\)\(\S\{3,}\)'. + \ '\?\%(\s*\)\?\%(on\s\+'. + \ '\%(inverse\|underline\|bright\|bold\)\?\%(\s*\)\(\S\{3,}\)\)\?' + let colormatch = matchlist(a:submatch, tpat) + try + if !empty(colormatch) && !empty(colormatch[0]) + let i=-1 + for m in colormatch[1:3] + let i+=1 + if i == 0 + if (!empty(colormatch[1])) + let color_Dict.special=colormatch[1] + else + continue + endif + endif + if match(keys(s:colors), '\<'.m.'\>') > -1 + if i == 1 + let color_Dict.fg = s:colors[m][1:] " skip the # sign + elseif i == 2 + let color_Dict.bg = s:colors[m][1:] " skip the # sign + endif + continue + elseif match(m, '^rgb...') > -1 + let color[i] = m[3] * 36 + m[4] * 6 + m[5] + 16 " (start at index 16) + if color[i] > 231 + " invalid color + return + endif + elseif match(m, '^color') > -1 + let color[i] = matchstr(m, '\d\+')+0 + if color[i] > 231 + " invalid color + return + endif + elseif match(m, '^gray') > -1 + let color[i] = matchstr(m, '\d\+') + 232 + if color[i] > 231 + " invalid color + return + endif + endif + if i == 1 + let color_Dict.ctermfg = color[i] + elseif i == 2 + let color_Dict.ctermbg = color[i] + endif + endfor + + let cname = get(color_Dict, 'fg', 'NONE') + if cname ==# 'NONE' && get(color_Dict, 'ctermfg') + let cname = s:Term2RGB(color_Dict.ctermfg) + endif + call s:SetMatcher('=\s*\zs\<'.a:submatch.'\>$', color_Dict) + endif + finally + let s:default_match_priority -= 1 + let s:stop = 1 + endtry +endfunction + +function! s:PreviewVimColors(submatch) "{{{2 + " a:submatch is something like 'black on rgb141' + + " this highlighting should overrule e.g. colorname highlighting + let s:position = getpos('.') + let s:default_match_priority += 1 + if !exists("s:x11_color_pattern") + let s:x11_color_pattern = s:GetColorPattern(keys(s:x11_color_names)) + endif + let color_Dict = {} + let pat1 = '\%(\(cterm[fb]g\)\s*=\s*\)\@<=\<\(\d\+\)\>' + let pat2 = '\%(\(gui[fb]g\)\s*=\s*\)\@<=#\(\x\{6}\)\>' + let pat3 = '\%#=1\%(\(gui[fb]g\)\s*=\s*\)\@<=\('.s:x11_color_pattern.'\)' + + let cterm = matchlist(a:submatch, pat1) + let gui = matchlist(a:submatch, pat2) + if (!empty(gui) && (gui[2] ==# 'bg' || + \ gui[2] ==# 'fg' || + \ gui[2] ==# 'foreground' || + \ gui[2] ==# 'background')) + let gui=[] + endif + if empty(gui) + let gui = matchlist(a:submatch, pat3) + if !empty(gui) + let gui[2] = s:x11_color_names[tolower(gui[2])] + endif + endif + try + if !empty(cterm) + let color_Dict.ctermbg = cterm[2] + elseif !empty(gui) + let color_Dict.bg = gui[2] + endif + + if empty(gui) && empty(cterm) + return + endif + + call s:SetMatcher('\<'.a:submatch.'\>', color_Dict) + finally + let s:default_match_priority -= 1 + endtry +endfunction + +function! s:PreviewVimHighlightDump(match) "{{{2 + " highlights dumps of :hi + " e.g + "SpecialKey xxx term=bold cterm=bold ctermfg=124 guifg=Cyan + let s:position = getpos('.') + let s:default_match_priority += 1 + let dict = {} + try + let match = split(a:match, '\_s\+') + if a:match =~# 'cleared' + " ipaddr xxx cleared + return + elseif a:match =~# 'links to' + " try to find a non-cleared group + let c1 = <sid>SynID(match[0]) + let group = match[0] + if empty(c1) + let group = match[-1] + endif + call s:SetMatch('Color_'.group, '^'.s:GetPatternLiteral(a:match), {}) + else + let dict.name = 'Color_'.match[0] + call remove(match, 0, 1) + let dict = s:DictFromList(dict, match) + call s:SetMatcher(s:GetPatternLiteral(a:match), dict) + endif + finally + let s:default_match_priority -= 1 + " other highlighting functions shouldn't run anymore + let s:stop = 1 + endtry +endfunction + +function! s:PreviewVimHighlight(match) "{{{2 + " like colorhighlight plugin, + " colorizer highlight statements in .vim files + let s:position = getpos('.') + let tmatch = a:match + let def = [] + let dict = {} + try + if a:match =~ '^\s*hi\%[ghlight]\s\+clear' + " highlight clear lines, don't colorize! + return + endif + " Special case: + " HtmlHiLink foo bar -> links foo to bar + " hi! def link foo bar -> links foo to bar + let match = matchlist(tmatch, '\C\%(\%[Html\]HiLink\|hi\%[ghlight]!\?\s*\%(def\%[ault]\s*\)\?link\)\s\+\(\w\+\)\s\+\(\w\+\)') + " Hopefully tmatch[1] has already been defined ;( + if len(match) + call s:SetMatch('Color_'.match[1], '^\V'.escape(a:match, '\\'), {}) + return + endif + let tmatch = substitute(tmatch, '^\c\s*hi\%[ghlight]!\?\(\s*def\%[ault]\)\?', '', '') + let match = map(split(tmatch), 'substitute(v:val, ''^\s\+\|\s\+$'', "", "g")') + if len(match) < 2 + return + else + let dict.name = 'Color_'.get(match, 0) + let dict = s:DictFromList(dict, match) + call s:SetMatcher(s:GetPatternLiteral(a:match), dict) + endif + endtry +endfunction + +function! s:IsInComment() "{{{1 + return s:skip_comments && + \ synIDattr(synIDtrans(synID(line('.'), col('.'),1)), 'name') == "Comment" +endfu + +function! s:DictFromList(dict, list) "{{{1 + let dict = copy(a:dict) + let match = filter(a:list, 'v:val =~# ''=''') + for item in match + let [t1, t2] = split(item, '=') + let dict[t1] = t2 + endfor + return dict +endfunction + +function! s:GetPatternLiteral(pat) "{{{1 + return '\V'. substitute(escape(a:pat, '\\'), "\n", '\\n', 'g') +endfu +function! s:Term2RGB(index) "{{{1 + " Return index in colortable in RRGGBB form + return join(map(copy(s:colortable[a:index]), 'printf("%02X", v:val)'),'') +endfu + +function! s:Reltime(...) "{{{1 + return exists("a:1") ? reltime(a:1) : reltime() +endfu + +function! s:PrintColorStatistics() "{{{1 + if get(g:, 'colorizer_debug', 0) + echohl Title + echom printf("Colorstatistics at: %s", strftime("%H:%M")) + echom printf("Duration: %s", reltimestr(s:relstop)) + for name in sort(keys(extend(s:color_patterns, s:color_patterns_special))) + let value = get(extend(s:color_patterns, s:color_patterns_special), name) + echom printf("%15s: %ss", name, (value[-1] == [] ? ' 0.000000' : reltimestr(value[-1]))) + endfor + echohl Normal + endif +endfu + +function! s:ColorInit(...) "{{{1 + let s:force_hl = !empty(a:1) + let s:term_true_color = (exists('+tgc') && &tgc) + let s:stop = 0 + + " default matchadd priority + let s:default_match_priority = -2 + + " pattern/function dict + " Needed for s:ColorMatchingLines(), disabled, as this is too slow. + "let s:pat_func = {'#\x\{3,6\}': function('<sid>PreviewColorHex'), + " \ 'rgba\=(\s*\%(\d\+%\?\D*\)\{3,4})': + " \ function('<sid>ColorRGBValues'), + " \ 'hsla\=(\s*\%(\d\+%\?\D*\)\{3,4})': + " \ function('s:ColorHSLValues')} + + " Cache old values + if !exists("s:old_tCo") + let s:old_tCo = &t_Co + endif + + if !exists("s:swap_fg_bg") + let s:swap_fg_bg = 0 + endif + + if !exists("s:round") + let s:round = 0 + endif + + " Enable Autocommands + if exists("g:colorizer_auto_color") + call Colorizer#AutoCmds(g:colorizer_auto_color) + endif + + " Debugging + let s:debug = get(g:, 'colorizer_debug', 0) + + " Don't highlight comment? + let s:skip_comments = get(g:, 'colorizer_skip_comments', 0) + + " foreground / background contrast + let s:predefined_fgcolors = {} + let s:predefined_fgcolors['dark'] = ['444444', '222222', '000000'] + let s:predefined_fgcolors['light'] = ['bbbbbb', 'dddddd', 'ffffff'] + if !exists('g:colorizer_fgcontrast') + " Default to black / white + let g:colorizer_fgcontrast = len(s:predefined_fgcolors['dark']) - 1 + elseif g:colorizer_fgcontrast >= len(s:predefined_fgcolors['dark']) + call s:Warn("g:colorizer_fgcontrast value invalid, using default") + let g:colorizer_fgcontrast = len(s:predefined_fgcolors['dark']) - 1 + endif + + if !exists("s:old_fgcontrast") + " if the value was changed since last time, + " be sure to clear the old highlighting. + let s:old_fgcontrast = g:colorizer_fgcontrast + endif + + if exists("g:colorizer_swap_fgbg") + if s:swap_fg_bg != g:colorizer_swap_fgbg + let s:force_hl = 1 + endif + let s:swap_fg_bg = g:colorizer_swap_fgbg + endif + + if exists("g:colorizer_colornames") + if exists("s:color_names") && + \ s:color_names != g:colorizer_colornames + let s:force_hl = 1 + endif + let s:color_names = g:colorizer_colornames + else + let s:color_names = 1 + endif + + let s:color_syntax = get(g:, 'colorizer_syntax', 0) + if get(g:, 'colorizer_only_unfolded', 0) && exists(":foldd") == 1 + let s:color_unfolded = 'foldd ' + else + let s:color_unfolded = '' + endif + + if hlID('Color_Error') == 0 + hi default link Color_Error Error + endif + + if !s:force_hl && s:old_fgcontrast != g:colorizer_fgcontrast + \ && s:swap_fg_bg == 0 + " Doesn't work with swapping fg bg colors + let s:force_hl = 1 + let s:old_fgcontrast = g:colorizer_fgcontrast + endif + + " User manually changed the &t_Co option, so reset it + if s:old_tCo != &t_Co + unlet! s:colortable + endif + + if !exists("s:init_css") || !exists("s:colortable") || + \ empty(s:colortable) + " Only calculate the colortable when running + if &t_Co == 8 + let s:colortable = map(range(0,7), 's:Xterm2rgb16(v:val)') + elseif &t_Co == 16 + let s:colortable = map(range(0,15), 's:Xterm2rgb16(v:val)') + elseif &t_Co == 88 + let s:colortable = map(range(0,87), 's:Xterm2rgb88(v:val)') + " terminal with 256 colors or gVim + elseif &t_Co == 256 || empty(&t_Co) + let s:colortable = map(range(0,255), 's:Xterm2rgb256(v:val)') + endif + if s:debug && exists("s:colortable") + let g:colortable = s:colortable + endif + let s:init_css = 1 + elseif s:force_hl + call Colorizer#ColorOff() + endif + let s:conceal = [&l:cole, &l:cocu] + + let s:hex_pattern = get(g:, 'colorizer_hex_pattern', + \ ['#', '\%(\x\{3}\|\x\{6}\|\x\{8\}\)', '\%(\>\|[-_]\)\@=']) + + if s:HasGui() || &t_Co >= 8 || s:HasColorPattern() + " The list of available match() patterns + let w:match_list = s:GetMatchList() + " If the syntax highlighting got reset, force recreating it + if ((empty(w:match_list) || !hlexists(w:match_list[0].group) || + \ (empty(<sid>SynID(w:match_list[0].group)) && !s:force_hl))) + let s:force_hl = 1 + endif + if &t_Co > 16 || s:HasGui() + let s:colors = (exists("g:colorizer_x11_names") ? + \ s:x11_color_names : s:w3c_color_names) + elseif &t_Co == 16 + " should work with 16 colors terminals + let s:colors = s:xterm_16colors + else + let s:colors = s:xterm_8colors + endif + if exists("g:colorizer_custom_colors") + call extend(s:colors, g:colorizer_custom_colors, 'force') + endif + let s:colornamepattern = s:GetColorPattern(keys(s:colors)) + "call map(w:match_list, 'v:val.pattern') + else + throw "nocolor" + endif + + " Dictionary, containing all information on what to color + " Key: Name + " Value: List, containing 1) Pattern to find color + " 2) func ref to call on the match of 1 + " 3) Name of variable, to enable or this enty + " 4) condition, that must be fullfilled, before + " using this entry + " ´ 5) reltime for dumping statistics + let s:color_patterns = { + \ 'rgb': ['rgb(\s*\%(\d\+%\?[^)]*\)\{3})', + \ function("s:ColorRGBValues"), 'colorizer_rgb', 1, [] ], + \ 'rgba': ['rgba(\s*\%(\d\+%\?\D*\)\{3}\%(\%(0\?\%(.\d\+\)\?\)\|1\))', + \ function("s:ColorRGBValues"), 'colorizer_rgba', 1, [] ], + \ 'hsla': ['hsla\=(\s*\%(\d\+%\?\D*\)\{3}\%(\%(0\?\%(.\d\+\)\?\)\|1\)\=)', + \ function("s:ColorHSLValues"), 'colorizer_hsla', 1, [] ], + \ 'vimcolors': ['\%(gui[fb]g\|cterm[fb]g\)\s*=\s*\<\%(\d\+\|#\x\{6}\|\w\+\)\>', + \ function("s:PreviewVimColors"), 'colorizer_vimcolors', '&ft ==# "vim"', [] ], + \ 'vimhighlight': ['^\s*\%(\%[Html]HiLink\s\+\w\+\s\+\w\+\)\|'. + \ '\(^\s*hi\%[ghlight]!\?\s\+\(clear\)\@!\S\+.*\)', + \ function("s:PreviewVimHighlight"), 'colorizer_vimhighlight', '&ft ==# "vim"', [] ], + \ 'taskwarrior': ['^color[^=]*=\zs.\+$', + \ function("s:PreviewTaskWarriorColors"), 'colorizer_taskwarrior', 'expand("%:e") ==# "theme"', [] ], + \ 'hex': [join(s:hex_pattern, ''), function("s:PreviewColorHex"), 'colorizer_hex', 1, [] ], + \ 'vimhighl_dump': ['^\v\w+\s+xxx%((\s+(term|cterm%([bf]g)?|gui%(%([bf]g|sp))?'. + \ ')\=[#0-9A-Za-z_,]+)+)?%(\_\s+links to \w+)?%( cleared)@!', + \ function("s:PreviewVimHighlightDump"), 'colorizer_vimhighl_dump', 'empty(&ft)', [] ] + \ } + + " term_conceal: patterns to hide, currently: $ and the color patterns  + let s:color_patterns_special = { + \ 'term': ['\%(\%x1b\[0m\)\?\(\%(\%x1b\[\d\+\%([:;]\d\+\)*m\)\+\)\([^\e]*\)\(\%x1b\%(\[0m\|\[K\)\)\=', + \ function("s:PreviewColorTerm"), 'colorizer_term', [] ], + \ 'term_nroff': ['\%(\(.\)\%u8\1\)\|\%(_\%u8.\)', function("s:PreviewColorNroff"), 'colorizer_nroff', [] ], + \ 'term_conceal': [ ['\%(\(\%(\%x1b\[0m\)\?\%x1b\[\d\+\%([;:]\d\+\)*\a\)\|\%x1b\[K$\)', + \ '\%d13', '\%(\%x1b\[K\)', '\%(\%x1b\]\d\+;\d\+;\)', '\%(\%x1b\\\)', + \ '\%x1b(B\%x1b\[m', '\%x1b\[m\%x0f', '_\%u8.\@=', '\(.\)\%u8\%(\1\)\@='], + \ '', + \ 'colorizer_term_conceal', [] ] + \ } + + if exists("s:colornamepattern") && s:color_names + let s:color_patterns["colornames"] = [ s:colornamepattern, + \ function("s:PreviewColorName"), 'colorizer_colornames', 1, [] ] + endif +endfu + +function! s:AddOffset(list) "{{{1 + return a:list + let result=[] + for val in a:list + let val = ('0X'.val) + 0 + if val < get(g:, 'colorizer_min_offset', 0) + let val = get(g:, 'colorizer_add_offset', 0) + endif + call add(result, val) + endfor + return result +endfu +function! s:SwapColors(list) "{{{1 + if empty(a:list[0]) && empty(a:list[1]) + return a:list + elseif s:swap_fg_bg > 0 + return [a:list[1]] + ['NONE'] + elseif s:swap_fg_bg == -1 + return [a:list[1], a:list[0]] + else + return a:list + endif +endfu + +function! s:FGforBG(bg) "{{{1 + " takes a 6hex color code and returns a matching color that is visible + let fgc = g:colorizer_fgcontrast + if fgc == -1 + return a:bg + endif + if a:bg ==# 'NONE' + return (&bg==#'dark' ? s:predefined_fgcolors['dark'][fgc] : s:predefined_fgcolors['light'][fgc]) + endif + let r = '0x'.a:bg[0:1]+0 + let g = '0x'.a:bg[2:3]+0 + let b = '0x'.a:bg[4:5]+0 + if r*30 + g*59 + b*11 > 12000 + return s:predefined_fgcolors['dark'][fgc] + else + return s:predefined_fgcolors['light'][fgc] + end +endfunction + +function! s:DidColor(clr, pat) "{{{1 + let idx = index(w:match_list, a:pat) + if idx > -1 + let attr = <sid>SynID(a:clr) + if (!empty(attr) && get(w:match_list, idx) ==# a:pat) + return 1 + endif + endif + return 0 +endfu + +function! s:DoHlGroup(group, Dict) "{{{1 + if !s:force_hl + let syn = <sid>SynID(a:group) + if !empty(syn) + " highlighting already exists + return + endif + endif + + if empty(a:Dict) + " try to link the given highlight group + call s:Exe("hi link ". a:group. " ". matchstr(a:group, 'Color_\zs.*')) + return + endif + + let hi = printf('hi %s ', a:group) + let fg = get(a:Dict, 'fg', '') + let bg = get(a:Dict, 'bg', '') + let [fg, bg] = s:SwapColors([fg, bg]) + let [fg, bg] = s:AddOffset([fg, bg]) + + if !empty(fg) && fg[0] !=# '#' && fg !=# 'NONE' + let fg='#'.fg + endif + if !empty(bg) && bg[0] !=# '#' && bg !=# 'NONE' + let bg='#'.bg + endif + if !empty(fg) + let hi .= printf('guifg=%s', fg) + endif + if has_key(a:Dict, "gui") + let hi.=printf(" gui=%s ", a:Dict['gui']) + endif + if has_key(a:Dict, "guifg") + let hi.=printf(" guifg=%s ", a:Dict['guifg']) + endif + if !empty(bg) + let hi .= printf(' guibg=%s', bg) + endif + let hi .= printf('%s', !empty(get(a:Dict, 'special', '')) ? + \ (' gui='. a:Dict.special) : '') + if !s:HasGui() + let fg = get(a:Dict, 'ctermfg', '') + let bg = get(a:Dict, 'ctermbg', '') + let [fg, bg] = s:SwapColors([fg, bg]) + if !empty(bg) || bg == 0 + let hi.= printf(' ctermbg=%s', bg) + endif + if !empty(fg) || fg == 0 + let hi.= printf(' ctermfg=%s', fg) + endif + let hi .= printf('%s', !empty(get(a:Dict, 'special','')) ? + \ (' cterm='. a:Dict.special) : '') + if has_key(a:Dict, "term") + let hi.=printf(" term=%s ", a:Dict['term']) + endif + if has_key(a:Dict, "cterm") + let hi.=printf(" cterm=%s ", a:Dict['cterm']) + endif + endif + call s:Exe(hi) +endfunction + +function! s:Exe(stmt) "{{{1 + "Don't error out for invalid colors + try + exe a:stmt + catch + " Only report errors, when debugging info is turned on + if s:debug + call s:Warn("Invalid statement: ".a:stmt) + endif + endtry +endfu + +function! s:SynID(group, ...) "{{{1 + let property = exists("a:1") ? a:1 : 'fg' + let c1 = synIDattr(synIDtrans(hlID(a:group)), property) + " since when can c1 be negative? Is this a vim bug? + " it used to be empty on errors or non-existing properties... + if empty(c1) || c1 < 0 + return '' + else + return c1 + endif +endfu + +function! s:GenerateColors(dict) "{{{1 + let result=copy(a:dict) + + if !has_key(result, 'bg') && has_key(result, 'ctermbg') + let result.bg = s:Term2RGB(result.ctermbg) + elseif !has_key(result, 'bg') && has_key(result, 'guibg') + let result.bg = result.guibg + endif + if !has_key(result, 'fg') && has_key(result, 'ctermfg') + let result.fg = s:Term2RGB(result.ctermfg) + elseif !has_key(result, 'fg') && has_key(result, 'guifg') + let result.fg = result.guifg + endif + + if !has_key(result, 'fg') && + \ has_key(result, 'bg') + let result.fg = toupper(s:FGforBG(result.bg)) + endif + if !has("gui_running") + " need to make sure, we have ctermfg/ctermbg values + if !has_key(result, 'ctermfg') && + \ has_key(result, 'fg') + let result.ctermfg = (s:term_true_color ? result.fg : s:Rgb2xterm(result.fg)) + endif + if !has_key(result, 'ctermbg') && + \ has_key(result, 'bg') + let result.ctermbg = (s:term_true_color ? result.bg : s:Rgb2xterm(result.bg)) + endif + endif + for key in keys(result) + if empty(result[key]) + let result[key] = 0 + endif + endfor + return result +endfunction + +function! s:SetMatcher(pattern, Dict) "{{{1 + let param = s:GenerateColors(a:Dict) + let clr = get(param, 'name', '') + if empty(clr) + let clr = 'Color_'. get(param, 'fg'). '_'. get(param, 'bg'). + \ (!empty(get(param, 'special', '')) ? + \ ('_'. get(param, 'special')) : '') + endif + call s:SetMatch(clr, a:pattern, param) +endfunction + +function! s:SetMatch(group, pattern, param_dict) "{{{1 + call s:DoHlGroup(a:group, a:param_dict) + if has_key(a:param_dict, 'pos') + call matchaddpos(a:group, a:param_dict.pos, s:default_match_priority) + " do not add the pattern to the matchlist + "call add(w:match_list, a:pattern) + return + endif + if s:DidColor(a:group, a:pattern) + return + endif + " let 'hls' overrule our syntax highlighting + call matchadd(a:group, a:pattern, s:default_match_priority) + call add(w:match_list, a:pattern) +endfunction + + +function! s:Xterm2rgb16(color) "{{{1 + " 16 basic colors + let r=0 + let g=0 + let b=0 + let r = s:basic16[a:color][0] + let g = s:basic16[a:color][1] + let b = s:basic16[a:color][2] + return [ r, g, b ] +endfunction + +function! s:Xterm2rgb88(color) "{{{1 + " 16 basic colors + let r=0 + let g=0 + let b=0 + if a:color < 16 + return s:Xterm2rgb16(a:color) + + " 4x4x4 color cube + elseif a:color >= 16 && a:color < 80 + let color=a:color-16 + let r = s:valuerange4[(color/16)%4] + let g = s:valuerange4[(color/4)%4] + let b = s:valuerange4[color%4] + " gray tone + elseif a:color >= 80 && a:color <= 87 + let color = (a:color-80) + 0.0 + let r = 46.36363636 + color * 23.18181818 + + \ (color > 0.0 ? 23.18181818 : 0.0) + 0.0 + let r = float2nr(r) + let g = r + let b = r + endif + + let rgb=[r,g,b] + return rgb +endfunction + +function! s:Xterm2rgb256(color) "{{{1 + " 16 basic colors + let r=0 + let g=0 + let b=0 + if a:color < 16 + return s:Xterm2rgb16(a:color) + + " color cube color + elseif a:color >= 16 && a:color < 232 + let color=a:color-16 + let r = s:valuerange6[(color/36)%6] + let g = s:valuerange6[(color/6)%6] + let b = s:valuerange6[color%6] + + " gray tone + elseif a:color >= 232 && a:color <= 255 + let r = 8 + (a:color-232) * 0x0a + let g = r + let b = r + endif + let rgb=[r,g,b] + return rgb +endfunction + +function! s:RoundColor(...) "{{{1 + let result = [] + let minlist = [] + let min = 1000 + let list = (&t_Co == 256 ? s:valuerange6 : s:valuerange4) + if &t_Co > 16 + for item in a:000 + for val in list + let t = abs(val - item) + if (min > t) + let min = t + let r = val + endif + endfor + call add(result, r) + call add(minlist, min) + let min = 1000 + endfor + endif + if &t_Co <= 16 + let result = [ a:1, a:2, a:3 ] + let minlist = [ 255, 255, 255 ] + endif + " Check with the values from the 16 color xterm, if the difference + " is lower + let result = s:Check16ColorTerm(result, minlist) + return result +endfunction + +function! s:Check16ColorTerm(rgblist, minlist) "{{{1 +" We only check those values for 256 color terminals here: +" [205,0,0] [0,205,0] [205,205,0] [205,0,205] +" [0,205,205] [0,0,238] [92,92,255] +" The other values are already included in the s:colortable list + let min = a:minlist[0] + a:minlist[1] + a:minlist[2] + if &t_Co == 256 + for value in [[205,0,0], [0,205,0], [205,205,0], [205,0,205], + \ [0,205,205], [0,0,238], [92,92,255]] + " euclidian distance would be needed, + " but this works good enough and is faster. + let t = abs(value[0] - a:rgblist[0]) + + \ abs(value[1] - a:rgblist[1]) + + \ abs(value[2] - a:rgblist[2]) + if min > t + return value + endif + endfor + elseif &t_Co == 88 + for value in [[0,0,238], [229,229,229], [127,127,127], [92,92,255]] + let t = abs(value[0] - a:rgblist[0]) + + \ abs(value[1] - a:rgblist[1]) + + \ abs(value[2] - a:rgblist[2]) + if min > t + return value + endif + endfor + else " 16 color terminal + " Check for values from 16 color terminal + let best = [] + let min = 100000 + let list = (&t_Co == 16 ? s:basic16 : s:basic16[:7]) + for value in list + let t = abs(value[0] - a:rgblist[0]) + + \ abs(value[1] - a:rgblist[1]) + + \ abs(value[2] - a:rgblist[2]) + if min > t + let min = t + let best = value + endif + endfor + return best + endif + return a:rgblist +endfunction + +function! s:Ansi2Color(chars) "{{{1 + " chars look like this + "  + if !exists("s:term2ansi") + let s:term2ansi = {} + " Color values taken from + " https://en.wikipedia.org/wiki/ANSI_escape_code#Colors + let s:term2ansi.std = { 30: printf("%.2X%.2X%.2X", 0, 0, 0), + \ 31: printf("%.2X%.2X%.2X", 205, 0, 0), + \ 32: printf("%.2X%.2X%.2X", 0, 205, 0), + \ 33: printf("%.2X%.2X%.2X", 205, 205, 0), + \ 34: printf("%.2X%.2X%.2X", 0, 0, 238), + \ 35: printf("%.2X%.2X%.2X", 205, 0, 205), + \ 36: printf("%.2X%.2X%.2X", 0, 205, 205), + \ 37: printf("%.2X%.2X%.2X", 229, 229, 229) + \ } + let s:term2ansi.bold = { 30: printf("%.2X%.2X%.2X", 127, 127, 127), + \ 31: printf("%.2X%.2X%.2X", 255, 0, 0), + \ 32: printf("%.2X%.2X%.2X", 0, 255, 0), + \ 33: printf("%.2X%.2X%.2X", 255, 255, 0), + \ 34: printf("%.2X%.2X%.2X", 92, 92, 255), + \ 35: printf("%.2X%.2X%.2X", 255, 0, 255), + \ 36: printf("%.2X%.2X%.2X", 0, 255, 255), + \ 37: printf("%.2X%.2X%.2X", 255, 255, 255) + \ } + endif + + let fground = "" + let bground = "" + let check = [0,0] " check fground and bground color + + if a:chars =~ '48;5;\d\+' + let check[0] = 0 + elseif a:chars=~ '.*3[0-7]\(;1\)\?[m;]' + let check[0] = 1 + elseif a:chars =~ '.*38\([:;]\)2\1' + let check[0] = 2 " Uses True Color Support + endif + if a:chars =~ '48;5;\d\+' + let check[1] = 3 + elseif a:chars =~ '.*48\([:;]\)2\1' + let check[1] = 2 + elseif a:chars=~ '.*4[0-7]\(;1\)\?[m;]' + let check[1] = 1 + endif + + if check[0] == 2 + " Check for TrueColor Support + " Esc[38;2;<red>;<green>;<blue> + " 38: background color + " 48: foregournd color + " delimiter could be either : or ; + " skip leading ESC [ and trailing m char + let pat = split(a:chars[2:-2], '[:;]') + if pat[0] == 38 " background color + let fground = printf("%.2X%.2X%.2X", pat[2], pat[3], pat[4]) + elseif a:pat[1] == 48 " foreground color + let bground = printf("%.2X%.2X%.2X", pat[2], pat[3], pat[4]) + endif + elseif check[1] == 3 + let nr = matchstr(a:chars, '\%x1b\[48;5;\zs\d\+\zem') + let bground = s:Term2RGB(nr) + else + for val in ["std", "bold"] + for key in keys(s:term2ansi[val]) + let bright = (val == "std" ? "" : ";1") + + if check[0] " Check for a match of the foreground color + if a:chars =~ ".*".key.bright."[m;]" + let fground = s:term2ansi[val][key] + endif + endif + if check[1] "Check for background color + if a:chars =~ ".*".(key+10).bright."[m;]" + let bground = s:term2ansi[val][key] + endif + endif + if !empty(bground) && !empty(fground) + break + endif + endfor + if !empty(fground) && !empty(bground) + break + endif + endfor + endif + return [(empty(fground) ? 'NONE' : fground), (empty(bground) ? "NONE" : bground)] +endfunction + +function! s:TermConceal(pattern) "{{{1 + " Conceals a list of patterns + if exists("b:Colorizer_did_syntax") + return + endif + let s:position = getpos('.') + " concealing + for pat in a:pattern + exe "syn match ColorTermESC /". pat. "/ conceal containedin=ALL" + endfor + setl cocu=nv cole=2 + let b:Colorizer_did_syntax=1 +endfu +function! s:GetColorPattern(list) "{{{1 + "let list = map(copy(a:list), ' ''\%(-\@<!\<'' . v:val . ''\>-\@!\)'' ') + "let list = map(copy(a:list), ' ''\%(-\@<!\<'' . v:val . ''\>-\@!\)'' ') + let list = copy(a:list) + " Force the old re engine. It should be faster without backtracking. + return '\%#=1\%(\<\('.join(copy(a:list), '\|').'\)\>\)' +endfunction + +function! s:GetMatchList() "{{{1 + " this is window-local! + return filter(getmatches(), 'v:val.group =~ ''^\(Color_\w\+\)\|NONE''') +endfunction + +function! s:CheckTimeout(pattern, force) "{{{1 + " Abort, if pattern is not found within 100 ms and force + " is not set + return (!empty(a:force) || search(a:pattern, 'cnw', '', 100)) +endfunction + +function! s:SaveRestoreOptions(save, dict, list) "{{{1 + if a:save + return s:SaveOptions(a:list) + else + for [key, value] in items(a:dict) + if key !~ '@' + call setbufvar('', '&'. key, value) + else + call call('setreg', [key[1]] + value) + endif + unlet value + endfor + endif +endfun + +function! s:SaveOptions(list) "{{{1 + let save = {} + for item in a:list + if item !~ '^@' + exe "let save.". item. " = &l:". item + else + let save[item] = [] + call add(save[item], getreg(item[1])) + call add(save[item], getregtype(item)) + endif + if item == 'ma' && !&l:ma + setl ma + elseif item == 'ro' && &l:ro + setl noro + elseif item == 'lz' && &l:lz + setl lz + elseif item == 'ed' && &g:ed + setl noed + elseif item == 'gd' && &g:gd + setl nogd + endif + endfor + return save +endfunction + +function! s:StripParentheses(val) "{{{1 + return split(matchstr(a:val, '^\(hsl\|rgb\)a\?\s*(\zs[^)]*\ze)'), '\s*,\s*') +endfunction + +function! s:ApplyAlphaValue(rgb) "{{{1 + " Add Alpha Value to RGB values + " takes a list of [ rr, gg, bb, aa] values + " alpha can be 0-1 + let bg = <sid>SynID('Normal', 'bg') + if empty(bg) + return a:rgb[0:3] + else + if (bg =~? '\d\{1,3}') && bg < 256 + " Xterm color code + " (add dummy in front of it, will be split later) + let bg = '#'.join(s:colortable[bg]) + endif + let rgb = [] + let bg_ = split(bg[1:], '..\zs') + let alpha = str2float(a:rgb[3]) + if alpha > 1 + let alpha = 1 + 0.0 + elseif alpha < 0 + let alpha = 0 + 0.0 + endif + let i = 0 + for value in a:rgb[0:2] + let value += 0 " convert to nr + let value = float2nr(ceil(value * alpha) + ceil((bg_[i]+0)*(1-alpha))) + if value > 255 + let value = 255 + elseif value < 0 + let value = 0 + endif + call add(rgb, value) + let i+=1 + unlet value " reset type of value + endfor + return rgb + endif +endfunction + +function! s:HSL2RGB(h, s, l, ...) "{{{1 + let s = a:s + 0.0 + let l = a:l + 0.0 + if l <= 0.5 + let m2 = l * (s + 1) + else + let m2 = l + s - l * s + endif + let m1 = l * 2 - m2 + let r = float2nr(s:Hue2RGB(m1, m2, a:h + 120)) + let g = float2nr(s:Hue2RGB(m1, m2, a:h)) + let b = float2nr(s:Hue2RGB(m1, m2, a:h - 120)) + if a:0 + let rgb = s:ApplyAlphaValue([r, g, b, a:1]) + endif + return printf("%02X%02X%02X", r, g, b) +endfunction + +function! s:Hue2RGB(m1, m2, h) "{{{1 + let h = (a:h + 0.0)/360 + if h < 0 + let h = h + 1 + elseif h > 1 + let h = h - 1 + endif + if h * 6 < 1 + let res = a:m1 + (a:m2 - a:m1) * h * 6 + elseif h * 2 < 1 + let res = a:m2 + elseif h * 3 < 2 + let res = a:m1 + (a:m2 - a:m1) * (2.0/3.0 - h) * 6 + else + let res = a:m1 + endif + return round(res * 255) +endfunction + +function! s:Rgb2xterm(color) "{{{1 +" selects the nearest xterm color for a rgb value like #FF0000 +" hard code values for 000000 and FFFFFF, they will be called many times +" so make this fast + if a:color ==# 'NONE' + return 'NONE' + endif + if len(a:color) <= 3 + " a:color is already a terminal color + return a:color + endif + if !exists("s:colortable") + call s:ColorInit('') + endif + let color = (a:color[0] == '#' ? a:color[1:] : a:color) + if ( color == '000000') + return 0 + elseif (color == 'FFFFFF') + return 15 + else + let r = '0x'.color[0:1]+0 + let g = '0x'.color[2:3]+0 + let b = '0x'.color[4:5]+0 + + " Try exact match first + let i = index(s:colortable, [r, g, b]) + if i > -1 + return i + endif + + " Grey scale ? + if ( r == g && r == b ) + if &t_Co == 256 + " 0 and 15 have already been take care of + if r < 5 + return 0 " black + elseif r > 244 + return 15 " white + endif + " grey cube starts at index 232 + return 232+(r-5)/10 + elseif &t_Co == 88 + if r < 23 + return 0 " black + elseif r < 69 + return 80 + elseif r > 250 + return 15 " white + else + " should be good enough + return 80 + (r-69)/23 + endif + endif + endif + + " Round to the next step in the xterm color cube + " euclidian distance would be needed, + " but this works good enough and is faster. + let round = s:RoundColor(r, g, b) + " Return closest match or -1 if not found + return index(s:colortable, round) + endif +endfunction + +function! s:Warn(msg) "{{{1 + let msg = 'Colorizer: '. a:msg + echohl WarningMsg + echomsg msg + echohl None + let v:errmsg = msg +endfu + +function! s:LoadSyntax(file) "{{{1 + unlet! b:current_syntax + exe "sil! ru! syntax/".a:file. ".vim" +endfu +function! s:HasGui() "{{{1 + return has("gui_running") || (exists("+tgc") && &tgc) +endfu +function! s:HasColorPattern() "{{{1 + let _pos = winsaveview() + try + if !exists("s:colornamepattern") + let s:colornamepattern = s:GetColorPattern(keys(s:colors)) + endif + let pattern = values(s:color_patterns) + [s:colornamepattern] + call cursor(1,1) + for pat in pattern + if s:CheckTimeout(pat, '') + return 1 + endif + endfor + return 0 + + finally + call winrestview(_pos) + endtry +endfunction + +function! s:PrepareHSLArgs(list) "{{{1 + let hsl=a:list + let hsl[0] = (matchstr(hsl[0], '\d\+') + 360)%360 + let hsl[1] = (matchstr(hsl[1], '\d\+') + 0.0)/100 + let hsl[2] = (matchstr(hsl[2], '\d\+') + 0.0)/100 + if len(hsl) == 4 + return s:HSL2RGB(hsl[0], hsl[1], hsl[2], hsl[3]) + endif + return s:HSL2RGB(hsl[0], hsl[1], hsl[2]) +endfu +function! s:SyntaxMatcher(enable) "{{{1 + if !a:enable + return + endif + let did_clean = {} + " + let list=s:GetMatchList() + if len(list) > 1000 + " This will probably slow + call s:Warn("Colorizer many colors detected, syntax highlighting will probably slow down Vim considerably!") + endif + if &ft =~? 'css' + " cssColor defines some color names like yellow or red and overrules + " our colors + sil! syn clear cssColor + endif + for hi in list + if !get(did_clean, hi.group, 0) + let did_clean[hi.group] = 1 + exe "sil! syn clear" hi.group + endif + if a:enable + if has_key(hi, 'pattern') + exe "syn match" hi.group "excludenl /". escape(hi.pattern, '/'). "/ display containedin=ALL" + else + " matchaddpos() + let line=hi.pos1[0] + let pos =hi.pos1[1]-1 + let len =hi.pos1[1]+hi.pos1[2]-2 + exe printf('syn match %s excludenl /\%%%dl\%%>%dc\&.*\%%<%dc/ display containedin=ALL', hi.group, line, pos, len) + endif + " We have syntax highlighting, can clear the matching + " ignore errors (just in case) + sil! call matchdelete(hi.id) + endif + endfor +endfu + +function! Colorizer#ColorToggle() "{{{1 + if !exists("w:match_list") || empty(w:match_list) + call Colorizer#DoColor(0, 1, line('$')) + else + call Colorizer#ColorOff() + endif +endfu + +function! Colorizer#ColorOff() "{{{1 + for _match in s:GetMatchList() + sil! call matchdelete(_match.id) + endfor + call Colorizer#LocalFTAutoCmds(0) + if exists("s:conceal") + let [&l:cole, &l:cocu] = s:conceal + if !empty(hlID('ColorTermESC')) + syn clear ColorTermESC + endif + endif + unlet! b:Colorizer_did_syntax w:match_list s:conceal +endfu + +function! Colorizer#DoColor(force, line1, line2, ...) "{{{1 + " initialize plugin + try + if v:version < 800 + call s:Warn("Colorizer needs Vim 8.0") + return + endif + call s:ColorInit(a:force) + if exists("a:1") && !empty(a:1) + let s:color_syntax = ( a:1 =~# '^\%(syntax\|nomatch\)$' ) + endif + catch /nocolor/ + " nothing to do + call s:Warn("Your terminal doesn't support colors or no colors". + \ 'found in the current buffer!') + return + endtry + let error = "" + + let _a = winsaveview() + let save = s:SaveRestoreOptions(1, {}, + \ ['mod', 'ro', 'ma', 'lz', 'ed', 'gd', '@/']) + let s:relstart = s:Reltime() + + " highlight Hex Codes: + " + " The :%s command is a lot faster than this: + ":g/#\x\{3,6}\>/call s:ColorMatchingLines(line('.')) + " Should color #FF0000 + " #F0F + " #FFF + " + if &t_Co > 16 || s:HasGui() + " Also support something like + " CSS rgb(255,0,0) + " rgba(255,0,0,1) + " rgba(255,0,0,0.8) + " rgba(255,0,0,0.2) + " rgb(10%,0,100%) + " hsl(0,100%,50%) -> hsl2rgb conversion RED + " hsla(120,100%,50%,1) Lime + " hsl(120,100%,25%) Darkgreen + " hsl(120, 100%, 75%) lightgreen + " hsl(120, 75%, 75%) pastelgreen + " highlight rgb(X,X,X) values + for Pat in values(s:color_patterns) + let start = s:Reltime() + if !get(g:, Pat[2], 1) || (get(g:, Pat[2]. '_disable', 0) > 0) + let Pat[4] = s:Reltime(start) + " Coloring disabled + continue + endif + + " 4th element in pattern is condition, that must be fullfilled, + " before we continue + if !empty(Pat[3]) && !eval(Pat[3]) + let Pat[4] = s:Reltime(start) + continue + endif + + " Check, the pattern isn't too costly... + if s:CheckTimeout(Pat[0], a:force) && !s:IsInComment() + let cmd = printf(':sil keeppatterns %d,%d%ss/%s/\=call(Pat[1], [submatch(0)])/egin', + \ a:line1, a:line2, s:color_unfolded, Pat[0]) + try + if Pat[2] ==# 'colorizer_vimhighlight' && !empty(bufname('')) + " try to load the corresponding syntax file so the syntax + " groups will be defined + let s:extension = fnamemodify(expand('%'), ':t:r') + let s:old_syntax = exists("b:current_syntax") ? b:current_syntax : '' + call s:LoadSyntax(s:extension) + endif + + exe cmd + let Pat[4] = s:Reltime(start) + + if s:stop + break + endif + + catch + " some error occured, stop when finished (and don't setup auto + " comands + let error.=" Colorize: ". string(Pat) + break + + finally + if exists("s:extension") + call s:LoadSyntax(&ft) + unlet! s:extension + endif + endtry + endif + endfor + else + call s:Warn('Color configuration seems wrong, skipping colorization! Check t_Co setting!') + endif + + for Pat in [ s:color_patterns_special.term, s:color_patterns_special.term_nroff ] + let start = s:Reltime() + if (s:CheckTimeout(Pat[0], a:force)) && !s:IsInComment() + + if !get(g:, Pat[2], 1) || (get(s:, Pat[2]. '_disable', 0) > 0) + " Coloring disabled + continue + endif + + if Pat[2] is# 'colorizer_nroff' + let arg = '[submatch(0)]' + else + let arg = '[submatch(1), submatch(2), submatch(3)]' + endif + let cmd = printf(':sil keeppatterns %d,%d%ss/%s/\=call(Pat[1],%s)/egin', + \ a:line1, a:line2, s:color_unfolded, Pat[0], arg) + try + exe cmd + let Pat[3] = s:Reltime(start) + " Hide ESC Terminal Chars + let start = s:Reltime() + call s:TermConceal(s:color_patterns_special.term_conceal[0]) + let s:color_patterns_special.term_conceal[3] = s:Reltime(start) + catch + " some error occured, stop when finished (and don't setup auto + " comands + let error=" ColorTerm " + break + endtry + endif + endfor + + " convert matches into synatx highlighting, so TOhtml can display it + " correctly + call s:SyntaxMatcher(s:color_syntax) + if !exists("#FTColorizer#BufWinEnter#<buffer>") && empty(error) + " Initialise current window. + call Colorizer#LocalFTAutoCmds(1) + call Colorizer#ColorWinEnter(1, 1) " don't call DoColor recursively! + endif + let s:relstop = s:Reltime(s:relstart) + if !empty(error) + " Some error occured, stop trying to color the file + call Colorizer#ColorOff() + call s:Warn("Some error occured here: ". error) + if exists("s:position") + call s:Warn("Position: ". string(s:position)) + call matchadd('Color_Error', '\%'.s:position[1].'l\%'.s:position[2].'c.*\>') + endif + endif + call s:PrintColorStatistics() + call s:SaveRestoreOptions(0, save, []) + call winrestview(_a) +endfu + +function! Colorizer#RGB2Term(arg,bang) "{{{1 + if a:arg =~ '^rgb' + let clr = s:StripParentheses(a:arg) + let color = printf("#%02X%02X%02X", clr[0], clr[1], clr[2]) + else + let color = a:arg[0] == '#' ? a:arg : '#'.a:arg + endif + + call s:ColorInit(1) + let tcolor = s:Rgb2xterm(color) + if empty(a:bang) + call s:DoHlGroup("Color_". color[1:], s:GenerateColors({'bg': color[1:]})) + exe "echohl" "Color_".color[1:] + echo a:arg. " => ". tcolor + echohl None + endif + return tcolor +endfu + +function! Colorizer#Term2RGB(arg) "{{{1 + let index = a:arg + 0 + if a:arg > 255 || a:arg < 0 + call s:Warn('invalid index') + return + endif + + let _t_Co=&t_Co + let &t_Co = 256 + call s:ColorInit(1) + + let rgb = s:Term2RGB(index) + call s:DoHlGroup("Color_". rgb, s:GenerateColors({'bg': rgb, 'ctermbg': index})) + exe "echohl" "Color_".rgb + echo "TerminalColor: ". a:arg. " => ". rgb + echohl None + let &t_Co = _t_Co +endfu + + +function! Colorizer#HSL2Term(arg) "{{{1 + let hsl = s:StripParentheses(a:arg) + if empty(hsl) + call s:Warn("Error evaluating expression". a:val. "! Please report as bug.") + return a:val + endif + let str = s:PrepareHSLArgs(hsl) + + let tcolor = s:Rgb2xterm('#'.str) + call s:DoHlGroup("Color_".str, s:GenerateColors({'bg': str})) + exe "echohl" str + echo a:arg. " => ". tcolor + echohl None +endfu + +function! Colorizer#AutoCmds(enable) "{{{1 + if a:enable && !get(g:, 'colorizer_debug', 0) + aug Colorizer + au! + au InsertLeave * sil call Colorizer#ColorLine('!', line('w0'), line('w$')) + au TextChangedI * sil call Colorizer#ColorLine('', line('.'),line('.')) + au GUIEnter,ColorScheme * sil call Colorizer#DoColor('!', 1, line('$')) + au WinEnter,BufWinEnter * sil call Colorizer#ColorWinEnter() + aug END + else + aug Colorizer + au! + aug END + aug! Colorizer + endif +endfu + +function! Colorizer#LocalFTAutoCmds(enable) "{{{1 + if a:enable + aug FTColorizer + au! + au InsertLeave <buffer> silent call + \ Colorizer#ColorLine('', line('w0'), line('w$')) + au CursorMoved,CursorMovedI <buffer> call Colorizer#ColorLine('',line('.'), line('.')) + au WinEnter,BufWinEnter <buffer> silent call Colorizer#ColorWinEnter() + "au BufLeave <buffer> call Colorizer#ColorOff() + au GUIEnter,ColorScheme <buffer> silent + \ call Colorizer#DoColor('!', 1, line('$')) + if get(g:, 'colorizer_cursormoved', 0) + au CursorMoved,CursorMovedI * call Colorizer#ColorLine('', line('.'),line('.')) + au CusorHold, CursorHoldI * silent call Colorizer#ColorLine('!', line('w0'), line('w$')) + endif + aug END + if !exists("b:undo_ftplugin") + " simply unlet a dummy variable + let b:undo_ftplugin = 'unlet! b:Colorizer_foobar' + endif + " Delete specific auto commands, because the filetype + " has been changed. + let b:undo_ftplugin .= '| exe "sil! au! FTColorizer"' + let b:undo_ftplugin .= '| exe "sil! aug! FTColorizer"' + let b:undo_ftplugin .= '| exe ":ColorClear"' + else + aug FTColorizer + au! + aug END + aug! FTColorizer + endif +endfu + +function! Colorizer#ColorWinEnter(...) "{{{1 + let force = a:0 ? a:1 : 0 + " be fast! + if !force + let ft_list = split(get(g:, "colorizer_auto_filetype", ""), ',') + if match(ft_list, "^".&ft."$") == -1 + " current filetype doesn't match g:colorizer_auto_filetype, + " so nothing to do + return + endif + if get(b:, 'Colorizer_changedtick', 0) == b:changedtick && + \ !empty(getmatches()) + " nothing to do + return + endif + endif + let g:colorizer_only_unfolded = 1 + let _c = getpos('.') + if !exists("a:2") + " don't call it recursively! + call Colorizer#DoColor('', 1, line('$')) + endif + let b:Colorizer_changedtick = b:changedtick + unlet! g:colorizer_only_unfolded + call setpos('.', _c) +endfu + +function! Colorizer#ColorLine(force, start, end) "{{{1 + if get(b:, 'Colorizer_changedtick', 0) == b:changedtick && empty(a:force) + " nothing to do + return + else + call Colorizer#DoColor(a:force, a:start, a:end) + let b:Colorizer_changedtick = b:changedtick + endif +endfu + +function! Colorizer#SwitchContrast() "{{{1 + if exists("s:swap_fg_bg") && s:swap_fg_bg + call s:Warn('Contrast Adjustment does not work with swapped foreground colors!') + return + endif + if !exists("s:predefined_fgcolors") + " init variables + call s:ColorInit('') + endif + " make sure, g:colorizer_fgcontrast is set up + if !exists('g:colorizer_fgcontrast') + " Default to black / white + let g:colorizer_fgcontrast = len(s:predefined_fgcolors['dark']) - 1 + endif + let g:colorizer_fgcontrast-=1 + if g:colorizer_fgcontrast < -1 + let g:colorizer_fgcontrast = len(s:predefined_fgcolors['dark']) - 1 + endif + echom 'Colorizer: using fgcontrast' g:colorizer_fgcontrast + call Colorizer#DoColor(1, 1, line('$')) +endfu + +function! Colorizer#SwitchFGBG() "{{{1 + let range = [ 0, 1, -1 ] + if !exists("s:round") + let s:round = 0 + else + let s:round = (s:round >= 2 ? 0 : s:round+1) + endif + let s:swap_fg_bg = range[s:round] + call Colorizer#DoColor(1, 1, line('$')) +endfu + +" DEBUG TEST "{{{1 +if !get(g:, 'colorizer_debug', 0) + let &cpo = s:cpo_save + unlet s:cpo_save + finish +endif + +fu! ColorizerXtermColors() "{{{2 + let list=[] + for c in range(0, 254) + let css_color = s:Xterm2rgb256(c) + call add(list, css_color) + endfor + return list +endfu + +fu! ColorizerGet(args) "{{{2 + exe "return s:".a:args +endfu + +" Plugin folklore and Vim Modeline " {{{1 +let &cpo = s:cpo_save +unlet s:cpo_save +" vim: set foldmethod=marker et fdl=0:
A .vim/doc/Colorizer.txt

@@ -0,0 +1,520 @@

+*Colorizer.txt* A plugin to color colornames and codes + +Author: Christian Brabandt <cb@256bit.org> +Version: 0.11 Thu, 15 Jan 2015 21:49:17 +0100 +Copyright: (c) 2009-2013 by Christian Brabandt + The VIM LICENSE applies to Colorizer.txt + (see |copyright|) except use ColorizerPlugin instead of "Vim". + NO WARRANTY, EXPRESS OR IMPLIED. USE AT-YOUR-OWN-RISK. + +============================================================================== +Contents *Colorizer* +============================================================================== + + 1. Colorizer Manual.............................|Colorizer-manual| + 1.1 :ColorHighlight......................|:ColorHighlight| + 1.2 :ColorClear..........................|:ColorClear| + 1.3 :RGB2Term............................|:RGB2Term| + 1.4 :HSL2RGB.............................|:HSL2RGB| + 1.5 :Term2RGB............................|:Term2RGB| + 1.6 :ColorContrast.......................|:ColorContrast| + 1.7 :ColorSwapFgBg.......................|:ColorSwapFgBg| + 1.8 :ColorToggle.........................|:ColorToggle| + 2. Configuration................................|Colorizer-config| + 2.1 Automatic loading...................|Colorizer-auto| + 2.2 Automatically highlight filetypes...|Colorizer-hl-ft| + 2.3 Skip coloring comments..............|Colorizer-comments| + 2.4 Adjust the contrast.................|Colorizer-contrast| + 2.5 Highlight colornames................|Colorizer-hl-names| + 2.6 Use X11 colornames..................|Colorizer-names| + 2.7 Use syntax highlighting.............|Colorizer-syntax| + 2.8 Specify patterns to highlight.......|Colorizer-pattern| + 2.9 Colorizing Taskwarrior files........|Colorizer-taskwarrior-files| + 2.10 Colorizing vim syntax files.........|Colorizer-vim-files| + 2.11 Use custom colornames...............|Colorizer-custom-colornames| + 2.12 Colorizing :hi statements...........|Colorizer-vim-hi| + 3. Colorizer Mappings...........................|Colorizer-maps| + 4. Colorizer Tips...............................|Colorizer-tips| + 5. Colorizer Feedback...........................|Colorizer-feedback| + 6. Colorizer History............................|Colorizer-history| + +============================================================================== +1. Colorizer Manual *Colorizer-manual* +============================================================================== + +Functionality + +This plugin is based on the css_color plugin by Nikolaus Hofer. The idea is to +highlight color names and codes in the same color that they represent. + +The plugin understands the W3C colors (used for CSS files for example), the +color names from the X11 Window System and also codes in hex notation, like +#FF0000 (which represents Red in the RGB color system). Additionally, it +supports the CSS color specifications, e.g. rgb(RR,GG,BB) color representation +in either absolute or percentage values and also the HVL color +representation like hvl(H,V,L) + +It works best in the gui version of Vim, but the plugin also supports 256 and +88 color terminals and translates the colors to those supported by the +terminal. 16 and 8 color terminals should work theoretically too, but have not +been widely tested. Note that translating the colors to the terminal might +impose a performance penalty, depending on the terminal type and the number of +matches in the file. + +This plugin defines the following commands: + + *:ColorHighlight* +:[range]ColorHighlight[!] [args] + +Scan the lines given by [range] for color code names and highlight those. If +[range] is omitted, the whole file will be scanned. If the ! is used, the +plugin will redefine all highlighting groups. If ! is not used, it will +skip patterns, that would take too long and make Vim unresponsive. + +[args] can by any of "syntax" or "match". "syntax" means to convert the +highlighting to syntax highlighting. This is useful, so a plugin like +|2html.vim| can convert the colors correctly to HTML. The default is +"match", which uses the |matchadd()| function. (Prepending "no" is +supported and will disable that setting and use the opposite). + + *:ColorClear* +:ColorClear Turn off color highlighting. + + *:RGB2Term* +:RGB2Term <color> Translate the color code given as argument to + the closest color that can be displayed in the + terminal. The color must be given in the + format #RRGGBB (the hex format of the colors red, + green and blue (the '#' is optional), or + alternatively like rgb(X,X,X) + + Uses the number of colors your terminal is capable + of (or 256 colors for gVim). + + *:HSL2RGB* +:HSL2RGB hsl(h,v,l) Translate the HVL color defined by the string + 'hsl(h,v%,l%)' into a color that the current + terminal can display. Note that the color must be + given in the format 'hsl(HH, V, L)' where HH + defines the Hue as absolute value between 0 and + 255 and V and L represent a percentage for value + and Lightness. + + *:Term2RGB* +:Term2RGB number Translate terminal color <number> to an RGB color + (using the xterm 256 color cube). + + *:ColorContrast* +:ColorContrast Switch between all different color contrast + settings (foreground colors). + *:ColorSwapFgBg* +:ColorSwapFgBg Switch between foreground and background colors. + This will toggle in 3 ways. From Swapping + foreground and background colors, to only + highlighting the foreground color back to normal + foreground background color. + + *:ColorToggle* +:ColorToggle Switch between highlighting colors and no + highlighting. + +============================================================================== +2 Colorizer Configuration *Colorizer-config* +============================================================================== + +2.1 Automatic loading *Colorizer-auto* +--------------------- + +The Colorizer plugin can be configured to automatically load when opening a +new file. Note that this might slow down the loading process, especially on +the terminal. To enable this, simply set the variable 'g:colorizer_auto_color' +to 1, e.g. by defining it in your |.vimrc| > + + :let g:colorizer_auto_color = 1 +< +(Not recommended, see below at |Colorizer-hl-ft| for the preferred way) + +2.2 Automatically highlight filetypes *Colorizer-hl-ft* +------------------------------------- + +If you want to have certain filetypes automatically highlighted, you can use +the variable g:colorizer_auto_filetype, e.g. to enable highlighting for +HTML and CSS files by default, add the following to your |.vimrc|: > + + :let g:colorizer_auto_filetype='css,html' +< +After restarting Vim, the plugin will become active whenever the filetype is +set to either html or css. + +2.3 Skip coloring comments *Colorizer-comments* +-------------------------- + +You can skip comments from being colored by setting the variable +g:colorizer_skip_comments to 1: > + + :let g:colorizer_skip_comments = 1 +< +The plugin will skip all matches of color codes and names that appear inside +comments (this only works when syntax highlighting is enabled |:syn-on|) + +Note however, that if the same color is used inside comments and outside +comments, it will also be highlighted inside the comments, because +coloring is done matching only the color pattern and once this is done outside +of comments, this will also match inside comments. + +2.4 Adjust the contrast *Colorizer-contrast* +----------------------- + +Colorizer can be adjusted to blur the contrast between foreground and +background color. For this, the variable 'g:colorizer_fgcontrast' can be used. +It can be given any value between -1 and 2 with 2 being the default. Each +smaller value will decrease the contrast a little bit, with -1 being special, +as there is the foreground color equals the background color. Use +|:ColorContrast| to cycle through the different values. + +2.5 Highlight colornames *Colorizer-hl-names* +------------------------ + +If for any reason you don't want the plugin to highlight colornames, you can +prevent this by setting the g:colorizer_colornames variable to 0, e.g. put > + + :let g:colorizer_colornames = 0 +< +into your |.vimrc| + +2.6 Use X11 colornames *Colorizer-names* +---------------------- + +Colorizer can be configured to support all color names defined by the X11 +Window System. By default it only supports the colors defined by the W3C for +the CSS specification. To use the X11 color names, set the variable +'g:colorzer_x11_names' to 1, e,g. put in your |.vimrc| > + + let g:colorizer_x11_names = 1 +< + +2.7 Use syntax highlighting *Colorizer-syntax* +--------------------------- + +The plugin by default uses the |matchadd()| functions for highlighting colors +on the fly. Unfortunately, this is a problem, if you want to have the result +successfully transformed to a HTML file using the |2html.vim| plugin. Therefore, +the Colorizer plugin can also convert the highlighting to correct syntax +highlighting. Use either the > + + :ColorHighlight syntax +< +command (see |:ColorHighlight|) or set the variable 'g:colorizer_syntax' to 1, +e.g. in your |.vimrc| put > + + let g:colorizer_syntax = 1 +< + +2.8 Specify pattern to highlight *Colorizer-pattern* +-------------------------------- + +By default, Colorizer detects the following patterns and highlights them as +hex colors (for better readability it is separated into 3 parts): > + + # %(\x\{3}\|\x\{6}\) \%(\>\|[-_]\)\@=/' +< + +This means it always looks for a '#' followed by either a 3 or 6 hexadecimal +digits denoting the RGB hex color codes, followed by either the word-boundary +(|/\>|), a hyphen or a underscore. But only the first and middle part will be +highlighted (i.e. the RGB color codes). + +You can of course specify a different pattern for your needs by setting the +g:colorizer_hex_pattern variable. e.g. to display '#RRGGBB' and have all of it +highlighted, use > + + let g:colorizer_hex_pattern = ['#', '\%(\x\{3}\|\x\{6}\)', ''] + +2.9 Colorizing Taskwarrior files *Colorizer-taskwarrior-files* +-------------------------------- + +For taskwarrior files, this plugin can also highlight those colors. By +default, this will only work, if the file name ends with '.theme' + +For an example, see this website: +http://taskwarrior.org/news/182 + +2.10 Colorizing vim syntax files *Colorizer-vim-files* +-------------------------------- + +Colorizer also supports highlighting vim syntax files. For this to work, the +'filetype' must be set to vim, then the plugin tries to identify the colors +and highlight them. + +2.11 Use custom colornames *Colorizer-custom-colornames* +-------------------------- + +You can add separate colornames to be colored. For this to work, set the +variable g:colorizer_custom_colors to your liking, e.g. like this: > + + let g:colorizer_custom_colors = { 'blue': '#ff0000'} + +Guess what, this will color the word blue in red. + +2.12 Colorizing :highlight statements *Colorizer-vim-hi* +------------------------------------- + +Colorizer also supports highlighting |:hi| statements, that are used by vim +colorschemes and syntax files as well as a dump of the |:hi| command +To colorizer :hi statements, the 'filetype' must be set to vim, while for :hi +dumps, the 'filetype' must be empty. + +============================================================================== +3. Colorizer Mappings *Colorizer-maps* +============================================================================== + +By default, the Colorizer plugin does not map any key, so that it won't +pollute the global mapping namespace. If you want however to have the +following default maps set up, set the global variable g:colorizer_auto_map +in your |.vimrc| like this: > + + :let g:colorizer_auto_map = 1 + +< +This will set up the following key mappings (if they are not already taken): + +Keys Name Function +---- ---- -------- +<Leader>cC <Plug>Colorizer Toggle highlighting of Colors. In visual + mode it only highlights the colors in the + selected region (normal and visual mode). +<Leader>cT <Plug>ColorContrast Cycle through contrast setting + |:ColorContrast| (normal and visual mode) +<Leader>cF <Plug>ColorFgBg Toggle foreground and background color + |:ColorSwapFgBg| + +It uses the prefix <leader>c to set all functionality up. By default, <Leader> +is defined as '\' (|<Leader>|). Use the name provided in the second column to +map the function to a different key. + +============================================================================== +4. Colorizer Tips *Colorizer-tips* +============================================================================== + +You can enable the plugin to be loaded for certain filetypes automatically. +This makes sense for example for CSS files or HTML files. To do so, create the +following autocommand in your |.vimrc| > + + :au BufNewFile,BufRead *.css,*.html,*.htm :ColorHighlight! +< +This will automatically highlight all existing color codes and names if you +edit either a HTML file or a CSS file. Note that this does not update the +highlighting, after you have been changing the file. + +The recommended way to do this is to use the g:colorizer_auto_filetype +variable and set this to the desired filetypes. |Colorizer-hl-ft| + + *Colorizer-slowdown* +---------------- +Slow performance +---------------- +Depending on your file, any of the highlighting functions might cause an +performance decrease. This can be analyed, by setting the variable +g:colorizer_debug to 1 in e.g. your |.vimrc| like this: > + + :let g:colorizer_debug = 1 +< +The next time, you call |:ColorHighlight|, the plugin will output runtime +statistics, from which you can see, which function caused the slowdowns. +Consider this output: + + Colorstatistics at: 12:20 ` + Duration: 0.034110 ` + colornames: 0.030865s ` + hex: 0.000968s ` + hsla: 0.000350s ` + rgb: 0.000354s ` + rgba: 0.000491s ` + taskwarrior: 0.000020s ` + term: 0.000219s ` + term_conceal: 0.000105s ` + vimcolors: 0.000036s ` + vimhighl_dump: 0.000025s ` + vimhighlight: 0.000025s ` + +From this you can see, that the colorname highlighting caused the largest +slowdown, it took 0.03 seconds to complete. This is expected, as the +colornames pattern is long and contains many branches. + +Functions with a value less then 100 have probably been skipped and were not +being executed. + +If you want to skip certain functions, you can set the variable +g:colorizer_<name>_disable and then those functions won't be called anymore +(e.g. do disable the colorname highlighting, put in your |.vimrc| this: > + + let g:colorizer_colornames_disable = 1 +< +If the slowdown is still noticeable, you might want to create +a new issue at the plugins repository (|Colorizer-feedback|). You should +provide a sample file, so that I will be able to reproduce the issue. + +Note, this needs a Vim with the |+reltime| feature. +============================================================================== +5. Colorizer Feedback *Colorizer-feedback* +============================================================================== + +Feedback is always welcome. If you like the plugin, please rate it at the +vim-page: http://www.vim.org/scripts/script.php?script_id=3963 + +You can also follow the development of the plugin at github: +http://github.com/chrisbra/color_highlight + +Bugs can also be reported there: +https://github.com/chrisbra/color_highlight/issues + +Alternatively, you can also report any bugs to the maintainer, mentioned in +the third line of this document. Please don't hesitate to contact me, I +won't bite ;) + +If you like the plugin, write me an email (look in the third line for my mail +address). And if you are really happy, vote for the plugin and consider +looking at my Amazon whishlist: http://www.amazon.de/wishlist/2BKAHE8J7Z6UW + +============================================================================== +6. Colorizer History *Colorizer-history* +============================================================================== + +0.12 (unreleased) {{{1 +- TermConceal should also conceal  +- properly escape terminal colors, so that |Colorizer-syntax| works correctly +- use matchaddpos() for highlighting ansi term colors (should speed up vim + highlighting considerably) +- only reset TermConceal syntax group (reported by audriusk in + https://github.com/chrisbra/Colorizer/issues/41, thanks!) +- correctly check for patch 7.4.083 (:keeppatterns modifier, reported by + gbell12 in https://github.com/chrisbra/Colorizer/issues/42, thanks!) +- disable BufLeave autocommand to disable colors +- basic Neovim support (also should work with TrueColor in Terminal) +- Make |:RGB2term| always init colortable, so that when resetting 't_Co' + it will work correctly +- Make it work with Vims Term Truecolor feature (patch 7.4.1770) +- Make it work with neovim fixes https://github.com/chrisbra/Colorizer/issues/45 + and https://github.com/chrisbra/Colorizer/issues/46 +- Support css colors: #rrggbbaa format +- handle hsla values correctly +- clear css cssColor syntax rule when ":ColorHighlight syntax" in css files is + used. fixes https://github.com/chrisbra/Colorizer/issues/50 reported by + msva, thanks! +- make TermConceal also hide the sgr0 attributes (to reset the terminal) + fixes https://github.com/chrisbra/Colorizer/issues/53 reported by + LucHermitte, thanks! +- also conceal and highlight nroff sequences like T^HT (as bold) and _^HT (as + underlined) + +0.11 Jan 15, 2015 {{{1 +- use |TextChanged| autocommand if possible +- Support Ansi True Color support if possible +- Hide ^[[K$ for terminal colors (reported by masukomi at + https://github.com/chrisbra/Colorizer/issues/36, thanks!) +- Do not expand() to expand shellvars (fixed by Daniel Hahler in + https://github.com/chrisbra/Colorizer/issues/37, thanks!) +- Document, how to analyze slowdown |Colorizer-slowdown| +- |:ColorContrast| would error, if the plugin has not been initialized + (reported by Daniel Hahler in + https://github.com/chrisbra/Colorizer/issues/38, thanks!) +- always define reltime variable (reported by mantislin in + https://github.com/chrisbra/Colorizer/issues/39, thanks!) +- Only call conceal function once for ansiterm colors +- reduce calls to DoColor in autocommands (to only do, when something changed) + +0.10 Mar 27, 2014 {{{1 +- Also highlight Ansi Term sequences +- Match colornames using the "old" RE Engine, if Vim supports it. +- Make |:RGB2Xterm| output the color name in its color +- Rename |:RGB2Xterm| to |:RGB2Term| +- Highlight Taskwarrior file +- Code refactoring +- Make |:ColorSwapFgBg| work as expected (did not always toggle reliably + between all states) +- Correctly parse Ansi Term colors +- |:Term2RGB| +- Highlight Vim color files correctly +- merge colorhighlight plugin https://github.com/blueyed/colorhighlight.vim + +0.9: Aug 14, 2013: {{{1 +- https://github.com/chrisbra/color_highlight/issues/15 (rgba highlighting + didn't work for floating point value of alpha, reported by LiTuX.S, thanks!) +- https://github.com/chrisbra/color_highlight/issues/16 (rgb() pattern did + match too much, reported by taecilla, thanks!) +- https://github.com/chrisbra/color_highlight/issues/19 (error on calling + ColorWinEnter() command, reported by wedgwood, thanks!) +- https://github.com/chrisbra/color_highlight/issues/20 and + https://github.com/chrisbra/color_highlight/issues/21 + (also color on split commands, reported by wedgwood and Andri Möll, Thanks!) +- https://github.com/chrisbra/color_highlight/issues/22 (Make sure, patterns + like white-space won't get colored, reported by Andri Möll, Thanks!) +- https://github.com/chrisbra/color_highlight/issues/23 (ColorToggle got + confused when several windows with highlighting exists, reported by Andri + Möll, Thanks!) +- https://github.com/chrisbra/color_highlight/issues/24 (turning off coloring + should also remove the autocommands, reported by Andri Möll, Thanks!) + +0.8: Dec 14, 2012 {{{1 +- https://github.com/chrisbra/color_highlight/issues/13 (colorizing should not + stop at word-boundaries, reported by teschmitz, thanks!) +- https://github.com/chrisbra/color_highlight/issues/14 (convert highlighting + to syntax groups, so TOhtml works, reported by teschmitz, thanks!) + +0.7: Jul 25, 2012 {{{1 +- Highlight rgb colors with whitespace after comma (reported by sergey-vlasov + in https://github.com/chrisbra/color_highlight/issues/12, thanks!) +- Save and restore the search register, so the plugin doesn't clobber it +- check for 'ed' and 'gd' defaults + +0.6: May 17, 2012 {{{1 +- Fix various issues with hsl coloring (reported by teschmitz in + https://github.com/chrisbra/color_highlight/issues/9, thanks!) +- Make it possible, to skip coloring comments (reported by teschmitz in + https://github.com/chrisbra/color_highlight/issues/10, thanks!) +- search highlighting should overrule color highlighting(reported by teschmitz + in https://github.com/chrisbra/color_highlight/issues/11, thanks!) +- updated documentation (suggested by teschmitz, thanks!) + +0.5: Apr 03, 2012 {{{1 +- Fix issue 7 (reported by teschmitz in + https://github.com/chrisbra/color_highlight/issues/7, thanks!) +0.4: Mar, 23, 2012 {{{1 +- |:ColorSwapFgBg| (suggested by teschmitz, in + https://github.com/chrisbra/color_highlight/issues/3, thanks!) +- make automatic color loading work (reported by wedgwood in + https://github.com/chrisbra/color_highlight/issues/6, thanks!) + |Colorizer-auto| and |Colorizer-hl-ft| +- more documentation updates +- added Mappings (suggested by Ingo Karkat, thanks!) |Colorizer-maps| +- prevent highlighting of color names (suggested by Tarlika Schmitz in + https://github.com/chrisbra/color_highlight/issues/5, thanks!) + |Colorizer-hl-names| +- enable filetype specific autocommands, so that for certain filetypes + colors are highlighted automatically |Colorizer-hl-ft| + (suggested by Tarlika Schmitz, thanks!) + +0.3: Mar 15, 2012 {{{1 +- Use the g:colorizer_fgcontrast variable to have lesser contrast between + foreground and background colors (patch by Ingo Karkat, thanks!) +- gvim did not color rgb(...) codes +- did not correctly highlight 3 letter color codes (issue + https://github.com/chrisbra/color_highlight/issues/1, + reported by Taybin Rutkin, thanks!) +- support autoloading (requested by Ingo Karkat, thanks!) +- add |GLVS| support +- |:ColorContrast| to interactively switch between contrast settings + (suggested by Ingo Karkat, thanks!) +0.2: Mar 02, 2012 {{{1 + +- Initial upload +- development versions are available at the github repository +- put plugin on a public repository + (http://github.com/chrisbra/color_highlight) + +0.1: Mar 02, 2012 {{{1 +- first internal version + }}} +============================================================================== +Modeline: +vim:tw=78:ts=8:ft=help:et:fdm=marker:fdl=0:norl
A .vim/doc/tags

@@ -0,0 +1,29 @@

+:ColorClear Colorizer.txt /*:ColorClear* +:ColorContrast Colorizer.txt /*:ColorContrast* +:ColorHighlight Colorizer.txt /*:ColorHighlight* +:ColorSwapFgBg Colorizer.txt /*:ColorSwapFgBg* +:ColorToggle Colorizer.txt /*:ColorToggle* +:HSL2RGB Colorizer.txt /*:HSL2RGB* +:RGB2Term Colorizer.txt /*:RGB2Term* +:Term2RGB Colorizer.txt /*:Term2RGB* +Colorizer Colorizer.txt /*Colorizer* +Colorizer-auto Colorizer.txt /*Colorizer-auto* +Colorizer-comments Colorizer.txt /*Colorizer-comments* +Colorizer-config Colorizer.txt /*Colorizer-config* +Colorizer-contrast Colorizer.txt /*Colorizer-contrast* +Colorizer-custom-colornames Colorizer.txt /*Colorizer-custom-colornames* +Colorizer-feedback Colorizer.txt /*Colorizer-feedback* +Colorizer-history Colorizer.txt /*Colorizer-history* +Colorizer-hl-ft Colorizer.txt /*Colorizer-hl-ft* +Colorizer-hl-names Colorizer.txt /*Colorizer-hl-names* +Colorizer-manual Colorizer.txt /*Colorizer-manual* +Colorizer-maps Colorizer.txt /*Colorizer-maps* +Colorizer-names Colorizer.txt /*Colorizer-names* +Colorizer-pattern Colorizer.txt /*Colorizer-pattern* +Colorizer-slowdown Colorizer.txt /*Colorizer-slowdown* +Colorizer-syntax Colorizer.txt /*Colorizer-syntax* +Colorizer-taskwarrior-files Colorizer.txt /*Colorizer-taskwarrior-files* +Colorizer-tips Colorizer.txt /*Colorizer-tips* +Colorizer-vim-files Colorizer.txt /*Colorizer-vim-files* +Colorizer-vim-hi Colorizer.txt /*Colorizer-vim-hi* +Colorizer.txt Colorizer.txt /*Colorizer.txt*