summaryrefslogtreecommitdiffstats
path: root/runtime/plugin/rrhelper.vim
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/plugin/rrhelper.vim')
-rw-r--r--runtime/plugin/rrhelper.vim48
1 files changed, 48 insertions, 0 deletions
diff --git a/runtime/plugin/rrhelper.vim b/runtime/plugin/rrhelper.vim
new file mode 100644
index 0000000..b09cbc1
--- /dev/null
+++ b/runtime/plugin/rrhelper.vim
@@ -0,0 +1,48 @@
+" Vim plugin with helper function(s) for --remote-wait
+" Maintainer: Flemming Madsen <fma@cci.dk>
+" Last Change: 2008 May 29
+
+" Has this already been loaded?
+if exists("loaded_rrhelper") || !has("clientserver")
+ finish
+endif
+let loaded_rrhelper = 1
+
+" Setup answers for a --remote-wait client who will assume
+" a SetupRemoteReplies() function in the command server
+
+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*?[{`$\\%#'\"|!<")
+ endif
+ 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
+
+" vim: set sw=2 sts=2 :