From 725a9dd95869231dd3ddb66002a2ee8e9553e3f7 Mon Sep 17 00:00:00 2001 From: Daniel Lundin <dln@eintr.org> Date: Wed, 3 Jan 2018 08:47:21 +0100 Subject: [PATCH] Config updates --- .config/alacritty/alacritty.yml | 95 +- .config/nvim/init.vim | 138 +- .config/redshift.conf | 6 +- .gitconfig | 1 + .local/share/nvim/site/autoload/plug.vim | 2504 ++++++++++++++++++++++ .oh-my-zsh | 2 +- .tmux.conf | 6 +- .xinitrc | 2 +- .zshrc | 83 +- bin/dwm | Bin 46920 -> 50992 bytes bin/st | Bin 71616 -> 7 bytes 11 files changed, 2727 insertions(+), 110 deletions(-) create mode 100644 .local/share/nvim/site/autoload/plug.vim mode change 100755 => 120000 bin/st diff --git a/.config/alacritty/alacritty.yml b/.config/alacritty/alacritty.yml index 1594a64..d2ca657 100644 --- a/.config/alacritty/alacritty.yml +++ b/.config/alacritty/alacritty.yml @@ -30,7 +30,7 @@ font: style: Italic # Point size of the font - size: 11.0 + size: 16.0 # Offset is the extra space around each character. offset.y can be thought of # as modifying the linespacing, and offset.x as modifying the letter spacing. offset: @@ -41,61 +41,62 @@ font: render_timer: false # Colors (Tomorrow Night Bright) -colors: - # Default colors - primary: - background: '0xfafafa' - foreground: '0x1d1d1c' - - # Normal colors - normal: - black: '0x212121' - red: '0xb7141e' - green: '0x457b23' - yellow: '0xfc7b08' - blue: '0x134eb2' - magenta: '0x550087' - cyan: '0x0e707c' - white: '0xeeeeee' - - # Bright colors - bright: - black: '0x424242' - red: '0xe83a3f' - green: '0x7aba39' - yellow: '0xfc8e08' - blue: '0x53a4f3' - magenta: '0xa94dbb' - cyan: '0x26bad1' - white: '0xd8d8d8' -# Colors (Solarized Dark) # colors: # # Default colors # primary: -# background: '0x002b36' -# foreground: '0x839496' +# background: '0xfafafa' +# foreground: '0x1d1d1c' # # # Normal colors # normal: -# black: '0x073642' -# red: '0xdc322f' -# green: '0x859900' -# yellow: '0xb58900' -# blue: '0x268bd2' -# magenta: '0xd33682' -# cyan: '0x2aa198' -# white: '0xeee8d5' +# black: '0x212121' +# red: '0xb7141e' +# green: '0x457b23' +# yellow: '0xfc7b08' +# blue: '0x134eb2' +# magenta: '0x550087' +# cyan: '0x0e707c' +# white: '0xeeeeee' # # # Bright colors # bright: -# black: '0x002b36' -# red: '0xcb4b16' -# green: '0x586e75' -# yellow: '0x657b83' -# blue: '0x839496' -# magenta: '0x6c71c4' -# cyan: '0x93a1a1' -# white: '0xfdf6e3' +# black: '0x424242' +# red: '0xe83a3f' +# green: '0x7aba39' +# yellow: '0xfc8e08' +# blue: '0x53a4f3' +# magenta: '0xa94dbb' +# cyan: '0x26bad1' +# white: '0xd8d8d8' + +# Colors (Solarized Dark) +colors: + # Default colors + primary: + background: '0x002b36' + foreground: '0x839496' + + # Normal colors + normal: + black: '0x073642' + red: '0xdc322f' + green: '0x859900' + yellow: '0xb58900' + blue: '0x268bd2' + magenta: '0xd33682' + cyan: '0x2aa198' + white: '0xeee8d5' + + # Bright colors + bright: + black: '0x002b36' + red: '0xcb4b16' + green: '0x586e75' + yellow: '0x657b83' + blue: '0x839496' + magenta: '0x6c71c4' + cyan: '0x93a1a1' + white: '0xfdf6e3' # Key bindings # diff --git a/.config/nvim/init.vim b/.config/nvim/init.vim index 6528cd1..7b361a0 100644 --- a/.config/nvim/init.vim +++ b/.config/nvim/init.vim @@ -1,37 +1,46 @@ "" Vundle -set rtp+=~/.vim/bundle/Vundle.vim -call vundle#begin() +" set rtp+=~/.vim/bundle/Vundle.vim +call plug#begin('~/.local/share/nvim/plugged') " Plugins -Plugin 'VundleVim/Vundle.vim' -Plugin 'airblade/vim-gitgutter' -Plugin 'b4b4r07/vim-hcl' -Plugin 'cespare/vim-toml' -Plugin 'chriskempson/base16-vim' -Plugin 'ervandew/supertab' -Plugin 'fatih/vim-go' -Plugin 'godlygeek/tabular' -Plugin 'hashivim/vim-terraform' -Plugin 'itchyny/lightline.vim' -Plugin 'joshdick/onedark.vim' -Plugin 'junegunn/fzf' -Plugin 'junegunn/fzf.vim' -Plugin 'Matt-Deacalion/vim-systemd-syntax' -Plugin 'nanotech/jellybeans.vim' -Plugin 'NLKNguyen/papercolor-theme' -Plugin 'plasticboy/vim-markdown' -Plugin 'rakr/vim-one' -Plugin 'rust-lang/rust.vim' -Plugin 'tomtom/tcomment_vim' -Plugin 'tpope/vim-fugitive' -Plugin 'tyrannicaltoucan/vim-quantum' -Plugin 'Valloric/YouCompleteMe' -Plugin 'w0rp/ale' +Plug 'VundleVim/Vundle.vim' +Plug 'airblade/vim-gitgutter' +Plug 'b4b4r07/vim-hcl' +Plug 'cespare/vim-toml' +Plug 'djoshea/vim-autoread' +Plug 'ervandew/supertab' +Plug 'fatih/vim-go' +Plug 'godlygeek/tabular' +Plug 'hashivim/vim-terraform' +Plug 'junegunn/vim-easy-align' +Plug 'junegunn/fzf' +Plug 'junegunn/fzf.vim' +Plug 'junegunn/goyo.vim' +Plug 'junegunn/gv.vim' +Plug 'junegunn/vim-peekaboo' +Plug 'Matt-Deacalion/vim-systemd-syntax' +Plug 'NLKNguyen/papercolor-theme' +Plug 'plasticboy/vim-markdown' +Plug 'rakr/vim-one' +Plug 'roxma/nvim-completion-manager' +Plug 'rust-lang/rust.vim' +Plug 'sebdah/vim-delve' +" Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' } +Plug 'Shougo/neosnippet.vim' +Plug 'Shougo/neosnippet-snippets' +Plug 'tomtom/tcomment_vim' +Plug 'tpope/vim-fugitive' +Plug 'tyrannicaltoucan/vim-quantum' +Plug 'vim-airline/vim-airline' +Plug 'vim-airline/vim-airline-themes' +Plug 'w0rp/ale' -call vundle#end() +call plug#end() -set timeoutlen=250 -set ttimeoutlen=200 +set ttimeout +set ttimeoutlen=0 +" set timeoutlen=150 +" set ttimeoutlen=100 filetype on " detect the type of file filetype plugin indent on " load filetype plugins @@ -92,6 +101,9 @@ set wildmenu set wildmode=list:longest set wildignore=*.swp,*.bak,*.pyc,*.class set splitbelow " Preview window +set splitright + +" let mapleader="," "" Session let g:session_autosave = 'no' @@ -165,7 +177,7 @@ map <silent> ,; :Commits<cr> map <silent> ,e :GitFiles<cr> map <silent> ,d :Files<cr> map <silent> ,f :History<cr> -map <silent> ,g :BLines<cr> +" map <silent> ,g :BLines<cr> map <silent> ,/ :Ag<cr> map <silent> ,m :Marks<cr> @@ -325,7 +337,7 @@ map ,h :echo "hi<" . synIDattr(synID(line("."),col("."),1),"name") . '> trans<' \ . synIDattr(synID(line("."),col("."),0),"name") . "> lo<" \ . synIDattr(synIDtrans(synID(line("."),col("."),1)),"name") . ">"<CR> -set background=light +set background=dark let g:one_allow_italics=1 let g:PaperColor_Light_Override = { 'Background' : '#fefe00' } @@ -406,34 +418,61 @@ function! LightLineReadonly() return &ft !~? 'help' && &readonly ? '' : '' endfunction -set statusline+=%#warningmsg# -set statusline+=%{SyntasticStatuslineFlag()} -set statusline+=%* +" set statusline+=%#warningmsg# +" set statusline+=%{SyntasticStatuslineFlag()} +" set statusline+=%* " Golang -let g:go_highlight_functions = 1 -let g:go_highlight_methods = 1 -let g:go_highlight_structs = 1 -let g:go_highlight_fields = 1 -let g:go_highlight_interfaces = 1 -let g:go_highlight_operators = 1 -let g:go_highlight_types = 1 let g:go_highlight_build_constraints = 1 +let g:go_highlight_extra_types = 1 +let g:go_highlight_fields = 1 +let g:go_highlight_functions = 1 +let g:go_highlight_interfaces = 1 +let g:go_highlight_methods = 1 +let g:go_highlight_operators = 1 +let g:go_highlight_structs = 1 +let g:go_highlight_types = 1 let g:go_auto_sameids = 1 let g:go_auto_type_info = 0 +" let g:go_def_mapping_enabled = 0 let g:go_info_mode = 'guru' -let g:go_updatetime = 500 +let g:go_updatetime = 20 +let g:go_snippet_engine = "neosnippet" + +autocmd FileType go nmap <Leader>i <Plug>(go-info) +autocmd FileType go nmap <S-k> <Plug>(go-doc) +autocmd FileType go nmap <Leader>d <Plug>(go-doc-vertical) + " ALE let g:ale_sign_column_always = 1 " let g:ale_linters = {'go': ['gometalinter', 'gofmt']} -let g:ale_linters = {'go': ['go build', 'gofmt', 'golint', 'gometalinter', 'gosimple', 'go vet', 'staticcheck']} +" let g:ale_linters = {'go': ['go build', 'gofmt', 'golint', 'gometalinter', 'gosimple', 'go vet', 'staticcheck']} +let g:ale_linters = {'go': ['gofmt', 'golint', 'gometalinter', 'gosimple', 'go vet', 'staticcheck']} +let g:ale_sign_error = '⤫' +let g:ale_sign_warning = '⚠' +let g:airline#extensions#ale#enabled = 1 +"" Neosnippet +" imap <C-k> <Plug>(neosnippet_expand_or_jump) +" smap <C-k> <Plug>(neosnippet_expand_or_jump) +" xmap <C-k> <Plug>(neosnippet_expand_target) +" imap <expr> <CR> (pumvisible() ? "\<c-y>\<Plug>(expand_or_nl)" : "\<CR>") +" imap <expr> <Plug>(expand_or_nl) (cm#completed_is_snippet() ? "\<C-k>":"\<CR>") +" +imap <c-j> <Plug>(neosnippet_expand_or_jump) +vmap <c-j> <Plug>(neosnippet_expand_or_jump) +inoremap <silent> <c-u> <c-r>=cm#sources#neosnippet#trigger_or_popup("\<Plug>(neosnippet_expand_or_jump)")<cr> +vmap <c-u> <Plug>(neosnippet_expand_target) +" expand parameters +let g:neosnippet#enable_completed_snippet=1 " Hugo let g:vim_markdown_frontmatter = 1 let g:vim_markdown_toml_frontmatter = 1 + +"" Git let g:gitgutter_override_sign_column_highlight = 0 let g:gitgutter_sign_added = '🞥' let g:gitgutter_sign_modified = '▲' @@ -441,16 +480,19 @@ let g:gitgutter_sign_removed = '🞬' let g:gitgutter_sign_removed_first_line = '🞬' let g:gitgutter_sign_modified_removed = '🞬' +"" Airline +" let g:airline#extensions#tabline#enabled = 1 +let g:airline_theme='distinguished' + +"" Terminal + let $NVIM_TUI_ENABLE_TRUE_COLOR=1 set termguicolors let &t_8f = "<Esc>[38;2;%lu;%lu;%lum" let &t_8b = "<Esc>[48;2;%lu;%lu;%lum" -" let base16colorspace=256 " color dln-light -" color jellybeans -" color one -color base16-tomorrow +color dln-dark " highlight LineNr ctermfg=31 ctermbg=234 cterm=italic " highlight CursorLine ctermfg=159 ctermbg=24 @@ -462,5 +504,5 @@ highlight GitGutterChange ctermbg=234 ctermfg=220 highlight GitGutterDelete ctermbg=234 ctermfg=124 highlight GitGutterChangeDelete ctermbg=234 ctermfg=88 -map ,m :color dln<CR> +map ,l :color dln-dark<CR> diff --git a/.config/redshift.conf b/.config/redshift.conf index d957e48..1fda982 100644 --- a/.config/redshift.conf +++ b/.config/redshift.conf @@ -1,8 +1,8 @@ [redshift] -temp-day=5800 -temp-night=3700 +temp-day=3900 +temp-night=3400 brightness-day=0.99 -brightness-night=0.5 +brightness-night=0.95 location-provider=manual transition=0 diff --git a/.gitconfig b/.gitconfig index d737b69..4cc94be 100644 --- a/.gitconfig +++ b/.gitconfig @@ -135,3 +135,4 @@ diff-chunk = magenta default bold stripLeadingSymbols = true [hub] protocol = git +[http] diff --git a/.local/share/nvim/site/autoload/plug.vim b/.local/share/nvim/site/autoload/plug.vim new file mode 100644 index 0000000..143c377 --- /dev/null +++ b/.local/share/nvim/site/autoload/plug.vim @@ -0,0 +1,2504 @@ +" 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-master 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') || has('win64') +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') +let s:me = resolve(expand('<sfile>:p')) +let s:base_spec = { 'branch': 'master', '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! plug#begin(...) + if a:0 > 0 + let s:plug_home_org = a:1 + let home = s:path(fnamemodify(expand(a:1), ':p')) + elseif exists('g:plug_home') + let home = s:path(g:plug_home) + 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 fnamemodify(home, ':t') ==# 'plugin' && 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 + 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! plug#end() + if !exists('g:plugs') + return s:err('Call plug#begin() first') + endif + + if exists('#PlugLOD') + augroup PlugLOD + autocmd! + augroup END + augroup! PlugLOD + endif + let lod = { 'ft': {}, 'map': {}, 'cmd': {} } + + if exists('g:did_load_filetypes') + 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) || !has_key(plug, 'on') && !has_key(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-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 + +if s:is_win + function! s:rtp(spec) + return s:path(a:spec.dir . get(a:spec, 'rtp', '')) + endfunction + + 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 +else + function! s:rtp(spec) + return s:dirpath(a:spec.dir . get(a:spec, 'rtp', '')) + endfunction + + 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'] + 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', 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(v:exception) + endtry +endfunction + +function! s:parse_options(arg) + let opts = copy(s:base_spec) + let type = type(a:arg) + if type == s:TYPE.string + let opts.tag = a:arg + elseif type == s:TYPE.dict + call extend(opts, a:arg) + if has_key(opts, 'dir') + let opts.dir = s:dirpath(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(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 /^-/ + 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 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(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 :if b:plug_preview==1<bar>pc<bar>endif<bar>bd<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 + setf vim-plug + if exists('g:syntax_on') + call s:syntax() + 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=cmd.exe shellcmdflag=/c shellredir=>%s\ 2>&1 + elseif a:swap + set shell=sh shellredir=>%s\ 2>&1 + endif + return prev +endfunction + +function! s:bang(cmd, ...) + 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 = tempname().'.bat' + call writefile(['@echo off', cmd], batchfile) + let cmd = batchfile + 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 + 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 + 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:system('git rev-parse HEAD', a:spec.dir) + if !v:shell_error && !s:hash_match(sha, s:lines(output)[0]) + let output = s:system( + \ 'git fetch --depth 999999 && git checkout '.s:esc(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 =~ '^- ' && stridx(v:val, 'Already up-to-date') < 0")) + 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 + + let s:clone_opt = get(g:, 'plug_shallow', 1) ? + \ '--depth 1' . (s:git_version_requirement(1, 7, 10) ? ' --no-single-branch' : '') : '' + + if has('win32unix') + let s:clone_opt .= ' -c core.eol=lf -c core.autocrlf=input' + endif + + " 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 '.s:shellesc(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 '.s:esc(tag).' -- 2>&1', spec.dir) + else + let branch = s:esc(get(spec, 'branch', 'master')) + call s:log4(name, 'Merging origin/'.branch) + let out = s:system('git checkout -q '.branch.' -- 2>&1' + \. (has_key(s:update.new, name) ? '' : ('&& git merge --ff-only 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 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:system('rm -rf ' . s:shellesc(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' ? + \ 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': [''], + \ 'batchfile': (s:is_win && (s:nvim || s:vim8)) ? tempname().'.bat' : '', + \ 'new': get(a:opts, 'new', 0) } + let s:jobs[a:name] = job + let cmd = has_key(a:opts, 'dir') ? s:with_cd(a:cmd, a:opts.dir) : a:cmd + if !empty(job.batchfile) + call writefile(['@echo off', cmd], job.batchfile) + let cmd = job.batchfile + endif + let argv = add(s:is_win ? ['cmd', '/c'] : ['sh', '-c'], cmd) + + if s:nvim + call extend(job, { + \ 'on_stdout': function('s:nvim_cb'), + \ 'on_exit': function('s:nvim_cb'), + \ }) + let jid = 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 jid = job_start(s:is_win ? join(argv, ' ') : argv, { + \ 'out_cb': function('s:job_cb', ['s:job_out_cb', job]), + \ 'exit_cb': function('s:job_cb', ['s:job_exit_cb', job]), + \ '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', [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() + + if has_key(job, 'batchfile') && !empty(job.batchfile) + call delete(job.batchfile) + endif + 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) + for i in range(4, line('$')) + if getline(i) =~# '^[-+x*] '.a:name.':' + for j in range(i + 1, line('$')) + 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 = !isdirectory(spec.dir) + + 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 fetch_opt = (has_tag && !empty(globpath(spec.dir, '.git/shallow'))) ? '--depth 99999999' : '' + call s:spawn(name, printf('git fetch %s %s 2>&1', fetch_opt, prog), { '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 + call s:spawn(name, + \ printf('git clone %s %s %s %s 2>&1', + \ has_tag ? '' : s:clone_opt, + \ prog, + \ s:shellesc(spec.uri), + \ s:shellesc(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 = 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') + 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) + let escaped = substitute(a:arg, '[&|<>()@^]', '^&', 'g') + let escaped = substitute(escaped, '%', '%%', 'g') + let escaped = substitute(escaped, '"', '\\^&', 'g') + let escaped = substitute(escaped, '\(\\\+\)\(\\^\)', '\1\1\2', 'g') + return '^"'.substitute(escaped, '\(\\\+\)$', '\1\1', '').'^"' +endfunction + +function! s:shellesc(arg) + if &shell =~# 'cmd.exe$' + return s:shellesc_cmd(a:arg) + endif + return shellescape(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) + return printf('cd%s %s && %s', s:is_win ? ' /d' : '', s:shellesc(a:dir), a:cmd) +endfunction + +function! s:system(cmd, ...) + try + let [sh, shellcmdflag, shrd] = s:chsh(1) + let cmd = a:0 > 0 ? s:with_cd(a:cmd, a:1) : a:cmd + if s:is_win + let batchfile = tempname().'.bat' + call writefile(['@echo off', cmd], batchfile) + let cmd = batchfile + endif + return system(s:is_win ? '('.cmd.')' : cmd) + finally + let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd] + if s:is_win + 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:lines(s:system('git rev-parse --abbrev-ref HEAD 2>&1 && git config -f .git/config remote.origin.url', a:spec.dir)) + let remote = result[-1] + if v:shell_error + 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 result = s:lines(s:system('git rev-parse HEAD 2>&1', a:spec.dir)) + let sha = result[-1] + if v:shell_error + 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 branch = result[0] + " Check tag + 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 a:spec.branch !=# branch + let err = printf('Invalid branch: %s (expected: %s). Try PlugUpdate.', + \ branch, a:spec.branch) + endif + if empty(err) + let [ahead, behind] = split(s:lastline(s:system(printf( + \ 'git rev-list --count --left-right HEAD...origin/%s', + \ a:spec.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.', a:spec.branch, ahead, behind) + else + let err = printf("Ahead of origin/%s by %d commit(s).\n" + \ .'Cannot update until local changes are pushed.', + \ a:spec.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) + call s:system((s:is_win ? 'rmdir /S /Q ' : 'rm -rf ') . s:shellesc(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(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 + 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 + call s:rm_rf(line[2:]) + setlocal modifiable + call setline(l1, '~'.line[1:]) + let s:clean_count += 1 + call setline(4, printf('Removed %d directories.', s:clean_count)) + setlocal nomodifiable + endif + endif + let l1 += 1 + endwhile +endfunction + +function! s:upgrade() + echo 'Downloading the latest version of vim-plug' + redraw + let tmp = tempname() + let new = tmp . '/plug.vim' + + try + let out = s:system(printf('git clone --depth 1 %s %s', 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) + return + endif + + let name = s:find_name(line('.')) + 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' sha + else + execute 'pedit' sha + wincmd P + endif + setlocal previewwindow filetype=git buftype=nofile nobuflisted modifiable + try + let [sh, shellcmdflag, shrd] = s:chsh(1) + let cmd = 'cd '.s:shellesc(g:plugs[name].dir).' && git show --no-color --pretty=medium '.sha + if s:is_win + let batchfile = tempname().'.bat' + call writefile(['@echo off', cmd], batchfile) + let cmd = batchfile + endif + execute 'silent %!' cmd + finally + let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd] + if s:is_win + 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 range = origin ? '..origin/'.v.branch : 'HEAD@{1}..' + let diff = s:system_chomp('git log --graph --color=never '.join(map(['--pretty=format:%x01%h%x01%d%x01%s%x01%cr', range], 's:shellesc(v:val)')), 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 + 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> <cr> :silent! call <SID>preview_commit()<cr> + nnoremap <silent> <buffer> o :silent! call <SID>preview_commit()<cr> + 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 '.s:esc(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") && !has_key(v:val, "commit") && isdirectory(v:val.dir)'))) + for name in reverse(names) + let sha = s:system_chomp('git rev-parse --short HEAD', 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 = 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/.oh-my-zsh b/.oh-my-zsh index d848c94..e273cf0 160000 --- a/.oh-my-zsh +++ b/.oh-my-zsh @@ -1 +1 @@ -Subproject commit d848c94804918138375041a9f800f401bec12068 +Subproject commit e273cf004e1ff0510aee61416885f3003bcd15d9 diff --git a/.tmux.conf b/.tmux.conf index 15150a4..9f9e7e6 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -33,6 +33,7 @@ set -g set-titles-string "###I : #T" #set -g set-titles-string '#H:#S.#I.#P #W #T' # window number,program name, active(or not) # Key bindings +bind -n M-Tab last-pane bind -n M-1 select-window -t 1 bind -n M-- select-window -t 2 bind -n M-2 select-window -t 2 @@ -70,9 +71,10 @@ bind C-s set-option -g status bind s split-window -h bind S split-window -v bind q kill-pane -bind Tab select-pane -D +bind Tab last-pane bind C-p select-pane -U bind K confirm kill-server +bind C-k clear-history # Colors (MonoLight) set -g status-fg "#cccccc" @@ -118,6 +120,6 @@ selectw -t 1 run-shell ~/src/github.com/tmux-plugins/tmux-battery/battery.tmux -source /usr/lib/python3.6/site-packages/powerline/bindings/tmux/powerline.conf +# source /usr/lib/python3.6/site-packages/powerline/bindings/tmux/powerline.conf # vim:set ft=tmux: diff --git a/.xinitrc b/.xinitrc index c626133..bc1a738 100755 --- a/.xinitrc +++ b/.xinitrc @@ -7,7 +7,7 @@ if [ -d /etc/X11/xinit/xinitrc.d ] ; then fi . $HOME/.bashrc -xsetroot -solid \#78909C +xsetroot -solid \#202020 xmodmap $HOME/.Xmodmap feh --bg-fill $HOME/Images/desktop.jpg || true setxkbmap -option ctrl:nocaps,grp:switch,grp_led:scroll us,se diff --git a/.zshrc b/.zshrc index bbbc810..f4c2d97 100644 --- a/.zshrc +++ b/.zshrc @@ -2,7 +2,7 @@ # export PATH=$HOME/bin:/usr/local/bin:$PATH # Path to your oh-my-zsh installation. - export ZSH=/home/dln/.oh-my-zsh + # export ZSH=/home/dln/.oh-my-zsh # Set name of the theme to load. Optionally, if you set this to "random" # it'll load a random theme each time that oh-my-zsh is loaded. @@ -51,11 +51,64 @@ ZSH_THEME="robbyrussell" # Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/ # Example format: plugins=(rails git textmate ruby lighthouse) # Add wisely, as too many plugins slow down shell startup. -plugins=(git git-extras history-substring-search) +# plugins=(git git-extras history-substring-search vault) +# +# source $ZSH/oh-my-zsh.sh +# source ~/.oh-my-zsh/plugins/zsh-titles/titles.plugin.zsh -source $ZSH/oh-my-zsh.sh +source "${HOME}/.zgen/zgen.zsh" -source ~/.oh-my-zsh/plugins/zsh-titles/titles.plugin.zsh +function short_pwd { + echo $PWD | sed "s:${HOME}:~:" | sed "s:/\(.\)[^/]*:/\1:g" | sed "s:/[^/]*$:/$(basename $PWD):" +} + +function _dln_prompt_left { + _pw="$(short_pwd)" + echo -e "%{\e[38;5;246m%}$_pw " +} + +function _dln_prompt_right { + _tmux_win=`tmux display-message -p "#I"` + echo -e " %{\e[38;5;16;48;5;30m%} ${_tmux_win} %{\e[0m%}" +} + +export PROMPT_LEAN_COLOR1=78 +export PROMPT_LEAN_COLOR2=67 +export PROMPT_LEAN_TMUX='' +export PROMPT_LEAN_PATH_PERCENT=50 +export PROMPT_LEAN_LEFT=_dln_prompt_left +# export PROMPT_LEAN_RIGHT=_dln_prompt_right + +# if the init scipt doesn't exist +if ! zgen saved; then + + zgen oh-my-zsh + zgen oh-my-zsh plugins/command-not-found + zgen oh-my-zsh plugins/git + zgen oh-my-zsh plugins/git-extras + zgen oh-my-zsh plugins/history-substring-search + + zgen load uvaes/fzf-marks + zgen load miekg/lean + + zgen save +fi + +function prompt_command { + banner="$USER@$HOST" + ((prompt_x = $(tput cols) - $(expr length ${banner}) - 3)) + tput sc + tput cup 0 ${prompt_x} + if [ "$USER" = "root" ]; then + echo -ne " \e[38;5;228;48;5;160m ${banner} \e[0m" + else + echo -ne " \e[38;5;195;48;5;33m ${banner} \e[0m" + fi + tput rc + #tmux rename-window `basename $PWD` + tmux rename-window $(short_pwd) 2>/dev/null + eval $(tmux switch-client \; show-environment -s 2>/dev/null) +} # User configuration @@ -101,22 +154,34 @@ cd_func () } alias cd=cd_func +## vim +export NVIM_LISTEN_ADDRESS=/tmp/nvimsocket + +e () +{ + tmux select-window -t1 + nvr --remote $(readlink -f "$@") +} ## Powerline -. /usr/lib/python3.6/site-packages/powerline/bindings/zsh/powerline.zsh +# . /usr/lib/python3.6/site-packages/powerline/bindings/zsh/powerline.zsh ## fzf export FZF_TMUX=1 -export FZF_COMPLETION_TRIGGER="." +export FZF_COMPLETION_TRIGGER=";" . /usr/share/fzf/completion.zsh . /usr/share/fzf/key-bindings.zsh # Kubernetes -source <(kubectl completion zsh) -[ -f $HOME/bin/kops ] && source <($HOME/bin/kops completion zsh) +command -v kubectl >/dev/null 2>&1 && source <(kubectl completion zsh) +command -v kops >/dev/null 2>&1 && source <(kops completion zsh) +command -v helm >/dev/null 2>&1 && source <(helm completion zsh) [ -f /opt/google-cloud-sdk/completion.zsh.inc ] && source /opt/google-cloud-sdk/completion.zsh.inc +# Pager +command -v pygmentize >/dev/null 2>&1 && export LESSOPEN="|/usr/bin/pygmentize -f terminal16m -O style=native %s" + ## Aliases alias ag='ag --pager less' alias cdiff='colordiff -u' @@ -131,6 +196,8 @@ alias tree='tree -C' alias upper="tr '[:lower:]' '[:upper:]'" alias vimdiff='vimdiff -R' alias vim=nvim +alias xc='xclip -selection clipboard' +# alias e='nvr --remote' diff --git a/bin/dwm b/bin/dwm index b70545e0236d07c927ef26ebfc9a2cebf07231b0..5553a0e40439c0bb43cbb2f7d67436656ebe4c5a 100755 GIT binary patch literal 50992 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 literal 46920 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 diff --git a/bin/st b/bin/st deleted file mode 100755 index a0bb9108f65b191a823b5688287e6e744afb2e2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71616 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 R4?05(CI+Hm`ao<D1^`V7dHetX diff --git a/bin/st b/bin/st new file mode 120000 index 0000000..d9f2155 --- /dev/null +++ b/bin/st @@ -0,0 +1 @@ +st.dark \ No newline at end of file