annotate vim/autoload/ctrlpext/autoignore.vim @ 199:4e276e0cdd98

Better auto-ignore for CtrlP.
author Ludovic Chabant <ludovic@chabant.com>
date Mon, 18 Aug 2014 17:12:08 -0700
parents ae53d68033d9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
193
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
1 " =============================================================================
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
2 " File: autoload/ctrlpext/autoignore.vim
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
3 " Description: Auto-ignore Extension
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
4 " Author: Ludovic Chabant <github.com/ludovicchabant>
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
5 " =============================================================================
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
6
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
7
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
8 " Global Settings {{{
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
9
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
10 if !exists('g:ctrlp_autoignore_debug')
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
11 let g:ctrlp_autoignore_debug = 0
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
12 endif
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
13
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
14 if !exists('g:ctrlp_autoignore_trace')
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
15 let g:ctrlp_autoignore_trace = 0
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
16 endif
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
17
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
18 if exists('g:ctrlp_autoignore_loaded') && g:ctrlp_autoignore_loaded
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
19 \ && !g:ctrlp_autoignore_debug
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
20 finish
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
21 endif
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
22 let g:ctrlp_autoignore_loaded = 1
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
23
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
24 " }}}
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
25
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
26 " Autoload functions {{{
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
27
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
28 " Call this in your `vimrc` to enable auto-ignore.
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
29 function! ctrlpext#autoignore#init() abort
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
30 if !exists('g:ctrlp_custom_ignore')
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
31 let g:ctrlp_custom_ignore = {}
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
32 endif
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
33 let g:ctrlp_custom_ignore['func'] = 'ctrlpext#autoignore#ignore'
199
4e276e0cdd98 Better auto-ignore for CtrlP.
Ludovic Chabant <ludovic@chabant.com>
parents: 193
diff changeset
34 let g:ctrlp_custom_ignore['func-init'] = 'ctrlpext#autoignore#ignore_init'
193
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
35 endfunction
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
36
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
37 " List patterns for a given project's root.
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
38 function! ctrlpext#autoignore#get_patterns(root_dir) abort
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
39 let l:patterns = s:get_project_patterns(a:root_dir)
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
40 for pat in l:patterns
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
41 let l:prefix = pat['type'] == '' ? '(all)' : pat['type']
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
42 echom l:prefix . ':' . pat['pat']
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
43 endfor
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
44 endfunction
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
45
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
46 " }}}
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
47
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
48 " Internals {{{
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
49
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
50 function! s:trace(message) abort
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
51 if g:ctrlp_autoignore_trace
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
52 echom "ctrlp_autoignore: " . a:message
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
53 endif
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
54 endfunction
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
55
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
56 let s:proj_cache = {}
199
4e276e0cdd98 Better auto-ignore for CtrlP.
Ludovic Chabant <ludovic@chabant.com>
parents: 193
diff changeset
57 let s:active_patterns = []
193
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
58
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
59 function! s:load_project_patterns(root_dir) abort
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
60 let l:ign_path = a:root_dir . '/.ctrlpignore'
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
61 if !filereadable(l:ign_path)
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
62 call s:trace("No pattern file at: " . l:ign_path)
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
63 return []
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
64 endif
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
65 let l:patterns = []
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
66 let l:lines = readfile(l:ign_path)
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
67 for line in l:lines
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
68 if match(line, '\v^\s*$') >= 0 || match(line, '\v^\s*#') >= 0
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
69 continue
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
70 endif
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
71 let l:matches = matchlist(line, '\v^((dir|file|link)\:)?(.*)')
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
72 let l:mtype = l:matches[2]
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
73 let l:mpat = l:matches[3]
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
74 call add(l:patterns, {'type': l:mtype, 'pat': l:mpat})
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
75 endfor
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
76 call s:trace("Loaded " . len(l:patterns) . " patterns from: " . l:ign_path)
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
77 return l:patterns
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
78 endfunction
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
79
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
80 function! s:get_project_patterns(root_dir) abort
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
81 let l:patterns = get(s:proj_cache, a:root_dir)
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
82 if type(l:patterns) == type([])
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
83 return l:patterns
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
84 endif
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
85
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
86 call s:trace("Loading patterns for project: " . a:root_dir)
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
87 let l:loaded = s:load_project_patterns(a:root_dir)
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
88 let s:proj_cache[a:root_dir] = l:loaded
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
89 return l:loaded
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
90 endfunction
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
91
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
92 " The custom ignore function that CtrlP will be using in addition to
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
93 " normal pattern-based matching.
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
94 function! ctrlpext#autoignore#ignore(item, type) abort
199
4e276e0cdd98 Better auto-ignore for CtrlP.
Ludovic Chabant <ludovic@chabant.com>
parents: 193
diff changeset
95 for pat in s:active_patterns
193
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
96 if pat['type'] == '' || pat['type'] == a:type
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
97 if match(a:item, pat['pat']) >= 0
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
98 return 1
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
99 endif
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
100 endif
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
101 endfor
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
102 return 0
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
103 endfunction
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
104
199
4e276e0cdd98 Better auto-ignore for CtrlP.
Ludovic Chabant <ludovic@chabant.com>
parents: 193
diff changeset
105 function! ctrlpext#autoignore#ignore_init() abort
4e276e0cdd98 Better auto-ignore for CtrlP.
Ludovic Chabant <ludovic@chabant.com>
parents: 193
diff changeset
106 let l:root = getcwd()
4e276e0cdd98 Better auto-ignore for CtrlP.
Ludovic Chabant <ludovic@chabant.com>
parents: 193
diff changeset
107 let s:active_patterns = s:get_project_patterns(l:root)
4e276e0cdd98 Better auto-ignore for CtrlP.
Ludovic Chabant <ludovic@chabant.com>
parents: 193
diff changeset
108 endfunction
4e276e0cdd98 Better auto-ignore for CtrlP.
Ludovic Chabant <ludovic@chabant.com>
parents: 193
diff changeset
109
193
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
110 " }}}
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
111