Mercurial > dotfiles
annotate vim/bundle/lawrencium/plugin/lawrencium.vim @ 52:05fd225bd1a0
Fixed detect autocmds.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Thu, 08 Dec 2011 08:14:27 -0800 |
parents | a6bc310e7015 |
children | 0dbb1fd60f71 |
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 " Gets a full path given a repo-relative path |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
65 function! s:HgRepo.GetFullPath(path) abort |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
66 let l:path = self.root_dir |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
67 if a:path =~# '^/' |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
68 let l:path = s:stripslash(self.root_dir) |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
69 endif |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
70 return l:path . a:path |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
71 endfunction |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
72 |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
73 " Runs a Mercurial command in the repo |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
74 function! s:HgRepo.RunCommand(command, ...) abort |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
75 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
|
76 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
|
77 call s:trace("Running Mercurial command: " . l:hg_command) |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
78 return system(l:hg_command) |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
79 endfunction |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
80 |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
81 " Repo cache map |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
82 let s:buffer_repos = {} |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
83 |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
84 " Get a cached repo |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
85 function! s:hg_repo(...) abort |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
86 " 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
|
87 if a:0 == 0 |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
88 if exists('b:mercurial_dir') |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
89 let l:path = b:mercurial_dir |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
90 else |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
91 let l:path = s:find_repo_root(expand('%:p')) |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
92 endif |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
93 else |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
94 let l:path = a:1 |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
95 endif |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
96 " Find a cache repo instance, or make a new one. |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
97 if has_key(s:buffer_repos, l:path) |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
98 return get(s:buffer_repos, l:path) |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
99 else |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
100 let l:repo = s:HgRepo.New(l:path) |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
101 let s:buffer_repos[l:path] = l:repo |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
102 return l:repo |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
103 endif |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
104 endfunction |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
105 |
52
05fd225bd1a0
Fixed detect autocmds.
Ludovic Chabant <ludovic@chabant.com>
parents:
51
diff
changeset
|
106 " Sets up the current buffer with Lawrencium commands if it contains a file from a Mercurial repo. |
05fd225bd1a0
Fixed detect autocmds.
Ludovic Chabant <ludovic@chabant.com>
parents:
51
diff
changeset
|
107 " If the file is not in a Mercurial repo, just exit silently. |
05fd225bd1a0
Fixed detect autocmds.
Ludovic Chabant <ludovic@chabant.com>
parents:
51
diff
changeset
|
108 function! s:setup_buffer_commands() abort |
05fd225bd1a0
Fixed detect autocmds.
Ludovic Chabant <ludovic@chabant.com>
parents:
51
diff
changeset
|
109 let l:do_setup = 1 |
05fd225bd1a0
Fixed detect autocmds.
Ludovic Chabant <ludovic@chabant.com>
parents:
51
diff
changeset
|
110 if exists('b:mercurial_dir') |
05fd225bd1a0
Fixed detect autocmds.
Ludovic Chabant <ludovic@chabant.com>
parents:
51
diff
changeset
|
111 if b:mercurial_dir =~# '/^\s*$/' |
05fd225bd1a0
Fixed detect autocmds.
Ludovic Chabant <ludovic@chabant.com>
parents:
51
diff
changeset
|
112 unlet b:mercurial_dir |
05fd225bd1a0
Fixed detect autocmds.
Ludovic Chabant <ludovic@chabant.com>
parents:
51
diff
changeset
|
113 else |
05fd225bd1a0
Fixed detect autocmds.
Ludovic Chabant <ludovic@chabant.com>
parents:
51
diff
changeset
|
114 let l:do_setup = 0 |
05fd225bd1a0
Fixed detect autocmds.
Ludovic Chabant <ludovic@chabant.com>
parents:
51
diff
changeset
|
115 endif |
05fd225bd1a0
Fixed detect autocmds.
Ludovic Chabant <ludovic@chabant.com>
parents:
51
diff
changeset
|
116 endif |
05fd225bd1a0
Fixed detect autocmds.
Ludovic Chabant <ludovic@chabant.com>
parents:
51
diff
changeset
|
117 try |
05fd225bd1a0
Fixed detect autocmds.
Ludovic Chabant <ludovic@chabant.com>
parents:
51
diff
changeset
|
118 let l:repo = s:hg_repo() |
05fd225bd1a0
Fixed detect autocmds.
Ludovic Chabant <ludovic@chabant.com>
parents:
51
diff
changeset
|
119 catch /^lawrencium\:/ |
05fd225bd1a0
Fixed detect autocmds.
Ludovic Chabant <ludovic@chabant.com>
parents:
51
diff
changeset
|
120 return |
05fd225bd1a0
Fixed detect autocmds.
Ludovic Chabant <ludovic@chabant.com>
parents:
51
diff
changeset
|
121 endtry |
05fd225bd1a0
Fixed detect autocmds.
Ludovic Chabant <ludovic@chabant.com>
parents:
51
diff
changeset
|
122 let b:mercurial_dir = l:repo.root_dir |
05fd225bd1a0
Fixed detect autocmds.
Ludovic Chabant <ludovic@chabant.com>
parents:
51
diff
changeset
|
123 if exists('b:mercurial_dir') && l:do_setup |
05fd225bd1a0
Fixed detect autocmds.
Ludovic Chabant <ludovic@chabant.com>
parents:
51
diff
changeset
|
124 call s:trace("Setting Mercurial commands for buffer '" . bufname('%') . "' with repo : " . expand(b:mercurial_dir)) |
05fd225bd1a0
Fixed detect autocmds.
Ludovic Chabant <ludovic@chabant.com>
parents:
51
diff
changeset
|
125 silent doautocmd User Lawrencium |
05fd225bd1a0
Fixed detect autocmds.
Ludovic Chabant <ludovic@chabant.com>
parents:
51
diff
changeset
|
126 endif |
05fd225bd1a0
Fixed detect autocmds.
Ludovic Chabant <ludovic@chabant.com>
parents:
51
diff
changeset
|
127 endfunction |
05fd225bd1a0
Fixed detect autocmds.
Ludovic Chabant <ludovic@chabant.com>
parents:
51
diff
changeset
|
128 |
51
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
129 augroup lawrencium_detect |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
130 autocmd! |
52
05fd225bd1a0
Fixed detect autocmds.
Ludovic Chabant <ludovic@chabant.com>
parents:
51
diff
changeset
|
131 autocmd BufNewFile,BufReadPost * call s:setup_buffer_commands() |
05fd225bd1a0
Fixed detect autocmds.
Ludovic Chabant <ludovic@chabant.com>
parents:
51
diff
changeset
|
132 autocmd VimEnter * if expand('<amatch>')==''|call s:setup_buffer_commands()|endif |
51
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
133 augroup end |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
134 |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
135 " }}} |
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 " Commands {{{ |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
138 |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
139 let s:main_commands = [] |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
140 |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
141 function! s:AddMainCommand(command) abort |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
142 let s:main_commands += [a:command] |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
143 endfunction |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
144 |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
145 function! s:DefineMainCommands() |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
146 for command in s:main_commands |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
147 execute 'command! -buffer '.command |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
148 endfor |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
149 endfunction |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
150 |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
151 augroup lawrencium_main |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
152 autocmd! |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
153 autocmd User Lawrencium call s:DefineMainCommands() |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
154 augroup end |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
155 |
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 |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
158 " HgExecute {{{ |
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 function! s:HgExecute(...) abort |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
161 let l:repo = s:hg_repo() |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
162 echo call(l:repo.RunCommand, a:000, l:repo) |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
163 endfunction |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
164 |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
165 call s:AddMainCommand("-nargs=* Hg :execute s:HgExecute(<f-args>)") |
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 " }}} |
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 " HgStatus {{{ |
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 function! s:HgStatus() abort |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
172 echo s:hg_repo().RunCommand('status') |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
173 endfunction |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
174 |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
175 call s:AddMainCommand("HgStatus :execute s:HgStatus()") |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
176 |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
177 " }}} |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
178 |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
179 " Hgcd, Hglcd {{{ |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
180 |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
181 function! s:ListRepoDirs(ArgLead, CmdLine, CursorPos) abort |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
182 let l:root_dir = s:hg_repo().root_dir |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
183 if (a:ArgLead =~# '^/') |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
184 let l:root_dir = s:stripslash(l:root_dir) |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
185 endif |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
186 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
|
187 let l:strip_len = len(l:root_dir) |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
188 call map(l:matches, 'v:val[l:strip_len : -1] . "/"') |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
189 return l:matches |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
190 endfunction |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
191 |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
192 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
|
193 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
|
194 |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
195 " }}} |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
196 |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
197 " Autoload Functions {{{ |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
198 |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
199 function! lawrencium#statusline(...) |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
200 if !exists('b:mercurial_dir') |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
201 return '' |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
202 endif |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
203 let l:summary = s:hg_repo().RunCommand('summary') |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
204 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
|
205 let l:branch = matchstr(l:summary, 'branch\: [\d\w\-_\.]+') |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
206 return l:branch . ', ' . l:parent_rev |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
207 endfunction |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
208 |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
209 " }}} |
a6bc310e7015
First version of lawrencium plugin.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
210 |