summaryrefslogtreecommitdiff
path: root/config/old
diff options
context:
space:
mode:
Diffstat (limited to 'config/old')
-rwxr-xr-xconfig/old/cmus/playlists/default0
-rwxr-xr-xconfig/old/cmus/rc194
l---------config/old/code/Code1
-rw-r--r--config/old/code/Code - OSS/User/keybindings.json32
-rw-r--r--config/old/code/Code - OSS/User/settings.json21
-rw-r--r--config/old/qutebrowser/autoconfig.yml10
-rw-r--r--config/old/qutebrowser/bookmarks/urls0
-rw-r--r--config/old/qutebrowser/quickmarks0
-rw-r--r--config/old/spotifyd/spotifyd.conf13
-rw-r--r--config/old/starship/starship.toml24
-rw-r--r--config/old/tridactyl/tridactylrc211
-rw-r--r--config/old/vim/.VimballRecord1
-rw-r--r--config/old/vim/autoload/Colorizer.vim2397
-rw-r--r--config/old/vim/autoload/plug.vim2812
-rw-r--r--config/old/vim/autoload/togglebg.vim47
-rwxr-xr-xconfig/old/vim/colors/solarized.vim1117
-rw-r--r--config/old/vim/doc/Colorizer.txt432
-rw-r--r--config/old/vim/doc/tags43
-rw-r--r--config/old/vim/ftdetect/z80.vim1
-rw-r--r--config/old/vim/indent/z80.vim35
-rw-r--r--config/old/vim/syntax/bash.vim1
-rw-r--r--config/old/vim/syntax/html.vim12
-rw-r--r--config/old/vim/syntax/python.vim11
-rw-r--r--config/old/vim/syntax/tibasic.vim21
-rw-r--r--config/old/vim/syntax/z80.vim145
-rwxr-xr-xconfig/old/vim/vimrc117
26 files changed, 7698 insertions, 0 deletions
diff --git a/config/old/cmus/playlists/default b/config/old/cmus/playlists/default
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/config/old/cmus/playlists/default
diff --git a/config/old/cmus/rc b/config/old/cmus/rc
new file mode 100755
index 0000000..b73000a
--- /dev/null
+++ b/config/old/cmus/rc
@@ -0,0 +1,194 @@
+# colors from solarized: http://ethanschoonover.com/solarized
+# default text color
+set color_win_fg=default
+
+# overall background color
+set color_win_bg=default
+
+# command-line colors
+set color_cmdline_bg=default
+set color_cmdline_fg=default
+set color_error=160
+set color_info=136
+set color_separator=240
+
+# bottom status line
+set color_statusline_bg=0
+set color_statusline_fg=37
+
+# bottom title line
+set color_titleline_bg=0
+set color_titleline_fg=136
+
+# top title area
+set color_win_title_bg=0
+set color_win_title_fg=64
+##### playing file colors ######################################################
+# unselected currently playing track's text
+set color_win_cur=33
+
+# active selection for currently playing track
+set color_win_cur_sel_bg=0
+set color_win_cur_sel_fg=33
+
+# inactive selection for currently playing track
+set color_win_inactive_cur_sel_bg=default
+set color_win_inactive_cur_sel_fg=125
+
+##### non-playing file colors ##################################################
+# active selection
+set color_win_sel_bg=0
+set color_win_sel_fg=166
+
+# inactive selection
+set color_win_inactive_sel_bg=default
+set color_win_inactive_sel_fg=125
+
+##### file browser view colors #################################################
+# directory listing color
+set color_win_dir=33
+
+##### KEYBINDINGS #################################################
+
+# playback
+
+# bind common b player-next
+# bind common c player-pause
+# bind common x player-play
+# bind common z player-prev
+# bind common v player-stop
+#
+# bind common ] vol +0 +1%
+# bind common [ vol +1% +0
+# bind common + vol +10%
+# bind common = vol +10%
+# bind common } vol -0 -1%
+# bind common { vol -1% -0
+# bind common - vol -10%
+#
+bind -f common , seek -5
+bind -f common . seek +5
+bind -f common 0 vol +2%
+bind -f common 9 vol -2%
+#
+# bind common h seek -5
+# bind common l seek +5
+#
+# bind common left seek -5
+# bind common right seek +5
+#
+# bind common mlb_click_bar player-pause
+# bind common mouse_scroll_up_bar seek +5
+# bind common mouse_scroll_down_bar seek -5
+#
+# # setting toggles
+#
+# bind common m toggle aaa_mode
+# bind common c toggle continue
+# bind common m toggle play_library
+# bind common o toggle play_sorted
+# bind common r toggle repeat
+# bind common ^r toggle repeat_current
+# bind common t toggle show_remaining_time
+# bind common s toggle shuffle
+# bind common f toggle follow
+
+# commands
+
+unbind common q
+bind -f common q quit
+# bind common ^c echo type :quit<enter> to exit cmus.
+# bind common i echo {}
+#
+# # note: the single space at the end is intentional
+# bind common ! push shell
+#
+# # view/window navigation
+#
+# bind common 1 view tree
+# bind common 2 view sorted
+# bind common 3 view playlist
+# bind common 4 view queue
+# bind common 5 view browser
+# bind common 6 view filters
+# bind common 7 view settings
+#
+# bind common mouse_scroll_up_title left-view
+# bind common mouse_scroll_down_title right-view
+#
+# bind common tab win-next
+#
+# bind common ^l refresh
+#
+# # navigation
+#
+# bind common ^y win-scroll-up
+# bind common ^e win-scroll-down
+# bind common ^b win-page-up
+# bind common ^f win-page-down
+# bind common ^u win-half-page-up
+# bind common ^d win-half-page-down
+#
+# bind common k win-up
+# bind common j win-down
+# bind common g win-top
+# bind common g win-bottom
+#
+# bind common up win-up
+# bind common down win-down
+# bind common home win-top
+# bind common end win-bottom
+# bind common page_up win-page-up
+# bind common page_down win-page-down
+#
+# bind common mouse_scroll_up win-up
+# bind common mouse_scroll_down win-down
+#
+# # selection
+#
+# bind common i win-sel-cur
+# bind common enter win-activate
+# bind common mlb_click_selected win-activate
+#
+# bind common space win-toggle
+# bind common d win-remove
+# bind common delete win-remove
+# bind common p win-mv-after
+# bind common p win-mv-before
+#
+# bind common e win-add-q
+# bind common a win-add-l
+# bind common y win-add-p
+# bind common e win-add-q
+#
+# bind common u update-cache
+# bind common u win-update-cache
+#
+# # filters
+#
+# bind common / search-start
+# bind common ? search-b-start
+# bind common n search-next
+# bind common n search-prev
+#
+# # note: the single space at the end is intentional
+# bind common f push filter
+# bind common l push live-filter
+
+fset 90s=date>=1990&date<2000
+fset classical=genre="classical"
+fset unheard=play_count=0
+fset missing-tag=!stream&(artist=""|album=""|title=""|tracknumber=-1|date=-1)
+fset mp3=filename="*.mp3"
+fset ogg=filename="*.ogg"
+fset ogg-or-mp3=ogg|mp3
+
+# file browser
+unbind common l
+bind -f common l win-activate
+unbind -f common h
+bind -f browser h browser-up
+# bind browser space win-activate
+# bind browser i toggle show_hidden
+# bind browser u win-update
+
diff --git a/config/old/code/Code b/config/old/code/Code
new file mode 120000
index 0000000..dfb09b2
--- /dev/null
+++ b/config/old/code/Code
@@ -0,0 +1 @@
+Code - OSS \ No newline at end of file
diff --git a/config/old/code/Code - OSS/User/keybindings.json b/config/old/code/Code - OSS/User/keybindings.json
new file mode 100644
index 0000000..70c97d7
--- /dev/null
+++ b/config/old/code/Code - OSS/User/keybindings.json
@@ -0,0 +1,32 @@
+// Place your key bindings in this file to override the defaultsauto[]
+[
+ {
+ "key": "ctrl+j",
+ "command": "-workbench.action.togglePanel"
+ },
+ {
+ "key": "ctrl+j",
+ "command": "-extension.vim_ctrl+j",
+ "when": "editorTextFocus && vim.active && vim.use<C-j> && !inDebugRepl"
+ },
+ {
+ "key": "ctrl+alt+j",
+ "command": "selectNextSuggestion",
+ "when": "suggestWidgetMultipleSuggestions && suggestWidgetVisible && textInputFocus"
+ },
+ {
+ "key": "ctrl+down",
+ "command": "-selectNextSuggestion",
+ "when": "suggestWidgetMultipleSuggestions && suggestWidgetVisible && textInputFocus"
+ },
+ {
+ "key": "ctrl+alt+k",
+ "command": "selectPrevSuggestion",
+ "when": "suggestWidgetMultipleSuggestions && suggestWidgetVisible && textInputFocus"
+ },
+ {
+ "key": "ctrl+up",
+ "command": "-selectPrevSuggestion",
+ "when": "suggestWidgetMultipleSuggestions && suggestWidgetVisible && textInputFocus"
+ }
+]
diff --git a/config/old/code/Code - OSS/User/settings.json b/config/old/code/Code - OSS/User/settings.json
new file mode 100644
index 0000000..42b715c
--- /dev/null
+++ b/config/old/code/Code - OSS/User/settings.json
@@ -0,0 +1,21 @@
+{
+ "workbench.colorTheme": "Default Dark+",
+ "terminal.integrated.fontFamily": "mononoki Nerd Font Mono",
+ "terminal.integrated.fontWeight": "bold",
+ "keyboard.dispatch": "keyCode",
+ "files.autoSave": "onFocusChange",
+ "vim.useSystemClipboard": true,
+ "editor.cursorBlinking": "solid",
+ "editor.lineNumbers": "relative",
+ "git.autorefresh": false,
+ "debug.onTaskErrors": "abort",
+ "editor.smoothScrolling": true,
+ "C_Cpp.intelliSenseEngine": "disabled",
+ "extensions.ignoreRecommendations": true,
+ "liveServer.settings.donotShowInfoMsg": true,
+ "window.menuBarVisibility": "toggle",
+ "explorer.confirmDelete": false,
+ "workbench.startupEditor": "none",
+ "git.confirmSync": false,
+ "liveServer.settings.NoBrowser": true
+}
diff --git a/config/old/qutebrowser/autoconfig.yml b/config/old/qutebrowser/autoconfig.yml
new file mode 100644
index 0000000..443b1fa
--- /dev/null
+++ b/config/old/qutebrowser/autoconfig.yml
@@ -0,0 +1,10 @@
+# If a config.py file exists, this file is ignored unless it's explicitly loaded
+# via config.load_autoconfig(). For more information, see:
+# https://github.com/qutebrowser/qutebrowser/blob/master/doc/help/configuring.asciidoc#loading-autoconfigyml
+# DO NOT edit this file by hand, qutebrowser will overwrite it.
+# Instead, create a config.py - see :help for details.
+
+config_version: 2
+settings:
+ colors.webpage.darkmode.enabled:
+ global: false
diff --git a/config/old/qutebrowser/bookmarks/urls b/config/old/qutebrowser/bookmarks/urls
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/config/old/qutebrowser/bookmarks/urls
diff --git a/config/old/qutebrowser/quickmarks b/config/old/qutebrowser/quickmarks
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/config/old/qutebrowser/quickmarks
diff --git a/config/old/spotifyd/spotifyd.conf b/config/old/spotifyd/spotifyd.conf
new file mode 100644
index 0000000..cb80dca
--- /dev/null
+++ b/config/old/spotifyd/spotifyd.conf
@@ -0,0 +1,13 @@
+[global]
+username = "lordtlast"
+device_name = "ArchiDesktop"
+bitrate = 160
+cache_path = "/home/aluc/.cache/spotifyd"
+max_cache_size = 1000000000
+no_audio_cache = false
+initial_volume = "70"
+volume_normalisation = true
+normalisation_pregain = -10
+autoplay = true
+zeroconf_port = 1234
+device_type = "computer"
diff --git a/config/old/starship/starship.toml b/config/old/starship/starship.toml
new file mode 100644
index 0000000..e70d49d
--- /dev/null
+++ b/config/old/starship/starship.toml
@@ -0,0 +1,24 @@
+# Don't print a new line at the start of the prompt
+add_newline = false
+
+# makes prompt a single line
+[line_break]
+disabled = true
+
+# Disable the package module, hiding it from the prompt completely
+[package]
+disabled = true
+
+[cmd_duration]
+min_time = 10_000 # Show command duration over 10,000 milliseconds (= 10 sec)
+format = "took [$duration]($style)"
+
+[character]
+error_symbol = "[X](bold red) "
+
+# Clear visibility for exit codes
+[status]
+style = "red"
+symbol = " "
+format = '[\[$symbol$status\]]($style) '
+disabled = false
diff --git a/config/old/tridactyl/tridactylrc b/config/old/tridactyl/tridactylrc
new file mode 100644
index 0000000..d95acd0
--- /dev/null
+++ b/config/old/tridactyl/tridactylrc
@@ -0,0 +1,211 @@
+" General Settings
+set update.lastchecktime 1674671186214
+set update.nag true
+set update.nagwait 7
+set update.lastnaggedversion 1.14.0
+set update.checkintervalsecs 86400
+set configversion 2.0
+set newtab craftmenners.men
+set searchengine duckduckgo
+set searchurls.wi https://www.wikipedia.org/w/index.php?title=Special:Search&search=%s
+set searchurls.g https://www.google.com/search?q=%s
+set searchurls.y https://www.youtube.com/results?search_query=%s
+set searchurls.gm https://www.google.com/maps?q=%s
+set searchurls.aw https://wiki.archlinux.org/title/%s
+set searchurls.aur https://aur.archlinux.org/packages?O=0&K=%s
+set searchurls.tw https://tweakers.net/zoeken/?keyword=%s
+set searchurls.im https://www.imdb.com/find?q=%s
+set searchurls.1x https://www.1377x.to/search/%s/1
+set searchurls.am https://www.amazon.com.be/s?k=%s
+set searchurls.pyp https://pypi.org/search/?q=%s
+set searchurls.mc https://minecraft.fandom.com/wiki/%s
+set searchurls.mcf https://www.curseforge.com/minecraft/mc-mods/search?search=%s
+set searchurls.mcm https://modrinth.com/mods?q=%s
+set searchurls.dhu https://hub.docker.com/search?q=%s
+set searchurls.plu https://app.pluralsight.com/search/?q=%s
+set searchurls.google https://www.google.com/search?q=
+set searchurls.googlelucky https://www.google.com/search?btnI=I'm+Feeling+Lucky&q=
+set searchurls.scholar https://scholar.google.com/scholar?q=
+set searchurls.googleuk https://www.google.co.uk/search?q=
+set searchurls.bing https://www.bing.com/search?q=
+set searchurls.duckduckgo https://duckduckgo.com/?q=
+set searchurls.yahoo https://search.yahoo.com/search?p=
+set searchurls.twitter https://twitter.com/search?q=
+set searchurls.wikipedia https://en.wikipedia.org/wiki/Special:Search/
+set searchurls.youtube https://www.youtube.com/results?search_query=
+set searchurls.amazon https://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Daps&field-keywords=
+set searchurls.amazonuk https://www.amazon.co.uk/s/ref=nb_sb_noss?url=search-alias%3Daps&field-keywords=
+set searchurls.startpage https://startpage.com/do/search?language=english&cat=web&query=
+set searchurls.github https://github.com/search?utf8=✓&q=
+set searchurls.searx https://searx.me/?category_general=on&q=
+set searchurls.cnrtl http://www.cnrtl.fr/lexicographie/
+set searchurls.osm https://www.openstreetmap.org/search?query=
+set searchurls.mdn https://developer.mozilla.org/en-US/search?q=
+set searchurls.gentoo_wiki https://wiki.gentoo.org/index.php?title=Special%3ASearch&profile=default&fulltext=Search&search=
+set searchurls.qwant https://www.qwant.com/?q=
+
+" Binds
+bind J tabnext
+bind K tabprev
+unbind i
+bind ;x hint -F e => { const pos = tri.dom.getAbsoluteCentre(e); tri.excmds.exclaim_quiet("xdotool mousemove --sync " + window.devicePixelRatio * pos.x + " " + window.devicePixelRatio * pos.y + "; xdotool click 1")}
+bind ;X hint -F e => { const pos = tri.dom.getAbsoluteCentre(e); tri.excmds.exclaim_quiet("xdotool mousemove --sync " + window.devicePixelRatio * pos.x + " " + window.devicePixelRatio * pos.y + "; xdotool keydown ctrl+shift; xdotool click 1; xdotool keyup ctrl+shift")}
+bind <A-p> pin
+bind <A-m> mute toggle
+bind <F1> help
+bind o fillcmdline open
+bind O current_url open
+bind w fillcmdline winopen
+bind W current_url winopen
+bind t fillcmdline tabopen
+bind ]] followpage next
+bind [[ followpage prev
+bind [c urlincrement -1
+bind ]c urlincrement 1
+bind <C-x> urlincrement -1
+bind <C-a> urlincrement 1
+bind T current_url tabopen
+bind yy clipboard yank
+bind ys clipboard yankshort
+bind yc clipboard yankcanon
+bind ym clipboard yankmd
+bind yo clipboard yankorg
+bind yt clipboard yanktitle
+bind gh home
+bind gH home true
+bind p clipboard open
+bind P clipboard tabopen
+bind j scrollline 10
+bind <C-e> scrollline 10
+bind k scrollline -10
+bind <C-y> scrollline -10
+bind h scrollpx -50
+bind l scrollpx 50
+bind G scrollto 100
+bind gg scrollto 0
+bind <C-u> scrollpage -0.5
+bind <C-d> scrollpage 0.5
+bind <C-f> scrollpage 1
+bind <C-b> scrollpage -1
+bind <C-v> nmode ignore 1 mode normal
+bind $ scrollto 100 x
+bind ^ scrollto 0 x
+bind H back
+bind L forward
+bind <C-o> jumpprev
+bind <C-i> jumpnext
+bind d tabclose
+bind D composite tabprev; tabclose #
+bind gx0 tabclosealltoleft
+bind gx$ tabclosealltoright
+bind << tabmove -1
+bind >> tabmove +1
+bind u undo
+bind U undo window
+bind r reload
+bind R reloadhard
+bind x stop
+bind gi focusinput -l
+bind g? rot13
+bind g! jumble
+bind g; changelistjump -1
+bind gt tabnext_gt
+bind gT tabprev
+bind g^ tabfirst
+bind g0 tabfirst
+bind g$ tablast
+bind ga tabaudio
+bind gr reader
+bind gu urlparent
+bind gU urlroot
+bind gf viewsource
+bind : fillcmdline_notrail
+bind s fillcmdline open search
+bind S fillcmdline tabopen search
+bind M gobble 1 quickmark
+bind B fillcmdline taball
+bind b fillcmdline tab
+bind ZZ qall
+bind f hint
+bind F hint -b
+bind gF hint -qb
+bind ;i hint -i
+bind ;b hint -b
+bind ;o hint
+bind ;I hint -I
+bind ;k hint -k
+bind ;K hint -K
+bind ;y hint -y
+bind ;Y hint -cF img i => tri.excmds.yankimage(tri.urlutils.getAbsoluteURL(i.src))
+bind ;p hint -p
+bind ;h hint -h
+bind v hint -h
+bind ;P hint -P
+bind ;r hint -r
+bind ;s hint -s
+bind ;S hint -S
+bind ;a hint -a
+bind ;A hint -A
+bind ;; hint -; *
+bind ;# hint -#
+bind ;v hint -W mpvsafe
+bind ;V hint -V
+bind ;w hint -w
+bind ;t hint -W tabopen
+bind ;O hint -W fillcmdline_notrail open
+bind ;W hint -W fillcmdline_notrail winopen
+bind ;T hint -W fillcmdline_notrail tabopen
+bind ;z hint -z
+bind ;m composite hint -Jpipe img src | open images.google.com/searchbyimage?image_url=
+bind ;M composite hint -Jpipe img src | tabopen images.google.com/searchbyimage?image_url=
+bind ;gi hint -qi
+bind ;gI hint -qI
+bind ;gk hint -qk
+bind ;gy hint -qy
+bind ;gp hint -qp
+bind ;gP hint -qP
+bind ;gr hint -qr
+bind ;gs hint -qs
+bind ;gS hint -qS
+bind ;ga hint -qa
+bind ;gA hint -qA
+bind ;g; hint -q;
+bind ;g# hint -q#
+bind ;gv hint -qW mpvsafe
+bind ;gw hint -qw
+bind ;gb hint -qb
+bind ;gF hint -qb
+bind ;gf hint -q
+bind <S-Insert> mode ignore
+bind <AC-Escape> mode ignore
+bind <AC-`> mode ignore
+bind <S-Escape> mode ignore
+bind <Escape> composite mode normal ; hidecmdline
+bind <C-[> composite mode normal ; hidecmdline
+bind a current_url bmark
+bind A bmark
+bind zi zoom 0.1 true
+bind zo zoom -0.1 true
+bind zm zoom 0.5 true
+bind zr zoom -0.5 true
+bind zM zoom 0.5 true
+bind zR zoom -0.5 true
+bind zz zoom 1
+bind zI zoom 3
+bind zO zoom 0.3
+bind . repeat
+bind <AS-ArrowUp><AS-ArrowUp><AS-ArrowDown><AS-ArrowDown><AS-ArrowLeft><AS-ArrowRight><AS-ArrowLeft><AS-ArrowRight>ba open https://www.youtube.com/watch?v=M3iOROuTuMA
+bind m gobble 1 markadd
+bind ` gobble 1 markjump
+bind gna tabopen moz-extension://7cf2fd76-6055-4053-bb4b-f518030f6240/static/docs/classes/_src_lib_config_.default_config.html
+bind goa open moz-extension://7cf2fd76-6055-4053-bb4b-f518030f6240/static/docs/classes/_src_lib_config_.default_config.html
+bind gwa winopen moz-extension://7cf2fd76-6055-4053-bb4b-f518030f6240/static/docs/classes/_src_lib_config_.default_config.html
+bind gnc tabopen https://chat.openai.com/chat
+bind goc open https://chat.openai.com/chat
+bind gwc winopen https://chat.openai.com/chat
+bind gnp tabopen https://github.com/Siilwyn/awesome-pixel-art#tutorials
+bind gop open https://github.com/Siilwyn/awesome-pixel-art#tutorials
+bind gwp winopen https://github.com/Siilwyn/awesome-pixel-art#tutorials
+
+" For syntax highlighting see https://github.com/tridactyl/vim-tridactyl
+" vim: set filetype=tridactyl
diff --git a/config/old/vim/.VimballRecord b/config/old/vim/.VimballRecord
new file mode 100644
index 0000000..25f335d
--- /dev/null
+++ b/config/old/vim/.VimballRecord
@@ -0,0 +1 @@
+Colorizer-0.10.vmb: call delete('/home/aluc/.vim/plugin/ColorizerPlugin.vim')|call delete('/home/aluc/.vim/doc/Colorizer.txt')|call delete('/home/aluc/.vim/autoload/Colorizer.vim')
diff --git a/config/old/vim/autoload/Colorizer.vim b/config/old/vim/autoload/Colorizer.vim
new file mode 100644
index 0000000..d92e87d
--- /dev/null
+++ b/config/old/vim/autoload/Colorizer.vim
@@ -0,0 +1,2397 @@
+" Plugin: Highlight Colornames and Values
+" Maintainer: Christian Brabandt <cb@256bit.org>
+" URL: http://www.github.com/chrisbra/color_highlight
+" Last Change: Thu, 27 Mar 2014 23:12:43 +0100
+" Licence: Vim License (see :h License)
+" Version: 0.10
+" GetLatestVimScripts: 3963 10 :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
+
+let s:debug = 0
+" 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 (expand("$ComSpec") =~# '^\%(command\.com\|cmd\.exe\)$' &&
+ \ !has("gui_running")) ||
+ \ (exists("$ConEmuPID") &&
+ \ expand("$ConEmuANSI") ==# "OFF") ||
+ \ (expand("$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'
+\ }
+
+function! s:IsInComment() "{{{1
+ return s:skip_comments &&
+ \ synIDattr(synIDtrans(synID(line('.'), col('.'),1)), 'name') == "Comment"
+endfu
+
+function! s:PreviewColorName(color) "{{{1
+ 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) "{{{1
+ 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 && !has("gui_running")
+ " 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
+ call s:SetMatcher(s:hex_pattern[0]. pattern. s:hex_pattern[2], {'bg': color})
+endfunction
+
+function! s:PreviewColorTerm(pre, text, post) "{{{1
+ " a:pre: Ansi-Sequences determining the highlighting
+ " a:text: Text to color
+ " a:post: Ansi-Sequences resetting the coloring (might be empty)
+ let color = s:Ansi2Color(a:pre)
+ let clr_Dict = {}
+
+ if &t_Co == 8 && !has("gui_running")
+ " 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 pattern = '\%('. a:pre. '\)\@<='.escape(a:text, '\^$.*~[]'). '\('.a:post.'\)\@='
+ call s:SetMatcher(pattern, clr_Dict)
+endfunction
+
+function! s:PreviewTaskWarriorColors(submatch) "{{{1
+ " a:submatch is something like 'black on rgb141'
+
+ " this highlighting should overrule e.g. colorname highlighting
+ 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
+ endtry
+endfunction
+
+function! s:PreviewVimColors(submatch) "{{{1
+ " a:submatch is something like 'black on rgb141'
+
+ " this highlighting should overrule e.g. colorname highlighting
+ 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)
+ 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) "{{{1
+ " highlights dumps of :hi
+ " e.g
+ "SpecialKey xxx term=bold cterm=bold ctermfg=124 guifg=Cyan
+ 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) "{{{1
+ " like colorhighlight plugin,
+ " colorizer highlight statements in .vim files
+ 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
+ " HtmlHiLink / HiLink line?
+ let match = matchlist(tmatch, '\C\%[Html\]HiLink\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: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:ColorInit(...) "{{{1
+ let s:force_hl = !empty(a:1)
+
+ 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
+
+ let s:keeppatterns = v:version > 704 || v:version == 704 && has("patch38")
+
+ " 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 !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
+ if !exists("s:conceal") && has("conceal")
+ let s:conceal = [&l:cole, &l:cocu]
+ endif
+
+ let s:hex_pattern = get(g:, 'colorizer_hex_pattern',
+ \ ['#', '\%(\x\{3}\|\x\{6}\)', '\%(\>\|[-_]\)\@='])
+
+ if has("gui_running") || &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 || has("gui_running")
+ 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
+ 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,4})',
+ \ function("s:ColorRGBValues"), '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],
+ \ 'vimhighlight_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_vimhighlight_dump', 'empty(&ft)' ]
+ \ }
+
+ let s:color_patterns_special = {
+ \ 'term': ['\%(\%x1b\[0m\)\?\(\%(\%x1b\[\d\+\%(;\d\+\)*m\)\+\)\([^\e]*\)\(\%x1b\[0m\)\=',
+ \ function("s:PreviewColorTerm"), 'colorizer_term'],
+ \ 'term_conceal': ['\(\%(\%x1b\[0m\)\?\%x1b\[\d\+\%(;\d\+\)*m\)', '',
+ \ 'colorizer_term_conceal' ] }
+
+ if exists("s:colornamepattern") && s:color_names
+ let s:color_patterns["colornames"] = [ s:colornamepattern,
+ \ function("s:PreviewColorName"), 'colorizer_names', 1]
+ endif
+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])
+
+ 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 !has("gui_running")
+ let fg = get(a:Dict, 'ctermfg', '')
+ let bg = get(a:Dict, 'ctermbg', '')
+ let [fg, bg] = s:SwapColors([fg, bg])
+ if !empty(string(bg)) && !empty(string(fg))
+ let hi.= printf(' ctermfg=%s ctermbg=%s', fg, bg)
+ 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, ...)
+ 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
+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)
+ endif
+ if !has_key(result, 'fg') && has_key(result, 'ctermfg')
+ let result.fg = s:Term2RGB(result.ctermfg)
+ 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:Rgb2xterm(result.fg)
+ endif
+ if !has_key(result, 'ctermbg') &&
+ \ has_key(result, 'bg')
+ let result.ctermbg = s:Rgb2xterm(result.bg)
+ endif
+ endif
+ 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 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=~ '.*3[0-7]\(;1\)\?[m;]'
+ let check[0] = 1
+ else
+ let fground = "NONE"
+ endif
+ if a:chars=~ '.*4[0-7]\(;1\)\?[m;]'
+ let check[1] = 1
+ else
+ let bground = "NONE"
+ endif
+
+ 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
+ return [fground, bground]
+endfunction
+
+function! s:TermConceal(pattern) "{{{1
+ if has("conceal")
+ exe "syn match ColorTermESC /". a:pattern. "/ conceal containedin=ALL"
+ setl cocu=nv cole=2
+ endif
+endfu
+function! s:GetColorPattern(list) "{{{1
+ let list = map(copy(a:list), ' ''\%(-\@<!\<'' . v:val . ''\>-\@!\)'' ')
+ " Force the old re engine. It should be faster without backtracking.
+ return '\%#=1'.join(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
+ let bg = <sid>SynID('Normal', 'bg')
+ if empty(bg) || !has('float')
+ return a:rgb[0:3]
+ else
+ if (bg =~? '\d\{1,3}') && bg < 256
+ " Xterm color code
+ 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:ColorRGBValues(val) "{{{1
+ 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
+ " drop alpha channel
+ " call remove(rgb, 3)
+ 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) "{{{1
+ 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: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))
+ 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: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
+ if len(hsl) == 4
+ " drop alpha channel
+ call remove(hsl, 3)
+ endif
+ 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
+ return s:HSL2RGB(hsl[0], hsl[1], hsl[2])
+endfu
+function! s:SyntaxMatcher(enable) "{{{1
+ if !a:enable
+ return
+ endif
+ let did_clean = {}
+ for hi in s:GetMatchList()
+ if !get(did_clean, hi.group, 0)
+ let did_clean[hi.group] = 1
+ exe "sil! syn clear" hi.group
+ endif
+ if a:enable
+ exe "syn match" hi.group "excludenl /". hi.pattern. "/ display containedin=ALL"
+ " 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") && has("conceal")
+ let [&l:cole, &l:cocu] = s:conceal
+ endif
+ unlet! w:match_list s:conceal
+endfu
+
+function! Colorizer#DoColor(force, line1, line2, ...) "{{{1
+ " initialize plugin
+ try
+ if v:version < 704
+ call s:Warn("Colorizer needs Vim 7.4")
+ 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', '@/'])
+
+ " 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 || has("gui_running")
+ " 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)
+ if !get(g:, Pat[2], 1) || (get(s:, Pat[2]. '_disable', 0) > 0)
+ " Coloring disabled
+ continue
+ endif
+
+ " 4th element in pattern is condition, that must be fullfilled,
+ " before we continue
+ if !empty(Pat[3]) && !eval(Pat[3])
+ continue
+ endif
+
+ " Check, the pattern isn't too costly...
+ if s:CheckTimeout(Pat[0], a:force) && !s:IsInComment()
+ let cmd = printf(':sil %s %d,%d%ss/%s/'.
+ \ '\=call(Pat[1], [submatch(0)])/egin',
+ \ (s:keeppatterns ? "keeppatterns" : ''),
+ \ a:line1, a:line2,
+ \ s:color_unfolded, Pat[0])
+ try
+ if Pat[2] ==# 'colorizer_vimhighlight' && has('windows')
+ \ && has('syntax') && !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
+
+ 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
+ endif
+
+ for Pat in [ s:color_patterns_special.term ]
+ 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
+
+ let cmd = printf(':sil %s %d,%d%ss/%s/'.
+ \ '\=call(Pat[1],[submatch(1),submatch(2),submatch(3)])/egin',
+ \ (s:keeppatterns ? "keeppatterns" : ''),
+ \ a:line1, a:line2, s:color_unfolded, Pat[0])
+ try
+ exe cmd
+ " Hide ESC Terminal Chars
+ call s:TermConceal(s:color_patterns_special.term_conceal[0])
+ 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)
+ endif
+ if !empty(error)
+ " Some error occured, stop trying to color the file
+ call Colorizer#ColorOff()
+ call s:Warn("Some error occured here: ". error)
+ endif
+ call s:SaveRestoreOptions(0, save, [])
+ call winrestview(_a)
+endfu
+
+function! Colorizer#RGB2Term(arg) "{{{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
+
+ let tcolor = s:Rgb2xterm(color)
+ call s:DoHlGroup("Color_". color[1:], s:GenerateColors({'bg': color[1:]}))
+ exe "echohl" "Color_".color[1:]
+ echo a:arg. " => ". tcolor
+ echohl None
+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
+ aug Colorizer
+ au!
+ au CursorHold,CursorHoldI,InsertLeave * silent call
+ \ Colorizer#DoColor('', line('w0'), line('w$'))
+ "au GUIEnter,BufWinEnter * silent call
+ " \ Colorizer#DoColor('', 1, line('$'))
+ au GUIEnter * silent call Colorizer#DoColor('!', 1, line('$'))
+ au WinEnter,BufWinEnter * silent call Colorizer#ColorWinEnter()
+ au ColorScheme * silent call Colorizer#DoColor('!', 1, line('$'))
+ if get(g:, 'colorizer_cursormoved', 0)
+ au CursorMoved,CursorMovedI * call Colorizer#ColorLine()
+ endif
+ aug END
+ else
+ aug Colorizer
+ au!
+ aug END
+ aug! Colorizer
+ endif
+endfu
+
+function! Colorizer#LocalFTAutoCmds(enable) "{{{1
+ if a:enable
+ aug FTColorizer
+ au!
+ au CursorHold,CursorHoldI,InsertLeave <buffer> silent call
+ \ Colorizer#DoColor('', line('w0'), line('w$'))
+ au CursorMoved,CursorMovedI <buffer> call Colorizer#ColorLine()
+ au WinEnter,BufWinEnter <buffer> silent call Colorizer#ColorWinEnter()
+ au GUIEnter,ColorScheme <buffer> silent
+ \ call Colorizer#DoColor('!', 1, line('$'))
+ 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('.')
+ call Colorizer#DoColor('', 1, line('$'))
+ let b:Colorizer_changedtick = b:changedtick
+ unlet! g:colorizer_only_unfolded
+ call setpos('.', _c)
+endfu
+
+function! Colorizer#ColorLine() "{{{1
+ if get(b:, 'Colorizer_changedtick', 0) == b:changedtick
+ " nothing to do
+ return
+ else
+ call Colorizer#DoColor('', line('.'),line('.'))
+ 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
+ " 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 !s:debug
+ let &cpo = s:cpo_save
+ unlet s:cpo_save
+ finish
+endif
+
+fu! Test1() "{{{2
+ return map(range(0,254), 's:Xterm2rgb256(v:val)')
+endfu
+"
+fu! Test2() "{{{2
+ let list=[]
+ for c in range(0, 254)
+ let css_color = s:Xterm2rgb256(c)
+ call add(list, css_color)
+ endfor
+ return list
+endfu
+
+" Plugin folklore and Vim Modeline " {{{1
+let &cpo = s:cpo_save
+unlet s:cpo_save
+" vim: set foldmethod=marker et fdl=0:
diff --git a/config/old/vim/autoload/plug.vim b/config/old/vim/autoload/plug.vim
new file mode 100644
index 0000000..652caa8
--- /dev/null
+++ b/config/old/vim/autoload/plug.vim
@@ -0,0 +1,2812 @@
+" vim-plug: Vim plugin manager
+" ============================
+"
+" Download plug.vim and put it in ~/.vim/autoload
+"
+" curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
+" https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
+"
+" Edit your .vimrc
+"
+" call plug#begin('~/.vim/plugged')
+"
+" " Make sure you use single quotes
+"
+" " Shorthand notation; fetches https://github.com/junegunn/vim-easy-align
+" Plug 'junegunn/vim-easy-align'
+"
+" " Any valid git URL is allowed
+" Plug 'https://github.com/junegunn/vim-github-dashboard.git'
+"
+" " Multiple Plug commands can be written in a single line using | separators
+" Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets'
+"
+" " On-demand loading
+" Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
+" Plug 'tpope/vim-fireplace', { 'for': 'clojure' }
+"
+" " Using a non-default branch
+" Plug 'rdnetto/YCM-Generator', { 'branch': 'stable' }
+"
+" " Using a tagged release; wildcard allowed (requires git 1.9.2 or above)
+" Plug 'fatih/vim-go', { 'tag': '*' }
+"
+" " Plugin options
+" Plug 'nsf/gocode', { 'tag': 'v.20150303', 'rtp': 'vim' }
+"
+" " Plugin outside ~/.vim/plugged with post-update hook
+" Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
+"
+" " Unmanaged plugin (manually installed and updated)
+" Plug '~/my-prototype-plugin'
+"
+" " Initialize plugin system
+" call plug#end()
+"
+" Then reload .vimrc and :PlugInstall to install plugins.
+"
+" Plug options:
+"
+"| Option | Description |
+"| ----------------------- | ------------------------------------------------ |
+"| `branch`/`tag`/`commit` | Branch/tag/commit of the repository to use |
+"| `rtp` | Subdirectory that contains Vim plugin |
+"| `dir` | Custom directory for the plugin |
+"| `as` | Use different name for the plugin |
+"| `do` | Post-update hook (string or funcref) |
+"| `on` | On-demand loading: Commands or `<Plug>`-mappings |
+"| `for` | On-demand loading: File types |
+"| `frozen` | Do not update unless explicitly specified |
+"
+" More information: https://github.com/junegunn/vim-plug
+"
+"
+" Copyright (c) 2017 Junegunn Choi
+"
+" MIT License
+"
+" Permission is hereby granted, free of charge, to any person obtaining
+" a copy of this software and associated documentation files (the
+" "Software"), to deal in the Software without restriction, including
+" without limitation the rights to use, copy, modify, merge, publish,
+" distribute, sublicense, and/or sell copies of the Software, and to
+" permit persons to whom the Software is furnished to do so, subject to
+" the following conditions:
+"
+" The above copyright notice and this permission notice shall be
+" included in all copies or substantial portions of the Software.
+"
+" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+" NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+" LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+" OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+" WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+if exists('g:loaded_plug')
+ finish
+endif
+let g:loaded_plug = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let s:plug_src = 'https://github.com/junegunn/vim-plug.git'
+let s:plug_tab = get(s:, 'plug_tab', -1)
+let s:plug_buf = get(s:, 'plug_buf', -1)
+let s:mac_gui = has('gui_macvim') && has('gui_running')
+let s:is_win = has('win32')
+let s:nvim = has('nvim-0.2') || (has('nvim') && exists('*jobwait') && !s:is_win)
+let s:vim8 = has('patch-8.0.0039') && exists('*job_start')
+if s:is_win && &shellslash
+ set noshellslash
+ let s:me = resolve(expand('<sfile>:p'))
+ set shellslash
+else
+ let s:me = resolve(expand('<sfile>:p'))
+endif
+let s:base_spec = { 'branch': '', 'frozen': 0 }
+let s:TYPE = {
+\ 'string': type(''),
+\ 'list': type([]),
+\ 'dict': type({}),
+\ 'funcref': type(function('call'))
+\ }
+let s:loaded = get(s:, 'loaded', {})
+let s:triggers = get(s:, 'triggers', {})
+
+function! s:is_powershell(shell)
+ return a:shell =~# 'powershell\(\.exe\)\?$' || a:shell =~# 'pwsh\(\.exe\)\?$'
+endfunction
+
+function! s:isabsolute(dir) abort
+ return a:dir =~# '^/' || (has('win32') && a:dir =~? '^\%(\\\|[A-Z]:\)')
+endfunction
+
+function! s:git_dir(dir) abort
+ let gitdir = s:trim(a:dir) . '/.git'
+ if isdirectory(gitdir)
+ return gitdir
+ endif
+ if !filereadable(gitdir)
+ return ''
+ endif
+ let gitdir = matchstr(get(readfile(gitdir), 0, ''), '^gitdir: \zs.*')
+ if len(gitdir) && !s:isabsolute(gitdir)
+ let gitdir = a:dir . '/' . gitdir
+ endif
+ return isdirectory(gitdir) ? gitdir : ''
+endfunction
+
+function! s:git_origin_url(dir) abort
+ let gitdir = s:git_dir(a:dir)
+ let config = gitdir . '/config'
+ if empty(gitdir) || !filereadable(config)
+ return ''
+ endif
+ return matchstr(join(readfile(config)), '\[remote "origin"\].\{-}url\s*=\s*\zs\S*\ze')
+endfunction
+
+function! s:git_revision(dir) abort
+ let gitdir = s:git_dir(a:dir)
+ let head = gitdir . '/HEAD'
+ if empty(gitdir) || !filereadable(head)
+ return ''
+ endif
+
+ let line = get(readfile(head), 0, '')
+ let ref = matchstr(line, '^ref: \zs.*')
+ if empty(ref)
+ return line
+ endif
+
+ if filereadable(gitdir . '/' . ref)
+ return get(readfile(gitdir . '/' . ref), 0, '')
+ endif
+
+ if filereadable(gitdir . '/packed-refs')
+ for line in readfile(gitdir . '/packed-refs')
+ if line =~# ' ' . ref
+ return matchstr(line, '^[0-9a-f]*')
+ endif
+ endfor
+ endif
+
+ return ''
+endfunction
+
+function! s:git_local_branch(dir) abort
+ let gitdir = s:git_dir(a:dir)
+ let head = gitdir . '/HEAD'
+ if empty(gitdir) || !filereadable(head)
+ return ''
+ endif
+ let branch = matchstr(get(readfile(head), 0, ''), '^ref: refs/heads/\zs.*')
+ return len(branch) ? branch : 'HEAD'
+endfunction
+
+function! s:git_origin_branch(spec)
+ if len(a:spec.branch)
+ return a:spec.branch
+ endif
+
+ " The file may not be present if this is a local repository
+ let gitdir = s:git_dir(a:spec.dir)
+ let origin_head = gitdir.'/refs/remotes/origin/HEAD'
+ if len(gitdir) && filereadable(origin_head)
+ return matchstr(get(readfile(origin_head), 0, ''),
+ \ '^ref: refs/remotes/origin/\zs.*')
+ endif
+
+ " The command may not return the name of a branch in detached HEAD state
+ let result = s:lines(s:system('git symbolic-ref --short HEAD', a:spec.dir))
+ return v:shell_error ? '' : result[-1]
+endfunction
+
+if s:is_win
+ function! s:plug_call(fn, ...)
+ let shellslash = &shellslash
+ try
+ set noshellslash
+ return call(a:fn, a:000)
+ finally
+ let &shellslash = shellslash
+ endtry
+ endfunction
+else
+ function! s:plug_call(fn, ...)
+ return call(a:fn, a:000)
+ endfunction
+endif
+
+function! s:plug_getcwd()
+ return s:plug_call('getcwd')
+endfunction
+
+function! s:plug_fnamemodify(fname, mods)
+ return s:plug_call('fnamemodify', a:fname, a:mods)
+endfunction
+
+function! s:plug_expand(fmt)
+ return s:plug_call('expand', a:fmt, 1)
+endfunction
+
+function! s:plug_tempname()
+ return s:plug_call('tempname')
+endfunction
+
+function! plug#begin(...)
+ if a:0 > 0
+ let s:plug_home_org = a:1
+ let home = s:path(s:plug_fnamemodify(s:plug_expand(a:1), ':p'))
+ elseif exists('g:plug_home')
+ let home = s:path(g:plug_home)
+ elseif has('nvim')
+ let home = stdpath('data') . '/plugged'
+ elseif !empty(&rtp)
+ let home = s:path(split(&rtp, ',')[0]) . '/plugged'
+ else
+ return s:err('Unable to determine plug home. Try calling plug#begin() with a path argument.')
+ endif
+ if s:plug_fnamemodify(home, ':t') ==# 'plugin' && s:plug_fnamemodify(home, ':h') ==# s:first_rtp
+ return s:err('Invalid plug home. '.home.' is a standard Vim runtime path and is not allowed.')
+ endif
+
+ let g:plug_home = home
+ let g:plugs = {}
+ let g:plugs_order = []
+ let s:triggers = {}
+
+ call s:define_commands()
+ return 1
+endfunction
+
+function! s:define_commands()
+ command! -nargs=+ -bar Plug call plug#(<args>)
+ if !executable('git')
+ return s:err('`git` executable not found. Most commands will not be available. To suppress this message, prepend `silent!` to `call plug#begin(...)`.')
+ endif
+ if has('win32')
+ \ && &shellslash
+ \ && (&shell =~# 'cmd\(\.exe\)\?$' || s:is_powershell(&shell))
+ return s:err('vim-plug does not support shell, ' . &shell . ', when shellslash is set.')
+ endif
+ if !has('nvim')
+ \ && (has('win32') || has('win32unix'))
+ \ && !has('multi_byte')
+ return s:err('Vim needs +multi_byte feature on Windows to run shell commands. Enable +iconv for best results.')
+ endif
+ command! -nargs=* -bar -bang -complete=customlist,s:names PlugInstall call s:install(<bang>0, [<f-args>])
+ command! -nargs=* -bar -bang -complete=customlist,s:names PlugUpdate call s:update(<bang>0, [<f-args>])
+ command! -nargs=0 -bar -bang PlugClean call s:clean(<bang>0)
+ command! -nargs=0 -bar PlugUpgrade if s:upgrade() | execute 'source' s:esc(s:me) | endif
+ command! -nargs=0 -bar PlugStatus call s:status()
+ command! -nargs=0 -bar PlugDiff call s:diff()
+ command! -nargs=? -bar -bang -complete=file PlugSnapshot call s:snapshot(<bang>0, <f-args>)
+endfunction
+
+function! s:to_a(v)
+ return type(a:v) == s:TYPE.list ? a:v : [a:v]
+endfunction
+
+function! s:to_s(v)
+ return type(a:v) == s:TYPE.string ? a:v : join(a:v, "\n") . "\n"
+endfunction
+
+function! s:glob(from, pattern)
+ return s:lines(globpath(a:from, a:pattern))
+endfunction
+
+function! s:source(from, ...)
+ let found = 0
+ for pattern in a:000
+ for vim in s:glob(a:from, pattern)
+ execute 'source' s:esc(vim)
+ let found = 1
+ endfor
+ endfor
+ return found
+endfunction
+
+function! s:assoc(dict, key, val)
+ let a:dict[a:key] = add(get(a:dict, a:key, []), a:val)
+endfunction
+
+function! s:ask(message, ...)
+ call inputsave()
+ echohl WarningMsg
+ let answer = input(a:message.(a:0 ? ' (y/N/a) ' : ' (y/N) '))
+ echohl None
+ call inputrestore()
+ echo "\r"
+ return (a:0 && answer =~? '^a') ? 2 : (answer =~? '^y') ? 1 : 0
+endfunction
+
+function! s:ask_no_interrupt(...)
+ try
+ return call('s:ask', a:000)
+ catch
+ return 0
+ endtry
+endfunction
+
+function! s:lazy(plug, opt)
+ return has_key(a:plug, a:opt) &&
+ \ (empty(s:to_a(a:plug[a:opt])) ||
+ \ !isdirectory(a:plug.dir) ||
+ \ len(s:glob(s:rtp(a:plug), 'plugin')) ||
+ \ len(s:glob(s:rtp(a:plug), 'after/plugin')))
+endfunction
+
+function! plug#end()
+ if !exists('g:plugs')
+ return s:err('plug#end() called without calling plug#begin() first')
+ endif
+
+ if exists('#PlugLOD')
+ augroup PlugLOD
+ autocmd!
+ augroup END
+ augroup! PlugLOD
+ endif
+ let lod = { 'ft': {}, 'map': {}, 'cmd': {} }
+
+ if get(g:, 'did_load_filetypes', 0)
+ filetype off
+ endif
+ for name in g:plugs_order
+ if !has_key(g:plugs, name)
+ continue
+ endif
+ let plug = g:plugs[name]
+ if get(s:loaded, name, 0) || !s:lazy(plug, 'on') && !s:lazy(plug, 'for')
+ let s:loaded[name] = 1
+ continue
+ endif
+
+ if has_key(plug, 'on')
+ let s:triggers[name] = { 'map': [], 'cmd': [] }
+ for cmd in s:to_a(plug.on)
+ if cmd =~? '^<Plug>.\+'
+ if empty(mapcheck(cmd)) && empty(mapcheck(cmd, 'i'))
+ call s:assoc(lod.map, cmd, name)
+ endif
+ call add(s:triggers[name].map, cmd)
+ elseif cmd =~# '^[A-Z]'
+ let cmd = substitute(cmd, '!*$', '', '')
+ if exists(':'.cmd) != 2
+ call s:assoc(lod.cmd, cmd, name)
+ endif
+ call add(s:triggers[name].cmd, cmd)
+ else
+ call s:err('Invalid `on` option: '.cmd.
+ \ '. Should start with an uppercase letter or `<Plug>`.')
+ endif
+ endfor
+ endif
+
+ if has_key(plug, 'for')
+ let types = s:to_a(plug.for)
+ if !empty(types)
+ augroup filetypedetect
+ call s:source(s:rtp(plug), 'ftdetect/**/*.vim', 'after/ftdetect/**/*.vim')
+ augroup END
+ endif
+ for type in types
+ call s:assoc(lod.ft, type, name)
+ endfor
+ endif
+ endfor
+
+ for [cmd, names] in items(lod.cmd)
+ execute printf(
+ \ 'command! -nargs=* -range -bang -complete=file %s call s:lod_cmd(%s, "<bang>", <line1>, <line2>, <q-args>, %s)',
+ \ cmd, string(cmd), string(names))
+ endfor
+
+ for [map, names] in items(lod.map)
+ for [mode, map_prefix, key_prefix] in
+ \ [['i', '<C-\><C-O>', ''], ['n', '', ''], ['v', '', 'gv'], ['o', '', '']]
+ execute printf(
+ \ '%snoremap <silent> %s %s:<C-U>call <SID>lod_map(%s, %s, %s, "%s")<CR>',
+ \ mode, map, map_prefix, string(map), string(names), mode != 'i', key_prefix)
+ endfor
+ endfor
+
+ for [ft, names] in items(lod.ft)
+ augroup PlugLOD
+ execute printf('autocmd FileType %s call <SID>lod_ft(%s, %s)',
+ \ ft, string(ft), string(names))
+ augroup END
+ endfor
+
+ call s:reorg_rtp()
+ filetype plugin indent on
+ if has('vim_starting')
+ if has('syntax') && !exists('g:syntax_on')
+ syntax enable
+ end
+ else
+ call s:reload_plugins()
+ endif
+endfunction
+
+function! s:loaded_names()
+ return filter(copy(g:plugs_order), 'get(s:loaded, v:val, 0)')
+endfunction
+
+function! s:load_plugin(spec)
+ call s:source(s:rtp(a:spec), 'plugin/**/*.vim', 'after/plugin/**/*.vim')
+endfunction
+
+function! s:reload_plugins()
+ for name in s:loaded_names()
+ call s:load_plugin(g:plugs[name])
+ endfor
+endfunction
+
+function! s:trim(str)
+ return substitute(a:str, '[\/]\+$', '', '')
+endfunction
+
+function! s:version_requirement(val, min)
+ for idx in range(0, len(a:min) - 1)
+ let v = get(a:val, idx, 0)
+ if v < a:min[idx] | return 0
+ elseif v > a:min[idx] | return 1
+ endif
+ endfor
+ return 1
+endfunction
+
+function! s:git_version_requirement(...)
+ if !exists('s:git_version')
+ let s:git_version = map(split(split(s:system(['git', '--version']))[2], '\.'), 'str2nr(v:val)')
+ endif
+ return s:version_requirement(s:git_version, a:000)
+endfunction
+
+function! s:progress_opt(base)
+ return a:base && !s:is_win &&
+ \ s:git_version_requirement(1, 7, 1) ? '--progress' : ''
+endfunction
+
+function! s:rtp(spec)
+ return s:path(a:spec.dir . get(a:spec, 'rtp', ''))
+endfunction
+
+if s:is_win
+ function! s:path(path)
+ return s:trim(substitute(a:path, '/', '\', 'g'))
+ endfunction
+
+ function! s:dirpath(path)
+ return s:path(a:path) . '\'
+ endfunction
+
+ function! s:is_local_plug(repo)
+ return a:repo =~? '^[a-z]:\|^[%~]'
+ endfunction
+
+ " Copied from fzf
+ function! s:wrap_cmds(cmds)
+ let cmds = [
+ \ '@echo off',
+ \ 'setlocal enabledelayedexpansion']
+ \ + (type(a:cmds) == type([]) ? a:cmds : [a:cmds])
+ \ + ['endlocal']
+ if has('iconv')
+ if !exists('s:codepage')
+ let s:codepage = libcallnr('kernel32.dll', 'GetACP', 0)
+ endif
+ return map(cmds, printf('iconv(v:val."\r", "%s", "cp%d")', &encoding, s:codepage))
+ endif
+ return map(cmds, 'v:val."\r"')
+ endfunction
+
+ function! s:batchfile(cmd)
+ let batchfile = s:plug_tempname().'.bat'
+ call writefile(s:wrap_cmds(a:cmd), batchfile)
+ let cmd = plug#shellescape(batchfile, {'shell': &shell, 'script': 0})
+ if s:is_powershell(&shell)
+ let cmd = '& ' . cmd
+ endif
+ return [batchfile, cmd]
+ endfunction
+else
+ function! s:path(path)
+ return s:trim(a:path)
+ endfunction
+
+ function! s:dirpath(path)
+ return substitute(a:path, '[/\\]*$', '/', '')
+ endfunction
+
+ function! s:is_local_plug(repo)
+ return a:repo[0] =~ '[/$~]'
+ endfunction
+endif
+
+function! s:err(msg)
+ echohl ErrorMsg
+ echom '[vim-plug] '.a:msg
+ echohl None
+endfunction
+
+function! s:warn(cmd, msg)
+ echohl WarningMsg
+ execute a:cmd 'a:msg'
+ echohl None
+endfunction
+
+function! s:esc(path)
+ return escape(a:path, ' ')
+endfunction
+
+function! s:escrtp(path)
+ return escape(a:path, ' ,')
+endfunction
+
+function! s:remove_rtp()
+ for name in s:loaded_names()
+ let rtp = s:rtp(g:plugs[name])
+ execute 'set rtp-='.s:escrtp(rtp)
+ let after = globpath(rtp, 'after')
+ if isdirectory(after)
+ execute 'set rtp-='.s:escrtp(after)
+ endif
+ endfor
+endfunction
+
+function! s:reorg_rtp()
+ if !empty(s:first_rtp)
+ execute 'set rtp-='.s:first_rtp
+ execute 'set rtp-='.s:last_rtp
+ endif
+
+ " &rtp is modified from outside
+ if exists('s:prtp') && s:prtp !=# &rtp
+ call s:remove_rtp()
+ unlet! s:middle
+ endif
+
+ let s:middle = get(s:, 'middle', &rtp)
+ let rtps = map(s:loaded_names(), 's:rtp(g:plugs[v:val])')
+ let afters = filter(map(copy(rtps), 'globpath(v:val, "after")'), '!empty(v:val)')
+ let rtp = join(map(rtps, 'escape(v:val, ",")'), ',')
+ \ . ','.s:middle.','
+ \ . join(map(afters, 'escape(v:val, ",")'), ',')
+ let &rtp = substitute(substitute(rtp, ',,*', ',', 'g'), '^,\|,$', '', 'g')
+ let s:prtp = &rtp
+
+ if !empty(s:first_rtp)
+ execute 'set rtp^='.s:first_rtp
+ execute 'set rtp+='.s:last_rtp
+ endif
+endfunction
+
+function! s:doautocmd(...)
+ if exists('#'.join(a:000, '#'))
+ execute 'doautocmd' ((v:version > 703 || has('patch442')) ? '<nomodeline>' : '') join(a:000)
+ endif
+endfunction
+
+function! s:dobufread(names)
+ for name in a:names
+ let path = s:rtp(g:plugs[name])
+ for dir in ['ftdetect', 'ftplugin', 'after/ftdetect', 'after/ftplugin']
+ if len(finddir(dir, path))
+ if exists('#BufRead')
+ doautocmd BufRead
+ endif
+ return
+ endif
+ endfor
+ endfor
+endfunction
+
+function! plug#load(...)
+ if a:0 == 0
+ return s:err('Argument missing: plugin name(s) required')
+ endif
+ if !exists('g:plugs')
+ return s:err('plug#begin was not called')
+ endif
+ let names = a:0 == 1 && type(a:1) == s:TYPE.list ? a:1 : a:000
+ let unknowns = filter(copy(names), '!has_key(g:plugs, v:val)')
+ if !empty(unknowns)
+ let s = len(unknowns) > 1 ? 's' : ''
+ return s:err(printf('Unknown plugin%s: %s', s, join(unknowns, ', ')))
+ end
+ let unloaded = filter(copy(names), '!get(s:loaded, v:val, 0)')
+ if !empty(unloaded)
+ for name in unloaded
+ call s:lod([name], ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin'])
+ endfor
+ call s:dobufread(unloaded)
+ return 1
+ end
+ return 0
+endfunction
+
+function! s:remove_triggers(name)
+ if !has_key(s:triggers, a:name)
+ return
+ endif
+ for cmd in s:triggers[a:name].cmd
+ execute 'silent! delc' cmd
+ endfor
+ for map in s:triggers[a:name].map
+ execute 'silent! unmap' map
+ execute 'silent! iunmap' map
+ endfor
+ call remove(s:triggers, a:name)
+endfunction
+
+function! s:lod(names, types, ...)
+ for name in a:names
+ call s:remove_triggers(name)
+ let s:loaded[name] = 1
+ endfor
+ call s:reorg_rtp()
+
+ for name in a:names
+ let rtp = s:rtp(g:plugs[name])
+ for dir in a:types
+ call s:source(rtp, dir.'/**/*.vim')
+ endfor
+ if a:0
+ if !s:source(rtp, a:1) && !empty(s:glob(rtp, a:2))
+ execute 'runtime' a:1
+ endif
+ call s:source(rtp, a:2)
+ endif
+ call s:doautocmd('User', name)
+ endfor
+endfunction
+
+function! s:lod_ft(pat, names)
+ let syn = 'syntax/'.a:pat.'.vim'
+ call s:lod(a:names, ['plugin', 'after/plugin'], syn, 'after/'.syn)
+ execute 'autocmd! PlugLOD FileType' a:pat
+ call s:doautocmd('filetypeplugin', 'FileType')
+ call s:doautocmd('filetypeindent', 'FileType')
+endfunction
+
+function! s:lod_cmd(cmd, bang, l1, l2, args, names)
+ call s:lod(a:names, ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin'])
+ call s:dobufread(a:names)
+ execute printf('%s%s%s %s', (a:l1 == a:l2 ? '' : (a:l1.','.a:l2)), a:cmd, a:bang, a:args)
+endfunction
+
+function! s:lod_map(map, names, with_prefix, prefix)
+ call s:lod(a:names, ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin'])
+ call s:dobufread(a:names)
+ let extra = ''
+ while 1
+ let c = getchar(0)
+ if c == 0
+ break
+ endif
+ let extra .= nr2char(c)
+ endwhile
+
+ if a:with_prefix
+ let prefix = v:count ? v:count : ''
+ let prefix .= '"'.v:register.a:prefix
+ if mode(1) == 'no'
+ if v:operator == 'c'
+ let prefix = "\<esc>" . prefix
+ endif
+ let prefix .= v:operator
+ endif
+ call feedkeys(prefix, 'n')
+ endif
+ call feedkeys(substitute(a:map, '^<Plug>', "\<Plug>", '') . extra)
+endfunction
+
+function! plug#(repo, ...)
+ if a:0 > 1
+ return s:err('Invalid number of arguments (1..2)')
+ endif
+
+ try
+ let repo = s:trim(a:repo)
+ let opts = a:0 == 1 ? s:parse_options(a:1) : s:base_spec
+ let name = get(opts, 'as', s:plug_fnamemodify(repo, ':t:s?\.git$??'))
+ let spec = extend(s:infer_properties(name, repo), opts)
+ if !has_key(g:plugs, name)
+ call add(g:plugs_order, name)
+ endif
+ let g:plugs[name] = spec
+ let s:loaded[name] = get(s:loaded, name, 0)
+ catch
+ return s:err(repo . ' ' . v:exception)
+ endtry
+endfunction
+
+function! s:parse_options(arg)
+ let opts = copy(s:base_spec)
+ let type = type(a:arg)
+ let opt_errfmt = 'Invalid argument for "%s" option of :Plug (expected: %s)'
+ if type == s:TYPE.string
+ if empty(a:arg)
+ throw printf(opt_errfmt, 'tag', 'string')
+ endif
+ let opts.tag = a:arg
+ elseif type == s:TYPE.dict
+ for opt in ['branch', 'tag', 'commit', 'rtp', 'dir', 'as']
+ if has_key(a:arg, opt)
+ \ && (type(a:arg[opt]) != s:TYPE.string || empty(a:arg[opt]))
+ throw printf(opt_errfmt, opt, 'string')
+ endif
+ endfor
+ for opt in ['on', 'for']
+ if has_key(a:arg, opt)
+ \ && type(a:arg[opt]) != s:TYPE.list
+ \ && (type(a:arg[opt]) != s:TYPE.string || empty(a:arg[opt]))
+ throw printf(opt_errfmt, opt, 'string or list')
+ endif
+ endfor
+ if has_key(a:arg, 'do')
+ \ && type(a:arg.do) != s:TYPE.funcref
+ \ && (type(a:arg.do) != s:TYPE.string || empty(a:arg.do))
+ throw printf(opt_errfmt, 'do', 'string or funcref')
+ endif
+ call extend(opts, a:arg)
+ if has_key(opts, 'dir')
+ let opts.dir = s:dirpath(s:plug_expand(opts.dir))
+ endif
+ else
+ throw 'Invalid argument type (expected: string or dictionary)'
+ endif
+ return opts
+endfunction
+
+function! s:infer_properties(name, repo)
+ let repo = a:repo
+ if s:is_local_plug(repo)
+ return { 'dir': s:dirpath(s:plug_expand(repo)) }
+ else
+ if repo =~ ':'
+ let uri = repo
+ else
+ if repo !~ '/'
+ throw printf('Invalid argument: %s (implicit `vim-scripts'' expansion is deprecated)', repo)
+ endif
+ let fmt = get(g:, 'plug_url_format', 'https://git::@github.com/%s.git')
+ let uri = printf(fmt, repo)
+ endif
+ return { 'dir': s:dirpath(g:plug_home.'/'.a:name), 'uri': uri }
+ endif
+endfunction
+
+function! s:install(force, names)
+ call s:update_impl(0, a:force, a:names)
+endfunction
+
+function! s:update(force, names)
+ call s:update_impl(1, a:force, a:names)
+endfunction
+
+function! plug#helptags()
+ if !exists('g:plugs')
+ return s:err('plug#begin was not called')
+ endif
+ for spec in values(g:plugs)
+ let docd = join([s:rtp(spec), 'doc'], '/')
+ if isdirectory(docd)
+ silent! execute 'helptags' s:esc(docd)
+ endif
+ endfor
+ return 1
+endfunction
+
+function! s:syntax()
+ syntax clear
+ syntax region plug1 start=/\%1l/ end=/\%2l/ contains=plugNumber
+ syntax region plug2 start=/\%2l/ end=/\%3l/ contains=plugBracket,plugX
+ syn match plugNumber /[0-9]\+[0-9.]*/ contained
+ syn match plugBracket /[[\]]/ contained
+ syn match plugX /x/ contained
+ syn match plugDash /^-\{1}\ /
+ syn match plugPlus /^+/
+ syn match plugStar /^*/
+ syn match plugMessage /\(^- \)\@<=.*/
+ syn match plugName /\(^- \)\@<=[^ ]*:/
+ syn match plugSha /\%(: \)\@<=[0-9a-f]\{4,}$/
+ syn match plugTag /(tag: [^)]\+)/
+ syn match plugInstall /\(^+ \)\@<=[^:]*/
+ syn match plugUpdate /\(^* \)\@<=[^:]*/
+ syn match plugCommit /^ \X*[0-9a-f]\{7,9} .*/ contains=plugRelDate,plugEdge,plugTag
+ syn match plugEdge /^ \X\+$/
+ syn match plugEdge /^ \X*/ contained nextgroup=plugSha
+ syn match plugSha /[0-9a-f]\{7,9}/ contained
+ syn match plugRelDate /([^)]*)$/ contained
+ syn match plugNotLoaded /(not loaded)$/
+ syn match plugError /^x.*/
+ syn region plugDeleted start=/^\~ .*/ end=/^\ze\S/
+ syn match plugH2 /^.*:\n-\+$/
+ syn match plugH2 /^-\{2,}/
+ syn keyword Function PlugInstall PlugStatus PlugUpdate PlugClean
+ hi def link plug1 Title
+ hi def link plug2 Repeat
+ hi def link plugH2 Type
+ hi def link plugX Exception
+ hi def link plugBracket Structure
+ hi def link plugNumber Number
+
+ hi def link plugDash Special
+ hi def link plugPlus Constant
+ hi def link plugStar Boolean
+
+ hi def link plugMessage Function
+ hi def link plugName Label
+ hi def link plugInstall Function
+ hi def link plugUpdate Type
+
+ hi def link plugError Error
+ hi def link plugDeleted Ignore
+ hi def link plugRelDate Comment
+ hi def link plugEdge PreProc
+ hi def link plugSha Identifier
+ hi def link plugTag Constant
+
+ hi def link plugNotLoaded Comment
+endfunction
+
+function! s:lpad(str, len)
+ return a:str . repeat(' ', a:len - len(a:str))
+endfunction
+
+function! s:lines(msg)
+ return split(a:msg, "[\r\n]")
+endfunction
+
+function! s:lastline(msg)
+ return get(s:lines(a:msg), -1, '')
+endfunction
+
+function! s:new_window()
+ execute get(g:, 'plug_window', 'vertical topleft new')
+endfunction
+
+function! s:plug_window_exists()
+ let buflist = tabpagebuflist(s:plug_tab)
+ return !empty(buflist) && index(buflist, s:plug_buf) >= 0
+endfunction
+
+function! s:switch_in()
+ if !s:plug_window_exists()
+ return 0
+ endif
+
+ if winbufnr(0) != s:plug_buf
+ let s:pos = [tabpagenr(), winnr(), winsaveview()]
+ execute 'normal!' s:plug_tab.'gt'
+ let winnr = bufwinnr(s:plug_buf)
+ execute winnr.'wincmd w'
+ call add(s:pos, winsaveview())
+ else
+ let s:pos = [winsaveview()]
+ endif
+
+ setlocal modifiable
+ return 1
+endfunction
+
+function! s:switch_out(...)
+ call winrestview(s:pos[-1])
+ setlocal nomodifiable
+ if a:0 > 0
+ execute a:1
+ endif
+
+ if len(s:pos) > 1
+ execute 'normal!' s:pos[0].'gt'
+ execute s:pos[1] 'wincmd w'
+ call winrestview(s:pos[2])
+ endif
+endfunction
+
+function! s:finish_bindings()
+ nnoremap <silent> <buffer> R :call <SID>retry()<cr>
+ nnoremap <silent> <buffer> D :PlugDiff<cr>
+ nnoremap <silent> <buffer> S :PlugStatus<cr>
+ nnoremap <silent> <buffer> U :call <SID>status_update()<cr>
+ xnoremap <silent> <buffer> U :call <SID>status_update()<cr>
+ nnoremap <silent> <buffer> ]] :silent! call <SID>section('')<cr>
+ nnoremap <silent> <buffer> [[ :silent! call <SID>section('b')<cr>
+endfunction
+
+function! s:prepare(...)
+ if empty(s:plug_getcwd())
+ throw 'Invalid current working directory. Cannot proceed.'
+ endif
+
+ for evar in ['$GIT_DIR', '$GIT_WORK_TREE']
+ if exists(evar)
+ throw evar.' detected. Cannot proceed.'
+ endif
+ endfor
+
+ call s:job_abort()
+ if s:switch_in()
+ if b:plug_preview == 1
+ pc
+ endif
+ enew
+ else
+ call s:new_window()
+ endif
+
+ nnoremap <silent> <buffer> q :call <SID>close_pane()<cr>
+ if a:0 == 0
+ call s:finish_bindings()
+ endif
+ let b:plug_preview = -1
+ let s:plug_tab = tabpagenr()
+ let s:plug_buf = winbufnr(0)
+ call s:assign_name()
+
+ for k in ['<cr>', 'L', 'o', 'X', 'd', 'dd']
+ execute 'silent! unmap <buffer>' k
+ endfor
+ setlocal buftype=nofile bufhidden=wipe nobuflisted nolist noswapfile nowrap cursorline modifiable nospell
+ if exists('+colorcolumn')
+ setlocal colorcolumn=
+ endif
+ setf vim-plug
+ if exists('g:syntax_on')
+ call s:syntax()
+ endif
+endfunction
+
+function! s:close_pane()
+ if b:plug_preview == 1
+ pc
+ let b:plug_preview = -1
+ else
+ bd
+ endif
+endfunction
+
+function! s:assign_name()
+ " Assign buffer name
+ let prefix = '[Plugins]'
+ let name = prefix
+ let idx = 2
+ while bufexists(name)
+ let name = printf('%s (%s)', prefix, idx)
+ let idx = idx + 1
+ endwhile
+ silent! execute 'f' fnameescape(name)
+endfunction
+
+function! s:chsh(swap)
+ let prev = [&shell, &shellcmdflag, &shellredir]
+ if !s:is_win
+ set shell=sh
+ endif
+ if a:swap
+ if s:is_powershell(&shell)
+ let &shellredir = '2>&1 | Out-File -Encoding UTF8 %s'
+ elseif &shell =~# 'sh' || &shell =~# 'cmd\(\.exe\)\?$'
+ set shellredir=>%s\ 2>&1
+ endif
+ endif
+ return prev
+endfunction
+
+function! s:bang(cmd, ...)
+ let batchfile = ''
+ try
+ let [sh, shellcmdflag, shrd] = s:chsh(a:0)
+ " FIXME: Escaping is incomplete. We could use shellescape with eval,
+ " but it won't work on Windows.
+ let cmd = a:0 ? s:with_cd(a:cmd, a:1) : a:cmd
+ if s:is_win
+ let [batchfile, cmd] = s:batchfile(cmd)
+ endif
+ let g:_plug_bang = (s:is_win && has('gui_running') ? 'silent ' : '').'!'.escape(cmd, '#!%')
+ execute "normal! :execute g:_plug_bang\<cr>\<cr>"
+ finally
+ unlet g:_plug_bang
+ let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd]
+ if s:is_win && filereadable(batchfile)
+ call delete(batchfile)
+ endif
+ endtry
+ return v:shell_error ? 'Exit status: ' . v:shell_error : ''
+endfunction
+
+function! s:regress_bar()
+ let bar = substitute(getline(2)[1:-2], '.*\zs=', 'x', '')
+ call s:progress_bar(2, bar, len(bar))
+endfunction
+
+function! s:is_updated(dir)
+ return !empty(s:system_chomp(['git', 'log', '--pretty=format:%h', 'HEAD...HEAD@{1}'], a:dir))
+endfunction
+
+function! s:do(pull, force, todo)
+ for [name, spec] in items(a:todo)
+ if !isdirectory(spec.dir)
+ continue
+ endif
+ let installed = has_key(s:update.new, name)
+ let updated = installed ? 0 :
+ \ (a:pull && index(s:update.errors, name) < 0 && s:is_updated(spec.dir))
+ if a:force || installed || updated
+ execute 'cd' s:esc(spec.dir)
+ call append(3, '- Post-update hook for '. name .' ... ')
+ let error = ''
+ let type = type(spec.do)
+ if type == s:TYPE.string
+ if spec.do[0] == ':'
+ if !get(s:loaded, name, 0)
+ let s:loaded[name] = 1
+ call s:reorg_rtp()
+ endif
+ call s:load_plugin(spec)
+ try
+ execute spec.do[1:]
+ catch
+ let error = v:exception
+ endtry
+ if !s:plug_window_exists()
+ cd -
+ throw 'Warning: vim-plug was terminated by the post-update hook of '.name
+ endif
+ else
+ let error = s:bang(spec.do)
+ endif
+ elseif type == s:TYPE.funcref
+ try
+ call s:load_plugin(spec)
+ let status = installed ? 'installed' : (updated ? 'updated' : 'unchanged')
+ call spec.do({ 'name': name, 'status': status, 'force': a:force })
+ catch
+ let error = v:exception
+ endtry
+ else
+ let error = 'Invalid hook type'
+ endif
+ call s:switch_in()
+ call setline(4, empty(error) ? (getline(4) . 'OK')
+ \ : ('x' . getline(4)[1:] . error))
+ if !empty(error)
+ call add(s:update.errors, name)
+ call s:regress_bar()
+ endif
+ cd -
+ endif
+ endfor
+endfunction
+
+function! s:hash_match(a, b)
+ return stridx(a:a, a:b) == 0 || stridx(a:b, a:a) == 0
+endfunction
+
+function! s:checkout(spec)
+ let sha = a:spec.commit
+ let output = s:git_revision(a:spec.dir)
+ if !empty(output) && !s:hash_match(sha, s:lines(output)[0])
+ let credential_helper = s:git_version_requirement(2) ? '-c credential.helper= ' : ''
+ let output = s:system(
+ \ 'git '.credential_helper.'fetch --depth 999999 && git checkout '.plug#shellescape(sha).' --', a:spec.dir)
+ endif
+ return output
+endfunction
+
+function! s:finish(pull)
+ let new_frozen = len(filter(keys(s:update.new), 'g:plugs[v:val].frozen'))
+ if new_frozen
+ let s = new_frozen > 1 ? 's' : ''
+ call append(3, printf('- Installed %d frozen plugin%s', new_frozen, s))
+ endif
+ call append(3, '- Finishing ... ') | 4
+ redraw
+ call plug#helptags()
+ call plug#end()
+ call setline(4, getline(4) . 'Done!')
+ redraw
+ let msgs = []
+ if !empty(s:update.errors)
+ call add(msgs, "Press 'R' to retry.")
+ endif
+ if a:pull && len(s:update.new) < len(filter(getline(5, '$'),
+ \ "v:val =~ '^- ' && v:val !~# 'Already up.to.date'"))
+ call add(msgs, "Press 'D' to see the updated changes.")
+ endif
+ echo join(msgs, ' ')
+ call s:finish_bindings()
+endfunction
+
+function! s:retry()
+ if empty(s:update.errors)
+ return
+ endif
+ echo
+ call s:update_impl(s:update.pull, s:update.force,
+ \ extend(copy(s:update.errors), [s:update.threads]))
+endfunction
+
+function! s:is_managed(name)
+ return has_key(g:plugs[a:name], 'uri')
+endfunction
+
+function! s:names(...)
+ return sort(filter(keys(g:plugs), 'stridx(v:val, a:1) == 0 && s:is_managed(v:val)'))
+endfunction
+
+function! s:check_ruby()
+ silent! ruby require 'thread'; VIM::command("let g:plug_ruby = '#{RUBY_VERSION}'")
+ if !exists('g:plug_ruby')
+ redraw!
+ return s:warn('echom', 'Warning: Ruby interface is broken')
+ endif
+ let ruby_version = split(g:plug_ruby, '\.')
+ unlet g:plug_ruby
+ return s:version_requirement(ruby_version, [1, 8, 7])
+endfunction
+
+function! s:update_impl(pull, force, args) abort
+ let sync = index(a:args, '--sync') >= 0 || has('vim_starting')
+ let args = filter(copy(a:args), 'v:val != "--sync"')
+ let threads = (len(args) > 0 && args[-1] =~ '^[1-9][0-9]*$') ?
+ \ remove(args, -1) : get(g:, 'plug_threads', 16)
+
+ let managed = filter(copy(g:plugs), 's:is_managed(v:key)')
+ let todo = empty(args) ? filter(managed, '!v:val.frozen || !isdirectory(v:val.dir)') :
+ \ filter(managed, 'index(args, v:key) >= 0')
+
+ if empty(todo)
+ return s:warn('echo', 'No plugin to '. (a:pull ? 'update' : 'install'))
+ endif
+
+ if !s:is_win && s:git_version_requirement(2, 3)
+ let s:git_terminal_prompt = exists('$GIT_TERMINAL_PROMPT') ? $GIT_TERMINAL_PROMPT : ''
+ let $GIT_TERMINAL_PROMPT = 0
+ for plug in values(todo)
+ let plug.uri = substitute(plug.uri,
+ \ '^https://git::@github\.com', 'https://github.com', '')
+ endfor
+ endif
+
+ if !isdirectory(g:plug_home)
+ try
+ call mkdir(g:plug_home, 'p')
+ catch
+ return s:err(printf('Invalid plug directory: %s. '.
+ \ 'Try to call plug#begin with a valid directory', g:plug_home))
+ endtry
+ endif
+
+ if has('nvim') && !exists('*jobwait') && threads > 1
+ call s:warn('echom', '[vim-plug] Update Neovim for parallel installer')
+ endif
+
+ let use_job = s:nvim || s:vim8
+ let python = (has('python') || has('python3')) && !use_job
+ let ruby = has('ruby') && !use_job && (v:version >= 703 || v:version == 702 && has('patch374')) && !(s:is_win && has('gui_running')) && threads > 1 && s:check_ruby()
+
+ let s:update = {
+ \ 'start': reltime(),
+ \ 'all': todo,
+ \ 'todo': copy(todo),
+ \ 'errors': [],
+ \ 'pull': a:pull,
+ \ 'force': a:force,
+ \ 'new': {},
+ \ 'threads': (python || ruby || use_job) ? min([len(todo), threads]) : 1,
+ \ 'bar': '',
+ \ 'fin': 0
+ \ }
+
+ call s:prepare(1)
+ call append(0, ['', ''])
+ normal! 2G
+ silent! redraw
+
+ " Set remote name, overriding a possible user git config's clone.defaultRemoteName
+ let s:clone_opt = ['--origin', 'origin']
+ if get(g:, 'plug_shallow', 1)
+ call extend(s:clone_opt, ['--depth', '1'])
+ if s:git_version_requirement(1, 7, 10)
+ call add(s:clone_opt, '--no-single-branch')
+ endif
+ endif
+
+ if has('win32unix') || has('wsl')
+ call extend(s:clone_opt, ['-c', 'core.eol=lf', '-c', 'core.autocrlf=input'])
+ endif
+
+ let s:submodule_opt = s:git_version_requirement(2, 8) ? ' --jobs='.threads : ''
+
+ " Python version requirement (>= 2.7)
+ if python && !has('python3') && !ruby && !use_job && s:update.threads > 1
+ redir => pyv
+ silent python import platform; print platform.python_version()
+ redir END
+ let python = s:version_requirement(
+ \ map(split(split(pyv)[0], '\.'), 'str2nr(v:val)'), [2, 6])
+ endif
+
+ if (python || ruby) && s:update.threads > 1
+ try
+ let imd = &imd
+ if s:mac_gui
+ set noimd
+ endif
+ if ruby
+ call s:update_ruby()
+ else
+ call s:update_python()
+ endif
+ catch
+ let lines = getline(4, '$')
+ let printed = {}
+ silent! 4,$d _
+ for line in lines
+ let name = s:extract_name(line, '.', '')
+ if empty(name) || !has_key(printed, name)
+ call append('$', line)
+ if !empty(name)
+ let printed[name] = 1
+ if line[0] == 'x' && index(s:update.errors, name) < 0
+ call add(s:update.errors, name)
+ end
+ endif
+ endif
+ endfor
+ finally
+ let &imd = imd
+ call s:update_finish()
+ endtry
+ else
+ call s:update_vim()
+ while use_job && sync
+ sleep 100m
+ if s:update.fin
+ break
+ endif
+ endwhile
+ endif
+endfunction
+
+function! s:log4(name, msg)
+ call setline(4, printf('- %s (%s)', a:msg, a:name))
+ redraw
+endfunction
+
+function! s:update_finish()
+ if exists('s:git_terminal_prompt')
+ let $GIT_TERMINAL_PROMPT = s:git_terminal_prompt
+ endif
+ if s:switch_in()
+ call append(3, '- Updating ...') | 4
+ for [name, spec] in items(filter(copy(s:update.all), 'index(s:update.errors, v:key) < 0 && (s:update.force || s:update.pull || has_key(s:update.new, v:key))'))
+ let [pos, _] = s:logpos(name)
+ if !pos
+ continue
+ endif
+ if has_key(spec, 'commit')
+ call s:log4(name, 'Checking out '.spec.commit)
+ let out = s:checkout(spec)
+ elseif has_key(spec, 'tag')
+ let tag = spec.tag
+ if tag =~ '\*'
+ let tags = s:lines(s:system('git tag --list '.plug#shellescape(tag).' --sort -version:refname 2>&1', spec.dir))
+ if !v:shell_error && !empty(tags)
+ let tag = tags[0]
+ call s:log4(name, printf('Latest tag for %s -> %s', spec.tag, tag))
+ call append(3, '')
+ endif
+ endif
+ call s:log4(name, 'Checking out '.tag)
+ let out = s:system('git checkout -q '.plug#shellescape(tag).' -- 2>&1', spec.dir)
+ else
+ let branch = s:git_origin_branch(spec)
+ call s:log4(name, 'Merging origin/'.s:esc(branch))
+ let out = s:system('git checkout -q '.plug#shellescape(branch).' -- 2>&1'
+ \. (has_key(s:update.new, name) ? '' : ('&& git merge --ff-only '.plug#shellescape('origin/'.branch).' 2>&1')), spec.dir)
+ endif
+ if !v:shell_error && filereadable(spec.dir.'/.gitmodules') &&
+ \ (s:update.force || has_key(s:update.new, name) || s:is_updated(spec.dir))
+ call s:log4(name, 'Updating submodules. This may take a while.')
+ let out .= s:bang('git submodule update --init --recursive'.s:submodule_opt.' 2>&1', spec.dir)
+ endif
+ let msg = s:format_message(v:shell_error ? 'x': '-', name, out)
+ if v:shell_error
+ call add(s:update.errors, name)
+ call s:regress_bar()
+ silent execute pos 'd _'
+ call append(4, msg) | 4
+ elseif !empty(out)
+ call setline(pos, msg[0])
+ endif
+ redraw
+ endfor
+ silent 4 d _
+ try
+ call s:do(s:update.pull, s:update.force, filter(copy(s:update.all), 'index(s:update.errors, v:key) < 0 && has_key(v:val, "do")'))
+ catch
+ call s:warn('echom', v:exception)
+ call s:warn('echo', '')
+ return
+ endtry
+ call s:finish(s:update.pull)
+ call setline(1, 'Updated. Elapsed time: ' . split(reltimestr(reltime(s:update.start)))[0] . ' sec.')
+ call s:switch_out('normal! gg')
+ endif
+endfunction
+
+function! s:job_abort()
+ if (!s:nvim && !s:vim8) || !exists('s:jobs')
+ return
+ endif
+
+ for [name, j] in items(s:jobs)
+ if s:nvim
+ silent! call jobstop(j.jobid)
+ elseif s:vim8
+ silent! call job_stop(j.jobid)
+ endif
+ if j.new
+ call s:rm_rf(g:plugs[name].dir)
+ endif
+ endfor
+ let s:jobs = {}
+endfunction
+
+function! s:last_non_empty_line(lines)
+ let len = len(a:lines)
+ for idx in range(len)
+ let line = a:lines[len-idx-1]
+ if !empty(line)
+ return line
+ endif
+ endfor
+ return ''
+endfunction
+
+function! s:job_out_cb(self, data) abort
+ let self = a:self
+ let data = remove(self.lines, -1) . a:data
+ let lines = map(split(data, "\n", 1), 'split(v:val, "\r", 1)[-1]')
+ call extend(self.lines, lines)
+ " To reduce the number of buffer updates
+ let self.tick = get(self, 'tick', -1) + 1
+ if !self.running || self.tick % len(s:jobs) == 0
+ let bullet = self.running ? (self.new ? '+' : '*') : (self.error ? 'x' : '-')
+ let result = self.error ? join(self.lines, "\n") : s:last_non_empty_line(self.lines)
+ call s:log(bullet, self.name, result)
+ endif
+endfunction
+
+function! s:job_exit_cb(self, data) abort
+ let a:self.running = 0
+ let a:self.error = a:data != 0
+ call s:reap(a:self.name)
+ call s:tick()
+endfunction
+
+function! s:job_cb(fn, job, ch, data)
+ if !s:plug_window_exists() " plug window closed
+ return s:job_abort()
+ endif
+ call call(a:fn, [a:job, a:data])
+endfunction
+
+function! s:nvim_cb(job_id, data, event) dict abort
+ return (a:event == 'stdout' || a:event == 'stderr') ?
+ \ s:job_cb('s:job_out_cb', self, 0, join(a:data, "\n")) :
+ \ s:job_cb('s:job_exit_cb', self, 0, a:data)
+endfunction
+
+function! s:spawn(name, cmd, opts)
+ let job = { 'name': a:name, 'running': 1, 'error': 0, 'lines': [''],
+ \ 'new': get(a:opts, 'new', 0) }
+ let s:jobs[a:name] = job
+
+ if s:nvim
+ if has_key(a:opts, 'dir')
+ let job.cwd = a:opts.dir
+ endif
+ let argv = a:cmd
+ call extend(job, {
+ \ 'on_stdout': function('s:nvim_cb'),
+ \ 'on_stderr': function('s:nvim_cb'),
+ \ 'on_exit': function('s:nvim_cb'),
+ \ })
+ let jid = s:plug_call('jobstart', argv, job)
+ if jid > 0
+ let job.jobid = jid
+ else
+ let job.running = 0
+ let job.error = 1
+ let job.lines = [jid < 0 ? argv[0].' is not executable' :
+ \ 'Invalid arguments (or job table is full)']
+ endif
+ elseif s:vim8
+ let cmd = join(map(copy(a:cmd), 'plug#shellescape(v:val, {"script": 0})'))
+ if has_key(a:opts, 'dir')
+ let cmd = s:with_cd(cmd, a:opts.dir, 0)
+ endif
+ let argv = s:is_win ? ['cmd', '/s', '/c', '"'.cmd.'"'] : ['sh', '-c', cmd]
+ let jid = job_start(s:is_win ? join(argv, ' ') : argv, {
+ \ 'out_cb': function('s:job_cb', ['s:job_out_cb', job]),
+ \ 'err_cb': function('s:job_cb', ['s:job_out_cb', job]),
+ \ 'exit_cb': function('s:job_cb', ['s:job_exit_cb', job]),
+ \ 'err_mode': 'raw',
+ \ 'out_mode': 'raw'
+ \})
+ if job_status(jid) == 'run'
+ let job.jobid = jid
+ else
+ let job.running = 0
+ let job.error = 1
+ let job.lines = ['Failed to start job']
+ endif
+ else
+ let job.lines = s:lines(call('s:system', has_key(a:opts, 'dir') ? [a:cmd, a:opts.dir] : [a:cmd]))
+ let job.error = v:shell_error != 0
+ let job.running = 0
+ endif
+endfunction
+
+function! s:reap(name)
+ let job = s:jobs[a:name]
+ if job.error
+ call add(s:update.errors, a:name)
+ elseif get(job, 'new', 0)
+ let s:update.new[a:name] = 1
+ endif
+ let s:update.bar .= job.error ? 'x' : '='
+
+ let bullet = job.error ? 'x' : '-'
+ let result = job.error ? join(job.lines, "\n") : s:last_non_empty_line(job.lines)
+ call s:log(bullet, a:name, empty(result) ? 'OK' : result)
+ call s:bar()
+
+ call remove(s:jobs, a:name)
+endfunction
+
+function! s:bar()
+ if s:switch_in()
+ let total = len(s:update.all)
+ call setline(1, (s:update.pull ? 'Updating' : 'Installing').
+ \ ' plugins ('.len(s:update.bar).'/'.total.')')
+ call s:progress_bar(2, s:update.bar, total)
+ call s:switch_out()
+ endif
+endfunction
+
+function! s:logpos(name)
+ let max = line('$')
+ for i in range(4, max > 4 ? max : 4)
+ if getline(i) =~# '^[-+x*] '.a:name.':'
+ for j in range(i + 1, max > 5 ? max : 5)
+ if getline(j) !~ '^ '
+ return [i, j - 1]
+ endif
+ endfor
+ return [i, i]
+ endif
+ endfor
+ return [0, 0]
+endfunction
+
+function! s:log(bullet, name, lines)
+ if s:switch_in()
+ let [b, e] = s:logpos(a:name)
+ if b > 0
+ silent execute printf('%d,%d d _', b, e)
+ if b > winheight('.')
+ let b = 4
+ endif
+ else
+ let b = 4
+ endif
+ " FIXME For some reason, nomodifiable is set after :d in vim8
+ setlocal modifiable
+ call append(b - 1, s:format_message(a:bullet, a:name, a:lines))
+ call s:switch_out()
+ endif
+endfunction
+
+function! s:update_vim()
+ let s:jobs = {}
+
+ call s:bar()
+ call s:tick()
+endfunction
+
+function! s:tick()
+ let pull = s:update.pull
+ let prog = s:progress_opt(s:nvim || s:vim8)
+while 1 " Without TCO, Vim stack is bound to explode
+ if empty(s:update.todo)
+ if empty(s:jobs) && !s:update.fin
+ call s:update_finish()
+ let s:update.fin = 1
+ endif
+ return
+ endif
+
+ let name = keys(s:update.todo)[0]
+ let spec = remove(s:update.todo, name)
+ let new = empty(globpath(spec.dir, '.git', 1))
+
+ call s:log(new ? '+' : '*', name, pull ? 'Updating ...' : 'Installing ...')
+ redraw
+
+ let has_tag = has_key(spec, 'tag')
+ if !new
+ let [error, _] = s:git_validate(spec, 0)
+ if empty(error)
+ if pull
+ let cmd = s:git_version_requirement(2) ? ['git', '-c', 'credential.helper=', 'fetch'] : ['git', 'fetch']
+ if has_tag && !empty(globpath(spec.dir, '.git/shallow'))
+ call extend(cmd, ['--depth', '99999999'])
+ endif
+ if !empty(prog)
+ call add(cmd, prog)
+ endif
+ call s:spawn(name, cmd, { 'dir': spec.dir })
+ else
+ let s:jobs[name] = { 'running': 0, 'lines': ['Already installed'], 'error': 0 }
+ endif
+ else
+ let s:jobs[name] = { 'running': 0, 'lines': s:lines(error), 'error': 1 }
+ endif
+ else
+ let cmd = ['git', 'clone']
+ if !has_tag
+ call extend(cmd, s:clone_opt)
+ endif
+ if !empty(prog)
+ call add(cmd, prog)
+ endif
+ call s:spawn(name, extend(cmd, [spec.uri, s:trim(spec.dir)]), { 'new': 1 })
+ endif
+
+ if !s:jobs[name].running
+ call s:reap(name)
+ endif
+ if len(s:jobs) >= s:update.threads
+ break
+ endif
+endwhile
+endfunction
+
+function! s:update_python()
+let py_exe = has('python') ? 'python' : 'python3'
+execute py_exe "<< EOF"
+import datetime
+import functools
+import os
+try:
+ import queue
+except ImportError:
+ import Queue as queue
+import random
+import re
+import shutil
+import signal
+import subprocess
+import tempfile
+import threading as thr
+import time
+import traceback
+import vim
+
+G_NVIM = vim.eval("has('nvim')") == '1'
+G_PULL = vim.eval('s:update.pull') == '1'
+G_RETRIES = int(vim.eval('get(g:, "plug_retries", 2)')) + 1
+G_TIMEOUT = int(vim.eval('get(g:, "plug_timeout", 60)'))
+G_CLONE_OPT = ' '.join(vim.eval('s:clone_opt'))
+G_PROGRESS = vim.eval('s:progress_opt(1)')
+G_LOG_PROB = 1.0 / int(vim.eval('s:update.threads'))
+G_STOP = thr.Event()
+G_IS_WIN = vim.eval('s:is_win') == '1'
+
+class PlugError(Exception):
+ def __init__(self, msg):
+ self.msg = msg
+class CmdTimedOut(PlugError):
+ pass
+class CmdFailed(PlugError):
+ pass
+class InvalidURI(PlugError):
+ pass
+class Action(object):
+ INSTALL, UPDATE, ERROR, DONE = ['+', '*', 'x', '-']
+
+class Buffer(object):
+ def __init__(self, lock, num_plugs, is_pull):
+ self.bar = ''
+ self.event = 'Updating' if is_pull else 'Installing'
+ self.lock = lock
+ self.maxy = int(vim.eval('winheight(".")'))
+ self.num_plugs = num_plugs
+
+ def __where(self, name):
+ """ Find first line with name in current buffer. Return line num. """
+ found, lnum = False, 0
+ matcher = re.compile('^[-+x*] {0}:'.format(name))
+ for line in vim.current.buffer:
+ if matcher.search(line) is not None:
+ found = True
+ break
+ lnum += 1
+
+ if not found:
+ lnum = -1
+ return lnum
+
+ def header(self):
+ curbuf = vim.current.buffer
+ curbuf[0] = self.event + ' plugins ({0}/{1})'.format(len(self.bar), self.num_plugs)
+
+ num_spaces = self.num_plugs - len(self.bar)
+ curbuf[1] = '[{0}{1}]'.format(self.bar, num_spaces * ' ')
+
+ with self.lock:
+ vim.command('normal! 2G')
+ vim.command('redraw')
+
+ def write(self, action, name, lines):
+ first, rest = lines[0], lines[1:]
+ msg = ['{0} {1}{2}{3}'.format(action, name, ': ' if first else '', first)]
+ msg.extend([' ' + line for line in rest])
+
+ try:
+ if action == Action.ERROR:
+ self.bar += 'x'
+ vim.command("call add(s:update.errors, '{0}')".format(name))
+ elif action == Action.DONE:
+ self.bar += '='
+
+ curbuf = vim.current.buffer
+ lnum = self.__where(name)
+ if lnum != -1: # Found matching line num
+ del curbuf[lnum]
+ if lnum > self.maxy and action in set([Action.INSTALL, Action.UPDATE]):
+ lnum = 3
+ else:
+ lnum = 3
+ curbuf.append(msg, lnum)
+
+ self.header()
+ except vim.error:
+ pass
+
+class Command(object):
+ CD = 'cd /d' if G_IS_WIN else 'cd'
+
+ def __init__(self, cmd, cmd_dir=None, timeout=60, cb=None, clean=None):
+ self.cmd = cmd
+ if cmd_dir:
+ self.cmd = '{0} {1} && {2}'.format(Command.CD, cmd_dir, self.cmd)
+ self.timeout = timeout
+ self.callback = cb if cb else (lambda msg: None)
+ self.clean = clean if clean else (lambda: None)
+ self.proc = None
+
+ @property
+ def alive(self):
+ """ Returns true only if command still running. """
+ return self.proc and self.proc.poll() is None
+
+ def execute(self, ntries=3):
+ """ Execute the command with ntries if CmdTimedOut.
+ Returns the output of the command if no Exception.
+ """
+ attempt, finished, limit = 0, False, self.timeout
+
+ while not finished:
+ try:
+ attempt += 1
+ result = self.try_command()
+ finished = True
+ return result
+ except CmdTimedOut:
+ if attempt != ntries:
+ self.notify_retry()
+ self.timeout += limit
+ else:
+ raise
+
+ def notify_retry(self):
+ """ Retry required for command, notify user. """
+ for count in range(3, 0, -1):
+ if G_STOP.is_set():
+ raise KeyboardInterrupt
+ msg = 'Timeout. Will retry in {0} second{1} ...'.format(
+ count, 's' if count != 1 else '')
+ self.callback([msg])
+ time.sleep(1)
+ self.callback(['Retrying ...'])
+
+ def try_command(self):
+ """ Execute a cmd & poll for callback. Returns list of output.
+ Raises CmdFailed -> return code for Popen isn't 0
+ Raises CmdTimedOut -> command exceeded timeout without new output
+ """
+ first_line = True
+
+ try:
+ tfile = tempfile.NamedTemporaryFile(mode='w+b')
+ preexec_fn = not G_IS_WIN and os.setsid or None
+ self.proc = subprocess.Popen(self.cmd, stdout=tfile,
+ stderr=subprocess.STDOUT,
+ stdin=subprocess.PIPE, shell=True,
+ preexec_fn=preexec_fn)
+ thrd = thr.Thread(target=(lambda proc: proc.wait()), args=(self.proc,))
+ thrd.start()
+
+ thread_not_started = True
+ while thread_not_started:
+ try:
+ thrd.join(0.1)
+ thread_not_started = False
+ except RuntimeError:
+ pass
+
+ while self.alive:
+ if G_STOP.is_set():
+ raise KeyboardInterrupt
+
+ if first_line or random.random() < G_LOG_PROB:
+ first_line = False
+ line = '' if G_IS_WIN else nonblock_read(tfile.name)
+ if line:
+ self.callback([line])
+
+ time_diff = time.time() - os.path.getmtime(tfile.name)
+ if time_diff > self.timeout:
+ raise CmdTimedOut(['Timeout!'])
+
+ thrd.join(0.5)
+
+ tfile.seek(0)
+ result = [line.decode('utf-8', 'replace').rstrip() for line in tfile]
+
+ if self.proc.returncode != 0:
+ raise CmdFailed([''] + result)
+
+ return result
+ except:
+ self.terminate()
+ raise
+
+ def terminate(self):
+ """ Terminate process and cleanup. """
+ if self.alive:
+ if G_IS_WIN:
+ os.kill(self.proc.pid, signal.SIGINT)
+ else:
+ os.killpg(self.proc.pid, signal.SIGTERM)
+ self.clean()
+
+class Plugin(object):
+ def __init__(self, name, args, buf_q, lock):
+ self.name = name
+ self.args = args
+ self.buf_q = buf_q
+ self.lock = lock
+ self.tag = args.get('tag', 0)
+
+ def manage(self):
+ try:
+ if os.path.exists(self.args['dir']):
+ self.update()
+ else:
+ self.install()
+ with self.lock:
+ thread_vim_command("let s:update.new['{0}'] = 1".format(self.name))
+ except PlugError as exc:
+ self.write(Action.ERROR, self.name, exc.msg)
+ except KeyboardInterrupt:
+ G_STOP.set()
+ self.write(Action.ERROR, self.name, ['Interrupted!'])
+ except:
+ # Any exception except those above print stack trace
+ msg = 'Trace:\n{0}'.format(traceback.format_exc().rstrip())
+ self.write(Action.ERROR, self.name, msg.split('\n'))
+ raise
+
+ def install(self):
+ target = self.args['dir']
+ if target[-1] == '\\':
+ target = target[0:-1]
+
+ def clean(target):
+ def _clean():
+ try:
+ shutil.rmtree(target)
+ except OSError:
+ pass
+ return _clean
+
+ self.write(Action.INSTALL, self.name, ['Installing ...'])
+ callback = functools.partial(self.write, Action.INSTALL, self.name)
+ cmd = 'git clone {0} {1} {2} {3} 2>&1'.format(
+ '' if self.tag else G_CLONE_OPT, G_PROGRESS, self.args['uri'],
+ esc(target))
+ com = Command(cmd, None, G_TIMEOUT, callback, clean(target))
+ result = com.execute(G_RETRIES)
+ self.write(Action.DONE, self.name, result[-1:])
+
+ def repo_uri(self):
+ cmd = 'git rev-parse --abbrev-ref HEAD 2>&1 && git config -f .git/config remote.origin.url'
+ command = Command(cmd, self.args['dir'], G_TIMEOUT,)
+ result = command.execute(G_RETRIES)
+ return result[-1]
+
+ def update(self):
+ actual_uri = self.repo_uri()
+ expect_uri = self.args['uri']
+ regex = re.compile(r'^(?:\w+://)?(?:[^@/]*@)?([^:/]*(?::[0-9]*)?)[:/](.*?)(?:\.git)?/?$')
+ ma = regex.match(actual_uri)
+ mb = regex.match(expect_uri)
+ if ma is None or mb is None or ma.groups() != mb.groups():
+ msg = ['',
+ 'Invalid URI: {0}'.format(actual_uri),
+ 'Expected {0}'.format(expect_uri),
+ 'PlugClean required.']
+ raise InvalidURI(msg)
+
+ if G_PULL:
+ self.write(Action.UPDATE, self.name, ['Updating ...'])
+ callback = functools.partial(self.write, Action.UPDATE, self.name)
+ fetch_opt = '--depth 99999999' if self.tag and os.path.isfile(os.path.join(self.args['dir'], '.git/shallow')) else ''
+ cmd = 'git fetch {0} {1} 2>&1'.format(fetch_opt, G_PROGRESS)
+ com = Command(cmd, self.args['dir'], G_TIMEOUT, callback)
+ result = com.execute(G_RETRIES)
+ self.write(Action.DONE, self.name, result[-1:])
+ else:
+ self.write(Action.DONE, self.name, ['Already installed'])
+
+ def write(self, action, name, msg):
+ self.buf_q.put((action, name, msg))
+
+class PlugThread(thr.Thread):
+ def __init__(self, tname, args):
+ super(PlugThread, self).__init__()
+ self.tname = tname
+ self.args = args
+
+ def run(self):
+ thr.current_thread().name = self.tname
+ buf_q, work_q, lock = self.args
+
+ try:
+ while not G_STOP.is_set():
+ name, args = work_q.get_nowait()
+ plug = Plugin(name, args, buf_q, lock)
+ plug.manage()
+ work_q.task_done()
+ except queue.Empty:
+ pass
+
+class RefreshThread(thr.Thread):
+ def __init__(self, lock):
+ super(RefreshThread, self).__init__()
+ self.lock = lock
+ self.running = True
+
+ def run(self):
+ while self.running:
+ with self.lock:
+ thread_vim_command('noautocmd normal! a')
+ time.sleep(0.33)
+
+ def stop(self):
+ self.running = False
+
+if G_NVIM:
+ def thread_vim_command(cmd):
+ vim.session.threadsafe_call(lambda: vim.command(cmd))
+else:
+ def thread_vim_command(cmd):
+ vim.command(cmd)
+
+def esc(name):
+ return '"' + name.replace('"', '\"') + '"'
+
+def nonblock_read(fname):
+ """ Read a file with nonblock flag. Return the last line. """
+ fread = os.open(fname, os.O_RDONLY | os.O_NONBLOCK)
+ buf = os.read(fread, 100000).decode('utf-8', 'replace')
+ os.close(fread)
+
+ line = buf.rstrip('\r\n')
+ left = max(line.rfind('\r'), line.rfind('\n'))
+ if left != -1:
+ left += 1
+ line = line[left:]
+
+ return line
+
+def main():
+ thr.current_thread().name = 'main'
+ nthreads = int(vim.eval('s:update.threads'))
+ plugs = vim.eval('s:update.todo')
+ mac_gui = vim.eval('s:mac_gui') == '1'
+
+ lock = thr.Lock()
+ buf = Buffer(lock, len(plugs), G_PULL)
+ buf_q, work_q = queue.Queue(), queue.Queue()
+ for work in plugs.items():
+ work_q.put(work)
+
+ start_cnt = thr.active_count()
+ for num in range(nthreads):
+ tname = 'PlugT-{0:02}'.format(num)
+ thread = PlugThread(tname, (buf_q, work_q, lock))
+ thread.start()
+ if mac_gui:
+ rthread = RefreshThread(lock)
+ rthread.start()
+
+ while not buf_q.empty() or thr.active_count() != start_cnt:
+ try:
+ action, name, msg = buf_q.get(True, 0.25)
+ buf.write(action, name, ['OK'] if not msg else msg)
+ buf_q.task_done()
+ except queue.Empty:
+ pass
+ except KeyboardInterrupt:
+ G_STOP.set()
+
+ if mac_gui:
+ rthread.stop()
+ rthread.join()
+
+main()
+EOF
+endfunction
+
+function! s:update_ruby()
+ ruby << EOF
+ module PlugStream
+ SEP = ["\r", "\n", nil]
+ def get_line
+ buffer = ''
+ loop do
+ char = readchar rescue return
+ if SEP.include? char.chr
+ buffer << $/
+ break
+ else
+ buffer << char
+ end
+ end
+ buffer
+ end
+ end unless defined?(PlugStream)
+
+ def esc arg
+ %["#{arg.gsub('"', '\"')}"]
+ end
+
+ def killall pid
+ pids = [pid]
+ if /mswin|mingw|bccwin/ =~ RUBY_PLATFORM
+ pids.each { |pid| Process.kill 'INT', pid.to_i rescue nil }
+ else
+ unless `which pgrep 2> /dev/null`.empty?
+ children = pids
+ until children.empty?
+ children = children.map { |pid|
+ `pgrep -P #{pid}`.lines.map { |l| l.chomp }
+ }.flatten
+ pids += children
+ end
+ end
+ pids.each { |pid| Process.kill 'TERM', pid.to_i rescue nil }
+ end
+ end
+
+ def compare_git_uri a, b
+ regex = %r{^(?:\w+://)?(?:[^@/]*@)?([^:/]*(?::[0-9]*)?)[:/](.*?)(?:\.git)?/?$}
+ regex.match(a).to_a.drop(1) == regex.match(b).to_a.drop(1)
+ end
+
+ require 'thread'
+ require 'fileutils'
+ require 'timeout'
+ running = true
+ iswin = VIM::evaluate('s:is_win').to_i == 1
+ pull = VIM::evaluate('s:update.pull').to_i == 1
+ base = VIM::evaluate('g:plug_home')
+ all = VIM::evaluate('s:update.todo')
+ limit = VIM::evaluate('get(g:, "plug_timeout", 60)')
+ tries = VIM::evaluate('get(g:, "plug_retries", 2)') + 1
+ nthr = VIM::evaluate('s:update.threads').to_i
+ maxy = VIM::evaluate('winheight(".")').to_i
+ vim7 = VIM::evaluate('v:version').to_i <= 703 && RUBY_PLATFORM =~ /darwin/
+ cd = iswin ? 'cd /d' : 'cd'
+ tot = VIM::evaluate('len(s:update.todo)') || 0
+ bar = ''
+ skip = 'Already installed'
+ mtx = Mutex.new
+ take1 = proc { mtx.synchronize { running && all.shift } }
+ logh = proc {
+ cnt = bar.length
+ $curbuf[1] = "#{pull ? 'Updating' : 'Installing'} plugins (#{cnt}/#{tot})"
+ $curbuf[2] = '[' + bar.ljust(tot) + ']'
+ VIM::command('normal! 2G')
+ VIM::command('redraw')
+ }
+ where = proc { |name| (1..($curbuf.length)).find { |l| $curbuf[l] =~ /^[-+x*] #{name}:/ } }
+ log = proc { |name, result, type|
+ mtx.synchronize do
+ ing = ![true, false].include?(type)
+ bar += type ? '=' : 'x' unless ing
+ b = case type
+ when :install then '+' when :update then '*'
+ when true, nil then '-' else
+ VIM::command("call add(s:update.errors, '#{name}')")
+ 'x'
+ end
+ result =
+ if type || type.nil?
+ ["#{b} #{name}: #{result.lines.to_a.last || 'OK'}"]
+ elsif result =~ /^Interrupted|^Timeout/
+ ["#{b} #{name}: #{result}"]
+ else
+ ["#{b} #{name}"] + result.lines.map { |l| " " << l }
+ end
+ if lnum = where.call(name)
+ $curbuf.delete lnum
+ lnum = 4 if ing && lnum > maxy
+ end
+ result.each_with_index do |line, offset|
+ $curbuf.append((lnum || 4) - 1 + offset, line.gsub(/\e\[./, '').chomp)
+ end
+ logh.call
+ end
+ }
+ bt = proc { |cmd, name, type, cleanup|
+ tried = timeout = 0
+ begin
+ tried += 1
+ timeout += limit
+ fd = nil
+ data = ''
+ if iswin
+ Timeout::timeout(timeout) do
+ tmp = VIM::evaluate('tempname()')
+ system("(#{cmd}) > #{tmp}")
+ data = File.read(tmp).chomp
+ File.unlink tmp rescue nil
+ end
+ else
+ fd = IO.popen(cmd).extend(PlugStream)
+ first_line = true
+ log_prob = 1.0 / nthr
+ while line = Timeout::timeout(timeout) { fd.get_line }
+ data << line
+ log.call name, line.chomp, type if name && (first_line || rand < log_prob)
+ first_line = false
+ end
+ fd.close
+ end
+ [$? == 0, data.chomp]
+ rescue Timeout::Error, Interrupt => e
+ if fd && !fd.closed?
+ killall fd.pid
+ fd.close
+ end
+ cleanup.call if cleanup
+ if e.is_a?(Timeout::Error) && tried < tries
+ 3.downto(1) do |countdown|
+ s = countdown > 1 ? 's' : ''
+ log.call name, "Timeout. Will retry in #{countdown} second#{s} ...", type
+ sleep 1
+ end
+ log.call name, 'Retrying ...', type
+ retry
+ end
+ [false, e.is_a?(Interrupt) ? "Interrupted!" : "Timeout!"]
+ end
+ }
+ main = Thread.current
+ threads = []
+ watcher = Thread.new {
+ if vim7
+ while VIM::evaluate('getchar(1)')
+ sleep 0.1
+ end
+ else
+ require 'io/console' # >= Ruby 1.9
+ nil until IO.console.getch == 3.chr
+ end
+ mtx.synchronize do
+ running = false
+ threads.each { |t| t.raise Interrupt } unless vim7
+ end
+ threads.each { |t| t.join rescue nil }
+ main.kill
+ }
+ refresh = Thread.new {
+ while true
+ mtx.synchronize do
+ break unless running
+ VIM::command('noautocmd normal! a')
+ end
+ sleep 0.2
+ end
+ } if VIM::evaluate('s:mac_gui') == 1
+
+ clone_opt = VIM::evaluate('s:clone_opt').join(' ')
+ progress = VIM::evaluate('s:progress_opt(1)')
+ nthr.times do
+ mtx.synchronize do
+ threads << Thread.new {
+ while pair = take1.call
+ name = pair.first
+ dir, uri, tag = pair.last.values_at *%w[dir uri tag]
+ exists = File.directory? dir
+ ok, result =
+ if exists
+ chdir = "#{cd} #{iswin ? dir : esc(dir)}"
+ ret, data = bt.call "#{chdir} && git rev-parse --abbrev-ref HEAD 2>&1 && git config -f .git/config remote.origin.url", nil, nil, nil
+ current_uri = data.lines.to_a.last
+ if !ret
+ if data =~ /^Interrupted|^Timeout/
+ [false, data]
+ else
+ [false, [data.chomp, "PlugClean required."].join($/)]
+ end
+ elsif !compare_git_uri(current_uri, uri)
+ [false, ["Invalid URI: #{current_uri}",
+ "Expected: #{uri}",
+ "PlugClean required."].join($/)]
+ else
+ if pull
+ log.call name, 'Updating ...', :update
+ fetch_opt = (tag && File.exist?(File.join(dir, '.git/shallow'))) ? '--depth 99999999' : ''
+ bt.call "#{chdir} && git fetch #{fetch_opt} #{progress} 2>&1", name, :update, nil
+ else
+ [true, skip]
+ end
+ end
+ else
+ d = esc dir.sub(%r{[\\/]+$}, '')
+ log.call name, 'Installing ...', :install
+ bt.call "git clone #{clone_opt unless tag} #{progress} #{uri} #{d} 2>&1", name, :install, proc {
+ FileUtils.rm_rf dir
+ }
+ end
+ mtx.synchronize { VIM::command("let s:update.new['#{name}'] = 1") } if !exists && ok
+ log.call name, result, ok
+ end
+ } if running
+ end
+ end
+ threads.each { |t| t.join rescue nil }
+ logh.call
+ refresh.kill if refresh
+ watcher.kill
+EOF
+endfunction
+
+function! s:shellesc_cmd(arg, script)
+ let escaped = substitute('"'.a:arg.'"', '[&|<>()@^!"]', '^&', 'g')
+ return substitute(escaped, '%', (a:script ? '%' : '^') . '&', 'g')
+endfunction
+
+function! s:shellesc_ps1(arg)
+ return "'".substitute(escape(a:arg, '\"'), "'", "''", 'g')."'"
+endfunction
+
+function! s:shellesc_sh(arg)
+ return "'".substitute(a:arg, "'", "'\\\\''", 'g')."'"
+endfunction
+
+" Escape the shell argument based on the shell.
+" Vim and Neovim's shellescape() are insufficient.
+" 1. shellslash determines whether to use single/double quotes.
+" Double-quote escaping is fragile for cmd.exe.
+" 2. It does not work for powershell.
+" 3. It does not work for *sh shells if the command is executed
+" via cmd.exe (ie. cmd.exe /c sh -c command command_args)
+" 4. It does not support batchfile syntax.
+"
+" Accepts an optional dictionary with the following keys:
+" - shell: same as Vim/Neovim 'shell' option.
+" If unset, fallback to 'cmd.exe' on Windows or 'sh'.
+" - script: If truthy and shell is cmd.exe, escape for batchfile syntax.
+function! plug#shellescape(arg, ...)
+ if a:arg =~# '^[A-Za-z0-9_/:.-]\+$'
+ return a:arg
+ endif
+ let opts = a:0 > 0 && type(a:1) == s:TYPE.dict ? a:1 : {}
+ let shell = get(opts, 'shell', s:is_win ? 'cmd.exe' : 'sh')
+ let script = get(opts, 'script', 1)
+ if shell =~# 'cmd\(\.exe\)\?$'
+ return s:shellesc_cmd(a:arg, script)
+ elseif s:is_powershell(shell)
+ return s:shellesc_ps1(a:arg)
+ endif
+ return s:shellesc_sh(a:arg)
+endfunction
+
+function! s:glob_dir(path)
+ return map(filter(s:glob(a:path, '**'), 'isdirectory(v:val)'), 's:dirpath(v:val)')
+endfunction
+
+function! s:progress_bar(line, bar, total)
+ call setline(a:line, '[' . s:lpad(a:bar, a:total) . ']')
+endfunction
+
+function! s:compare_git_uri(a, b)
+ " See `git help clone'
+ " https:// [user@] github.com[:port] / junegunn/vim-plug [.git]
+ " [git@] github.com[:port] : junegunn/vim-plug [.git]
+ " file:// / junegunn/vim-plug [/]
+ " / junegunn/vim-plug [/]
+ let pat = '^\%(\w\+://\)\='.'\%([^@/]*@\)\='.'\([^:/]*\%(:[0-9]*\)\=\)'.'[:/]'.'\(.\{-}\)'.'\%(\.git\)\=/\?$'
+ let ma = matchlist(a:a, pat)
+ let mb = matchlist(a:b, pat)
+ return ma[1:2] ==# mb[1:2]
+endfunction
+
+function! s:format_message(bullet, name, message)
+ if a:bullet != 'x'
+ return [printf('%s %s: %s', a:bullet, a:name, s:lastline(a:message))]
+ else
+ let lines = map(s:lines(a:message), '" ".v:val')
+ return extend([printf('x %s:', a:name)], lines)
+ endif
+endfunction
+
+function! s:with_cd(cmd, dir, ...)
+ let script = a:0 > 0 ? a:1 : 1
+ return printf('cd%s %s && %s', s:is_win ? ' /d' : '', plug#shellescape(a:dir, {'script': script}), a:cmd)
+endfunction
+
+function! s:system(cmd, ...)
+ let batchfile = ''
+ try
+ let [sh, shellcmdflag, shrd] = s:chsh(1)
+ if type(a:cmd) == s:TYPE.list
+ " Neovim's system() supports list argument to bypass the shell
+ " but it cannot set the working directory for the command.
+ " Assume that the command does not rely on the shell.
+ if has('nvim') && a:0 == 0
+ return system(a:cmd)
+ endif
+ let cmd = join(map(copy(a:cmd), 'plug#shellescape(v:val, {"shell": &shell, "script": 0})'))
+ if s:is_powershell(&shell)
+ let cmd = '& ' . cmd
+ endif
+ else
+ let cmd = a:cmd
+ endif
+ if a:0 > 0
+ let cmd = s:with_cd(cmd, a:1, type(a:cmd) != s:TYPE.list)
+ endif
+ if s:is_win && type(a:cmd) != s:TYPE.list
+ let [batchfile, cmd] = s:batchfile(cmd)
+ endif
+ return system(cmd)
+ finally
+ let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd]
+ if s:is_win && filereadable(batchfile)
+ call delete(batchfile)
+ endif
+ endtry
+endfunction
+
+function! s:system_chomp(...)
+ let ret = call('s:system', a:000)
+ return v:shell_error ? '' : substitute(ret, '\n$', '', '')
+endfunction
+
+function! s:git_validate(spec, check_branch)
+ let err = ''
+ if isdirectory(a:spec.dir)
+ let result = [s:git_local_branch(a:spec.dir), s:git_origin_url(a:spec.dir)]
+ let remote = result[-1]
+ if empty(remote)
+ let err = join([remote, 'PlugClean required.'], "\n")
+ elseif !s:compare_git_uri(remote, a:spec.uri)
+ let err = join(['Invalid URI: '.remote,
+ \ 'Expected: '.a:spec.uri,
+ \ 'PlugClean required.'], "\n")
+ elseif a:check_branch && has_key(a:spec, 'commit')
+ let sha = s:git_revision(a:spec.dir)
+ if empty(sha)
+ let err = join(add(result, 'PlugClean required.'), "\n")
+ elseif !s:hash_match(sha, a:spec.commit)
+ let err = join([printf('Invalid HEAD (expected: %s, actual: %s)',
+ \ a:spec.commit[:6], sha[:6]),
+ \ 'PlugUpdate required.'], "\n")
+ endif
+ elseif a:check_branch
+ let current_branch = result[0]
+ " Check tag
+ let origin_branch = s:git_origin_branch(a:spec)
+ if has_key(a:spec, 'tag')
+ let tag = s:system_chomp('git describe --exact-match --tags HEAD 2>&1', a:spec.dir)
+ if a:spec.tag !=# tag && a:spec.tag !~ '\*'
+ let err = printf('Invalid tag: %s (expected: %s). Try PlugUpdate.',
+ \ (empty(tag) ? 'N/A' : tag), a:spec.tag)
+ endif
+ " Check branch
+ elseif origin_branch !=# current_branch
+ let err = printf('Invalid branch: %s (expected: %s). Try PlugUpdate.',
+ \ current_branch, origin_branch)
+ endif
+ if empty(err)
+ let [ahead, behind] = split(s:lastline(s:system([
+ \ 'git', 'rev-list', '--count', '--left-right',
+ \ printf('HEAD...origin/%s', origin_branch)
+ \ ], a:spec.dir)), '\t')
+ if !v:shell_error && ahead
+ if behind
+ " Only mention PlugClean if diverged, otherwise it's likely to be
+ " pushable (and probably not that messed up).
+ let err = printf(
+ \ "Diverged from origin/%s (%d commit(s) ahead and %d commit(s) behind!\n"
+ \ .'Backup local changes and run PlugClean and PlugUpdate to reinstall it.', origin_branch, ahead, behind)
+ else
+ let err = printf("Ahead of origin/%s by %d commit(s).\n"
+ \ .'Cannot update until local changes are pushed.',
+ \ origin_branch, ahead)
+ endif
+ endif
+ endif
+ endif
+ else
+ let err = 'Not found'
+ endif
+ return [err, err =~# 'PlugClean']
+endfunction
+
+function! s:rm_rf(dir)
+ if isdirectory(a:dir)
+ return s:system(s:is_win
+ \ ? 'rmdir /S /Q '.plug#shellescape(a:dir)
+ \ : ['rm', '-rf', a:dir])
+ endif
+endfunction
+
+function! s:clean(force)
+ call s:prepare()
+ call append(0, 'Searching for invalid plugins in '.g:plug_home)
+ call append(1, '')
+
+ " List of valid directories
+ let dirs = []
+ let errs = {}
+ let [cnt, total] = [0, len(g:plugs)]
+ for [name, spec] in items(g:plugs)
+ if !s:is_managed(name)
+ call add(dirs, spec.dir)
+ else
+ let [err, clean] = s:git_validate(spec, 1)
+ if clean
+ let errs[spec.dir] = s:lines(err)[0]
+ else
+ call add(dirs, spec.dir)
+ endif
+ endif
+ let cnt += 1
+ call s:progress_bar(2, repeat('=', cnt), total)
+ normal! 2G
+ redraw
+ endfor
+
+ let allowed = {}
+ for dir in dirs
+ let allowed[s:dirpath(s:plug_fnamemodify(dir, ':h:h'))] = 1
+ let allowed[dir] = 1
+ for child in s:glob_dir(dir)
+ let allowed[child] = 1
+ endfor
+ endfor
+
+ let todo = []
+ let found = sort(s:glob_dir(g:plug_home))
+ while !empty(found)
+ let f = remove(found, 0)
+ if !has_key(allowed, f) && isdirectory(f)
+ call add(todo, f)
+ call append(line('$'), '- ' . f)
+ if has_key(errs, f)
+ call append(line('$'), ' ' . errs[f])
+ endif
+ let found = filter(found, 'stridx(v:val, f) != 0')
+ end
+ endwhile
+
+ 4
+ redraw
+ if empty(todo)
+ call append(line('$'), 'Already clean.')
+ else
+ let s:clean_count = 0
+ call append(3, ['Directories to delete:', ''])
+ redraw!
+ if a:force || s:ask_no_interrupt('Delete all directories?')
+ call s:delete([6, line('$')], 1)
+ else
+ call setline(4, 'Cancelled.')
+ nnoremap <silent> <buffer> d :set opfunc=<sid>delete_op<cr>g@
+ nmap <silent> <buffer> dd d_
+ xnoremap <silent> <buffer> d :<c-u>call <sid>delete_op(visualmode(), 1)<cr>
+ echo 'Delete the lines (d{motion}) to delete the corresponding directories'
+ endif
+ endif
+ 4
+ setlocal nomodifiable
+endfunction
+
+function! s:delete_op(type, ...)
+ call s:delete(a:0 ? [line("'<"), line("'>")] : [line("'["), line("']")], 0)
+endfunction
+
+function! s:delete(range, force)
+ let [l1, l2] = a:range
+ let force = a:force
+ let err_count = 0
+ while l1 <= l2
+ let line = getline(l1)
+ if line =~ '^- ' && isdirectory(line[2:])
+ execute l1
+ redraw!
+ let answer = force ? 1 : s:ask('Delete '.line[2:].'?', 1)
+ let force = force || answer > 1
+ if answer
+ let err = s:rm_rf(line[2:])
+ setlocal modifiable
+ if empty(err)
+ call setline(l1, '~'.line[1:])
+ let s:clean_count += 1
+ else
+ delete _
+ call append(l1 - 1, s:format_message('x', line[1:], err))
+ let l2 += len(s:lines(err))
+ let err_count += 1
+ endif
+ let msg = printf('Removed %d directories.', s:clean_count)
+ if err_count > 0
+ let msg .= printf(' Failed to remove %d directories.', err_count)
+ endif
+ call setline(4, msg)
+ setlocal nomodifiable
+ endif
+ endif
+ let l1 += 1
+ endwhile
+endfunction
+
+function! s:upgrade()
+ echo 'Downloading the latest version of vim-plug'
+ redraw
+ let tmp = s:plug_tempname()
+ let new = tmp . '/plug.vim'
+
+ try
+ let out = s:system(['git', 'clone', '--depth', '1', s:plug_src, tmp])
+ if v:shell_error
+ return s:err('Error upgrading vim-plug: '. out)
+ endif
+
+ if readfile(s:me) ==# readfile(new)
+ echo 'vim-plug is already up-to-date'
+ return 0
+ else
+ call rename(s:me, s:me . '.old')
+ call rename(new, s:me)
+ unlet g:loaded_plug
+ echo 'vim-plug has been upgraded'
+ return 1
+ endif
+ finally
+ silent! call s:rm_rf(tmp)
+ endtry
+endfunction
+
+function! s:upgrade_specs()
+ for spec in values(g:plugs)
+ let spec.frozen = get(spec, 'frozen', 0)
+ endfor
+endfunction
+
+function! s:status()
+ call s:prepare()
+ call append(0, 'Checking plugins')
+ call append(1, '')
+
+ let ecnt = 0
+ let unloaded = 0
+ let [cnt, total] = [0, len(g:plugs)]
+ for [name, spec] in items(g:plugs)
+ let is_dir = isdirectory(spec.dir)
+ if has_key(spec, 'uri')
+ if is_dir
+ let [err, _] = s:git_validate(spec, 1)
+ let [valid, msg] = [empty(err), empty(err) ? 'OK' : err]
+ else
+ let [valid, msg] = [0, 'Not found. Try PlugInstall.']
+ endif
+ else
+ if is_dir
+ let [valid, msg] = [1, 'OK']
+ else
+ let [valid, msg] = [0, 'Not found.']
+ endif
+ endif
+ let cnt += 1
+ let ecnt += !valid
+ " `s:loaded` entry can be missing if PlugUpgraded
+ if is_dir && get(s:loaded, name, -1) == 0
+ let unloaded = 1
+ let msg .= ' (not loaded)'
+ endif
+ call s:progress_bar(2, repeat('=', cnt), total)
+ call append(3, s:format_message(valid ? '-' : 'x', name, msg))
+ normal! 2G
+ redraw
+ endfor
+ call setline(1, 'Finished. '.ecnt.' error(s).')
+ normal! gg
+ setlocal nomodifiable
+ if unloaded
+ echo "Press 'L' on each line to load plugin, or 'U' to update"
+ nnoremap <silent> <buffer> L :call <SID>status_load(line('.'))<cr>
+ xnoremap <silent> <buffer> L :call <SID>status_load(line('.'))<cr>
+ end
+endfunction
+
+function! s:extract_name(str, prefix, suffix)
+ return matchstr(a:str, '^'.a:prefix.' \zs[^:]\+\ze:.*'.a:suffix.'$')
+endfunction
+
+function! s:status_load(lnum)
+ let line = getline(a:lnum)
+ let name = s:extract_name(line, '-', '(not loaded)')
+ if !empty(name)
+ call plug#load(name)
+ setlocal modifiable
+ call setline(a:lnum, substitute(line, ' (not loaded)$', '', ''))
+ setlocal nomodifiable
+ endif
+endfunction
+
+function! s:status_update() range
+ let lines = getline(a:firstline, a:lastline)
+ let names = filter(map(lines, 's:extract_name(v:val, "[x-]", "")'), '!empty(v:val)')
+ if !empty(names)
+ echo
+ execute 'PlugUpdate' join(names)
+ endif
+endfunction
+
+function! s:is_preview_window_open()
+ silent! wincmd P
+ if &previewwindow
+ wincmd p
+ return 1
+ endif
+endfunction
+
+function! s:find_name(lnum)
+ for lnum in reverse(range(1, a:lnum))
+ let line = getline(lnum)
+ if empty(line)
+ return ''
+ endif
+ let name = s:extract_name(line, '-', '')
+ if !empty(name)
+ return name
+ endif
+ endfor
+ return ''
+endfunction
+
+function! s:preview_commit()
+ if b:plug_preview < 0
+ let b:plug_preview = !s:is_preview_window_open()
+ endif
+
+ let sha = matchstr(getline('.'), '^ \X*\zs[0-9a-f]\{7,9}')
+ if empty(sha)
+ let name = matchstr(getline('.'), '^- \zs[^:]*\ze:$')
+ if empty(name)
+ return
+ endif
+ let title = 'HEAD@{1}..'
+ let command = 'git diff --no-color HEAD@{1}'
+ else
+ let title = sha
+ let command = 'git show --no-color --pretty=medium '.sha
+ let name = s:find_name(line('.'))
+ endif
+
+ if empty(name) || !has_key(g:plugs, name) || !isdirectory(g:plugs[name].dir)
+ return
+ endif
+
+ if exists('g:plug_pwindow') && !s:is_preview_window_open()
+ execute g:plug_pwindow
+ execute 'e' title
+ else
+ execute 'pedit' title
+ wincmd P
+ endif
+ setlocal previewwindow filetype=git buftype=nofile bufhidden=wipe nobuflisted modifiable
+ let batchfile = ''
+ try
+ let [sh, shellcmdflag, shrd] = s:chsh(1)
+ let cmd = 'cd '.plug#shellescape(g:plugs[name].dir).' && '.command
+ if s:is_win
+ let [batchfile, cmd] = s:batchfile(cmd)
+ endif
+ execute 'silent %!' cmd
+ finally
+ let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd]
+ if s:is_win && filereadable(batchfile)
+ call delete(batchfile)
+ endif
+ endtry
+ setlocal nomodifiable
+ nnoremap <silent> <buffer> q :q<cr>
+ wincmd p
+endfunction
+
+function! s:section(flags)
+ call search('\(^[x-] \)\@<=[^:]\+:', a:flags)
+endfunction
+
+function! s:format_git_log(line)
+ let indent = ' '
+ let tokens = split(a:line, nr2char(1))
+ if len(tokens) != 5
+ return indent.substitute(a:line, '\s*$', '', '')
+ endif
+ let [graph, sha, refs, subject, date] = tokens
+ let tag = matchstr(refs, 'tag: [^,)]\+')
+ let tag = empty(tag) ? ' ' : ' ('.tag.') '
+ return printf('%s%s%s%s%s (%s)', indent, graph, sha, tag, subject, date)
+endfunction
+
+function! s:append_ul(lnum, text)
+ call append(a:lnum, ['', a:text, repeat('-', len(a:text))])
+endfunction
+
+function! s:diff()
+ call s:prepare()
+ call append(0, ['Collecting changes ...', ''])
+ let cnts = [0, 0]
+ let bar = ''
+ let total = filter(copy(g:plugs), 's:is_managed(v:key) && isdirectory(v:val.dir)')
+ call s:progress_bar(2, bar, len(total))
+ for origin in [1, 0]
+ let plugs = reverse(sort(items(filter(copy(total), (origin ? '' : '!').'(has_key(v:val, "commit") || has_key(v:val, "tag"))'))))
+ if empty(plugs)
+ continue
+ endif
+ call s:append_ul(2, origin ? 'Pending updates:' : 'Last update:')
+ for [k, v] in plugs
+ let branch = s:git_origin_branch(v)
+ if len(branch)
+ let range = origin ? '..origin/'.branch : 'HEAD@{1}..'
+ let cmd = ['git', 'log', '--graph', '--color=never']
+ if s:git_version_requirement(2, 10, 0)
+ call add(cmd, '--no-show-signature')
+ endif
+ call extend(cmd, ['--pretty=format:%x01%h%x01%d%x01%s%x01%cr', range])
+ if has_key(v, 'rtp')
+ call extend(cmd, ['--', v.rtp])
+ endif
+ let diff = s:system_chomp(cmd, v.dir)
+ if !empty(diff)
+ let ref = has_key(v, 'tag') ? (' (tag: '.v.tag.')') : has_key(v, 'commit') ? (' '.v.commit) : ''
+ call append(5, extend(['', '- '.k.':'.ref], map(s:lines(diff), 's:format_git_log(v:val)')))
+ let cnts[origin] += 1
+ endif
+ endif
+ let bar .= '='
+ call s:progress_bar(2, bar, len(total))
+ normal! 2G
+ redraw
+ endfor
+ if !cnts[origin]
+ call append(5, ['', 'N/A'])
+ endif
+ endfor
+ call setline(1, printf('%d plugin(s) updated.', cnts[0])
+ \ . (cnts[1] ? printf(' %d plugin(s) have pending updates.', cnts[1]) : ''))
+
+ if cnts[0] || cnts[1]
+ nnoremap <silent> <buffer> <plug>(plug-preview) :silent! call <SID>preview_commit()<cr>
+ if empty(maparg("\<cr>", 'n'))
+ nmap <buffer> <cr> <plug>(plug-preview)
+ endif
+ if empty(maparg('o', 'n'))
+ nmap <buffer> o <plug>(plug-preview)
+ endif
+ endif
+ if cnts[0]
+ nnoremap <silent> <buffer> X :call <SID>revert()<cr>
+ echo "Press 'X' on each block to revert the update"
+ endif
+ normal! gg
+ setlocal nomodifiable
+endfunction
+
+function! s:revert()
+ if search('^Pending updates', 'bnW')
+ return
+ endif
+
+ let name = s:find_name(line('.'))
+ if empty(name) || !has_key(g:plugs, name) ||
+ \ input(printf('Revert the update of %s? (y/N) ', name)) !~? '^y'
+ return
+ endif
+
+ call s:system('git reset --hard HEAD@{1} && git checkout '.plug#shellescape(g:plugs[name].branch).' --', g:plugs[name].dir)
+ setlocal modifiable
+ normal! "_dap
+ setlocal nomodifiable
+ echo 'Reverted'
+endfunction
+
+function! s:snapshot(force, ...) abort
+ call s:prepare()
+ setf vim
+ call append(0, ['" Generated by vim-plug',
+ \ '" '.strftime("%c"),
+ \ '" :source this file in vim to restore the snapshot',
+ \ '" or execute: vim -S snapshot.vim',
+ \ '', '', 'PlugUpdate!'])
+ 1
+ let anchor = line('$') - 3
+ let names = sort(keys(filter(copy(g:plugs),
+ \'has_key(v:val, "uri") && isdirectory(v:val.dir)')))
+ for name in reverse(names)
+ let sha = has_key(g:plugs[name], 'commit') ? g:plugs[name].commit : s:git_revision(g:plugs[name].dir)
+ if !empty(sha)
+ call append(anchor, printf("silent! let g:plugs['%s'].commit = '%s'", name, sha))
+ redraw
+ endif
+ endfor
+
+ if a:0 > 0
+ let fn = s:plug_expand(a:1)
+ if filereadable(fn) && !(a:force || s:ask(a:1.' already exists. Overwrite?'))
+ return
+ endif
+ call writefile(getline(1, '$'), fn)
+ echo 'Saved as '.a:1
+ silent execute 'e' s:esc(fn)
+ setf vim
+ endif
+endfunction
+
+function! s:split_rtp()
+ return split(&rtp, '\\\@<!,')
+endfunction
+
+let s:first_rtp = s:escrtp(get(s:split_rtp(), 0, ''))
+let s:last_rtp = s:escrtp(get(s:split_rtp(), -1, ''))
+
+if exists('g:plugs')
+ let g:plugs_order = get(g:, 'plugs_order', keys(g:plugs))
+ call s:upgrade_specs()
+ call s:define_commands()
+endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/config/old/vim/autoload/togglebg.vim b/config/old/vim/autoload/togglebg.vim
new file mode 100644
index 0000000..f060cee
--- /dev/null
+++ b/config/old/vim/autoload/togglebg.vim
@@ -0,0 +1,47 @@
+" Toggle background
+" Last Change: April 7, 2011
+" Maintainer: Ethan Schoonover
+" License: OSI approved MIT license
+
+if exists("g:loaded_togglebg")
+ finish
+endif
+let g:loaded_togglebg = 1
+
+" noremap is a bit misleading here if you are unused to vim mapping.
+" in fact, there is remapping, but only of script locally defined remaps, in
+" this case <SID>TogBG. The <script> argument modifies the noremap scope in
+" this regard (and the noremenu below).
+nnoremap <unique> <script> <Plug>ToggleBackground <SID>TogBG
+inoremap <unique> <script> <Plug>ToggleBackground <ESC><SID>TogBG<ESC>a
+vnoremap <unique> <script> <Plug>ToggleBackground <ESC><SID>TogBG<ESC>gv
+nnoremenu <script> Window.Toggle\ Background <SID>TogBG
+inoremenu <script> Window.Toggle\ Background <ESC><SID>TogBG<ESC>a
+vnoremenu <script> Window.Toggle\ Background <ESC><SID>TogBG<ESC>gv
+noremap <SID>TogBG :call <SID>TogBG()<CR>
+
+function! s:TogBG()
+ let &background = ( &background == "dark"? "light" : "dark" ) | exe "colorscheme " . g:colors_name
+endfunction
+
+if !exists(":ToggleBG")
+ command ToggleBG :call s:TogBG()
+endif
+
+function! ToggleBackground()
+ echo "Please update your ToggleBackground mapping. ':help togglebg' for information."
+endfunction
+
+function! togglebg#map(mapActivation)
+ try
+ exe "silent! nmap <unique> ".a:mapActivation." <Plug>ToggleBackground"
+ exe "silent! imap <unique> ".a:mapActivation." <Plug>ToggleBackground"
+ exe "silent! vmap <unique> ".a:mapActivation." <Plug>ToggleBackground"
+ finally
+ return 0
+ endtry
+endfunction
+
+if !exists("no_plugin_maps") && !hasmapto('<Plug>ToggleBackground')
+ call togglebg#map("<F5>")
+endif
diff --git a/config/old/vim/colors/solarized.vim b/config/old/vim/colors/solarized.vim
new file mode 100755
index 0000000..70f5223
--- /dev/null
+++ b/config/old/vim/colors/solarized.vim
@@ -0,0 +1,1117 @@
+" Name: Solarized vim colorscheme
+" Author: Ethan Schoonover <es@ethanschoonover.com>
+" URL: http://ethanschoonover.com/solarized
+" (see this url for latest release & screenshots)
+" License: OSI approved MIT license (see end of this file)
+" Created: In the middle of the night
+" Modified: 2011 May 05
+"
+" Usage "{{{
+"
+" ---------------------------------------------------------------------
+" ABOUT:
+" ---------------------------------------------------------------------
+" Solarized is a carefully designed selective contrast colorscheme with dual
+" light and dark modes that runs in both GUI, 256 and 16 color modes.
+"
+" See the homepage above for screenshots and details.
+"
+" ---------------------------------------------------------------------
+" OPTIONS:
+" ---------------------------------------------------------------------
+" See the "solarized.txt" help file included with this colorscheme (in the
+" "doc" subdirectory) for information on options, usage, the Toggle Background
+" function and more. If you have already installed Solarized, this is available
+" from the Solarized menu and command line as ":help solarized"
+"
+" ---------------------------------------------------------------------
+" INSTALLATION:
+" ---------------------------------------------------------------------
+" Two options for installation: manual or pathogen
+"
+" MANUAL INSTALLATION OPTION:
+" ---------------------------------------------------------------------
+"
+" 1. Download the solarized distribution (available on the homepage above)
+" and unarchive the file.
+" 2. Move `solarized.vim` to your `.vim/colors` directory.
+" 3. Move each of the files in each subdirectories to the corresponding .vim
+" subdirectory (e.g. autoload/togglebg.vim goes into your .vim/autoload
+" directory as .vim/autoload/togglebg.vim).
+"
+" RECOMMENDED PATHOGEN INSTALLATION OPTION:
+" ---------------------------------------------------------------------
+"
+" 1. Download and install Tim Pope's Pathogen from:
+" https://github.com/tpope/vim-pathogen
+"
+" 2. Next, move or clone the `vim-colors-solarized` directory so that it is
+" a subdirectory of the `.vim/bundle` directory.
+"
+" a. **clone with git:**
+"
+" $ cd ~/.vim/bundle
+" $ git clone git://github.com/altercation/vim-colors-solarized.git
+"
+" b. **or move manually into the pathogen bundle directory:**
+" In the parent directory of vim-colors-solarized:
+"
+" $ mv vim-colors-solarized ~/.vim/bundle/
+"
+" MODIFY VIMRC:
+"
+" After either Option 1 or Option 2 above, put the following two lines in your
+" .vimrc:
+"
+" syntax enable
+" set background=dark
+" colorscheme solarized
+"
+" or, for the light background mode of Solarized:
+"
+" syntax enable
+" set background=light
+" colorscheme solarized
+"
+" I like to have a different background in GUI and terminal modes, so I can use
+" the following if-then. However, I find vim's background autodetection to be
+" pretty good and, at least with MacVim, I can leave this background value
+" assignment out entirely and get the same results.
+"
+" if has('gui_running')
+" set background=light
+" else
+" set background=dark
+" endif
+"
+" See the Solarized homepage at http://ethanschoonover.com/solarized for
+" screenshots which will help you select either the light or dark background.
+"
+" ---------------------------------------------------------------------
+" COLOR VALUES
+" ---------------------------------------------------------------------
+" Download palettes and files from: http://ethanschoonover.com/solarized
+"
+" L\*a\*b values are canonical (White D65, Reference D50), other values are
+" matched in sRGB space.
+"
+" SOLARIZED HEX 16/8 TERMCOL XTERM/HEX L*A*B sRGB HSB
+" --------- ------- ---- ------- ----------- ---------- ----------- -----------
+" base03 #002b36 8/4 brblack 234 #1c1c1c 15 -12 -12 0 43 54 193 100 21
+" base02 #073642 0/4 black 235 #262626 20 -12 -12 7 54 66 192 90 26
+" base01 #586e75 10/7 brgreen 240 #4e4e4e 45 -07 -07 88 110 117 194 25 46
+" base00 #657b83 11/7 bryellow 241 #585858 50 -07 -07 101 123 131 195 23 51
+" base0 #839496 12/6 brblue 244 #808080 60 -06 -03 131 148 150 186 13 59
+" base1 #93a1a1 14/4 brcyan 245 #8a8a8a 65 -05 -02 147 161 161 180 9 63
+" base2 #eee8d5 7/7 white 254 #d7d7af 92 -00 10 238 232 213 44 11 93
+" base3 #fdf6e3 15/7 brwhite 230 #ffffd7 97 00 10 253 246 227 44 10 99
+" yellow #b58900 3/3 yellow 136 #af8700 60 10 65 181 137 0 45 100 71
+" orange #cb4b16 9/3 brred 166 #d75f00 50 50 55 203 75 22 18 89 80
+" red #dc322f 1/1 red 160 #d70000 50 65 45 220 50 47 1 79 86
+" magenta #d33682 5/5 magenta 125 #af005f 50 65 -05 211 54 130 331 74 83
+" violet #6c71c4 13/5 brmagenta 61 #5f5faf 50 15 -45 108 113 196 237 45 77
+" blue #268bd2 4/4 blue 33 #0087ff 55 -10 -45 38 139 210 205 82 82
+" cyan #2aa198 6/6 cyan 37 #00afaf 60 -35 -05 42 161 152 175 74 63
+" green #859900 2/2 green 64 #5f8700 60 -20 65 133 153 0 68 100 60
+"
+" ---------------------------------------------------------------------
+" COLORSCHEME HACKING
+" ---------------------------------------------------------------------
+"
+" Useful commands for testing colorschemes:
+" :source $VIMRUNTIME/syntax/hitest.vim
+" :help highlight-groups
+" :help cterm-colors
+" :help group-name
+"
+" Useful links for developing colorschemes:
+" http://www.vim.org/scripts/script.php?script_id=2937
+" http://vimcasts.org/episodes/creating-colorschemes-for-vim/
+" http://www.frexx.de/xterm-256-notes/"
+"
+" }}}
+" Environment Specific Overrides "{{{
+" Allow or disallow certain features based on current terminal emulator or
+" environment.
+
+" Terminals that support italics
+let s:terms_italic=[
+ \"rxvt",
+ \"gnome-terminal"
+ \]
+" For reference only, terminals are known to be incomptible.
+" Terminals that are in neither list need to be tested.
+let s:terms_noitalic=[
+ \"iTerm.app",
+ \"Apple_Terminal"
+ \]
+if has("gui_running")
+ let s:terminal_italic=1 " TODO: could refactor to not require this at all
+else
+ let s:terminal_italic=0 " terminals will be guilty until proven compatible
+ for term in s:terms_italic
+ if $TERM_PROGRAM =~ term
+ let s:terminal_italic=1
+ endif
+ endfor
+endif
+
+" }}}
+" Default option values"{{{
+" ---------------------------------------------------------------------
+" s:options_list is used to autogenerate a list of all non-default options
+" using "call SolarizedOptions()" or with the "Generate .vimrc commands"
+" Solarized menu option. See the "Menus" section below for the function itself.
+let s:options_list=[
+ \'" this block of commands has been autogenerated by solarized.vim and',
+ \'" includes the current, non-default Solarized option values.',
+ \'" To use, place these commands in your .vimrc file (replacing any',
+ \'" existing colorscheme commands). See also ":help solarized"',
+ \'',
+ \'" ------------------------------------------------------------------',
+ \'" Solarized Colorscheme Config',
+ \'" ------------------------------------------------------------------',
+ \]
+let s:colorscheme_list=[
+ \'syntax enable',
+ \'set background='.&background,
+ \'colorscheme solarized',
+ \]
+let s:defaults_list=[
+ \'" ------------------------------------------------------------------',
+ \'',
+ \'" The following items are available options, but do not need to be',
+ \'" included in your .vimrc as they are currently set to their defaults.',
+ \''
+ \]
+let s:lazycat_list=[
+ \'" lazy method of appending this onto your .vimrc ":w! >> ~/.vimrc"',
+ \'" ------------------------------------------------------------------',
+ \]
+
+function! s:SetOption(name,default)
+ if type(a:default) == type(0)
+ let l:wrap=''
+ let l:ewrap=''
+ else
+ let l:wrap='"'
+ let l:ewrap='\"'
+ endif
+ if !exists("g:solarized_".a:name) || g:solarized_{a:name}==a:default
+ exe 'let g:solarized_'.a:name.'='.l:wrap.a:default.l:wrap.'"'
+ exe 'call add(s:defaults_list, "\" let g:solarized_'.a:name.'='.l:ewrap.g:solarized_{a:name}.l:ewrap.'")'
+ else
+ exe 'call add(s:options_list, "let g:solarized_'.a:name.'='.l:ewrap.g:solarized_{a:name}.l:ewrap.' \"default value is '.a:default.'")'
+ endif
+endfunction
+
+if ($TERM_PROGRAM ==? "apple_terminal" && &t_Co < 256)
+ let s:solarized_termtrans_default = 1
+else
+ let s:solarized_termtrans_default = 0
+endif
+call s:SetOption("termtrans",s:solarized_termtrans_default)
+call s:SetOption("degrade",0)
+call s:SetOption("bold",1)
+call s:SetOption("underline",1)
+call s:SetOption("italic",1) " note that we need to override this later if the terminal doesn't support
+call s:SetOption("termcolors",16)
+call s:SetOption("contrast","normal")
+call s:SetOption("visibility","normal")
+call s:SetOption("diffmode","normal")
+call s:SetOption("hitrail",0)
+call s:SetOption("menu",1)
+
+"}}}
+" Colorscheme initialization "{{{
+" ---------------------------------------------------------------------
+hi clear
+if exists("syntax_on")
+ syntax reset
+endif
+let colors_name = "solarized"
+
+"}}}
+" GUI & CSApprox hexadecimal palettes"{{{
+" ---------------------------------------------------------------------
+"
+" Set both gui and terminal color values in separate conditional statements
+" Due to possibility that CSApprox is running (though I suppose we could just
+" leave the hex values out entirely in that case and include only cterm colors)
+" We also check to see if user has set solarized (force use of the
+" neutral gray monotone palette component)
+if (has("gui_running") && g:solarized_degrade == 0)
+ let s:vmode = "gui"
+ let s:base03 = "#002b36"
+ let s:base02 = "#073642"
+ let s:base01 = "#586e75"
+ let s:base00 = "#657b83"
+ let s:base0 = "#839496"
+ let s:base1 = "#93a1a1"
+ let s:base2 = "#eee8d5"
+ let s:base3 = "#fdf6e3"
+ let s:yellow = "#b58900"
+ let s:orange = "#cb4b16"
+ let s:red = "#dc322f"
+ let s:magenta = "#d33682"
+ let s:violet = "#6c71c4"
+ let s:blue = "#268bd2"
+ let s:cyan = "#2aa198"
+ "let s:green = "#859900" "original
+ let s:green = "#719e07" "experimental
+elseif (has("gui_running") && g:solarized_degrade == 1)
+ " These colors are identical to the 256 color mode. They may be viewed
+ " while in gui mode via "let g:solarized_degrade=1", though this is not
+ " recommened and is for testing only.
+ let s:vmode = "gui"
+ let s:base03 = "#1c1c1c"
+ let s:base02 = "#262626"
+ let s:base01 = "#4e4e4e"
+ let s:base00 = "#585858"
+ let s:base0 = "#808080"
+ let s:base1 = "#8a8a8a"
+ let s:base2 = "#d7d7af"
+ let s:base3 = "#ffffd7"
+ let s:yellow = "#af8700"
+ let s:orange = "#d75f00"
+ let s:red = "#af0000"
+ let s:magenta = "#af005f"
+ let s:violet = "#5f5faf"
+ let s:blue = "#0087ff"
+ let s:cyan = "#00afaf"
+ let s:green = "#5f8700"
+elseif g:solarized_termcolors != 256 && &t_Co >= 16
+ let s:vmode = "cterm"
+ let s:base03 = "8"
+ let s:base02 = "0"
+ let s:base01 = "10"
+ let s:base00 = "11"
+ let s:base0 = "12"
+ let s:base1 = "14"
+ let s:base2 = "7"
+ let s:base3 = "15"
+ let s:yellow = "3"
+ let s:orange = "9"
+ let s:red = "1"
+ let s:magenta = "5"
+ let s:violet = "13"
+ let s:blue = "4"
+ let s:cyan = "6"
+ let s:green = "2"
+elseif g:solarized_termcolors == 256
+ let s:vmode = "cterm"
+ let s:base03 = "234"
+ let s:base02 = "235"
+ let s:base01 = "239"
+ let s:base00 = "240"
+ let s:base0 = "244"
+ let s:base1 = "245"
+ let s:base2 = "187"
+ let s:base3 = "230"
+ let s:yellow = "136"
+ let s:orange = "166"
+ let s:red = "124"
+ let s:magenta = "125"
+ let s:violet = "61"
+ let s:blue = "33"
+ let s:cyan = "37"
+ let s:green = "64"
+else
+ let s:vmode = "cterm"
+ let s:bright = "* term=bold cterm=bold"
+" let s:base03 = "0".s:bright
+" let s:base02 = "0"
+" let s:base01 = "2".s:bright
+" let s:base00 = "3".s:bright
+" let s:base0 = "4".s:bright
+" let s:base1 = "6".s:bright
+" let s:base2 = "7"
+" let s:base3 = "7".s:bright
+" let s:yellow = "3"
+" let s:orange = "1".s:bright
+" let s:red = "1"
+" let s:magenta = "5"
+" let s:violet = "5".s:bright
+" let s:blue = "4"
+" let s:cyan = "6"
+" let s:green = "2"
+ let s:base03 = "DarkGray" " 0*
+ let s:base02 = "Black" " 0
+ let s:base01 = "LightGreen" " 2*
+ let s:base00 = "LightYellow" " 3*
+ let s:base0 = "LightBlue" " 4*
+ let s:base1 = "LightCyan" " 6*
+ let s:base2 = "LightGray" " 7
+ let s:base3 = "White" " 7*
+ let s:yellow = "DarkYellow" " 3
+ let s:orange = "LightRed" " 1*
+ let s:red = "DarkRed" " 1
+ let s:magenta = "DarkMagenta" " 5
+ let s:violet = "LightMagenta" " 5*
+ let s:blue = "DarkBlue" " 4
+ let s:cyan = "DarkCyan" " 6
+ let s:green = "DarkGreen" " 2
+
+endif
+"}}}
+" Formatting options and null values for passthrough effect "{{{
+" ---------------------------------------------------------------------
+ let s:none = "NONE"
+ let s:none = "NONE"
+ let s:t_none = "NONE"
+ let s:n = "NONE"
+ let s:c = ",undercurl"
+ let s:r = ",reverse"
+ let s:s = ",standout"
+ let s:ou = ""
+ let s:ob = ""
+"}}}
+" Background value based on termtrans setting "{{{
+" ---------------------------------------------------------------------
+if (has("gui_running") || g:solarized_termtrans == 0)
+ let s:back = s:base03
+else
+ let s:back = "NONE"
+endif
+"}}}
+" Alternate light scheme "{{{
+" ---------------------------------------------------------------------
+if &background == "light"
+ let s:temp03 = s:base03
+ let s:temp02 = s:base02
+ let s:temp01 = s:base01
+ let s:temp00 = s:base00
+ let s:base03 = s:base3
+ let s:base02 = s:base2
+ let s:base01 = s:base1
+ let s:base00 = s:base0
+ let s:base0 = s:temp00
+ let s:base1 = s:temp01
+ let s:base2 = s:temp02
+ let s:base3 = s:temp03
+ if (s:back != "NONE")
+ let s:back = s:base03
+ endif
+endif
+"}}}
+" Optional contrast schemes "{{{
+" ---------------------------------------------------------------------
+if g:solarized_contrast == "high"
+ let s:base01 = s:base00
+ let s:base00 = s:base0
+ let s:base0 = s:base1
+ let s:base1 = s:base2
+ let s:base2 = s:base3
+ let s:back = s:back
+endif
+if g:solarized_contrast == "low"
+ let s:back = s:base02
+ let s:ou = ",underline"
+endif
+"}}}
+" Overrides dependent on user specified values and environment "{{{
+" ---------------------------------------------------------------------
+if (g:solarized_bold == 0 || &t_Co == 8 )
+ let s:b = ""
+ let s:bb = ",bold"
+else
+ let s:b = ",bold"
+ let s:bb = ""
+endif
+
+if g:solarized_underline == 0
+ let s:u = ""
+else
+ let s:u = ",underline"
+endif
+
+if g:solarized_italic == 0 || s:terminal_italic == 0
+ let s:i = ""
+else
+ let s:i = ",italic"
+endif
+"}}}
+" Highlighting primitives"{{{
+" ---------------------------------------------------------------------
+
+exe "let s:bg_none = ' ".s:vmode."bg=".s:none ."'"
+exe "let s:bg_back = ' ".s:vmode."bg=".s:back ."'"
+exe "let s:bg_base03 = ' ".s:vmode."bg=".s:base03 ."'"
+exe "let s:bg_base02 = ' ".s:vmode."bg=".s:base02 ."'"
+exe "let s:bg_base01 = ' ".s:vmode."bg=".s:base01 ."'"
+exe "let s:bg_base00 = ' ".s:vmode."bg=".s:base00 ."'"
+exe "let s:bg_base0 = ' ".s:vmode."bg=".s:base0 ."'"
+exe "let s:bg_base1 = ' ".s:vmode."bg=".s:base1 ."'"
+exe "let s:bg_base2 = ' ".s:vmode."bg=".s:base2 ."'"
+exe "let s:bg_base3 = ' ".s:vmode."bg=".s:base3 ."'"
+exe "let s:bg_green = ' ".s:vmode."bg=".s:green ."'"
+exe "let s:bg_yellow = ' ".s:vmode."bg=".s:yellow ."'"
+exe "let s:bg_orange = ' ".s:vmode."bg=".s:orange ."'"
+exe "let s:bg_red = ' ".s:vmode."bg=".s:red ."'"
+exe "let s:bg_magenta = ' ".s:vmode."bg=".s:magenta."'"
+exe "let s:bg_violet = ' ".s:vmode."bg=".s:violet ."'"
+exe "let s:bg_blue = ' ".s:vmode."bg=".s:blue ."'"
+exe "let s:bg_cyan = ' ".s:vmode."bg=".s:cyan ."'"
+
+exe "let s:fg_none = ' ".s:vmode."fg=".s:none ."'"
+exe "let s:fg_back = ' ".s:vmode."fg=".s:back ."'"
+exe "let s:fg_base03 = ' ".s:vmode."fg=".s:base03 ."'"
+exe "let s:fg_base02 = ' ".s:vmode."fg=".s:base02 ."'"
+exe "let s:fg_base01 = ' ".s:vmode."fg=".s:base01 ."'"
+exe "let s:fg_base00 = ' ".s:vmode."fg=".s:base00 ."'"
+exe "let s:fg_base0 = ' ".s:vmode."fg=".s:base0 ."'"
+exe "let s:fg_base1 = ' ".s:vmode."fg=".s:base1 ."'"
+exe "let s:fg_base2 = ' ".s:vmode."fg=".s:base2 ."'"
+exe "let s:fg_base3 = ' ".s:vmode."fg=".s:base3 ."'"
+exe "let s:fg_green = ' ".s:vmode."fg=".s:green ."'"
+exe "let s:fg_yellow = ' ".s:vmode."fg=".s:yellow ."'"
+exe "let s:fg_orange = ' ".s:vmode."fg=".s:orange ."'"
+exe "let s:fg_red = ' ".s:vmode."fg=".s:red ."'"
+exe "let s:fg_magenta = ' ".s:vmode."fg=".s:magenta."'"
+exe "let s:fg_violet = ' ".s:vmode."fg=".s:violet ."'"
+exe "let s:fg_blue = ' ".s:vmode."fg=".s:blue ."'"
+exe "let s:fg_cyan = ' ".s:vmode."fg=".s:cyan ."'"
+
+exe "let s:fmt_none = ' ".s:vmode."=NONE". " term=NONE". "'"
+exe "let s:fmt_bold = ' ".s:vmode."=NONE".s:b. " term=NONE".s:b."'"
+exe "let s:fmt_bldi = ' ".s:vmode."=NONE".s:b. " term=NONE".s:b."'"
+exe "let s:fmt_undr = ' ".s:vmode."=NONE".s:u. " term=NONE".s:u."'"
+exe "let s:fmt_undb = ' ".s:vmode."=NONE".s:u.s:b. " term=NONE".s:u.s:b."'"
+exe "let s:fmt_undi = ' ".s:vmode."=NONE".s:u. " term=NONE".s:u."'"
+exe "let s:fmt_uopt = ' ".s:vmode."=NONE".s:ou. " term=NONE".s:ou."'"
+exe "let s:fmt_curl = ' ".s:vmode."=NONE".s:c. " term=NONE".s:c."'"
+exe "let s:fmt_ital = ' ".s:vmode."=NONE".s:i. " term=NONE".s:i."'"
+exe "let s:fmt_stnd = ' ".s:vmode."=NONE".s:s. " term=NONE".s:s."'"
+exe "let s:fmt_revr = ' ".s:vmode."=NONE".s:r. " term=NONE".s:r."'"
+exe "let s:fmt_revb = ' ".s:vmode."=NONE".s:r.s:b. " term=NONE".s:r.s:b."'"
+" revbb (reverse bold for bright colors) is only set to actual bold in low
+" color terminals (t_co=8, such as OS X Terminal.app) and should only be used
+" with colors 8-15.
+exe "let s:fmt_revbb = ' ".s:vmode."=NONE".s:r.s:bb. " term=NONE".s:r.s:bb."'"
+exe "let s:fmt_revbbu = ' ".s:vmode."=NONE".s:r.s:bb.s:u." term=NONE".s:r.s:bb.s:u."'"
+
+if has("gui_running")
+ exe "let s:sp_none = ' guisp=".s:none ."'"
+ exe "let s:sp_back = ' guisp=".s:back ."'"
+ exe "let s:sp_base03 = ' guisp=".s:base03 ."'"
+ exe "let s:sp_base02 = ' guisp=".s:base02 ."'"
+ exe "let s:sp_base01 = ' guisp=".s:base01 ."'"
+ exe "let s:sp_base00 = ' guisp=".s:base00 ."'"
+ exe "let s:sp_base0 = ' guisp=".s:base0 ."'"
+ exe "let s:sp_base1 = ' guisp=".s:base1 ."'"
+ exe "let s:sp_base2 = ' guisp=".s:base2 ."'"
+ exe "let s:sp_base3 = ' guisp=".s:base3 ."'"
+ exe "let s:sp_green = ' guisp=".s:green ."'"
+ exe "let s:sp_yellow = ' guisp=".s:yellow ."'"
+ exe "let s:sp_orange = ' guisp=".s:orange ."'"
+ exe "let s:sp_red = ' guisp=".s:red ."'"
+ exe "let s:sp_magenta = ' guisp=".s:magenta."'"
+ exe "let s:sp_violet = ' guisp=".s:violet ."'"
+ exe "let s:sp_blue = ' guisp=".s:blue ."'"
+ exe "let s:sp_cyan = ' guisp=".s:cyan ."'"
+else
+ let s:sp_none = ""
+ let s:sp_back = ""
+ let s:sp_base03 = ""
+ let s:sp_base02 = ""
+ let s:sp_base01 = ""
+ let s:sp_base00 = ""
+ let s:sp_base0 = ""
+ let s:sp_base1 = ""
+ let s:sp_base2 = ""
+ let s:sp_base3 = ""
+ let s:sp_green = ""
+ let s:sp_yellow = ""
+ let s:sp_orange = ""
+ let s:sp_red = ""
+ let s:sp_magenta = ""
+ let s:sp_violet = ""
+ let s:sp_blue = ""
+ let s:sp_cyan = ""
+endif
+
+"}}}
+" Basic highlighting"{{{
+" ---------------------------------------------------------------------
+" note that link syntax to avoid duplicate configuration doesn't work with the
+" exe compiled formats
+
+exe "hi! Normal" .s:fmt_none .s:fg_base0 .s:bg_back
+
+exe "hi! Comment" .s:fmt_ital .s:fg_base01 .s:bg_none
+" *Comment any comment
+
+exe "hi! Constant" .s:fmt_none .s:fg_cyan .s:bg_none
+" *Constant any constant
+" String a string constant: "this is a string"
+" Character a character constant: 'c', '\n'
+" Number a number constant: 234, 0xff
+" Boolean a boolean constant: TRUE, false
+" Float a floating point constant: 2.3e10
+
+exe "hi! Identifier" .s:fmt_none .s:fg_blue .s:bg_none
+" *Identifier any variable name
+" Function function name (also: methods for classes)
+"
+exe "hi! Statement" .s:fmt_none .s:fg_green .s:bg_none
+" *Statement any statement
+" Conditional if, then, else, endif, switch, etc.
+" Repeat for, do, while, etc.
+" Label case, default, etc.
+" Operator "sizeof", "+", "*", etc.
+" Keyword any other keyword
+" Exception try, catch, throw
+
+exe "hi! PreProc" .s:fmt_none .s:fg_orange .s:bg_none
+" *PreProc generic Preprocessor
+" Include preprocessor #include
+" Define preprocessor #define
+" Macro same as Define
+" PreCondit preprocessor #if, #else, #endif, etc.
+
+exe "hi! Type" .s:fmt_none .s:fg_yellow .s:bg_none
+" *Type int, long, char, etc.
+" StorageClass static, register, volatile, etc.
+" Structure struct, union, enum, etc.
+" Typedef A typedef
+
+exe "hi! Special" .s:fmt_none .s:fg_red .s:bg_none
+" *Special any special symbol
+" SpecialChar special character in a constant
+" Tag you can use CTRL-] on this
+" Delimiter character that needs attention
+" SpecialComment special things inside a comment
+" Debug debugging statements
+
+exe "hi! Underlined" .s:fmt_none .s:fg_violet .s:bg_none
+" *Underlined text that stands out, HTML links
+
+exe "hi! Ignore" .s:fmt_none .s:fg_none .s:bg_none
+" *Ignore left blank, hidden |hl-Ignore|
+
+exe "hi! Error" .s:fmt_bold .s:fg_red .s:bg_none
+" *Error any erroneous construct
+
+exe "hi! Todo" .s:fmt_bold .s:fg_magenta.s:bg_none
+" *Todo anything that needs extra attention; mostly the
+" keywords TODO FIXME and XXX
+"
+"}}}
+" Extended highlighting "{{{
+" ---------------------------------------------------------------------
+if (g:solarized_visibility=="high")
+ exe "hi! SpecialKey" .s:fmt_revr .s:fg_red .s:bg_none
+ exe "hi! NonText" .s:fmt_bold .s:fg_red .s:bg_none
+elseif (g:solarized_visibility=="low")
+ exe "hi! SpecialKey" .s:fmt_bold .s:fg_base02 .s:bg_none
+ exe "hi! NonText" .s:fmt_bold .s:fg_base02 .s:bg_none
+else
+ exe "hi! SpecialKey" .s:fmt_bold .s:fg_base00 .s:bg_base02
+ exe "hi! NonText" .s:fmt_bold .s:fg_base00 .s:bg_none
+endif
+exe "hi! StatusLine" .s:fmt_none .s:fg_base1 .s:bg_base02 .s:fmt_revbb
+exe "hi! StatusLineNC" .s:fmt_none .s:fg_base00 .s:bg_base02 .s:fmt_revbb
+exe "hi! Visual" .s:fmt_none .s:fg_base01 .s:bg_base03 .s:fmt_revbb
+exe "hi! Directory" .s:fmt_none .s:fg_blue .s:bg_none
+exe "hi! ErrorMsg" .s:fmt_revr .s:fg_red .s:bg_none
+exe "hi! IncSearch" .s:fmt_stnd .s:fg_orange .s:bg_none
+exe "hi! Search" .s:fmt_revr .s:fg_yellow .s:bg_none
+exe "hi! MoreMsg" .s:fmt_none .s:fg_blue .s:bg_none
+exe "hi! ModeMsg" .s:fmt_none .s:fg_blue .s:bg_none
+exe "hi! LineNr" .s:fmt_none .s:fg_base01 .s:bg_base02
+exe "hi! Question" .s:fmt_bold .s:fg_cyan .s:bg_none
+if ( has("gui_running") || &t_Co > 8 )
+ exe "hi! VertSplit" .s:fmt_none .s:fg_base00 .s:bg_base00
+else
+ exe "hi! VertSplit" .s:fmt_revbb .s:fg_base00 .s:bg_base02
+endif
+exe "hi! Title" .s:fmt_bold .s:fg_orange .s:bg_none
+exe "hi! VisualNOS" .s:fmt_stnd .s:fg_none .s:bg_base02 .s:fmt_revbb
+exe "hi! WarningMsg" .s:fmt_bold .s:fg_red .s:bg_none
+exe "hi! WildMenu" .s:fmt_none .s:fg_base2 .s:bg_base02 .s:fmt_revbb
+exe "hi! Folded" .s:fmt_undb .s:fg_base0 .s:bg_base02 .s:sp_base03
+exe "hi! FoldColumn" .s:fmt_none .s:fg_base0 .s:bg_base02
+if (g:solarized_diffmode=="high")
+exe "hi! DiffAdd" .s:fmt_revr .s:fg_green .s:bg_none
+exe "hi! DiffChange" .s:fmt_revr .s:fg_yellow .s:bg_none
+exe "hi! DiffDelete" .s:fmt_revr .s:fg_red .s:bg_none
+exe "hi! DiffText" .s:fmt_revr .s:fg_blue .s:bg_none
+elseif (g:solarized_diffmode=="low")
+exe "hi! DiffAdd" .s:fmt_undr .s:fg_green .s:bg_none .s:sp_green
+exe "hi! DiffChange" .s:fmt_undr .s:fg_yellow .s:bg_none .s:sp_yellow
+exe "hi! DiffDelete" .s:fmt_bold .s:fg_red .s:bg_none
+exe "hi! DiffText" .s:fmt_undr .s:fg_blue .s:bg_none .s:sp_blue
+else " normal
+ if has("gui_running")
+exe "hi! DiffAdd" .s:fmt_bold .s:fg_green .s:bg_base02 .s:sp_green
+exe "hi! DiffChange" .s:fmt_bold .s:fg_yellow .s:bg_base02 .s:sp_yellow
+exe "hi! DiffDelete" .s:fmt_bold .s:fg_red .s:bg_base02
+exe "hi! DiffText" .s:fmt_bold .s:fg_blue .s:bg_base02 .s:sp_blue
+ else
+exe "hi! DiffAdd" .s:fmt_none .s:fg_green .s:bg_base02 .s:sp_green
+exe "hi! DiffChange" .s:fmt_none .s:fg_yellow .s:bg_base02 .s:sp_yellow
+exe "hi! DiffDelete" .s:fmt_none .s:fg_red .s:bg_base02
+exe "hi! DiffText" .s:fmt_none .s:fg_blue .s:bg_base02 .s:sp_blue
+ endif
+endif
+exe "hi! SignColumn" .s:fmt_none .s:fg_base0
+exe "hi! Conceal" .s:fmt_none .s:fg_blue .s:bg_none
+exe "hi! SpellBad" .s:fmt_curl .s:fg_none .s:bg_none .s:sp_red
+exe "hi! SpellCap" .s:fmt_curl .s:fg_none .s:bg_none .s:sp_violet
+exe "hi! SpellRare" .s:fmt_curl .s:fg_none .s:bg_none .s:sp_cyan
+exe "hi! SpellLocal" .s:fmt_curl .s:fg_none .s:bg_none .s:sp_yellow
+exe "hi! Pmenu" .s:fmt_none .s:fg_base0 .s:bg_base02 .s:fmt_revbb
+exe "hi! PmenuSel" .s:fmt_none .s:fg_base01 .s:bg_base2 .s:fmt_revbb
+exe "hi! PmenuSbar" .s:fmt_none .s:fg_base2 .s:bg_base0 .s:fmt_revbb
+exe "hi! PmenuThumb" .s:fmt_none .s:fg_base0 .s:bg_base03 .s:fmt_revbb
+exe "hi! TabLine" .s:fmt_undr .s:fg_base0 .s:bg_base02 .s:sp_base0
+exe "hi! TabLineFill" .s:fmt_undr .s:fg_base0 .s:bg_base02 .s:sp_base0
+exe "hi! TabLineSel" .s:fmt_undr .s:fg_base01 .s:bg_base2 .s:sp_base0 .s:fmt_revbbu
+exe "hi! CursorColumn" .s:fmt_none .s:fg_none .s:bg_base02
+exe "hi! CursorLine" .s:fmt_uopt .s:fg_none .s:bg_base02 .s:sp_base1
+exe "hi! ColorColumn" .s:fmt_none .s:fg_none .s:bg_base02
+exe "hi! Cursor" .s:fmt_none .s:fg_base03 .s:bg_base0
+hi! link lCursor Cursor
+exe "hi! MatchParen" .s:fmt_bold .s:fg_red .s:bg_base01
+
+"}}}
+" vim syntax highlighting "{{{
+" ---------------------------------------------------------------------
+"exe "hi! vimLineComment" . s:fg_base01 .s:bg_none .s:fmt_ital
+"hi! link vimComment Comment
+"hi! link vimLineComment Comment
+hi! link vimVar Identifier
+hi! link vimFunc Function
+hi! link vimUserFunc Function
+hi! link helpSpecial Special
+hi! link vimSet Normal
+hi! link vimSetEqual Normal
+exe "hi! vimCommentString" .s:fmt_none .s:fg_violet .s:bg_none
+exe "hi! vimCommand" .s:fmt_none .s:fg_yellow .s:bg_none
+exe "hi! vimCmdSep" .s:fmt_bold .s:fg_blue .s:bg_none
+exe "hi! helpExample" .s:fmt_none .s:fg_base1 .s:bg_none
+exe "hi! helpOption" .s:fmt_none .s:fg_cyan .s:bg_none
+exe "hi! helpNote" .s:fmt_none .s:fg_magenta.s:bg_none
+exe "hi! helpVim" .s:fmt_none .s:fg_magenta.s:bg_none
+exe "hi! helpHyperTextJump" .s:fmt_undr .s:fg_blue .s:bg_none
+exe "hi! helpHyperTextEntry".s:fmt_none .s:fg_green .s:bg_none
+exe "hi! vimIsCommand" .s:fmt_none .s:fg_base00 .s:bg_none
+exe "hi! vimSynMtchOpt" .s:fmt_none .s:fg_yellow .s:bg_none
+exe "hi! vimSynType" .s:fmt_none .s:fg_cyan .s:bg_none
+exe "hi! vimHiLink" .s:fmt_none .s:fg_blue .s:bg_none
+exe "hi! vimHiGroup" .s:fmt_none .s:fg_blue .s:bg_none
+exe "hi! vimGroup" .s:fmt_undb .s:fg_blue .s:bg_none
+"}}}
+" diff highlighting "{{{
+" ---------------------------------------------------------------------
+hi! link diffAdded Statement
+hi! link diffLine Identifier
+"}}}
+" git & gitcommit highlighting "{{{
+"git
+"exe "hi! gitDateHeader"
+"exe "hi! gitIdentityHeader"
+"exe "hi! gitIdentityKeyword"
+"exe "hi! gitNotesHeader"
+"exe "hi! gitReflogHeader"
+"exe "hi! gitKeyword"
+"exe "hi! gitIdentity"
+"exe "hi! gitEmailDelimiter"
+"exe "hi! gitEmail"
+"exe "hi! gitDate"
+"exe "hi! gitMode"
+"exe "hi! gitHashAbbrev"
+"exe "hi! gitHash"
+"exe "hi! gitReflogMiddle"
+"exe "hi! gitReference"
+"exe "hi! gitStage"
+"exe "hi! gitType"
+"exe "hi! gitDiffAdded"
+"exe "hi! gitDiffRemoved"
+"gitcommit
+"exe "hi! gitcommitSummary"
+exe "hi! gitcommitComment" .s:fmt_ital .s:fg_base01 .s:bg_none
+hi! link gitcommitUntracked gitcommitComment
+hi! link gitcommitDiscarded gitcommitComment
+hi! link gitcommitSelected gitcommitComment
+exe "hi! gitcommitUnmerged" .s:fmt_bold .s:fg_green .s:bg_none
+exe "hi! gitcommitOnBranch" .s:fmt_bold .s:fg_base01 .s:bg_none
+exe "hi! gitcommitBranch" .s:fmt_bold .s:fg_magenta .s:bg_none
+hi! link gitcommitNoBranch gitcommitBranch
+exe "hi! gitcommitDiscardedType".s:fmt_none .s:fg_red .s:bg_none
+exe "hi! gitcommitSelectedType" .s:fmt_none .s:fg_green .s:bg_none
+"exe "hi! gitcommitUnmergedType"
+"exe "hi! gitcommitType"
+"exe "hi! gitcommitNoChanges"
+"exe "hi! gitcommitHeader"
+exe "hi! gitcommitHeader" .s:fmt_none .s:fg_base01 .s:bg_none
+exe "hi! gitcommitUntrackedFile".s:fmt_bold .s:fg_cyan .s:bg_none
+exe "hi! gitcommitDiscardedFile".s:fmt_bold .s:fg_red .s:bg_none
+exe "hi! gitcommitSelectedFile" .s:fmt_bold .s:fg_green .s:bg_none
+exe "hi! gitcommitUnmergedFile" .s:fmt_bold .s:fg_yellow .s:bg_none
+exe "hi! gitcommitFile" .s:fmt_bold .s:fg_base0 .s:bg_none
+hi! link gitcommitDiscardedArrow gitcommitDiscardedFile
+hi! link gitcommitSelectedArrow gitcommitSelectedFile
+hi! link gitcommitUnmergedArrow gitcommitUnmergedFile
+"exe "hi! gitcommitArrow"
+"exe "hi! gitcommitOverflow"
+"exe "hi! gitcommitBlank"
+" }}}
+" html highlighting "{{{
+" ---------------------------------------------------------------------
+exe "hi! htmlTag" .s:fmt_none .s:fg_base01 .s:bg_none
+exe "hi! htmlEndTag" .s:fmt_none .s:fg_base01 .s:bg_none
+exe "hi! htmlTagN" .s:fmt_bold .s:fg_base1 .s:bg_none
+exe "hi! htmlTagName" .s:fmt_bold .s:fg_blue .s:bg_none
+exe "hi! htmlSpecialTagName".s:fmt_ital .s:fg_blue .s:bg_none
+exe "hi! htmlArg" .s:fmt_none .s:fg_base00 .s:bg_none
+exe "hi! javaScript" .s:fmt_none .s:fg_yellow .s:bg_none
+"}}}
+" perl highlighting "{{{
+" ---------------------------------------------------------------------
+exe "hi! perlHereDoc" . s:fg_base1 .s:bg_back .s:fmt_none
+exe "hi! perlVarPlain" . s:fg_yellow .s:bg_back .s:fmt_none
+exe "hi! perlStatementFileDesc". s:fg_cyan.s:bg_back.s:fmt_none
+
+"}}}
+" tex highlighting "{{{
+" ---------------------------------------------------------------------
+exe "hi! texStatement" . s:fg_cyan .s:bg_back .s:fmt_none
+exe "hi! texMathZoneX" . s:fg_yellow .s:bg_back .s:fmt_none
+exe "hi! texMathMatcher" . s:fg_yellow .s:bg_back .s:fmt_none
+exe "hi! texMathMatcher" . s:fg_yellow .s:bg_back .s:fmt_none
+exe "hi! texRefLabel" . s:fg_yellow .s:bg_back .s:fmt_none
+"}}}
+" ruby highlighting "{{{
+" ---------------------------------------------------------------------
+exe "hi! rubyDefine" . s:fg_base1 .s:bg_back .s:fmt_bold
+"rubyInclude
+"rubySharpBang
+"rubyAccess
+"rubyPredefinedVariable
+"rubyBoolean
+"rubyClassVariable
+"rubyBeginEnd
+"rubyRepeatModifier
+"hi! link rubyArrayDelimiter Special " [ , , ]
+"rubyCurlyBlock { , , }
+
+"hi! link rubyClass Keyword
+"hi! link rubyModule Keyword
+"hi! link rubyKeyword Keyword
+"hi! link rubyOperator Operator
+"hi! link rubyIdentifier Identifier
+"hi! link rubyInstanceVariable Identifier
+"hi! link rubyGlobalVariable Identifier
+"hi! link rubyClassVariable Identifier
+"hi! link rubyConstant Type
+"}}}
+" haskell syntax highlighting"{{{
+" ---------------------------------------------------------------------
+" For use with syntax/haskell.vim : Haskell Syntax File
+" http://www.vim.org/scripts/script.php?script_id=3034
+" See also Steffen Siering's github repository:
+" http://github.com/urso/dotrc/blob/master/vim/syntax/haskell.vim
+" ---------------------------------------------------------------------
+"
+" Treat True and False specially, see the plugin referenced above
+let hs_highlight_boolean=1
+" highlight delims, see the plugin referenced above
+let hs_highlight_delimiters=1
+
+exe "hi! cPreCondit". s:fg_orange.s:bg_none .s:fmt_none
+
+exe "hi! VarId" . s:fg_blue .s:bg_none .s:fmt_none
+exe "hi! ConId" . s:fg_yellow .s:bg_none .s:fmt_none
+exe "hi! hsImport" . s:fg_magenta.s:bg_none .s:fmt_none
+exe "hi! hsString" . s:fg_base00 .s:bg_none .s:fmt_none
+
+exe "hi! hsStructure" . s:fg_cyan .s:bg_none .s:fmt_none
+exe "hi! hs_hlFunctionName" . s:fg_blue .s:bg_none
+exe "hi! hsStatement" . s:fg_cyan .s:bg_none .s:fmt_none
+exe "hi! hsImportLabel" . s:fg_cyan .s:bg_none .s:fmt_none
+exe "hi! hs_OpFunctionName" . s:fg_yellow .s:bg_none .s:fmt_none
+exe "hi! hs_DeclareFunction" . s:fg_orange .s:bg_none .s:fmt_none
+exe "hi! hsVarSym" . s:fg_cyan .s:bg_none .s:fmt_none
+exe "hi! hsType" . s:fg_yellow .s:bg_none .s:fmt_none
+exe "hi! hsTypedef" . s:fg_cyan .s:bg_none .s:fmt_none
+exe "hi! hsModuleName" . s:fg_green .s:bg_none .s:fmt_undr
+exe "hi! hsModuleStartLabel" . s:fg_magenta.s:bg_none .s:fmt_none
+hi! link hsImportParams Delimiter
+hi! link hsDelimTypeExport Delimiter
+hi! link hsModuleStartLabel hsStructure
+hi! link hsModuleWhereLabel hsModuleStartLabel
+
+" following is for the haskell-conceal plugin
+" the first two items don't have an impact, but better safe
+exe "hi! hsNiceOperator" . s:fg_cyan .s:bg_none .s:fmt_none
+exe "hi! hsniceoperator" . s:fg_cyan .s:bg_none .s:fmt_none
+
+"}}}
+" pandoc markdown syntax highlighting "{{{
+" ---------------------------------------------------------------------
+
+"PandocHiLink pandocNormalBlock
+exe "hi! pandocTitleBlock" .s:fg_blue .s:bg_none .s:fmt_none
+exe "hi! pandocTitleBlockTitle" .s:fg_blue .s:bg_none .s:fmt_bold
+exe "hi! pandocTitleComment" .s:fg_blue .s:bg_none .s:fmt_bold
+exe "hi! pandocComment" .s:fg_base01 .s:bg_none .s:fmt_ital
+exe "hi! pandocVerbatimBlock" .s:fg_yellow .s:bg_none .s:fmt_none
+hi! link pandocVerbatimBlockDeep pandocVerbatimBlock
+hi! link pandocCodeBlock pandocVerbatimBlock
+hi! link pandocCodeBlockDelim pandocVerbatimBlock
+exe "hi! pandocBlockQuote" .s:fg_blue .s:bg_none .s:fmt_none
+exe "hi! pandocBlockQuoteLeader1" .s:fg_blue .s:bg_none .s:fmt_none
+exe "hi! pandocBlockQuoteLeader2" .s:fg_cyan .s:bg_none .s:fmt_none
+exe "hi! pandocBlockQuoteLeader3" .s:fg_yellow .s:bg_none .s:fmt_none
+exe "hi! pandocBlockQuoteLeader4" .s:fg_red .s:bg_none .s:fmt_none
+exe "hi! pandocBlockQuoteLeader5" .s:fg_base0 .s:bg_none .s:fmt_none
+exe "hi! pandocBlockQuoteLeader6" .s:fg_base01 .s:bg_none .s:fmt_none
+exe "hi! pandocListMarker" .s:fg_magenta.s:bg_none .s:fmt_none
+exe "hi! pandocListReference" .s:fg_magenta.s:bg_none .s:fmt_undr
+
+" Definitions
+" ---------------------------------------------------------------------
+let s:fg_pdef = s:fg_violet
+exe "hi! pandocDefinitionBlock" .s:fg_pdef .s:bg_none .s:fmt_none
+exe "hi! pandocDefinitionTerm" .s:fg_pdef .s:bg_none .s:fmt_stnd
+exe "hi! pandocDefinitionIndctr" .s:fg_pdef .s:bg_none .s:fmt_bold
+exe "hi! pandocEmphasisDefinition" .s:fg_pdef .s:bg_none .s:fmt_ital
+exe "hi! pandocEmphasisNestedDefinition" .s:fg_pdef .s:bg_none .s:fmt_bldi
+exe "hi! pandocStrongEmphasisDefinition" .s:fg_pdef .s:bg_none .s:fmt_bold
+exe "hi! pandocStrongEmphasisNestedDefinition" .s:fg_pdef.s:bg_none.s:fmt_bldi
+exe "hi! pandocStrongEmphasisEmphasisDefinition" .s:fg_pdef.s:bg_none.s:fmt_bldi
+exe "hi! pandocStrikeoutDefinition" .s:fg_pdef .s:bg_none .s:fmt_revr
+exe "hi! pandocVerbatimInlineDefinition" .s:fg_pdef .s:bg_none .s:fmt_none
+exe "hi! pandocSuperscriptDefinition" .s:fg_pdef .s:bg_none .s:fmt_none
+exe "hi! pandocSubscriptDefinition" .s:fg_pdef .s:bg_none .s:fmt_none
+
+" Tables
+" ---------------------------------------------------------------------
+let s:fg_ptable = s:fg_blue
+exe "hi! pandocTable" .s:fg_ptable.s:bg_none .s:fmt_none
+exe "hi! pandocTableStructure" .s:fg_ptable.s:bg_none .s:fmt_none
+hi! link pandocTableStructureTop pandocTableStructre
+hi! link pandocTableStructureEnd pandocTableStructre
+exe "hi! pandocTableZebraLight" .s:fg_ptable.s:bg_base03.s:fmt_none
+exe "hi! pandocTableZebraDark" .s:fg_ptable.s:bg_base02.s:fmt_none
+exe "hi! pandocEmphasisTable" .s:fg_ptable.s:bg_none .s:fmt_ital
+exe "hi! pandocEmphasisNestedTable" .s:fg_ptable.s:bg_none .s:fmt_bldi
+exe "hi! pandocStrongEmphasisTable" .s:fg_ptable.s:bg_none .s:fmt_bold
+exe "hi! pandocStrongEmphasisNestedTable" .s:fg_ptable.s:bg_none .s:fmt_bldi
+exe "hi! pandocStrongEmphasisEmphasisTable" .s:fg_ptable.s:bg_none .s:fmt_bldi
+exe "hi! pandocStrikeoutTable" .s:fg_ptable.s:bg_none .s:fmt_revr
+exe "hi! pandocVerbatimInlineTable" .s:fg_ptable.s:bg_none .s:fmt_none
+exe "hi! pandocSuperscriptTable" .s:fg_ptable.s:bg_none .s:fmt_none
+exe "hi! pandocSubscriptTable" .s:fg_ptable.s:bg_none .s:fmt_none
+
+" Headings
+" ---------------------------------------------------------------------
+let s:fg_phead = s:fg_orange
+exe "hi! pandocHeading" .s:fg_phead .s:bg_none.s:fmt_bold
+exe "hi! pandocHeadingMarker" .s:fg_yellow.s:bg_none.s:fmt_bold
+exe "hi! pandocEmphasisHeading" .s:fg_phead .s:bg_none.s:fmt_bldi
+exe "hi! pandocEmphasisNestedHeading" .s:fg_phead .s:bg_none.s:fmt_bldi
+exe "hi! pandocStrongEmphasisHeading" .s:fg_phead .s:bg_none.s:fmt_bold
+exe "hi! pandocStrongEmphasisNestedHeading" .s:fg_phead .s:bg_none.s:fmt_bldi
+exe "hi! pandocStrongEmphasisEmphasisHeading".s:fg_phead .s:bg_none.s:fmt_bldi
+exe "hi! pandocStrikeoutHeading" .s:fg_phead .s:bg_none.s:fmt_revr
+exe "hi! pandocVerbatimInlineHeading" .s:fg_phead .s:bg_none.s:fmt_bold
+exe "hi! pandocSuperscriptHeading" .s:fg_phead .s:bg_none.s:fmt_bold
+exe "hi! pandocSubscriptHeading" .s:fg_phead .s:bg_none.s:fmt_bold
+
+" Links
+" ---------------------------------------------------------------------
+exe "hi! pandocLinkDelim" .s:fg_base01 .s:bg_none .s:fmt_none
+exe "hi! pandocLinkLabel" .s:fg_blue .s:bg_none .s:fmt_undr
+exe "hi! pandocLinkText" .s:fg_blue .s:bg_none .s:fmt_undb
+exe "hi! pandocLinkURL" .s:fg_base00 .s:bg_none .s:fmt_undr
+exe "hi! pandocLinkTitle" .s:fg_base00 .s:bg_none .s:fmt_undi
+exe "hi! pandocLinkTitleDelim" .s:fg_base01 .s:bg_none .s:fmt_undi .s:sp_base00
+exe "hi! pandocLinkDefinition" .s:fg_cyan .s:bg_none .s:fmt_undr .s:sp_base00
+exe "hi! pandocLinkDefinitionID" .s:fg_blue .s:bg_none .s:fmt_bold
+exe "hi! pandocImageCaption" .s:fg_violet .s:bg_none .s:fmt_undb
+exe "hi! pandocFootnoteLink" .s:fg_green .s:bg_none .s:fmt_undr
+exe "hi! pandocFootnoteDefLink" .s:fg_green .s:bg_none .s:fmt_bold
+exe "hi! pandocFootnoteInline" .s:fg_green .s:bg_none .s:fmt_undb
+exe "hi! pandocFootnote" .s:fg_green .s:bg_none .s:fmt_none
+exe "hi! pandocCitationDelim" .s:fg_magenta.s:bg_none .s:fmt_none
+exe "hi! pandocCitation" .s:fg_magenta.s:bg_none .s:fmt_none
+exe "hi! pandocCitationID" .s:fg_magenta.s:bg_none .s:fmt_undr
+exe "hi! pandocCitationRef" .s:fg_magenta.s:bg_none .s:fmt_none
+
+" Main Styles
+" ---------------------------------------------------------------------
+exe "hi! pandocStyleDelim" .s:fg_base01 .s:bg_none .s:fmt_none
+exe "hi! pandocEmphasis" .s:fg_base0 .s:bg_none .s:fmt_ital
+exe "hi! pandocEmphasisNested" .s:fg_base0 .s:bg_none .s:fmt_bldi
+exe "hi! pandocStrongEmphasis" .s:fg_base0 .s:bg_none .s:fmt_bold
+exe "hi! pandocStrongEmphasisNested" .s:fg_base0 .s:bg_none .s:fmt_bldi
+exe "hi! pandocStrongEmphasisEmphasis" .s:fg_base0 .s:bg_none .s:fmt_bldi
+exe "hi! pandocStrikeout" .s:fg_base01 .s:bg_none .s:fmt_revr
+exe "hi! pandocVerbatimInline" .s:fg_yellow .s:bg_none .s:fmt_none
+exe "hi! pandocSuperscript" .s:fg_violet .s:bg_none .s:fmt_none
+exe "hi! pandocSubscript" .s:fg_violet .s:bg_none .s:fmt_none
+
+exe "hi! pandocRule" .s:fg_blue .s:bg_none .s:fmt_bold
+exe "hi! pandocRuleLine" .s:fg_blue .s:bg_none .s:fmt_bold
+exe "hi! pandocEscapePair" .s:fg_red .s:bg_none .s:fmt_bold
+exe "hi! pandocCitationRef" .s:fg_magenta.s:bg_none .s:fmt_none
+exe "hi! pandocNonBreakingSpace" . s:fg_red .s:bg_none .s:fmt_revr
+hi! link pandocEscapedCharacter pandocEscapePair
+hi! link pandocLineBreak pandocEscapePair
+
+" Embedded Code
+" ---------------------------------------------------------------------
+exe "hi! pandocMetadataDelim" .s:fg_base01 .s:bg_none .s:fmt_none
+exe "hi! pandocMetadata" .s:fg_blue .s:bg_none .s:fmt_none
+exe "hi! pandocMetadataKey" .s:fg_blue .s:bg_none .s:fmt_none
+exe "hi! pandocMetadata" .s:fg_blue .s:bg_none .s:fmt_bold
+hi! link pandocMetadataTitle pandocMetadata
+
+"}}}
+" Utility autocommand "{{{
+" ---------------------------------------------------------------------
+" In cases where Solarized is initialized inside a terminal vim session and
+" then transferred to a gui session via the command `:gui`, the gui vim process
+" does not re-read the colorscheme (or .vimrc for that matter) so any `has_gui`
+" related code that sets gui specific values isn't executed.
+"
+" Currently, Solarized sets only the cterm or gui values for the colorscheme
+" depending on gui or terminal mode. It's possible that, if the following
+" autocommand method is deemed excessively poor form, that approach will be
+" used again and the autocommand below will be dropped.
+"
+" However it seems relatively benign in this case to include the autocommand
+" here. It fires only in cases where vim is transferring from terminal to gui
+" mode (detected with the script scope s:vmode variable). It also allows for
+" other potential terminal customizations that might make gui mode suboptimal.
+"
+autocmd GUIEnter * if (s:vmode != "gui") | exe "colorscheme " . g:colors_name | endif
+"}}}
+" Highlight Trailing Space {{{
+" Experimental: Different highlight when on cursorline
+function! s:SolarizedHiTrail()
+ if g:solarized_hitrail==0
+ hi! clear solarizedTrailingSpace
+ else
+ syn match solarizedTrailingSpace "\s*$"
+ exe "hi! solarizedTrailingSpace " .s:fmt_undr .s:fg_red .s:bg_none .s:sp_red
+ endif
+endfunction
+augroup SolarizedHiTrail
+ autocmd!
+ if g:solarized_hitrail==1
+ autocmd! Syntax * call s:SolarizedHiTrail()
+ autocmd! ColorScheme * if g:colors_name == "solarized" | call s:SolarizedHiTrail() | else | augroup! s:SolarizedHiTrail | endif
+ endif
+augroup END
+" }}}
+" Menus "{{{
+" ---------------------------------------------------------------------
+" Turn off Solarized menu by including the following assignment in your .vimrc:
+"
+" let g:solarized_menu=0
+
+function! s:SolarizedOptions()
+ new "new buffer
+ setf vim "vim filetype
+ let failed = append(0, s:defaults_list)
+ let failed = append(0, s:colorscheme_list)
+ let failed = append(0, s:options_list)
+ let failed = append(0, s:lazycat_list)
+ 0 "jump back to the top
+endfunction
+if !exists(":SolarizedOptions")
+ command SolarizedOptions :call s:SolarizedOptions()
+endif
+
+function! SolarizedMenu()
+ if exists("g:loaded_solarized_menu")
+ try
+ silent! aunmenu Solarized
+ endtry
+ endif
+ let g:loaded_solarized_menu = 1
+
+ if g:colors_name == "solarized" && g:solarized_menu != 0
+
+ amenu &Solarized.&Contrast.&Low\ Contrast :let g:solarized_contrast="low" \| colorscheme solarized<CR>
+ amenu &Solarized.&Contrast.&Normal\ Contrast :let g:solarized_contrast="normal" \| colorscheme solarized<CR>
+ amenu &Solarized.&Contrast.&High\ Contrast :let g:solarized_contrast="high" \| colorscheme solarized<CR>
+ an &Solarized.&Contrast.-sep- <Nop>
+ amenu &Solarized.&Contrast.&Help:\ Contrast :help 'solarized_contrast'<CR>
+
+ amenu &Solarized.&Visibility.&Low\ Visibility :let g:solarized_visibility="low" \| colorscheme solarized<CR>
+ amenu &Solarized.&Visibility.&Normal\ Visibility :let g:solarized_visibility="normal" \| colorscheme solarized<CR>
+ amenu &Solarized.&Visibility.&High\ Visibility :let g:solarized_visibility="high" \| colorscheme solarized<CR>
+ an &Solarized.&Visibility.-sep- <Nop>
+ amenu &Solarized.&Visibility.&Help:\ Visibility :help 'solarized_visibility'<CR>
+
+ amenu &Solarized.&Background.&Toggle\ Background :ToggleBG<CR>
+ amenu &Solarized.&Background.&Dark\ Background :set background=dark \| colorscheme solarized<CR>
+ amenu &Solarized.&Background.&Light\ Background :set background=light \| colorscheme solarized<CR>
+ an &Solarized.&Background.-sep- <Nop>
+ amenu &Solarized.&Background.&Help:\ ToggleBG :help togglebg<CR>
+
+ if g:solarized_bold==0 | let l:boldswitch="On" | else | let l:boldswitch="Off" | endif
+ exe "amenu &Solarized.&Styling.&Turn\\ Bold\\ ".l:boldswitch." :let g:solarized_bold=(abs(g:solarized_bold-1)) \\| colorscheme solarized<CR>"
+ if g:solarized_italic==0 | let l:italicswitch="On" | else | let l:italicswitch="Off" | endif
+ exe "amenu &Solarized.&Styling.&Turn\\ Italic\\ ".l:italicswitch." :let g:solarized_italic=(abs(g:solarized_italic-1)) \\| colorscheme solarized<CR>"
+ if g:solarized_underline==0 | let l:underlineswitch="On" | else | let l:underlineswitch="Off" | endif
+ exe "amenu &Solarized.&Styling.&Turn\\ Underline\\ ".l:underlineswitch." :let g:solarized_underline=(abs(g:solarized_underline-1)) \\| colorscheme solarized<CR>"
+
+ amenu &Solarized.&Diff\ Mode.&Low\ Diff\ Mode :let g:solarized_diffmode="low" \| colorscheme solarized<CR>
+ amenu &Solarized.&Diff\ Mode.&Normal\ Diff\ Mode :let g:solarized_diffmode="normal" \| colorscheme solarized<CR>
+ amenu &Solarized.&Diff\ Mode.&High\ Diff\ Mode :let g:solarized_diffmode="high" \| colorscheme solarized<CR>
+
+ if g:solarized_hitrail==0 | let l:hitrailswitch="On" | else | let l:hitrailswitch="Off" | endif
+ exe "amenu &Solarized.&Experimental.&Turn\\ Highlight\\ Trailing\\ Spaces\\ ".l:hitrailswitch." :let g:solarized_hitrail=(abs(g:solarized_hitrail-1)) \\| colorscheme solarized<CR>"
+ an &Solarized.&Experimental.-sep- <Nop>
+ amenu &Solarized.&Experimental.&Help:\ HiTrail :help 'solarized_hitrail'<CR>
+
+ an &Solarized.-sep1- <Nop>
+
+ amenu &Solarized.&Autogenerate\ options :SolarizedOptions<CR>
+
+ an &Solarized.-sep2- <Nop>
+
+ amenu &Solarized.&Help.&Solarized\ Help :help solarized<CR>
+ amenu &Solarized.&Help.&Toggle\ Background\ Help :help togglebg<CR>
+ amenu &Solarized.&Help.&Removing\ This\ Menu :help solarized-menu<CR>
+
+ an 9999.77 &Help.&Solarized\ Colorscheme :help solarized<CR>
+ an 9999.78 &Help.&Toggle\ Background :help togglebg<CR>
+ an 9999.79 &Help.-sep3- <Nop>
+
+ endif
+endfunction
+
+autocmd ColorScheme * if g:colors_name != "solarized" | silent! aunmenu Solarized | else | call SolarizedMenu() | endif
+
+"}}}
+" License "{{{
+" ---------------------------------------------------------------------
+"
+" Copyright (c) 2011 Ethan Schoonover
+"
+" Permission is hereby granted, free of charge, to any person obtaining a copy
+" of this software and associated documentation files (the "Software"), to deal
+" in the Software without restriction, including without limitation the rights
+" to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+" copies of the Software, and to permit persons to whom the Software is
+" furnished to do so, subject to the following conditions:
+"
+" The above copyright notice and this permission notice shall be included in
+" all copies or substantial portions of the Software.
+"
+" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+" AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+" LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+" OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+" THE SOFTWARE.
+"
+" vim:foldmethod=marker:foldlevel=0
+"}}}
diff --git a/config/old/vim/doc/Colorizer.txt b/config/old/vim/doc/Colorizer.txt
new file mode 100644
index 0000000..c235d76
--- /dev/null
+++ b/config/old/vim/doc/Colorizer.txt
@@ -0,0 +1,432 @@
+*Colorizer.txt* A plugin to color colornames and codes
+
+Author: Christian Brabandt <cb@256bit.org>
+Version: 0.10 Thu, 27 Mar 2014 23:12:43 +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|
+
+==============================================================================
+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.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
diff --git a/config/old/vim/doc/tags b/config/old/vim/doc/tags
new file mode 100644
index 0000000..bf72e29
--- /dev/null
+++ b/config/old/vim/doc/tags
@@ -0,0 +1,43 @@
+: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-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*
+RelativeNumberCurrentWindow-configuration RelativeNumberCurrentWindow.txt /*RelativeNumberCurrentWindow-configuration*
+RelativeNumberCurrentWindow-dependencies RelativeNumberCurrentWindow.txt /*RelativeNumberCurrentWindow-dependencies*
+RelativeNumberCurrentWindow-description RelativeNumberCurrentWindow.txt /*RelativeNumberCurrentWindow-description*
+RelativeNumberCurrentWindow-history RelativeNumberCurrentWindow.txt /*RelativeNumberCurrentWindow-history*
+RelativeNumberCurrentWindow-ideas RelativeNumberCurrentWindow.txt /*RelativeNumberCurrentWindow-ideas*
+RelativeNumberCurrentWindow-installation RelativeNumberCurrentWindow.txt /*RelativeNumberCurrentWindow-installation*
+RelativeNumberCurrentWindow-known-problems RelativeNumberCurrentWindow.txt /*RelativeNumberCurrentWindow-known-problems*
+RelativeNumberCurrentWindow-limitations RelativeNumberCurrentWindow.txt /*RelativeNumberCurrentWindow-limitations*
+RelativeNumberCurrentWindow-todo RelativeNumberCurrentWindow.txt /*RelativeNumberCurrentWindow-todo*
+RelativeNumberCurrentWindow-usage RelativeNumberCurrentWindow.txt /*RelativeNumberCurrentWindow-usage*
+RelativeNumberCurrentWindow.txt RelativeNumberCurrentWindow.txt /*RelativeNumberCurrentWindow.txt*
+RelativeNumberCurrentWindow.vim RelativeNumberCurrentWindow.txt /*RelativeNumberCurrentWindow.vim*
+g:RelativeNumberCurrentWindow_OnFocus RelativeNumberCurrentWindow.txt /*g:RelativeNumberCurrentWindow_OnFocus*
+g:RelativeNumberCurrentWindow_OnInsert RelativeNumberCurrentWindow.txt /*g:RelativeNumberCurrentWindow_OnInsert*
+g:RelativeNumberCurrentWindow_SameNumberWidth RelativeNumberCurrentWindow.txt /*g:RelativeNumberCurrentWindow_SameNumberWidth*
diff --git a/config/old/vim/ftdetect/z80.vim b/config/old/vim/ftdetect/z80.vim
new file mode 100644
index 0000000..8848fa7
--- /dev/null
+++ b/config/old/vim/ftdetect/z80.vim
@@ -0,0 +1 @@
+autocmd BufNewFile,BufRead *.z80,ti83plus.inc,myroutines.inc set filetype=z80
diff --git a/config/old/vim/indent/z80.vim b/config/old/vim/indent/z80.vim
new file mode 100644
index 0000000..d06824d
--- /dev/null
+++ b/config/old/vim/indent/z80.vim
@@ -0,0 +1,35 @@
+" borrowed from https://github.com/philj56/vim-asm-indent/blob/master/indent/asm.vim
+if exists("b:did_indent")
+ finish
+endif
+let b:did_indent = 1
+
+setlocal indentexpr=GetAsmIndent()
+setlocal indentkeys=<:>,!^F,o,O
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+function s:buffer_shiftwidth()
+ return shiftwidth()
+endfunction
+
+function! GetAsmIndent()
+ let line = getline(v:lnum)
+ let ind = s:buffer_shiftwidth()
+ let line_num = v:lnum
+
+ if line_num == 0
+ let ind = 0
+ endif
+ " If the line is a label (starts with ':' terminated keyword),
+ " then don't indent
+ if line =~ '^\s*\k\+:'
+ let ind = 0
+ endif
+ return ind
+endfunction
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
diff --git a/config/old/vim/syntax/bash.vim b/config/old/vim/syntax/bash.vim
new file mode 100644
index 0000000..b3832b8
--- /dev/null
+++ b/config/old/vim/syntax/bash.vim
@@ -0,0 +1 @@
+command printVar execute 'substitute/^\( *\)\(.*\)$/\1echo "${\2}"/'
diff --git a/config/old/vim/syntax/html.vim b/config/old/vim/syntax/html.vim
new file mode 100644
index 0000000..37eb3d0
--- /dev/null
+++ b/config/old/vim/syntax/html.vim
@@ -0,0 +1,12 @@
+let b:current_syntax = "html"
+set ts=4
+set sw=4
+
+inoremap < <><left>
+" map [[ ?{<CR>w99[{
+" map ][ /}<CR>b99]}
+" map ]] j0[[%/{<CR>
+" map [] k$][%?}<CR>
+
+":%s/b_call[(]\(.*\)[)]/bcall \1
+
diff --git a/config/old/vim/syntax/python.vim b/config/old/vim/syntax/python.vim
new file mode 100644
index 0000000..32608f4
--- /dev/null
+++ b/config/old/vim/syntax/python.vim
@@ -0,0 +1,11 @@
+set ts=4
+set sw=4
+
+" map [[ ?{<CR>w99[{
+" map ][ /}<CR>b99]}
+" map ]] j0[[%/{<CR>
+" map [] k$][%?}<CR>
+
+":%s/b_call[(]\(.*\)[)]/bcall \1
+noremap Zdp :execute 'norm _deds('<CR>
+noremap Zpp :execute 'norm yss)Iprint'<CR>
diff --git a/config/old/vim/syntax/tibasic.vim b/config/old/vim/syntax/tibasic.vim
new file mode 100644
index 0000000..7cfd94f
--- /dev/null
+++ b/config/old/vim/syntax/tibasic.vim
@@ -0,0 +1,21 @@
+
+" TI-Basic highlighting for VIM
+syn match tibGroupers '\v(\(|\)|\"|\{|\}|\[|\])'
+syn match tibOp '\v(%U0000fe62|%U000025c4|%U000025ba|%U000025a1|%U00002265|%U00002264|%U00002260|%U0000222b|%U00002220|%U0000221a|%U00002193|%U00002192|%U00002191|%U0000207b|%U00002044|%U00002026|%U000000d7|%U000000bf|%U000000b7|%U000000b4|%U000000b0|%U000000a8|%U000000a1|\~|\`|\^|\?|\>|\=|\<|\/|\-|\+|\*|\\\'|\%|\!|\ xor\ |\ or\ |\ nPr\ |\ nCr\ |\ and\ )'
+syn match tibNum '\v(0|1|2|3|4|5|6|7|8|9|\.|\|E|%U00001d07)'
+syn match tibName '\v(%U00002206Y|%U00002206X|%U00002206Tbl|%U00001e8b%U00002082|%U00001e8b%U00002081|%U00001e8b2|%U00001e8b1|%U00001e8b|%U00001e57%U00002082|%U00001e57%U00002081|%U00001e572|%U00001e571|%U000003c7%U000000b2|%U000003c7\^2|%U000003c3y|%U000003c3x|%U000003b8step|%U000003b8Min|%U000003b8Max|%U000003b8|%U000003a3y%U000000b2|%U000003a3y\^2|%U000003a3y|%U000003a3x%U000000b2|%U000003a3xy|%U000003a3x\^2|%U000003a3x|%U00000233|\|w|\|v|\|u|\|P\/Y|\|N|\|C\/Y|\{r6\}|\{r5\}|\{r4\}|\{r3\}|\{r2\}|\{r1\}|\{Y9\}|\{Y8\}|\{Y7\}|\{Y6\}|\{Y6T\}|\{Y5\}|\{Y5T\}|\{Y4\}|\{Y4T\}|\{Y3\}|\{Y3T\}|\{Y2\}|\{Y2T\}|\{Y1\}|\{Y1T\}|\{Y0\}|\{X6T\}|\{X5T\}|\{X4T\}|\{X3T\}|\{X2T\}|\{X1T\}|y%U00002083|y%U00002082|y%U00002081|x%U00002083|x%U00002082|x%U00002081|xhat%U00002082|xhat%U00002081|w\(nMin\)|v\(nMin\)|u\(nMin\)|thetastep|thetaMin|thetaMax|theta|sigmay%U000000b2|sigmax%U000000b2|r%U00002086|r%U00002085|r%U00002084|r%U00002083|r%U00002082|r%U00002081|r%U000000b2|phat%U00002082|phat%U00002081|n%U00002082|n%U00002081|nMin|nMax|chi%U000000b2|\[%U00001e57\]|\[\|e\]|\[\|d\]|\[\|c\]|\[\|b\]|\[\|a\]|\[\|F\]|\[z\]|\[yhat\]|\[y3\]|\[y2\]|\[y1\]|\[xhat\]|\[xhat2\]|\[xhat1\]|\[x3\]|\[x2\]|\[x1\]|\[upper\]|\[t\]|\[sigmay\]|\[sigmax\]|\[s\]|\[recursiven\]|\[r\^2\]|\[r\]|\[phat\]|\[phat2\]|\[phat1\]|\[p\]|\[n\]|\[n2\]|\[n1\]|\[minY\]|\[minX\]|\[maxY\]|\[maxX\]|\[lower\]|\[factordf\]|\[factorSS\]|\[factorMS\]|\[errordf\]|\[errorSS\]|\[errorMS\]|\[df\]|\[chi\^2\]|\[Sy\]|\[Sxp\]|\[Sx\]|\[Sx2\]|\[Sx1\]|\[Sigmay\^2\]|\[Sigmay\]|\[Sigmaxy\]|\[Sigmax\^2\]|\[Sigmax\]|\[RegEQ\]|\[R\^2\]|\[Q3\]|\[Q1\]|\[Med\]|\[J\]|\[I\]|\[H\]|\[G\]|\[F\]|\[E\]|\[D\]|\[C\]|\[B\]|\[A\]|Z%U000003b8step|Z%U000003b8min|Z%U000003b8max|Zw\(nMin\)|Zv\(nmin\)|Zu\(nmin\)|Zthetastep|Zthetamin|Zthetamax|ZnMin|ZnMax|ZYscl|ZYmin|ZYmax|ZXscl|ZXres|ZXmin|ZXmax|ZTstep|ZTmin|ZTmax|ZPlotStep|ZPlotStart|Z|Y%U00002089|Y%U00002088|Y%U00002087|Y%U00002086%U00001d1b|Y%U00002086|Y%U00002085%U00001d1b|Y%U00002085|Y%U00002084%U00001d1b|Y%U00002084|Y%U00002083%U00001d1b|Y%U00002083|Y%U00002082%U00001d1b|Y%U00002082|Y%U00002081%U00001d1b|Y%U00002081|Y%U00002080|Yscl|Ymin|Ymax|YFact|Y|X%U00002086%U00001d1b|X%U00002085%U00001d1b|X%U00002084%U00001d1b|X%U00002083%U00001d1b|X%U00002082%U00001d1b|X%U00002081%U00001d1b|Xscl|Xres|Xmin|Xmax|XFact|X|W|Vn\-%U00002081|Vn\-1|V|Un\-%U00002081|Un\-1|U|Tstep|Tmin|Tmax|TblStart|TblInput|T|Sx%U00002082|Sx%U00002081|Str9|Str8|Str7|Str6|Str5|Str4|Str3|Str2|Str1|Str0|S|R%U000000b2|R|Q|PlotStep|PlotStart|Pic9|Pic8|Pic7|Pic6|Pic5|Pic4|Pic3|Pic2|Pic1|Pic0|PV|PMT|P|O|N|M|L%U00002086|L%U00002085|L%U00002084|L%U00002083|L%U00002082|L%U00002081|L6|L5|L4|L3|L2|L1|L|K|J|I\%|I|H|GDB9|GDB8|GDB7|GDB6|GDB5|GDB4|GDB3|GDB2|GDB1|GDB0|G|Fix\ |FV|F|E|DeltaY|DeltaX|DeltaTbl|D|C|B|A)'
+syn match tibControl '\v(If\ |Then|Else|While\ |Repeat\ |For\(|End|Return|Lbl\ |Goto\ |Pause\ |Stop|IS\>\(|DS\<\()'
+syn match tibStatement '\v(\>DMS|%U000025baDMS|\>Dec|%U000025baDec|\>Frac|%U000025baFrac|\-\>|Boxplot|\^\^r|\^\^o|\^\^\-1|%U0000207b%U000000b9|%U000002c9%U000000b9|\^\^2|\^\^T|\^\^3|round\(|pxl\-Test\(|augment\(|rowSwap\(|row\+\(|\*row\(|\*row\+\(|max\(|min\(|R\>Pr\(|R%U000025baPr\(|R\>Ptheta\(|R%U000025baPtheta\(|R\>P%U000003b8\(|R%U000025baP%U000003b8\(|P\>Rx\(|P%U000025baRx\(|P\>Ry\(|P%U000025baRy\(|median\(|randM\(|mean\(|solve\(|seq\(|fnInt\(|nDeriv\(|fMin\(|fMax\(|\[i\]|CubicReg\ |QuartReg\ |\\\\n|Radian|Degree|Normal|Sci|Eng|Float|\<\=|\>\=|\!\=|Ans|Horiz|Full|Func|Param|Polar|Seq|IndpntAuto|IndpntAsk|DependAuto|DependAsk|Sequential|Simul|PolarGC|RectGC|CoordOn|CoordOff|Connected|Dot|AxesOn|AxesOff|GridOn|GridOff|LabelOn|LabelOff|Web|Time|uvAxes|vwAxes|uwAxes|plotsquare|squareplot|plotcross|crossplot|plotdot|dotplot|Trace|ClrDraw|ZStandard|ZTrig|ZBox|Zoom\ In|Zoom\ Out|ZSquare|ZInteger|ZPrevious|ZDecimal|ZoomStat|ZoomRcl|PrintScreen|ZoomSto|Text\(|FnOn\ |FnOff\ |StorePic\ |RecallPic\ |StoreGDB\ |RecallGDB\ |Line\(|Vertical\ |Pt\-On\(|Pt\-Off\(|Pt\-Change\(|Pxl\-On\(|Pxl\-Off\(|Pxl\-Change\(|Shade\(|Circle\(|Horizontal\ |Tangent\(|DrawInv\ |DrawF\ |rand|pi|getKey|\|\-|int\(|abs\(|det\(|identity\(|dim\(|sum\(|prod\(|not\(|iPart\(|fPart\(|npv\(|irr\(|bal\(|SigmaPrn\(|%U000003a3Prn\(|SigmaInt\(|%U000003a3Int\(|\>Nom\(|%U000025baNom\(|\>Eff\(|%U000025baEff\(|dbd\(|lcm\(|gcd\(|randInt\(|randBin\(|sub\(|stdDev|variance\(|inString\(|normalcdf\(|invNorm\(|tcdf\(|chi\^2cdf\(|%U000003c7\^2cdf\(|chi%U000000b2cdf\(|%U000003c7%U000000b2cdf\(|Fcdf\(|binompdf\(|binomcdf\(|poissonpdf\(|poissoncdf\(|geometpdf\(|geometcdf\(|normalpdf\(|tpdf\(|chi\^2pdf\(|%U000003c7\^2pdf\(|chi%U000000b2pdf\(|%U000003c7%U000000b2pdf\(|Fpdf\(|randNorm\(|tvm_Pmt|tvm_I\%|tvm_PV|tvm_N|tvm_FV|conj\(|real\(|imag\(|angle\(|cumSum\(|expr\(|length\(|DeltaList\(|ref\(|rref\(|\>Rect|%U000025baRect|\>Polar|%U000025baPolar|\[e\]|SinReg\ |Logistic\ |LinRegTTest\ |ShadeNorm\(|Shade_t\(|Shadechi\^2\(|Shade%U000003c7\^2\(|Shadechi%U000000b2\(|Shade%U000003c7%U000000b2\(|ShadeF\(|Matr\>list\(|Matr%U000025balist\(|List\>matr\(|List%U000025bamatr\(|Z\-Test\(|T\-Test\ |2\-SampZTest\(|1\-PropZTest\(|2\-PropZTest\(|chi\^2\-Test\(|%U000003c7\^2\-Test\(|chi%U000000b2\-Test\(|%U000003c7%U000000b2\-Test\(|ZInterval|2\-SampZInt\(|1\-PropZInt\(|2\-PropZInt\(|GraphStyle\(|2\-SampTTest\ |2\-SampFTest\ |TInterval\ |2\-SampTInt\ |SetUpEditor\ |Pmt_End|Pmt_Bgn|Real|re\^thetai|re\^%U000003b8i|a\+bi|ExprOn|ExprOff|ClrAllLists|GetCalc\(|DelVar\ |Equ\>String\(|Equ%U000025baString\(|String\>Equ\(|String%U000025baEqu\(|Clear\ Entries|Select\(|ANOVA\(|ModBoxPlot|NormProbPlot|G\-T|ZoomFit|DiagnosticOn|DiagnosticOff|Archive\ |UnArchive\ |Asm\(|AsmComp\(|AsmPrgm|\^\^\\\'|\|\\\'|\^\^\`|\|\`|\^\^\:|\|\:|\|\?|\|\!|alpha|beta|gamma|Delta|delta|epsilon|lambda|mu|greek_pi|\|%U000003c0|rho|Sigma|Phi|Omega|phat|chi|\|F|sigma|tau|GarbageCollect|\|\~|\.\.\.|\|\<|sharps|\^\^x|smallT|small0|small1|small2|small3|small4|small5|small6|small7|small8|small9|small10|%U00002081%U00002080|\<\||\|\>|uparrow|downarrow|xmark|integral|bolduparrow|bolddownarrow|squareroot|invertedequal|sqrt\(|%U0000221a\(|cuberoot\(|%U000000b3%U0000221a\(|ln\(|e\^\(|log\(|10\^|%U00002081%U00002080\^\(|sin\(|sin\^\-1\(|sin%U0000207b%U000000b9\(|cos\(|cos\^\-1\(|cos%U0000207b%U000000b9\(|tan\(|tan\^\-1\(|tan%U0000207b%U000000b9\(|sinh\(|sinh\^\-1\(|sinh%U0000207b%U000000b9\(|cosh\(|cosh\^\-1\(|soch%U0000207b%U000000b9\(|tanh\(|tanh\^\-1\(|tanh%U0000207b%U000000b9\(|Input\ |Prompt\ |Disp\ |DispGraph|Output\(|ClrHome|Fill\(|SortA\(|SortD\(|DispTable|Menu\(|Send\(|Get\(|PlotsOn\ |PlotsOff\ |Plot1\(|Plot2\(|Plot3\(|setDate\(|setTime\(|checkTmr\(|setDtFmt\(|setTmFmt\(|timeCnv\(|dayOfWk\(|getDtStr|getTmStr\(|getDate|getTime|startTmr|getDtFmt|getTmFmt|isClockOn|ClockOff|ClockOn|OpenLib\(|ExecLib|invT\(|chi\^2GOF\-Test\(|%U000003c7\^2GOF\-Test\(|chi%U000000b2GOF\-Test\(|%U000003c7%U000000b2GOF\-Test\(|LinRegTInt\ |Manual\-Fit\ |ZQuadrant1|ZFrac1\/2|ZFrac1\/3|ZFrac1\/4|ZFrac1\/5|ZFrac1\/8|ZFrac1\/10|mathprintbox|n\/d|Un\/d|\>n\/d\<\>Un\/d|%U000025ban\/d%U000025c4%U000025baUn\/d|\>n%U00002044d\<\>Un%U00002044d|%U000025ban%U00002044d%U000025c4%U000025baUn%U00002044d|\>F\<\>D|%U000025baF%U000025c4%U000025baD|remainder\(|Sigma\(|%U000003a3\(|logBASE\(|randIntNoRep\(|\[MATHPRINT\]|\[CLASSIC\]|\[n\/d\]|n%U00002044d|\[Un\/d\]|Un%U00002044d|\[AUTO\]|\[DEC\]|\[FRAC\]|xroot|%U000002e3%U0000221a|1\-Var\ Stats\ |2\-Var\ Stats|LinReg\(a\+bx\)\ |ExpReg\ |LnReg\ |PwrReg\ |Med\-Med\ |QuadReg\ |ClrList\ |ClrTable|Histogram|xyLine|Scatter|LinReg\(ax\+b\)\ )'
+syn match tibString '\v\".{-}(\"|(\r|%$|\n|\-\>|%U00002192)@=)'
+
+let b:current_syntax = "tibasic"
+
+
+hi def link tibGroupers Delimiters
+hi def link tibOp Operator
+hi def link tibNum Number
+hi def link tibName Identifier
+hi def link tibControl Keyword
+hi def link tibStatement Function
+hi def link tibString String
+
diff --git a/config/old/vim/syntax/z80.vim b/config/old/vim/syntax/z80.vim
new file mode 100644
index 0000000..8bafb14
--- /dev/null
+++ b/config/old/vim/syntax/z80.vim
@@ -0,0 +1,145 @@
+syn case ignore
+
+set isk=a-z,A-Z,48-57,',.,_
+
+syn sync fromstart
+
+" Common Z80 Assembly instructions
+syn keyword z80Inst adc add and bit call ccf cp cpd cpdr cpi cpir cpl
+syn keyword z80Inst daa dec di djnz ei ex exx halt im in
+syn keyword z80Inst inc ind ini indr inir jp jr ld ldd lddr ldi ldir
+syn keyword z80Inst neg nop or otdr otir out outd outi push pop
+syn keyword z80Inst res ret reti retn rl rla rlc rlca rld
+syn keyword z80Inst rr rra rrc rrca rrd rst sbc scf set sl1 sla slia sll sra
+syn keyword z80Inst srl sub xor
+
+" Grab the condition too
+syn match z80Inst "\s\+jp\s\+n\=[covz]\>" "Match Z C O V NZ NC NO NV
+syn match z80Inst "\s\+jp\s\+p[elo]\=\>" "Match P PE PO PL
+syn match z80Inst "\s\+jp\s\+mi\=\>" "Match M MI
+syn match z80Inst "\s\+jp\s\+eq\>" "Match EQ
+syn match z80Inst "\s\+jp\s\+[gn]e\>" "Match NE GE
+syn match z80Inst "\s\+jp\s\+lt\>" "Match LT
+syn match z80Inst "\s\+jp\s\+sn\=f\>" "Match SF SNF
+
+syn match z80Inst "\s\+jr\s\+n\=[zc]\>" "Match Z C NZ NC
+syn match z80Inst "\s\+jr\s\+eq\>" "Match EQ
+syn match z80Inst "\s\+jr\s\+[gn]e\>" "Match NE GE
+syn match z80Inst "\s\+jr\s\+lt\>" "Match LT
+
+syn match z80Inst "\s\+call\s\+n\=[covz]\>" "Match Z C O V NZ NC NO NV
+syn match z80Inst "\s\+call\s\+p[elo]\=\>" "Match P PE PO PL
+syn match z80Inst "\s\+call\s\+mi\=\>" "Match M MI
+syn match z80Inst "\s\+call\s\+eq\>" "Match EQ
+syn match z80Inst "\s\+call\s\+[gn]e\>" "Match NE GE
+syn match z80Inst "\s\+call\s\+lt\>" "Match LT
+syn match z80Inst "\s\+call\s\+sn\=f\>" "Match SF SNF
+
+syn match z80Inst "\s\+ret\s\+n\=[covz]\>" "Match Z C O V NZ NC NO NV
+syn match z80Inst "\s\+ret\s\+p[elo]\=\>" "Match P PE PO PL
+syn match z80Inst "\s\+ret\s\+mi\=\>" "Match M MI
+syn match z80Inst "\s\+ret\s\+eq\>" "Match EQ
+syn match z80Inst "\s\+ret\s\+[gn]e\>" "Match NE GE
+syn match z80Inst "\s\+ret\s\+lt\>" "Match LT
+syn match z80Inst "\s\+ret\s\+sn\=f\>" "Match SF SNF
+
+" Registers
+syn keyword z80Reg af af' bc de hl ix ixh ixl iy iyh iyl
+syn keyword z80Reg sp a b c d e f h i l r
+
+" Directives
+syn keyword z80PreProc equ org map ds defs dw defw db defb module endmodule
+syn keyword z80PreProc include incbin macro endmacro repeat rept endrepeat endr
+syn keyword z80PreProc ifdef ifndef if else endif rotate defpage page echo error
+
+syn keyword z80PreProc .equ .org .map .ds .defs .dw .defw .db .defb .module .endmodule
+syn keyword z80PreProc .include .incbin .macro .endmacro .repeat .rept .endrepeat .endr
+syn keyword z80PreProc .ifdef .ifndef .if .else .endif .rotate .defpage .page .echo .error
+
+" Strings
+syn region z80String start=/"/ skip=/\\"/ end=/"/ oneline
+syn region z80String start=/'/ end=/'/ oneline
+
+" Labels
+syn match z80Lbl "[A-Z_.?][A-Z_.?0-9]*:\="
+syn region z80Lbl2 start="(" end=")" oneline contains=z80Number,z80Lbl,z80Lbl2,z80Other
+
+" Operators
+syn match z80Other "[~+\-*/%^&=!<>]"
+
+" Numbers
+syn match z80Number "\<\$\>"
+syn match z80Number "\<[01]\+b\>"
+syn match z80Number "\<\d\x*h\>"
+syn match z80Number "\<\d\+\>"
+syn match z80Number "\<%[01]\+\>"
+syn match z80Number "\$[0-9a-fA-F]\+"
+syn match z80Number "\<&[01]\+\>"
+syn match z80Number "\<0x[0-9a-fA-F]\+\>"
+
+" Indirect register access
+syn region z80Reg start=/(ix/ end=/)/ keepend oneline contains=z80Lbl,z80Number,z80Reg,z80Other
+syn region z80Reg start=/(iy/ end=/)/ keepend oneline contains=z80Lbl,z80Number,z80Reg,z80Other
+syn match z80Reg "(b\=c)"
+syn match z80Reg "(de)"
+syn match z80Reg "(hl)"
+syn match z80Reg "(sp)"
+
+" Todo
+syn keyword cTodo contained TODO FIXME XXX
+
+" Comments
+syn match z80Comment ";.*$" contains=cTodo
+syn match z80Comment "^\*$"
+syn region z80Comment2 start="\<\.endasm\>" skip="\n" end="\<\.asm\>" keepend contains=z80Comment,z80Comment2
+syn region z80Comment start="\/\*" end="\*\/" contains=cTodo
+
+hi def link cTodo Todo
+
+" Define the default highlighting.
+" For version 5.7 and earlier: only when not done already
+" For version 5.8 and later: only when an item doesn't have highlighting yet
+if version >= 508 || !exists("did_z80_syntax_inits")
+if version < 508
+let did_z80_syntax_inits = 1
+command -nargs=+ HiLink hi link <args>
+else
+command -nargs=+ HiLink hi def link <args>
+endif
+
+HiLink z80Reg Constant
+HiLink z80Lbl Type
+HiLink z80Lbl2 Type
+HiLink z80Comment Comment
+HiLink z80Comment2 Comment
+HiLink z80Inst Statement
+HiLink z80Include Include
+HiLink z80PreProc PreProc
+HiLink z80Number Number
+HiLink z80String String
+HiLink z80Other Operator
+HiLink z80Todo Todo
+
+delcommand HiLink
+endif
+
+let b:current_syntax = "z80"
+set ts=4
+set sw=4
+
+" fails if comment on same line:
+command Z80Swap execute 'norm _wdt,wPld$F,P'
+noremap Zp :execute 'Z80Swap'<CR><CR>
+command Z80Template execute 'read template.z80'
+" Append template to file
+noremap Zt :execute 'Z80Template'<CR>
+" Set file to template
+noremap Zdd :execute 'norm ggdGZt11gg'<CR>
+" map [[ ?{<CR>w99[{
+" map ][ /}<CR>b99]}
+" map ]] j0[[%/{<CR>
+" map [] k$][%?}<CR>
+" vim: ts=8
+
+":%s/b_call[(]\(.*\)[)]/bcall \1
+
diff --git a/config/old/vim/vimrc b/config/old/vim/vimrc
new file mode 100755
index 0000000..03aebfe
--- /dev/null
+++ b/config/old/vim/vimrc
@@ -0,0 +1,117 @@
+" Heh
+
+filetype plugin indent on
+
+syntax on
+
+set runtimepath+=~/.config/vim,~/.config/vim/after
+set viminfo+=n~/.config/vim/viminfo
+" Plugins
+" s;https://github.com/\(.*\);Plug '\1';
+call plug#begin('~/.vim/plugged')
+Plug 'LordTlasT/live-server'
+Plug 'tpope/vim-endwise'
+Plug 'airblade/vim-gitgutter'
+Plug 'arcticicestudio/nord-vim'
+Plug 'godlygeek/tabular'
+Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
+Plug 'junegunn/fzf.vim'
+Plug 'michaeljsmith/vim-indent-object'
+Plug 'tpope/vim-capslock'
+Plug 'tpope/vim-commentary'
+Plug 'tpope/vim-fugitive'
+Plug 'tpope/vim-repeat'
+Plug 'tpope/vim-surround'
+Plug 'tpope/vim-vinegar'
+Plug 'yuezk/vim-js'
+call plug#end()
+
+set termguicolors " amazing!
+set signcolumn=yes " GitGutter
+set updatetime=100
+
+set tabstop=4 shiftwidth=4 " Turn tab to spaces
+set backspace=2 backspace=indent,eol,start " Turn backspaces into tabspaces
+set incsearch " Incremental search
+set clipboard=unnamed " Use system primary clipboard
+
+set number " Set (absolute) line numbers
+set relativenumber " make them hybrid
+set showmatch " Show matching bracket
+set showcmd " Show partial command in status line
+set laststatus=2 " show more status/file info
+set cursorline " Highlight line at cursor
+set ruler " Show cursor and progress in file
+set wildmenu " Show command options (autocomplete)
+
+set mouse= "nomouse
+set encoding=utf-8 " Set encoding
+set history=200 " Keep a lot more command history
+
+""""""""""""COLORSCHEME"""""""""""""""""""""""
+colo nord
+hi! Normal ctermbg=NONE guibg=NONE
+hi! NonText ctermbg=NONE guibg=NONE
+"""""""""""""""""""""""""""""""""""""""""""""
+
+let &t_SI = "\e[6 q" " Insert cursor
+let &t_EI = "\e[2 q" " Normal cursor
+
+let ghregex='\(^\|\s\s\)\zs\.\S\+' " Start netrw with dotfiles hidden
+let g:netrw_list_hide=ghregex
+
+let g:indentLine_fileTypeExclude = ['dashboard'] " No indentline on dashboard
+
+""""""""""""""""""" FUNCTIONS AND COMMANDS
+" Force quit faster
+command Q execute 'quit!'
+
+" autocomment z80
+autocmd FileType z80 setlocal commentstring=;\ %s
+
+" Return to last edit position
+autocmd BufReadPost *
+ \ if line("'\"") > 1 && line("'\"") <= line("$") |
+ \ exe "normal! g`\"" |
+ \ endif
+
+augroup nvim_term
+ autocmd!
+ autocmd TermOpen * startinsert
+ autocmd TermOpen * :setlocal nonumber norelativenumber signcolumn=no
+augroup END
+
+" Toggle status bar
+let s:hidden_all = 0
+function! ToggleHiddenAll()
+ if s:hidden_all == 0
+ let s:hidden_all = 1
+ set noshowmode noruler nonu nornu laststatus=0 noshowcmd signcolumn=no
+ else
+ let s:hidden_all = 0
+ set showmode ruler nu rnu laststatus=2 showcmd signcolumn=yes
+ endif
+endfunction
+
+
+""""""""""""""""""""" MAPPINGS """"""""""""""""""""""""
+let mapleader = ' '
+
+" Windows
+noremap <A-h> <C-W>h
+noremap <A-j> <C-W>j
+noremap <A-k> <C-W>k
+noremap <A-l> <C-W>l
+noremap <A-o> <C-W>o
+nnoremap <C-H> :call ToggleHiddenAll()<CR>
+
+" Closing brackets and quotes
+inoremap " ""<left>
+inoremap ' ''<left>
+inoremap ` ``<left>
+inoremap ( ()<left>
+inoremap [ []<left>
+inoremap { {}<left>
+
+" goto buffer
+nnoremap gb :buffers<CR>:buffer<Space>