annotate vim/autoload/ctrlp/autoignore.vim @ 240:3a6b11d16a2a

Simpler registration for CtrlP extensions.
author Ludovic Chabant <ludovic@chabant.com>
date Fri, 12 Dec 2014 16:53:19 -0800
parents vim/autoload/ctrlpext/autoignore.vim@4e276e0cdd98
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 " =============================================================================
240
3a6b11d16a2a Simpler registration for CtrlP extensions.
Ludovic Chabant <ludovic@chabant.com>
parents: 199
diff changeset
2 " File: autoload/ctrlp/autoignore.vim
193
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
240
3a6b11d16a2a Simpler registration for CtrlP extensions.
Ludovic Chabant <ludovic@chabant.com>
parents: 199
diff changeset
26 " Initialization {{{
193
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
27
240
3a6b11d16a2a Simpler registration for CtrlP extensions.
Ludovic Chabant <ludovic@chabant.com>
parents: 199
diff changeset
28 if !exists('g:ctrlp_custom_ignore')
3a6b11d16a2a Simpler registration for CtrlP extensions.
Ludovic Chabant <ludovic@chabant.com>
parents: 199
diff changeset
29 let g:ctrlp_custom_ignore = {}
3a6b11d16a2a Simpler registration for CtrlP extensions.
Ludovic Chabant <ludovic@chabant.com>
parents: 199
diff changeset
30 endif
3a6b11d16a2a Simpler registration for CtrlP extensions.
Ludovic Chabant <ludovic@chabant.com>
parents: 199
diff changeset
31 let g:ctrlp_custom_ignore['func'] = 'ctrlp#autoignore#ignore'
3a6b11d16a2a Simpler registration for CtrlP extensions.
Ludovic Chabant <ludovic@chabant.com>
parents: 199
diff changeset
32 let g:ctrlp_custom_ignore['func-init'] = 'ctrlp#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
33
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
34 " }}}
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
35
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
36 " Internals {{{
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
37
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
38 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
39 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
40 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
41 endif
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
42 endfunction
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
43
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
44 let s:proj_cache = {}
199
4e276e0cdd98 Better auto-ignore for CtrlP.
Ludovic Chabant <ludovic@chabant.com>
parents: 193
diff changeset
45 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
46
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
47 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
48 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
49 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
50 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
51 return []
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
52 endif
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
53 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
54 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
55 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
56 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
57 continue
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
58 endif
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
59 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
60 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
61 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
62 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
63 endfor
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
64 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
65 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
66 endfunction
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
67
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
68 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
69 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
70 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
71 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
72 endif
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
73
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
74 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
75 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
76 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
77 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
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 " 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
81 " normal pattern-based matching.
240
3a6b11d16a2a Simpler registration for CtrlP extensions.
Ludovic Chabant <ludovic@chabant.com>
parents: 199
diff changeset
82 function! ctrlp#autoignore#ignore(item, type) abort
199
4e276e0cdd98 Better auto-ignore for CtrlP.
Ludovic Chabant <ludovic@chabant.com>
parents: 193
diff changeset
83 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
84 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
85 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
86 return 1
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
87 endif
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
88 endif
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
89 endfor
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
90 return 0
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
91 endfunction
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
92
240
3a6b11d16a2a Simpler registration for CtrlP extensions.
Ludovic Chabant <ludovic@chabant.com>
parents: 199
diff changeset
93 function! ctrlp#autoignore#ignore_init() abort
199
4e276e0cdd98 Better auto-ignore for CtrlP.
Ludovic Chabant <ludovic@chabant.com>
parents: 193
diff changeset
94 let l:root = getcwd()
4e276e0cdd98 Better auto-ignore for CtrlP.
Ludovic Chabant <ludovic@chabant.com>
parents: 193
diff changeset
95 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
96 endfunction
4e276e0cdd98 Better auto-ignore for CtrlP.
Ludovic Chabant <ludovic@chabant.com>
parents: 193
diff changeset
97
240
3a6b11d16a2a Simpler registration for CtrlP extensions.
Ludovic Chabant <ludovic@chabant.com>
parents: 199
diff changeset
98 " List patterns for a given project's root.
3a6b11d16a2a Simpler registration for CtrlP extensions.
Ludovic Chabant <ludovic@chabant.com>
parents: 199
diff changeset
99 function! ctrlp#autoignore#get_patterns(root_dir) abort
3a6b11d16a2a Simpler registration for CtrlP extensions.
Ludovic Chabant <ludovic@chabant.com>
parents: 199
diff changeset
100 let l:patterns = s:get_project_patterns(a:root_dir)
3a6b11d16a2a Simpler registration for CtrlP extensions.
Ludovic Chabant <ludovic@chabant.com>
parents: 199
diff changeset
101 for pat in l:patterns
3a6b11d16a2a Simpler registration for CtrlP extensions.
Ludovic Chabant <ludovic@chabant.com>
parents: 199
diff changeset
102 let l:prefix = pat['type'] == '' ? '(all)' : pat['type']
3a6b11d16a2a Simpler registration for CtrlP extensions.
Ludovic Chabant <ludovic@chabant.com>
parents: 199
diff changeset
103 echom l:prefix . ':' . pat['pat']
3a6b11d16a2a Simpler registration for CtrlP extensions.
Ludovic Chabant <ludovic@chabant.com>
parents: 199
diff changeset
104 endfor
3a6b11d16a2a Simpler registration for CtrlP extensions.
Ludovic Chabant <ludovic@chabant.com>
parents: 199
diff changeset
105 endfunction
3a6b11d16a2a Simpler registration for CtrlP extensions.
Ludovic Chabant <ludovic@chabant.com>
parents: 199
diff changeset
106
193
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
107 " }}}
ae53d68033d9 Enable fugitive and some CtrlP extensions, include a new one of my own.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
108