annotate plugins/hghelp/hghelp.vim @ 13:027a85d0e60e

[x] M .vimrc [x] M plugins/hghelp/hghelp.vim [x] M plugins/vim-ai.vim [ ] ? tmp
author Luka Sitas <lsitas@avatarasoftware.com>
date Tue, 02 Dec 2025 11:53:47 -0500
parents 17c557de03e0
children 6ee7fce1cba8
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'
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
72 call setline(1, s:FormatHgStatusLines(l:lines))
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
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
88 nnoremap <silent> <buffer> <leader>cc :call <SID>DoHgCommit()<CR>
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
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
194
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
195 function! s:DoHgCommit() abort
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
196 if get(b:, 'hgcommit_type', '') !=# 'message'
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
197 return
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
198 endif
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
199
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
200 " Get selected files
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
201 let l:files = s:GetSelectedHgFiles()
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
202 if empty(l:files)
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
203 echohl ErrorMsg
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
204 echom "No files selected for commit."
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
205 echohl None
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
206 return
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
207 endif
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
208
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
209 " Get commit message lines, ignoring leading '#' lines
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
210 let l:all_lines = getline(1, '$')
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
211 let l:msg_lines = []
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
212 for l:L in l:all_lines
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
213 if l:L =~# '^#'
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
214 continue
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
215 endif
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
216 call add(l:msg_lines, l:L)
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
217 endfor
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
218
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
219 let l:msg = join(l:msg_lines, "\n")
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
220 if empty(l:msg)
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 "Commit message is empty."
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 " Write commit message to temp file
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
228 let l:tmpfile = tempname()
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
229 call writefile(l:msg_lines, l:tmpfile)
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
230
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
231 " Build command: hg commit -l tmpfile file1 file2 ...
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
232 let l:cmd = 'hg commit -l ' . shellescape(l:tmpfile)
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
233 for l:f in l:files
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
234 let l:cmd .= ' ' . shellescape(l:f)
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
235 endfor
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 " Run it
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
238 let l:out = ExecuteCommand(l:cmd)
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
239 let l:status = v:shell_error
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 " Clean up temp file
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
242 call delete(l:tmpfile)
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
243
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
244 if l:status != 0
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
245 echohl ErrorMsg
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
246 echom "hg commit failed:"
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
247 echom l:out
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
248 echohl None
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
249 else
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
250 echom "hg commit succeeded."
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
251 endif
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
252
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
253 " Close the commit tab
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
254 tabclose
027a85d0e60e [x] M .vimrc
Luka Sitas <lsitas@avatarasoftware.com>
parents: 9
diff changeset
255 endfunction