Mercurial > dotfiles
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 |
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 |