More reliable p4 change script.
authorIain Patterson <me@iain.cx>
Mon, 11 Aug 2008 16:27:49 +0000 (16:27 +0000)
committerIain Patterson <me@iain.cx>
Mon, 11 Aug 2008 16:27:49 +0000 (16:27 +0000)
Change P4EDITOR to vim -S <script>.

git-svn-id: https://svn.cambridge.iain.cx/profile/trunk@130 6be0d1a5-5cfe-0310-89b6-964be062b18b

.vim/script/p4

index 2195813..7970330 100644 (file)
@@ -1,21 +1,58 @@
-:if ! &ro
-:try
-  /^# A Perforce Change Spec/,/^$/d
+" Define the function we'll use.  It's easier to do this than to faff about 
+" trying to run a sequence of normal mode commands.
+fun! P4submit()
+  " There's no point doing this if the spec is readonly.  That probably means 
+  " it's a submitted change.
+  if ! &ro
+    " Clear the unnamed register.
+    let @" = ""
+    try
+      " Delete the spec blurb if it exists.
+      /^# A Perforce Change Spec/,/^$/d
+      " If the blurb was deleted the text will be in the unnamed register.
+      if @" != ""
+        " Allow closing an unmodified spec.
+        set nomod
 
-  :set nomod
+        " Create a new window, move it below the spec and read in a diff.
+        botright new
+        r!p4 diff
+        setf diff
 
-  :wincmd n
-  :wincmd J
-  :r!p4 diff
-  :1
-  :delete
+        " Delete the blank line left above the diff.
+        1
+        delete
+        set nobuflisted
+        set buftype=nofile
+        set bufhidden=hide
+        setlocal noswapfile
 
-  :setf diff
-  :set nomod
+        " Switch back to the top window and put the cursor by the description.
+        wincmd k
+        resize 10
+        exe "normal G"
+        ?<enter description here>
+        let @/ = ""
+      endif
+    catch
+      " We get here if no blurb was deleted.  This is the case if we aren't 
+      " editing a change.
+    endtry
+  endif
+endfun
 
-  :wincmd k
-  /<enter description here>
-  :let @/ = ""
-:catch
-:endtry
-:endif
+" Expand the command line window so we don't have to press RETURN later.
+let s:cmdheight = &cmdheight
+set cmdheight=2
+
+" Call and then discard our function.
+call P4submit()
+delfunction P4submit
+" Don't expand tabs in the spec.
+set noexpandtab
+
+" Restore the command window.
+exe "set cmdheight=" . s:cmdheight
+
+" Close the scratch buffer.
+au BufWinLeave <buffer=1> qa!