Mercurial > ec-dotfiles
comparison vendor/vim-packs/ctrlp.vim/autoload/ctrlp/mrufiles.vim @ 707:4576f1471f53
[update-vendor, vim] add ctrlp
| author | nanaya <me@nanaya.net> |
|---|---|
| date | Sun, 18 Dec 2022 22:27:56 +0900 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 706:4b30df382167 | 707:4576f1471f53 |
|---|---|
| 1 " ============================================================================= | |
| 2 " File: autoload/ctrlp/mrufiles.vim | |
| 3 " Description: Most Recently Used Files extension | |
| 4 " Author: Kien Nguyen <github.com/kien> | |
| 5 " ============================================================================= | |
| 6 | |
| 7 " Static variables {{{1 | |
| 8 let [s:mrbs, s:mrufs] = [[], []] | |
| 9 let s:mruf_map_string = '!stridx(v:val, cwd) ? strpart(v:val, idx) : v:val' | |
| 10 | |
| 11 fu! ctrlp#mrufiles#opts() | |
| 12 let [pref, opts] = ['g:ctrlp_mruf_', { | |
| 13 \ 'max': ['s:max', 250], | |
| 14 \ 'include': ['s:in', ''], | |
| 15 \ 'exclude': ['s:ex', ''], | |
| 16 \ 'case_sensitive': ['s:cseno', 1], | |
| 17 \ 'relative': ['s:re', 0], | |
| 18 \ 'save_on_update': ['s:soup', 1], | |
| 19 \ 'map_string': ['g:ctrlp_mruf_map_string', s:mruf_map_string], | |
| 20 \ }] | |
| 21 for [ke, va] in items(opts) | |
| 22 let [{va[0]}, {pref.ke}] = [pref.ke, exists(pref.ke) ? {pref.ke} : va[1]] | |
| 23 endfo | |
| 24 endf | |
| 25 cal ctrlp#mrufiles#opts() | |
| 26 " Utilities {{{1 | |
| 27 fu! s:excl(fn) | |
| 28 retu !empty({s:ex}) && a:fn =~# {s:ex} | |
| 29 endf | |
| 30 | |
| 31 fu! s:mergelists() | |
| 32 let diskmrufs = ctrlp#utils#readfile(ctrlp#mrufiles#cachefile()) | |
| 33 cal filter(diskmrufs, 'index(s:mrufs, v:val) < 0') | |
| 34 let mrufs = s:mrufs + diskmrufs | |
| 35 retu s:chop(mrufs) | |
| 36 endf | |
| 37 | |
| 38 fu! s:chop(mrufs) | |
| 39 if len(a:mrufs) > {s:max} | cal remove(a:mrufs, {s:max}, -1) | en | |
| 40 retu a:mrufs | |
| 41 endf | |
| 42 | |
| 43 fu! s:reformat(mrufs, ...) | |
| 44 let cwd = getcwd() | |
| 45 let cwd .= cwd !~ '[\/]$' ? ctrlp#utils#lash() : '' | |
| 46 if {s:re} | |
| 47 let cwd = exists('+ssl') ? tr(cwd, '/', '\') : cwd | |
| 48 cal filter(a:mrufs, '!stridx(v:val, cwd)') | |
| 49 en | |
| 50 if a:0 && a:1 == 'raw' | retu a:mrufs | en | |
| 51 let idx = strlen(cwd) | |
| 52 if exists('+ssl') && &ssl | |
| 53 let cwd = tr(cwd, '\', '/') | |
| 54 cal map(a:mrufs, 'tr(v:val, "\\", "/")') | |
| 55 en | |
| 56 retu map(a:mrufs, g:ctrlp_mruf_map_string) | |
| 57 endf | |
| 58 | |
| 59 fu! s:record(bufnr) | |
| 60 if s:locked | retu | en | |
| 61 let bufnr = a:bufnr + 0 | |
| 62 let bufname = bufname(bufnr) | |
| 63 if bufnr > 0 && !empty(bufname) | |
| 64 cal filter(s:mrbs, 'v:val != bufnr') | |
| 65 cal insert(s:mrbs, bufnr) | |
| 66 cal s:addtomrufs(bufname) | |
| 67 en | |
| 68 endf | |
| 69 | |
| 70 fu! s:addtomrufs(fname) | |
| 71 let fn = fnamemodify(a:fname, get(g:, 'ctrlp_tilde_homedir', 0) ? ':p:~' : ':p') | |
| 72 let fn = exists('+ssl') ? tr(fn, '/', '\') : fn | |
| 73 let abs_fn = fnamemodify(fn,':p') | |
| 74 if ( !empty({s:in}) && fn !~# {s:in} ) || ( !empty({s:ex}) && fn =~# {s:ex} ) | |
| 75 \ || !empty(getbufvar('^' . abs_fn . '$', '&bt')) || !filereadable(abs_fn) | |
| 76 retu | |
| 77 en | |
| 78 let idx = index(s:mrufs, fn, 0, !{s:cseno}) | |
| 79 if idx | |
| 80 cal filter(s:mrufs, 'v:val !='.( {s:cseno} ? '#' : '?' ).' fn') | |
| 81 cal insert(s:mrufs, fn) | |
| 82 if {s:soup} && idx < 0 | |
| 83 cal s:savetofile(s:mergelists()) | |
| 84 en | |
| 85 en | |
| 86 endf | |
| 87 | |
| 88 fu! s:savetofile(mrufs) | |
| 89 cal ctrlp#utils#writecache(a:mrufs, s:cadir, s:cafile) | |
| 90 endf | |
| 91 " Public {{{1 | |
| 92 fu! ctrlp#mrufiles#refresh(...) | |
| 93 let mrufs = s:mergelists() | |
| 94 cal filter(mrufs, '!empty(ctrlp#utils#glob(v:val, 1)) && !s:excl(v:val)') | |
| 95 if exists('+ssl') | |
| 96 cal map(mrufs, 'tr(v:val, "/", "\\")') | |
| 97 cal map(s:mrufs, 'tr(v:val, "/", "\\")') | |
| 98 let cond = 'count(mrufs, v:val, !{s:cseno}) == 1' | |
| 99 cal filter(mrufs, cond) | |
| 100 cal filter(s:mrufs, cond) | |
| 101 en | |
| 102 cal s:savetofile(mrufs) | |
| 103 retu a:0 && a:1 == 'raw' ? [] : s:reformat(mrufs) | |
| 104 endf | |
| 105 | |
| 106 fu! ctrlp#mrufiles#remove(files) | |
| 107 let mrufs = [] | |
| 108 if a:files != [] | |
| 109 let mrufs = s:mergelists() | |
| 110 let cond = 'index(a:files, v:val, 0, !{s:cseno}) < 0' | |
| 111 cal filter(mrufs, cond) | |
| 112 cal filter(s:mrufs, cond) | |
| 113 en | |
| 114 cal s:savetofile(mrufs) | |
| 115 retu s:reformat(mrufs) | |
| 116 endf | |
| 117 | |
| 118 fu! ctrlp#mrufiles#add(fn) | |
| 119 if !empty(a:fn) | |
| 120 cal s:addtomrufs(a:fn) | |
| 121 en | |
| 122 endf | |
| 123 | |
| 124 fu! ctrlp#mrufiles#list(...) | |
| 125 retu a:0 ? a:1 == 'raw' ? s:reformat(s:mergelists(), a:1) : 0 | |
| 126 \ : s:reformat(s:mergelists()) | |
| 127 endf | |
| 128 | |
| 129 fu! ctrlp#mrufiles#bufs() | |
| 130 retu s:mrbs | |
| 131 endf | |
| 132 | |
| 133 fu! ctrlp#mrufiles#tgrel() | |
| 134 let {s:re} = !{s:re} | |
| 135 endf | |
| 136 | |
| 137 fu! ctrlp#mrufiles#cachefile() | |
| 138 if !exists('s:cadir') || !exists('s:cafile') | |
| 139 let s:cadir = ctrlp#utils#cachedir().ctrlp#utils#lash().'mru' | |
| 140 let s:cafile = s:cadir.ctrlp#utils#lash().'cache.txt' | |
| 141 en | |
| 142 retu s:cafile | |
| 143 endf | |
| 144 | |
| 145 fu! ctrlp#mrufiles#init() | |
| 146 if !has('autocmd') | retu | en | |
| 147 let s:locked = 0 | |
| 148 aug CtrlPMRUF | |
| 149 au! | |
| 150 au BufWinEnter,BufWinLeave,BufWritePost * cal s:record(expand('<abuf>', 1)) | |
| 151 au QuickFixCmdPre *vimgrep* let s:locked = 1 | |
| 152 au QuickFixCmdPost *vimgrep* let s:locked = 0 | |
| 153 au VimLeavePre * cal s:savetofile(s:mergelists()) | |
| 154 aug END | |
| 155 endf | |
| 156 "}}} | |
| 157 | |
| 158 " vim:fen:fdm=marker:fmr={{{,}}}:fdl=0:fdc=1:ts=2:sw=2:sts=2 |
