annotate vim/bundle/lawrencium/plugin/lawrencium.vim @ 51:a6bc310e7015

First version of lawrencium plugin.
author Ludovic Chabant <ludovic@chabant.com>
date Wed, 07 Dec 2011 23:32:39 -0800
parents
children 05fd225bd1a0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
51
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
1 " lawrencium.vim - A Mercurial wrapper
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
2 " Maintainer: Ludovic Chabant <http://ludovic.chabant.com>
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
3 " Version: 0.1
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
4
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
5 if exists('g:loaded_lawrencium') || &cp
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
6 " finish
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
7 endif
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
8 let g:loaded_lawrencium = 1
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
9
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
10 if !exists('g:lawrencium_hg_executable')
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
11 let g:lawrencium_hg_executable = 'hg'
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
12 endif
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
13
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
14 if !exists('g:lawrencium_trace')
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
15 let g:lawrencium_trace = 0
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
16 endif
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
17
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
18 " Utility {{{
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
19
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
20 function! s:stripslash(path)
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
21 return fnamemodify(a:path, ':s?[\/]$??')
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
22 endfunction
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
23
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
24 function! s:trace(message)
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
25 if g:lawrencium_trace
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
26 let l:message = "lawrencium: " . a:message
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
27 endif
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
28 endfunction
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
29
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
30 function! s:throw(message)
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
31 let v:errmsg = "lawrencium: " . a:message
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
32 throw v:errmsg
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
33 endfunction
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
34
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
35 function! s:find_repo_root(path)
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
36 let l:path = s:stripslash(a:path)
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
37 while l:path != ""
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
38 if isdirectory(l:path . '/.hg/store')
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
39 return simplify(fnamemodify(l:path, ':p'))
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
40 endif
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
41 let l:path = fnamemodify(l:path, ':h')
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
42 endwhile
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
43 call s:throw("No Mercurial repository found above: " . a:path)
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
44 endfunction
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
45
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
46 " }}}
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
47
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
48 " Mercurial Repository {{{
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
49
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
50 " Let's define a Mercurial repo 'class' using prototype-based object-oriented
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
51 " programming.
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
52 "
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
53 " The prototype dictionary.
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
54 let s:HgRepo = {}
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
55
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
56 " Constructor
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
57 function! s:HgRepo.New(path) abort
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
58 let l:newRepo = copy(self)
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
59 let l:newRepo.root_dir = s:find_repo_root(a:path)
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
60 call s:trace("Built new Mercurial repository object at : " . l:newRepo.root_dir)
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
61 return l:newRepo
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
62 endfunction
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
63
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
64 " Sets up the current buffer with local variables
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
65 function! s:HgRepo.SetupBuffer() abort
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
66 if exists('b:mercurial_dir') && (b:mercurial_dir =~# '/^\s*$/')
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
67 unlet b:mercurial_dir
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
68 endif
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
69 if !exists('b:mercurial_dir')
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
70 let b:mercurial_dir = self.root_dir
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
71 endif
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
72 if exists('b:mercurial_dir')
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
73 call s:trace("Setting Mercurial directory to : " . expand(b:mercurial_dir))
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
74 silent doautocmd User Lawrencium
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
75 endif
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
76 endfunction
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
77
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
78 " Gets a full path given a repo-relative path
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
79 function! s:HgRepo.GetFullPath(path) abort
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
80 let l:path = self.root_dir
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
81 if a:path =~# '^/'
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
82 let l:path = s:stripslash(self.root_dir)
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
83 endif
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
84 return l:path . a:path
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
85 endfunction
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
86
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
87 " Runs a Mercurial command in the repo
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
88 function! s:HgRepo.RunCommand(command, ...) abort
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
89 let l:hg_command = g:lawrencium_hg_executable . ' --repository ' . shellescape(self.root_dir)
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
90 let l:hg_command = l:hg_command . ' ' . a:command . ' ' . join(a:000, ' ')
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
91 call s:trace("Running Mercurial command: " . l:hg_command)
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
92 return system(l:hg_command)
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
93 endfunction
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
94
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
95 " Repo cache map
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
96 let s:buffer_repos = {}
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
97
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
98 " Get a cached repo
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
99 function! s:hg_repo(...) abort
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
100 " Use the given path, or the mercurial directory of the current buffer.
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
101 if a:0 == 0
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
102 if exists('b:mercurial_dir')
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
103 let l:path = b:mercurial_dir
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
104 else
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
105 let l:path = s:find_repo_root(expand('%:p'))
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
106 let b:mercurial_dir = l:path
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
107 endif
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
108 else
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
109 let l:path = a:1
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
110 endif
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
111 " Find a cache repo instance, or make a new one.
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
112 if has_key(s:buffer_repos, l:path)
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
113 return get(s:buffer_repos, l:path)
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
114 else
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
115 let l:repo = s:HgRepo.New(l:path)
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
116 let s:buffer_repos[l:path] = l:repo
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
117 return l:repo
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
118 endif
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
119 endfunction
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
120
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
121 augroup lawrencium_detect
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
122 autocmd!
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
123 " autocmd BufNewFile,BufReadPost * call s:DetectMercurialRepository(expand('<amatch>:p'))
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
124 " autocmd VimEnter * if expand('<amatch>')==''|call s:DetectMercurialRepository(getcwd())|endif
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
125 augroup end
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
126
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
127 " }}}
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
128
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
129 " Commands {{{
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
130
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
131 let s:main_commands = []
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
132
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
133 function! s:AddMainCommand(command) abort
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
134 let s:main_commands += [a:command]
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
135 endfunction
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
136
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
137 function! s:DefineMainCommands()
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
138 for command in s:main_commands
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
139 execute 'command! -buffer '.command
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
140 endfor
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
141 endfunction
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
142
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
143 augroup lawrencium_main
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
144 autocmd!
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
145 autocmd User Lawrencium call s:DefineMainCommands()
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
146 augroup end
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
147
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
148 " }}}
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
149
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
150 " HgExecute {{{
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
151
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
152 function! s:HgExecute(...) abort
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
153 let l:repo = s:hg_repo()
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
154 echo call(l:repo.RunCommand, a:000, l:repo)
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
155 endfunction
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
156
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
157 call s:AddMainCommand("-nargs=* Hg :execute s:HgExecute(<f-args>)")
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
158
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
159 " }}}
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
160
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
161 " HgStatus {{{
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
162
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
163 function! s:HgStatus() abort
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
164 echo s:hg_repo().RunCommand('status')
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
165 endfunction
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
166
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
167 call s:AddMainCommand("HgStatus :execute s:HgStatus()")
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
168
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
169 " }}}
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
170
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
171 " Hgcd, Hglcd {{{
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
172
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
173 function! s:ListRepoDirs(ArgLead, CmdLine, CursorPos) abort
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
174 let l:root_dir = s:hg_repo().root_dir
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
175 if (a:ArgLead =~# '^/')
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
176 let l:root_dir = s:stripslash(l:root_dir)
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
177 endif
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
178 let l:matches = split(glob(l:root_dir . a:ArgLead . '*'), '\n')
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
179 let l:strip_len = len(l:root_dir)
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
180 call map(l:matches, 'v:val[l:strip_len : -1] . "/"')
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
181 return l:matches
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
182 endfunction
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
183
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
184 call s:AddMainCommand("-bang -nargs=? -complete=customlist,s:ListRepoDirs Hgcd :cd<bang> `=s:hg_repo().GetFullPath(<q-args>)`")
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
185 call s:AddMainCommand("-bang -nargs=? -complete=customlist,s:ListRepoDirs Hglcd :lcd<bang> `=s:hg_repo().GetFullPath(<q-args>)`")
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
186
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
187 " }}}
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
188
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
189 " Autoload Functions {{{
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
190
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
191 function! lawrencium#statusline(...)
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
192 if !exists('b:mercurial_dir')
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
193 return ''
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
194 endif
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
195 let l:summary = s:hg_repo().RunCommand('summary')
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
196 let l:parent_rev = matchstr(l:summary, 'parent\: \d+\:[0-9a-f]+')
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
197 let l:branch = matchstr(l:summary, 'branch\: [\d\w\-_\.]+')
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
198 return l:branch . ', ' . l:parent_rev
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
199 endfunction
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
200
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
201 " }}}
a6bc310e7015 First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
202