xref: /vim-8.2.3635/runtime/plugin/rrhelper.vim (revision c5604bc1)
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