blob: b09cbc10b9dcdfdcd7364bdd38e555b05d40afb0 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim plugin with helper function(s) for --remote-wait
2" Maintainer: Flemming Madsen <fma@cci.dk>
Bram Moolenaar864207d2008-06-24 22:14:38 +00003" Last Change: 2008 May 29
Bram Moolenaar071d4272004-06-13 20:20:40 +00004
5" Has this already been loaded?
Bram Moolenaarc5604bc2010-07-17 15:20:30 +02006if exists("loaded_rrhelper") || !has("clientserver")
Bram Moolenaar071d4272004-06-13 20:20:40 +00007 finish
8endif
9let loaded_rrhelper = 1
10
11" Setup answers for a --remote-wait client who will assume
12" a SetupRemoteReplies() function in the command server
13
Bram Moolenaarc5604bc2010-07-17 15:20:30 +020014function SetupRemoteReplies()
15 let cnt = 0
16 let max = argc()
Bram Moolenaar071d4272004-06-13 20:20:40 +000017
Bram Moolenaarc5604bc2010-07-17 15:20:30 +020018 let id = expand("<client>")
19 if id == 0
20 return
21 endif
22 while cnt < max
23 " Handle same file from more clients and file being more than once
24 " on the command line by encoding this stuff in the group name
25 let uniqueGroup = "RemoteReply_".id."_".cnt
26
27 " Path separators are always forward slashes for the autocommand pattern.
28 " Escape special characters with a backslash.
29 let f = substitute(argv(cnt), '\\', '/', "g")
30 if exists('*fnameescape')
31 let f = fnameescape(f)
32 else
33 let f = escape(f, " \t\n*?[{`$\\%#'\"|!<")
Bram Moolenaar071d4272004-06-13 20:20:40 +000034 endif
Bram Moolenaarc5604bc2010-07-17 15:20:30 +020035 execute "augroup ".uniqueGroup
36 execute "autocmd ".uniqueGroup." BufUnload ". f ." call DoRemoteReply('".id."', '".cnt."', '".uniqueGroup."', '". f ."')"
37 let cnt = cnt + 1
38 endwhile
39 augroup END
40endfunc
Bram Moolenaar071d4272004-06-13 20:20:40 +000041
Bram Moolenaarc5604bc2010-07-17 15:20:30 +020042function DoRemoteReply(id, cnt, group, file)
43 call server2client(a:id, a:cnt)
44 execute 'autocmd! '.a:group.' BufUnload '.a:file
45 execute 'augroup! '.a:group
46endfunc
Bram Moolenaar071d4272004-06-13 20:20:40 +000047
48" vim: set sw=2 sts=2 :