1071d4279SBram Moolenaar" Vim plugin with helper function(s) for --remote-wait 2071d4279SBram Moolenaar" Maintainer: Flemming Madsen <[email protected]> 3864207deSBram Moolenaar" Last Change: 2008 May 29 4071d4279SBram Moolenaar 5071d4279SBram Moolenaar" Has this already been loaded? 6*c5604bc1SBram Moolenaarif exists("loaded_rrhelper") || !has("clientserver") 7071d4279SBram Moolenaar finish 8071d4279SBram Moolenaarendif 9071d4279SBram Moolenaarlet loaded_rrhelper = 1 10071d4279SBram Moolenaar 11071d4279SBram Moolenaar" Setup answers for a --remote-wait client who will assume 12071d4279SBram Moolenaar" a SetupRemoteReplies() function in the command server 13071d4279SBram Moolenaar 14071d4279SBram Moolenaarfunction SetupRemoteReplies() 15071d4279SBram Moolenaar let cnt = 0 16071d4279SBram Moolenaar let max = argc() 17071d4279SBram Moolenaar 18071d4279SBram Moolenaar let id = expand("<client>") 19071d4279SBram Moolenaar if id == 0 20071d4279SBram Moolenaar return 21071d4279SBram Moolenaar endif 22071d4279SBram Moolenaar while cnt < max 23071d4279SBram Moolenaar " Handle same file from more clients and file being more than once 24071d4279SBram Moolenaar " on the command line by encoding this stuff in the group name 25071d4279SBram Moolenaar let uniqueGroup = "RemoteReply_".id."_".cnt 26071d4279SBram Moolenaar 27071d4279SBram Moolenaar " Path separators are always forward slashes for the autocommand pattern. 28071d4279SBram Moolenaar " Escape special characters with a backslash. 29864207deSBram Moolenaar let f = substitute(argv(cnt), '\\', '/', "g") 30864207deSBram Moolenaar if exists('*fnameescape') 31864207deSBram Moolenaar let f = fnameescape(f) 32864207deSBram Moolenaar else 33864207deSBram Moolenaar let f = escape(f, " \t\n*?[{`$\\%#'\"|!<") 34864207deSBram Moolenaar endif 35071d4279SBram Moolenaar execute "augroup ".uniqueGroup 36071d4279SBram Moolenaar execute "autocmd ".uniqueGroup." BufUnload ". f ." call DoRemoteReply('".id."', '".cnt."', '".uniqueGroup."', '". f ."')" 37071d4279SBram Moolenaar let cnt = cnt + 1 38071d4279SBram Moolenaar endwhile 39071d4279SBram Moolenaar augroup END 40071d4279SBram Moolenaarendfunc 41071d4279SBram Moolenaar 42071d4279SBram Moolenaarfunction DoRemoteReply(id, cnt, group, file) 43071d4279SBram Moolenaar call server2client(a:id, a:cnt) 44071d4279SBram Moolenaar execute 'autocmd! '.a:group.' BufUnload '.a:file 45071d4279SBram Moolenaar execute 'augroup! '.a:group 46071d4279SBram Moolenaarendfunc 47071d4279SBram Moolenaar 48071d4279SBram Moolenaar" vim: set sw=2 sts=2 : 49