In addition to "Edit with Vim", this patch will add the following context menus,
* View with Vim
* View with multiple Vims
* View with single Vim
* Diff with Vim (read only)

--~--~---------~--~----~------------~-------~--~----~
You received this message from the "vim_dev" maillist.
For more information, visit http://www.vim.org/maillist.php
-~----------~----~----~----~------~----~------~--~---

diff -dur ext.orig/gvimext.cpp ext/gvimext.cpp
--- ext.orig/gvimext.cpp	2009-10-01 13:40:26.000000000 +0700
+++ ext/gvimext.cpp	2009-10-01 14:26:50.000000000 +0700
@@ -590,8 +590,20 @@
 		indexMenu++,
 		MF_STRING|MF_BYPOSITION,
 		idCmd++,
+		_("View with multiple Vims"));
+
+	InsertMenu(hMenu,
+		indexMenu++,
+		MF_STRING|MF_BYPOSITION,
+		idCmd++,
 		_("Edit with single &Vim"));
 
+	InsertMenu(hMenu,
+		indexMenu++,
+		MF_STRING|MF_BYPOSITION,
+		idCmd++,
+		_("View with single Vim"));
+
 	if (cbFiles <= 4)
 	{
 	    // Can edit up to 4 files in diff mode
@@ -600,10 +612,15 @@
 		    MF_STRING|MF_BYPOSITION,
 		    idCmd++,
 		    _("Diff with Vim"));
-	    m_edit_existing_off = 3;
+	    InsertMenu(hMenu,
+		    indexMenu++,
+		    MF_STRING|MF_BYPOSITION,
+		    idCmd++,
+		    _("Diff with Vim (read only)"));
+	    m_edit_existing_off = 6;
 	}
 	else
-	    m_edit_existing_off = 2;
+	    m_edit_existing_off = 4;
 
     }
     else
@@ -613,7 +630,12 @@
 		MF_STRING|MF_BYPOSITION,
 		idCmd++,
 		_("Edit with &Vim"));
-	m_edit_existing_off = 1;
+	InsertMenu(hMenu,
+		indexMenu++,
+		MF_STRING|MF_BYPOSITION,
+		idCmd++,
+		_("View with Vim"));
+	m_edit_existing_off = 2;
     }
 
     // Now display all the vim instances
@@ -699,20 +721,43 @@
 			    lpcmi->nShow);
 		    break;
 		case 1:
-		    hr = InvokeSingleGvim(lpcmi->hwnd,
+		    hr = InvokeGvim(lpcmi->hwnd,
 			    lpcmi->lpDirectory,
 			    lpcmi->lpVerb,
 			    lpcmi->lpParameters,
 			    lpcmi->nShow,
-			    0);
+			    " -R");
 		    break;
 		case 2:
 		    hr = InvokeSingleGvim(lpcmi->hwnd,
 			    lpcmi->lpDirectory,
 			    lpcmi->lpVerb,
 			    lpcmi->lpParameters,
+			    lpcmi->nShow);
+		    break;
+		case 3:
+		    hr = InvokeSingleGvim(lpcmi->hwnd,
+			    lpcmi->lpDirectory,
+			    lpcmi->lpVerb,
+			    lpcmi->lpParameters,
 			    lpcmi->nShow,
-			    1);
+			    " -R");
+		    break;
+		case 4:
+		    hr = InvokeSingleGvim(lpcmi->hwnd,
+			    lpcmi->lpDirectory,
+			    lpcmi->lpVerb,
+			    lpcmi->lpParameters,
+			    lpcmi->nShow,
+			    " -d");
+		    break;
+		case 5:
+		    hr = InvokeSingleGvim(lpcmi->hwnd,
+			    lpcmi->lpDirectory,
+			    lpcmi->lpVerb,
+			    lpcmi->lpParameters,
+			    lpcmi->nShow,
+			    " -d -R");
 		    break;
 	    }
 	}
@@ -846,7 +891,8 @@
 				   LPCSTR  /* pszWorkingDir */,
 				   LPCSTR  /* pszCmd */,
 				   LPCSTR  /* pszParam */,
-				   int  /* iShowCmd */)
+				   int  /* iShowCmd */,
+				   const char* arg)
 {
     char m_szFileUserClickedOn[BUFSIZE];
     char cmdStr[BUFSIZE];
@@ -860,6 +906,9 @@
 		sizeof(m_szFileUserClickedOn));
 
 	getGvimName(cmdStr, 0);
+	// No need to check for buffer overflow, since it not rely on user
+	// input.
+	if (arg) strcat(cmdStr, arg);
 	strcat(cmdStr, " \"");
 
 	if ((strlen(cmdStr) + strlen(m_szFileUserClickedOn) + 2) < BUFSIZE)
@@ -917,7 +966,7 @@
 				   LPCSTR  /* pszCmd */,
 				   LPCSTR  /* pszParam */,
 				   int  /* iShowCmd */,
-				   int useDiff)
+				   const char* arg)
 {
     char	m_szFileUserClickedOn[BUFSIZE];
     char	*cmdStr;
@@ -928,8 +977,9 @@
     cmdlen = BUFSIZE;
     cmdStr = (char *)malloc(cmdlen);
     getGvimName(cmdStr, 0);
-    if (useDiff)
-	strcat(cmdStr, " -d");
+    // No need to check for buffer overflow, since it not rely on user
+    // input.
+    if (arg) strcat(cmdStr, arg);
     for (i = 0; i < cbFiles; i++)
     {
 	DragQueryFile((HDROP)medium.hGlobal,
diff -dur ext.orig/gvimext.h ext/gvimext.h
--- ext.orig/gvimext.h	2009-10-01 14:20:39.000000000 +0700
+++ ext/gvimext.h	2009-10-01 14:26:10.000000000 +0700
@@ -129,14 +129,15 @@
 	    LPCSTR pszWorkingDir,
 	    LPCSTR pszCmd,
 	    LPCSTR pszParam,
-	    int iShowCmd);
+	    int iShowCmd,
+	    const char* arg = NULL);
 
     STDMETHODIMP InvokeSingleGvim(HWND hParent,
 	    LPCSTR pszWorkingDir,
 	    LPCSTR pszCmd,
 	    LPCSTR pszParam,
 	    int iShowCmd,
-	    int useDiff);
+	    const char* arg = NULL);
 
 public:
     int		 m_cntOfHWnd;

Raspunde prin e-mail lui