annotate plugins/hghelp/hghelp.vim @ 15:7edd5f6fe136

This is another test of commiting with the message this time
author Luka Sitas <lsitas@avatarasoftware.com>
date Tue, 02 Dec 2025 12:13:02 -0500
parents 6ee7fce1cba8
children 412c33afd395
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6
3017fd33ad8b Better support for db tables.
Luka Sitas <lsitas@avatarasoftware.com>
parents:
diff changeset
1 let g:hg_format_command = ""
3017fd33ad8b Better support for db tables.
Luka Sitas <lsitas@avatarasoftware.com>
parents:
diff changeset
2
3017fd33ad8b Better support for db tables.
Luka Sitas <lsitas@avatarasoftware.com>
parents:
diff changeset
3
8
9c80955f0c6e I think I got popups working on the commit
Luka Sitas <lsitas@avatarasoftware.com>
parents: 7
diff changeset
4 function PopupCommand(command)
9c80955f0c6e I think I got popups working on the commit
Luka Sitas <lsitas@avatarasoftware.com>
parents: 7
diff changeset
5 let buf = term_start(a:command, {'hidden': 1, 'term_finish': 'close'})
9
17c557de03e0 Updated commit window
Luka Sitas <lsitas@avatarasoftware.com>
parents: 8
diff changeset
6 let winid = popup_create(buf, {'minwidth': 120, 'minheight': 28})
8
9c80955f0c6e I think I got popups working on the commit
Luka Sitas <lsitas@avatarasoftware.com>
parents: 7
diff changeset
7 endfunction
9c80955f0c6e I think I got popups working on the commit
Luka Sitas <lsitas@avatarasoftware.com>
parents: 7
diff changeset
8
13
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
9 function! ExecuteCommand(command)
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
10 " a:command is a shell command string, e.g. 'hg status'
8
9c80955f0c6e I think I got popups working on the commit
Luka Sitas <lsitas@avatarasoftware.com>
parents: 7
diff changeset
11 return system(a:command . ' 2>&1')
9c80955f0c6e I think I got popups working on the commit
Luka Sitas <lsitas@avatarasoftware.com>
parents: 7
diff changeset
12 endfunction
9c80955f0c6e I think I got popups working on the commit
Luka Sitas <lsitas@avatarasoftware.com>
parents: 7
diff changeset
13
6
3017fd33ad8b Better support for db tables.
Luka Sitas <lsitas@avatarasoftware.com>
parents:
diff changeset
14 function! s:CommitWithFormat()
3017fd33ad8b Better support for db tables.
Luka Sitas <lsitas@avatarasoftware.com>
parents:
diff changeset
15 wa
3017fd33ad8b Better support for db tables.
Luka Sitas <lsitas@avatarasoftware.com>
parents:
diff changeset
16 if exists("g:hg_format_command") && !empty(g:hg_format_command)
3017fd33ad8b Better support for db tables.
Luka Sitas <lsitas@avatarasoftware.com>
parents:
diff changeset
17 execute '!'.g:hg_format_command
3017fd33ad8b Better support for db tables.
Luka Sitas <lsitas@avatarasoftware.com>
parents:
diff changeset
18 endif
8
9c80955f0c6e I think I got popups working on the commit
Luka Sitas <lsitas@avatarasoftware.com>
parents: 7
diff changeset
19 execute
9c80955f0c6e I think I got popups working on the commit
Luka Sitas <lsitas@avatarasoftware.com>
parents: 7
diff changeset
20 call ExecuteCommand('!hg addremove')
9c80955f0c6e I think I got popups working on the commit
Luka Sitas <lsitas@avatarasoftware.com>
parents: 7
diff changeset
21 call PopupCommand('hg commit')
6
3017fd33ad8b Better support for db tables.
Luka Sitas <lsitas@avatarasoftware.com>
parents:
diff changeset
22 endfunction
3017fd33ad8b Better support for db tables.
Luka Sitas <lsitas@avatarasoftware.com>
parents:
diff changeset
23
3017fd33ad8b Better support for db tables.
Luka Sitas <lsitas@avatarasoftware.com>
parents:
diff changeset
24 function! s:OpenHgDiff(file)
3017fd33ad8b Better support for db tables.
Luka Sitas <lsitas@avatarasoftware.com>
parents:
diff changeset
25 let l:current_file = a:file !=# '' ? a:file : expand('%')
3017fd33ad8b Better support for db tables.
Luka Sitas <lsitas@avatarasoftware.com>
parents:
diff changeset
26 let l:filetype = &filetype
3017fd33ad8b Better support for db tables.
Luka Sitas <lsitas@avatarasoftware.com>
parents:
diff changeset
27 let l:temp_file = tempname()
7
34930197e9d4 Updating hg diff tool.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 6
diff changeset
28 let l:command = 'hg cat -r . ' . l:current_file . ' > ' . l:temp_file
8
9c80955f0c6e I think I got popups working on the commit
Luka Sitas <lsitas@avatarasoftware.com>
parents: 7
diff changeset
29 call ExecuteCommand(l:command)
7
34930197e9d4 Updating hg diff tool.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 6
diff changeset
30 execute 'tabe ' . l:temp_file
6
3017fd33ad8b Better support for db tables.
Luka Sitas <lsitas@avatarasoftware.com>
parents:
diff changeset
31 execute 'setfiletype' l:filetype
3017fd33ad8b Better support for db tables.
Luka Sitas <lsitas@avatarasoftware.com>
parents:
diff changeset
32 setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile
3017fd33ad8b Better support for db tables.
Luka Sitas <lsitas@avatarasoftware.com>
parents:
diff changeset
33 execute 'vert diffsplit' l:current_file
3017fd33ad8b Better support for db tables.
Luka Sitas <lsitas@avatarasoftware.com>
parents:
diff changeset
34 endfunction
3017fd33ad8b Better support for db tables.
Luka Sitas <lsitas@avatarasoftware.com>
parents:
diff changeset
35
3017fd33ad8b Better support for db tables.
Luka Sitas <lsitas@avatarasoftware.com>
parents:
diff changeset
36 command HGDiff call s:OpenHgDiff(expand('%'))
13
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
37 command! HGCommit call <SID>HgCommitUI()
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
38 " command Commit call s:CommitWithFormat()
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
39 " map <C-k> :Commit<CR>
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
40 "
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
41
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
42 nnoremap <Leader>df :HGDiff<CR>
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
43 nnoremap <C-k> :HGCommit<CR>
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
44
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
45
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
46
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
47 " HG UI
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
48 function! s:HgCommitUI()
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
49 " Save current window to go back if needed
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
50 let l:save_winid = win_getid()
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
51
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
52 " Get hg status
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
53 let l:status = ExecuteCommand('hg status -T"[ ] {status} {path}\n"')
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
54 if v:shell_error != 0
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
55 echohl ErrorMsg
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
56 echom "hg status failed:"
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
57 echom l:status
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
58 echohl None
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
59 return
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
60 endif
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
61 let l:lines = split(l:status, "\n")
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
62 if empty(l:lines)
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
63 echo "No changes to commit."
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
64 return
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
65 endif
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
66
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
67 " Open a new tab for this commit UI
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
68 tabnew
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
69 " Top window for file selection
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
70 enew
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
71 let b:hgcommit_type = 'filelist'
15
7edd5f6fe136 This is another test of commiting with the message this time
Luka Sitas <lsitas@avatarasoftware.com>
parents: 14
diff changeset
72 call setline(1, l:lines)
13
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
73 setlocal buftype=acwrite bufhidden=wipe nobuflisted noswapfile
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
74 setlocal nomodifiable
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
75 setlocal cursorline
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
76 nnoremap <silent> <buffer> <CR> :call <SID>ToggleHgFileSelection()<CR>
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
77 nnoremap <silent> <buffer> <leader>aa :call <SID>ToggleHgSelectAll()<CR>
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
78
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
79 " Split for commit message
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
80 belowright split
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
81 resize 10
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
82 enew
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
83 let b:hgcommit_type = 'message'
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
84 setlocal buftype=acwrite bufhidden=wipe nobuflisted noswapfile
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
85 " Optional: initial comment
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
86 call setline(1, ['# Enter commit message above. Lines starting with # are ignored.'])
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
87 " Map to commit
15
7edd5f6fe136 This is another test of commiting with the message this time
Luka Sitas <lsitas@avatarasoftware.com>
parents: 14
diff changeset
88 nnoremap <silent> <buffer> <leader>c :call <SID>DoHgCommit()<CR>
13
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
89
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
90 " Go back to top window to start there
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
91 wincmd k
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
92 endfunction
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
93
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
94 function! s:FormatHgStatusLines(lines) abort
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
95 let l:out = []
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
96 for l in a:lines
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
97 if empty(l)
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
98 continue
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
99 endif
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
100 " Typical hg status line: "M path/to/file"
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
101 " We keep status char and the rest of line, but prepend [ ]
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
102 call add(l:out, l)
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
103 endfor
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
104 return l:out
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
105 endfunction
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
106
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
107 function! s:ToggleHgFileSelection() abort
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
108 if get(b:, 'hgcommit_type', '') !=# 'filelist'
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
109 return
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
110 endif
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
111 setlocal modifiable
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
112 let l:lnum = line('.')
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
113 let l:line = getline(l:lnum)
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
114 if l:line =~# '^\[ \]'
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
115 " select
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
116 let l:line = substitute(l:line, '^\[ \]', '[x]', '')
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
117 elseif l:line =~# '^\[x\]'
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
118 " unselect
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
119 let l:line = substitute(l:line, '^\[x\]', '[ ]', '')
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
120 endif
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
121 call setline(l:lnum, l:line)
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
122 setlocal nomodifiable
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
123 endfunction
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
124
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
125
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
126 function! s:ToggleHgSelectAll() abort
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
127 if get(b:, 'hgcommit_type', '') !=# 'filelist'
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
128 return
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
129 endif
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
130 setlocal modifiable
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
131 let l:lines = getline(1, '$')
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
132
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
133 " Decide if we're selecting all or deselecting all:
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
134 let l:any_unselected = 0
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
135 for l:l in l:lines
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
136 if l:l =~# '^\[ \]'
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
137 let l:any_unselected = 1
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
138 break
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
139 endif
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
140 endfor
6
3017fd33ad8b Better support for db tables.
Luka Sitas <lsitas@avatarasoftware.com>
parents:
diff changeset
141
13
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
142 let l:new = []
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
143 if l:any_unselected
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
144 " select all
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
145 for l:l in l:lines
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
146 if l:l =~# '^\[ \]'
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
147 call add(l:new, substitute(l:l, '^\[ \]', '[x]', ''))
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
148 else
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
149 call add(l:new, l:l)
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
150 endif
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
151 endfor
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
152 else
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
153 " deselect all
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
154 for l:l in l:lines
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
155 if l:l =~# '^\[x\]'
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
156 call add(l:new, substitute(l:l, '^\[x\]', '[ ]', ''))
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
157 else
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
158 call add(l:new, l:l)
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
159 endif
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
160 endfor
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
161 endif
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
162
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
163 call setline(1, l:new)
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
164 setlocal nomodifiable
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
165 endfunction
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
166
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
167
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
168 function! s:GetSelectedHgFiles() abort
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
169 " Find the filelist buffer in this tab
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
170 let l:files = []
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
171 for l:w in range(1, winnr('$'))
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
172 execute l:w . 'wincmd w'
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
173 if get(b:, 'hgcommit_type', '') ==# 'filelist'
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
174 let l:lines = getline(1, '$')
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
175 for l:L in l:lines
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
176 if l:L =~# '^\[x\] '
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
177 " Format: "[x] X path/to/file"
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
178 " Strip "[x] "
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
179 let l:rest = substitute(l:L, '^\[x\] ', '', '')
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
180 " First char is hg status, then space, then filename
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
181 if len(l:rest) >= 3
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
182 let l:file = strpart(l:rest, 2)
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
183 call add(l:files, l:file)
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
184 endif
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
185 endif
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
186 endfor
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
187 break
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
188 endif
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
189 endfor
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
190 " Go back to original window (optional; this simple version just leaves you where you end)
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
191 return l:files
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
192 endfunction
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
193
15
7edd5f6fe136 This is another test of commiting with the message this time
Luka Sitas <lsitas@avatarasoftware.com>
parents: 14
diff changeset
194 function! s:GetHgCommitMessage() abort
7edd5f6fe136 This is another test of commiting with the message this time
Luka Sitas <lsitas@avatarasoftware.com>
parents: 14
diff changeset
195 let l:msg_lines = []
7edd5f6fe136 This is another test of commiting with the message this time
Luka Sitas <lsitas@avatarasoftware.com>
parents: 14
diff changeset
196 for l:w in range(1, winnr('$'))
7edd5f6fe136 This is another test of commiting with the message this time
Luka Sitas <lsitas@avatarasoftware.com>
parents: 14
diff changeset
197 execute l:w . 'wincmd w'
7edd5f6fe136 This is another test of commiting with the message this time
Luka Sitas <lsitas@avatarasoftware.com>
parents: 14
diff changeset
198 if get(b:, 'hgcommit_type', '') ==# 'message'
7edd5f6fe136 This is another test of commiting with the message this time
Luka Sitas <lsitas@avatarasoftware.com>
parents: 14
diff changeset
199 " Get commit message lines, ignoring leading '#' lines
7edd5f6fe136 This is another test of commiting with the message this time
Luka Sitas <lsitas@avatarasoftware.com>
parents: 14
diff changeset
200 let l:all_lines = getline(1, '$')
7edd5f6fe136 This is another test of commiting with the message this time
Luka Sitas <lsitas@avatarasoftware.com>
parents: 14
diff changeset
201 let l:msg_lines = []
7edd5f6fe136 This is another test of commiting with the message this time
Luka Sitas <lsitas@avatarasoftware.com>
parents: 14
diff changeset
202 for l:L in l:all_lines
7edd5f6fe136 This is another test of commiting with the message this time
Luka Sitas <lsitas@avatarasoftware.com>
parents: 14
diff changeset
203 if l:L =~# '^#'
7edd5f6fe136 This is another test of commiting with the message this time
Luka Sitas <lsitas@avatarasoftware.com>
parents: 14
diff changeset
204 continue
7edd5f6fe136 This is another test of commiting with the message this time
Luka Sitas <lsitas@avatarasoftware.com>
parents: 14
diff changeset
205 endif
7edd5f6fe136 This is another test of commiting with the message this time
Luka Sitas <lsitas@avatarasoftware.com>
parents: 14
diff changeset
206 call add(l:msg_lines, l:L)
7edd5f6fe136 This is another test of commiting with the message this time
Luka Sitas <lsitas@avatarasoftware.com>
parents: 14
diff changeset
207 endfor
7edd5f6fe136 This is another test of commiting with the message this time
Luka Sitas <lsitas@avatarasoftware.com>
parents: 14
diff changeset
208 endif
7edd5f6fe136 This is another test of commiting with the message this time
Luka Sitas <lsitas@avatarasoftware.com>
parents: 14
diff changeset
209 endfor
7edd5f6fe136 This is another test of commiting with the message this time
Luka Sitas <lsitas@avatarasoftware.com>
parents: 14
diff changeset
210 return l:msg_lines
7edd5f6fe136 This is another test of commiting with the message this time
Luka Sitas <lsitas@avatarasoftware.com>
parents: 14
diff changeset
211 endfunction
13
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
212
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
213 function! s:DoHgCommit() abort
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
214 if get(b:, 'hgcommit_type', '') !=# 'message'
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
215 return
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
216 endif
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
217
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
218 " Get selected files
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
219 let l:files = s:GetSelectedHgFiles()
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
220 if empty(l:files)
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
221 echohl ErrorMsg
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
222 echom "No files selected for commit."
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
223 echohl None
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
224 return
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
225 endif
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
226
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
227
15
7edd5f6fe136 This is another test of commiting with the message this time
Luka Sitas <lsitas@avatarasoftware.com>
parents: 14
diff changeset
228 let l:msg_lines = s:GetHgCommitMessage()
13
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
229 let l:msg = join(l:msg_lines, "\n")
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
230 if empty(l:msg)
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
231 echohl ErrorMsg
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
232 echom "Commit message is empty."
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
233 echohl None
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
234 return
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
235 endif
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
236
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
237 " Write commit message to temp file
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
238 let l:tmpfile = tempname()
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
239 call writefile(l:msg_lines, l:tmpfile)
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
240
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
241 " Build command: hg commit -l tmpfile file1 file2 ...
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
242 let l:cmd = 'hg commit -l ' . shellescape(l:tmpfile)
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
243 for l:f in l:files
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
244 let l:cmd .= ' ' . shellescape(l:f)
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
245 endfor
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
246
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
247 " Run it
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
248 let l:out = ExecuteCommand(l:cmd)
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
249 let l:status = v:shell_error
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
250
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
251 " Clean up temp file
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
252 call delete(l:tmpfile)
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
253
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
254 if l:status != 0
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
255 echohl ErrorMsg
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
256 echom "hg commit failed:"
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
257 echom l:out
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
258 echohl None
14
6ee7fce1cba8 [x] M plugins/hghelp/hghelp.vim
Luka Sitas <lsitas@avatarasoftware.com>
parents: 13
diff changeset
259 return
13
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
260 endif
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
261
14
6ee7fce1cba8 [x] M plugins/hghelp/hghelp.vim
Luka Sitas <lsitas@avatarasoftware.com>
parents: 13
diff changeset
262 echom "hg commit succeeded."
6ee7fce1cba8 [x] M plugins/hghelp/hghelp.vim
Luka Sitas <lsitas@avatarasoftware.com>
parents: 13
diff changeset
263
6ee7fce1cba8 [x] M plugins/hghelp/hghelp.vim
Luka Sitas <lsitas@avatarasoftware.com>
parents: 13
diff changeset
264 " Close only the commit UI buffers in this tab
6ee7fce1cba8 [x] M plugins/hghelp/hghelp.vim
Luka Sitas <lsitas@avatarasoftware.com>
parents: 13
diff changeset
265 try
6ee7fce1cba8 [x] M plugins/hghelp/hghelp.vim
Luka Sitas <lsitas@avatarasoftware.com>
parents: 13
diff changeset
266 for l:w in range(1, winnr('$'))
6ee7fce1cba8 [x] M plugins/hghelp/hghelp.vim
Luka Sitas <lsitas@avatarasoftware.com>
parents: 13
diff changeset
267 execute l:w . 'wincmd w'
6ee7fce1cba8 [x] M plugins/hghelp/hghelp.vim
Luka Sitas <lsitas@avatarasoftware.com>
parents: 13
diff changeset
268 if get(b:, 'hgcommit_type', '') ==# 'filelist'
6ee7fce1cba8 [x] M plugins/hghelp/hghelp.vim
Luka Sitas <lsitas@avatarasoftware.com>
parents: 13
diff changeset
269 bwipeout!
6ee7fce1cba8 [x] M plugins/hghelp/hghelp.vim
Luka Sitas <lsitas@avatarasoftware.com>
parents: 13
diff changeset
270 elseif get(b:, 'hgcommit_type', '') ==# 'message'
6ee7fce1cba8 [x] M plugins/hghelp/hghelp.vim
Luka Sitas <lsitas@avatarasoftware.com>
parents: 13
diff changeset
271 bwipeout!
6ee7fce1cba8 [x] M plugins/hghelp/hghelp.vim
Luka Sitas <lsitas@avatarasoftware.com>
parents: 13
diff changeset
272 endif
6ee7fce1cba8 [x] M plugins/hghelp/hghelp.vim
Luka Sitas <lsitas@avatarasoftware.com>
parents: 13
diff changeset
273 endfor
6ee7fce1cba8 [x] M plugins/hghelp/hghelp.vim
Luka Sitas <lsitas@avatarasoftware.com>
parents: 13
diff changeset
274 catch /^Vim\%((\a\+)\)\=:E/
6ee7fce1cba8 [x] M plugins/hghelp/hghelp.vim
Luka Sitas <lsitas@avatarasoftware.com>
parents: 13
diff changeset
275 endtry
13
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
276 endfunction