Vim 7.4 won't let us quit windows from a script.
authorIain Patterson <me@iain.cx>
Mon, 27 Jan 2014 16:55:23 +0000 (16:55 +0000)
committerIain Patterson <me@iain.cx>
Mon, 27 Jan 2014 17:02:35 +0000 (17:02 +0000)
The Perforce and Subversion commit and merge scripts want to quit when
the commit message window has been closed, since the only other window
shown really should be the diff.

Vim 7.4's paranoia about scripts closing windows make quitting tricky...

.vim/script/merge
.vim/script/p4
.vim/script/svn

index ad7c083..a00fea3 100644 (file)
@@ -59,6 +59,11 @@ fun! P4merge()
   wincmd L
   se modifiable
   1
+
+  try
+    au QuitPre * qa!
+  endtry
+  catch
 endfun
 
 " Expand the command line window so we don't have to press RETURN later.
index 75dace6..7aa16ba 100644 (file)
@@ -52,6 +52,12 @@ fun! P4submit()
         " Map q to quit easily.
         noremap <silent> <buffer> q <C-W>q
 
+        " Vim 7.4 really doesn't want us to quit windows from a script.
+        try
+          au QuitPre * qa!
+        catch
+        endtry
+
         " Switch back to the top window and put the cursor by the description.
         wincmd k
         resize 10
index 152d2c9..7b4da64 100644 (file)
@@ -27,6 +27,12 @@ fun! SVNcommit()
   " Map q to quit easily.
   noremap <silent> <buffer> q <C-W>q
 
+  " Vim 7.4 really doesn't want us to quit windows from a script.
+  try
+    au QuitPre * qa!
+  catch
+  endtry
+
   " Switch back to the top window.
   wincmd k
 endfun
@@ -43,4 +49,10 @@ delfunction SVNcommit
 exe "se cmdheight=" . s:cmdheight
 
 " Close the scratch buffer.
-au BufWinLeave <buffer=1> qa!
+if version >= 700
+  " Vim 7 lets us close the buffer by number.  The changelist is always in #1.
+  au BufWinLeave <buffer=1> qa!
+else
+  " Prior versions can only do it by name.  Fall back to a temporary file.
+  au BufWinLeave /tmp/tmp.*.* qa!
+endif