Allow deleting MRU entries marked by <c-z> with <F7>

Close #122
This commit is contained in:
Kien N 2012-02-20 14:58:03 +07:00
parent 93cb20dbfb
commit ea0eef6d44
5 changed files with 55 additions and 52 deletions

View File

@ -366,6 +366,7 @@ fu! s:Render(lines, pat)
" Print the new items
if empty(lines)
setl nocul
let s:matched = []
cal setline(1, ' == NO ENTRIES ==')
cal s:unmarksigns()
if s:dohighlight() | cal clearmatches() | en
@ -459,8 +460,7 @@ endf
fu! s:PrtBS()
unl! s:hstgot
let [prt, s:matches] = [s:prompt, 1]
let prt[0] = substitute(prt[0], '.$', '', '')
let [s:prompt[0], s:matches] = [substitute(s:prompt[0], '.$', '', ''), 1]
cal s:BuildPrompt(1)
endf
@ -485,7 +485,6 @@ endf
fu! s:PrtInsert(type)
unl! s:hstgot
" Insert current word, search register, last visual and clipboard
let s:prompt[0] .= a:type == 'w' ? s:crword
\ : a:type == 's' ? getreg('/')
\ : a:type == 'v' ? s:crvisual
@ -507,20 +506,18 @@ fu! s:PrtExpandDir()
endf
" Movement {{{2
fu! s:PrtCurLeft()
if !empty(s:prompt[0])
let prt = s:prompt
let prt[2] = prt[1] . prt[2]
let prt[1] = matchstr(prt[0], '.$')
let prt[0] = substitute(prt[0], '.$', '', '')
let prt = s:prompt
if !empty(prt[0])
let s:prompt = [substitute(prt[0], '.$', '', ''), matchstr(prt[0], '.$'),
\ prt[1] . prt[2]]
en
cal s:BuildPrompt(0)
endf
fu! s:PrtCurRight()
let prt = s:prompt
let prt[0] .= prt[1]
let prt[1] = matchstr(prt[2], '^.')
let prt[2] = substitute(prt[2], '^.', '', '')
let s:prompt = [prt[0] . prt[1], matchstr(prt[2], '^.'),
\ substitute(prt[2], '^.', '', '')]
cal s:BuildPrompt(0)
endf
@ -585,12 +582,16 @@ fu! s:PrtClearCache()
endf
fu! s:PrtDeleteMRU()
if s:itemtype == 2
let s:force = 1
let g:ctrlp_lines = ctrlp#mrufiles#list(-1, 2)
cal s:BuildPrompt(1)
unl s:force
if s:itemtype != 2 | retu | en
let [s:force, ags] = [1, [-1, 2]]
if exists('s:marked')
let ags = [-1, 2, values(s:marked)]
cal s:unmarksigns()
unl s:marked
en
let g:ctrlp_lines = call('ctrlp#mrufiles#list', ags)
cal s:BuildPrompt(1)
unl s:force
endf
fu! s:PrtExit()
@ -617,8 +618,8 @@ fu! s:MapKeys(...)
" Normal keys
let pfunc = a:0 && !a:1 ? 'PrtSelectJump' : 'PrtAdd'
let dojmp = s:byfname && pfunc == 'PrtSelectJump' ? ', 1' : ''
let cmd = "nn \<buffer> \<silent> \<char-%d> :\<c-u>cal \<SID>%s(\"%s\"%s)\<cr>"
for each in range(32, 126)
let cmd = "nn \<buffer> \<silent> \<char-%d> :\<c-u>cal \<SID>%s(\"%s\"%s)\<cr>"
exe printf(cmd, each, pfunc, escape(nr2char(each), '"|\'), dojmp)
endfo
" Special keys
@ -773,17 +774,17 @@ fu! s:AcceptSelection(mode)
let str = join(s:prompt, '')
if a:mode == 'e' | if s:SpecInputs(str) | retu | en | en
" Get the selected line
let line = getline('.')
if a:mode != 'e' && s:itemtype < 3 && line == ' == NO ENTRIES =='
let line = exists('s:matched') && !empty(s:matched)
\ ? s:matched[line('.') - 1] : ''
if a:mode != 'e' && s:itemtype < 3 && line == ''
\ && str !~ '\v^(\.\.|/|\\|\?)$'
cal s:CreateNewFile(a:mode) | retu
en
let matchstr = matchstr(line, '^> \zs.\+\ze\t*$')
if empty(matchstr) | retu | en
if empty(line) | retu | en
" Do something with it
let actfunc = s:itemtype < 3 ? 'ctrlp#acceptfile'
\ : g:ctrlp_ext_vars[s:itemtype - ( g:ctrlp_builtins + 1 )]['accept']
cal call(actfunc, [a:mode, matchstr])
cal call(actfunc, [a:mode, line])
endf
fu! s:CreateNewFile(...) "{{{1
let [md, str] = ['', join(s:prompt, '')]
@ -807,7 +808,7 @@ fu! s:CreateNewFile(...) "{{{1
en
if !exists('optyp') | retu | en
let [filpath, tail] = [fnamemodify(optyp, ':p'), s:tail()]
cal s:insertcache(str)
if !stridx(filpath, getcwd()) | cal s:insertcache(str) | en
cal s:PrtExit()
let cmd = md == 'r' ? ctrlp#normcmd('e') :
\ s:newfop =~ '1\|t' || ( a:0 && a:1 == 't' ) || md == 't' ? 'tabe' :
@ -973,7 +974,7 @@ fu! ctrlp#statusline()
let focus = s:Focus() ? 'prt' : 'win'
let byfname = s:byfname ? 'file' : 'path'
let marked = s:opmul != '0' ?
\ exists('s:marked') ? ' <'.s:dismrk().'>' : ' <+>' : ''
\ exists('s:marked') ? ' <'.s:dismrk().'>' : ' <>' : ''
if has_key(s:status, 'main')
let args = [focus, byfname, s:regexp, prv, item, nxt, marked]
let &l:stl = call(s:status['main'], args)
@ -989,7 +990,7 @@ fu! ctrlp#statusline()
endf
fu! s:dismrk()
retu has('signs') ? '+'.len(s:marked) :
retu has('signs') ? len(s:marked) :
\ '%<'.join(values(map(copy(s:marked), 'split(v:val, "[\\/]")[-1]')), ', ')
endf
@ -1274,8 +1275,7 @@ fu! s:setupblank()
endf
fu! s:leavepre()
if s:clrex && ( !has('clientserver') ||
\ ( has('clientserver') && len(split(serverlist(), "\n")) == 1 ) )
if s:clrex && !( has('clientserver') && len(split(serverlist(), "\n")) > 1 )
cal ctrlp#clra()
en
endf
@ -1321,17 +1321,21 @@ fu! s:argmaps(md, ...)
endf
" Misc {{{2
fu! s:getenv()
let s:winh = min([s:mxheight, &lines])
let [s:cwd, s:winres] = [getcwd(), [winrestcmd(), &lines, winnr('$')]]
let [s:crfile, s:crfpath] = [expand('%:p', 1), expand('%:p:h', 1)]
let [s:crword, s:crline] = [expand('<cword>'), getline('.')]
let [s:tagfiles, s:crcursor] = [s:tagfiles(), getpos('.')]
let [s:winh, s:crcursor] = [min([s:mxheight, &lines]), getpos('.')]
let [s:crbufnr, s:crvisual] = [bufnr('%'), s:lastvisual()]
if exists('g:ctrlp_extensions') && index(g:ctrlp_extensions, 'undo') >= 0
\ && v:version > 702 && has('patch005') && exists('*undotree')
let s:undotree = undotree()
en
let s:currwin = s:mwbottom ? winnr() : winnr() + has('autocmd')
if exists('g:ctrlp_extensions')
if index(g:ctrlp_extensions, 'undo') >= 0
\ && v:version > 702 && has('patch005') && exists('*undotree')
let s:undotree = undotree()
en
if index(g:ctrlp_extensions, 'tag') >= 0
let s:tagfiles = s:tagfiles()
en
en
endf
fu! s:lastvisual()

View File

@ -36,8 +36,13 @@ fu! ctrlp#mrufiles#list(bufnr, ...) "{{{1
let s:cafile = s:cadir.ctrlp#utils#lash().'cache.txt'
en
if a:0 && a:1 == 2
cal ctrlp#utils#writecache([], s:cadir, s:cafile)
retu []
let mrufs = []
if a:0 == 2
let mrufs = ctrlp#utils#readfile(s:cafile)
cal filter(mrufs, 'index(a:2, v:val) < 0')
en
cal ctrlp#utils#writecache(mrufs, s:cadir, s:cafile)
retu map(mrufs, 'fnamemodify(v:val, '':.'')')
en
" Get the list
let mrufs = ctrlp#utils#readfile(s:cafile)
@ -59,8 +64,7 @@ fu! ctrlp#mrufiles#list(bufnr, ...) "{{{1
let cwd = exists('+ssl') ? tr(getcwd(), '/', '\') : getcwd()
cal filter(mrufs, '!stridx(v:val, cwd)')
en
cal map(mrufs, 'fnamemodify(v:val, '':.'')')
retu mrufs
retu map(mrufs, 'fnamemodify(v:val, '':.'')')
en
" Remove old entry
cal filter(mrufs, 'v:val !='.s:csen.' fn')

View File

@ -23,14 +23,6 @@ let g:ctrlp_ext_vars = exists('g:ctrlp_ext_vars') && !empty(g:ctrlp_ext_vars)
let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars)
" Utilities {{{1
fu! s:nodup(items)
let dict = {}
for each in a:items
cal extend(dict, { each : 0 })
endfo
retu keys(dict)
endf
fu! s:findcount(str)
let [tg, fname] = split(a:str, '\t\+\ze[^\t]\+$')
let [fname, tgs] = [expand(fname, 1), taglist('^'.tg.'$')]
@ -67,7 +59,8 @@ endf
" Public {{{1
fu! ctrlp#tag#init(tagfiles)
if empty(a:tagfiles) | retu [] | en
let [tagfiles, g:ctrlp_alltags] = [sort(s:nodup(a:tagfiles)), []]
let g:ctrlp_alltags = []
let tagfiles = sort(filter(a:tagfiles, 'count(a:tagfiles, v:val) == 1'))
for each in tagfiles
let alltags = s:filter(ctrlp#utils#readfile(each))
cal extend(g:ctrlp_alltags, alltags)
@ -82,15 +75,14 @@ endf
fu! ctrlp#tag#accept(mode, str)
cal ctrlp#exit()
let str = matchstr(a:str, '^[^\t]\+\t\+[^\t]\+\ze\t')
let [md, tg] = [a:mode, split(str, '^[^\t]\+\zs\t')[0]]
let fnd = s:findcount(str)
let [tg, fnd] = [split(str, '^[^\t]\+\zs\t')[0], s:findcount(str)]
let cmds = {
\ 't': ['tab sp', 'tab stj'],
\ 'h': ['sp', 'stj'],
\ 'v': ['vs', 'vert stj'],
\ 'e': ['', 'tj'],
\ }
let cmd = fnd[0] == 1 ? cmds[md][0] : cmds[md][1]
let cmd = fnd[0] == 1 ? cmds[a:mode][0] : cmds[a:mode][1]
let cmd = cmd == 'tj' && &modified ? 'hid '.cmd : cmd
let cmd = cmd =~ '^tab' ? tabpagenr('$').cmd : cmd
if fnd[0] == 1

View File

@ -102,7 +102,9 @@ endf
fu! ctrlp#undo#init(undo)
let entries = a:undo['entries']
if empty(entries) | retu [] | en
cal s:syntax()
if has('syntax') && exists('g:syntax_on')
cal s:syntax()
en
let g:ctrlp_nolimit = 1
let entries = sort(s:dict2list(s:flatten(entries)), 's:compval')
retu map(entries, 'v:val[1]." [".v:val[0]."]"')

View File

@ -96,7 +96,6 @@ variable: >
.hg/
.bzr/
_darcs/
root.dir
0 - dont manage working directory.
*'g:ctrlp_root_markers'*
@ -543,7 +542,8 @@ Once inside the prompt:~
- Remove deleted files from MRU list.
<F7>
Clear MRU list.
- Wipe MRU list.
- Delete MRU entries marked by <c-z>.
<insert>
Insert the word under the cursor (in the active buffer) into the prompt.
@ -762,6 +762,7 @@ Special thanks:~
CHANGELOG *ctrlp-changelog*
+ New option: |g:ctrlp_mruf_last_entered| change MRU to recently-entered.
+ Extend |g:ctrlp_user_command| to support multiple commands.
Before 2012/01/15~