xref: /vim-8.2.3635/runtime/plugin/rrhelper.vim (revision cb03397a)
1" Vim plugin with helper function(s) for --remote-wait
2" Maintainer: Flemming Madsen <[email protected]>
3" Last Change: 2008 May 29
4
5" Has this already been loaded?
6if exists("loaded_rrhelper") || !has("clientserver")
7  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
14function SetupRemoteReplies()
15  let cnt = 0
16  let max = argc()
17
18  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*?[{`$\\%#'\"|!<")
34    endif
35    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
41
42function 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
47
48" vim: set sw=2 sts=2 :
49