| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | " Vim plugin with helper function(s) for --remote-wait | 
					
						
							|  |  |  | " Maintainer: Flemming Madsen <fma@cci.dk> | 
					
						
							| 
									
										
										
										
											2008-06-24 22:14:38 +00:00
										 |  |  | " Last Change: 2008 May 29 | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | " Has this already been loaded? | 
					
						
							| 
									
										
										
										
											2010-07-17 15:20:30 +02:00
										 |  |  | if exists("loaded_rrhelper") || !has("clientserver") | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  |   finish | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | let loaded_rrhelper = 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Setup answers for a --remote-wait client who will assume | 
					
						
							|  |  |  | " a SetupRemoteReplies() function in the command server | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-17 15:20:30 +02:00
										 |  |  | function SetupRemoteReplies() | 
					
						
							|  |  |  |   let cnt = 0 | 
					
						
							|  |  |  |   let max = argc() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   let id = expand("<client>") | 
					
						
							|  |  |  |   if id == 0 | 
					
						
							|  |  |  |     return | 
					
						
							|  |  |  |   endif | 
					
						
							|  |  |  |   while cnt < max | 
					
						
							|  |  |  |     " Handle same file from more clients and file being more than once | 
					
						
							|  |  |  |     " on the command line by encoding this stuff in the group name | 
					
						
							|  |  |  |     let uniqueGroup = "RemoteReply_".id."_".cnt | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     " Path separators are always forward slashes for the autocommand pattern. | 
					
						
							|  |  |  |     " Escape special characters with a backslash. | 
					
						
							|  |  |  |     let f = substitute(argv(cnt), '\\', '/', "g") | 
					
						
							|  |  |  |     if exists('*fnameescape') | 
					
						
							|  |  |  |       let f = fnameescape(f) | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       let f = escape(f, " \t\n*?[{`$\\%#'\"|!<") | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  |     endif | 
					
						
							| 
									
										
										
										
											2010-07-17 15:20:30 +02:00
										 |  |  |     execute "augroup ".uniqueGroup | 
					
						
							|  |  |  |     execute "autocmd ".uniqueGroup." BufUnload ". f ."  call DoRemoteReply('".id."', '".cnt."', '".uniqueGroup."', '". f ."')" | 
					
						
							|  |  |  |     let cnt = cnt + 1 | 
					
						
							|  |  |  |   endwhile | 
					
						
							|  |  |  |   augroup END | 
					
						
							|  |  |  | endfunc | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function DoRemoteReply(id, cnt, group, file) | 
					
						
							|  |  |  |   call server2client(a:id, a:cnt) | 
					
						
							|  |  |  |   execute 'autocmd! '.a:group.' BufUnload '.a:file | 
					
						
							|  |  |  |   execute 'augroup! '.a:group | 
					
						
							|  |  |  | endfunc | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | " vim: set sw=2 sts=2 : |