changeset 1852:3af484dca921 v7.2.150

updated for version 7.2-150
author vimboss
date Wed, 22 Apr 2009 11:08:26 +0000
parents e7f6ca5594cf
children 96445585f1d9
files src/VisVim/Commands.cpp src/VisVim/Resource.h src/VisVim/VisVim.rc src/version.c
diffstat 4 files changed, 177 insertions(+), 154 deletions(-) [+]
line wrap: on
line diff
--- a/src/VisVim/Commands.cpp
+++ b/src/VisVim/Commands.cpp
@@ -20,20 +20,21 @@ static char THIS_FILE[] = __FILE__;
 
 static BOOL g_bEnableVim = TRUE;	// Vim enabled
 static BOOL g_bDevStudioEditor = FALSE;	// Open file in Dev Studio editor simultaneously
+static BOOL g_bNewTabs = FALSE;
 static int g_ChangeDir = CD_NONE;	// CD after file open?
 
-static void VimSetEnableState (BOOL bEnableState);
-static BOOL VimOpenFile (BSTR& FileName, long LineNr);
-static DISPID VimGetDispatchId (COleAutomationControl& VimOle, char* Method);
-static void VimErrDiag (COleAutomationControl& VimOle);
-static void VimChangeDir (COleAutomationControl& VimOle, DISPID DispatchId, BSTR& FileName);
-static void DebugMsg (char* Msg, char* Arg = NULL);
+static void VimSetEnableState(BOOL bEnableState);
+static BOOL VimOpenFile(BSTR& FileName, long LineNr);
+static DISPID VimGetDispatchId(COleAutomationControl& VimOle, char* Method);
+static void VimErrDiag(COleAutomationControl& VimOle);
+static void VimChangeDir(COleAutomationControl& VimOle, DISPID DispatchId, BSTR& FileName);
+static void DebugMsg(char* Msg, char* Arg = NULL);
 
 
 /////////////////////////////////////////////////////////////////////////////
 // CCommands
 
-CCommands::CCommands ()
+CCommands::CCommands()
 {
 	// m_pApplication == NULL; M$ Code generation bug!!!
 	m_pApplication = NULL;
@@ -41,17 +42,17 @@ CCommands::CCommands ()
 	m_pDebuggerEventsObj = NULL;
 }
 
-CCommands::~CCommands ()
+CCommands::~CCommands()
 {
-	ASSERT (m_pApplication != NULL);
+	ASSERT(m_pApplication != NULL);
 	if (m_pApplication)
 	{
-		m_pApplication->Release ();
+		m_pApplication->Release();
 		m_pApplication = NULL;
 	}
 }
 
-void CCommands::SetApplicationObject (IApplication * pApplication)
+void CCommands::SetApplicationObject(IApplication * pApplication)
 {
 	// This function assumes pApplication has already been AddRef'd
 	// for us, which CDSAddIn did in it's QueryInterface call
@@ -61,55 +62,57 @@ void CCommands::SetApplicationObject (IA
 		return;
 
 	// Create Application event handlers
-	XApplicationEventsObj::CreateInstance (&m_pApplicationEventsObj);
+	XApplicationEventsObj::CreateInstance(&m_pApplicationEventsObj);
 	if (! m_pApplicationEventsObj)
 	{
-		ReportInternalError ("XApplicationEventsObj::CreateInstance");
+		ReportInternalError("XApplicationEventsObj::CreateInstance");
 		return;
 	}
-	m_pApplicationEventsObj->AddRef ();
-	m_pApplicationEventsObj->Connect (m_pApplication);
+	m_pApplicationEventsObj->AddRef();
+	m_pApplicationEventsObj->Connect(m_pApplication);
 	m_pApplicationEventsObj->m_pCommands = this;
 
 #ifdef NEVER
 	// Create Debugger event handler
 	CComPtr < IDispatch > pDebugger;
-	if (SUCCEEDED (m_pApplication->get_Debugger (&pDebugger))
+	if (SUCCEEDED(m_pApplication->get_Debugger(&pDebugger))
 	    && pDebugger != NULL)
 	{
-		XDebuggerEventsObj::CreateInstance (&m_pDebuggerEventsObj);
-		m_pDebuggerEventsObj->AddRef ();
-		m_pDebuggerEventsObj->Connect (pDebugger);
+		XDebuggerEventsObj::CreateInstance(&m_pDebuggerEventsObj);
+		m_pDebuggerEventsObj->AddRef();
+		m_pDebuggerEventsObj->Connect(pDebugger);
 		m_pDebuggerEventsObj->m_pCommands = this;
 	}
 #endif
 
 	// Get settings from registry HKEY_CURRENT_USER\Software\Vim\VisVim
-	HKEY hAppKey = GetAppKey ("Vim");
+	HKEY hAppKey = GetAppKey("Vim");
 	if (hAppKey)
 	{
-		HKEY hSectionKey = GetSectionKey (hAppKey, "VisVim");
+		HKEY hSectionKey = GetSectionKey(hAppKey, "VisVim");
 		if (hSectionKey)
 		{
-			g_bEnableVim = GetRegistryInt (hSectionKey, "EnableVim",
+			g_bEnableVim = GetRegistryInt(hSectionKey, "EnableVim",
 						       g_bEnableVim);
-			g_bDevStudioEditor = GetRegistryInt(hSectionKey,"DevStudioEditor",
-							    g_bDevStudioEditor);
-			g_ChangeDir = GetRegistryInt (hSectionKey, "ChangeDir",
+			g_bDevStudioEditor = GetRegistryInt(hSectionKey,
+					"DevStudioEditor", g_bDevStudioEditor);
+			g_bNewTabs = GetRegistryInt(hSectionKey, "NewTabs",
+						    g_bNewTabs);
+			g_ChangeDir = GetRegistryInt(hSectionKey, "ChangeDir",
 						      g_ChangeDir);
-			RegCloseKey (hSectionKey);
+			RegCloseKey(hSectionKey);
 		}
-		RegCloseKey (hAppKey);
+		RegCloseKey(hAppKey);
 	}
 }
 
-void CCommands::UnadviseFromEvents ()
+void CCommands::UnadviseFromEvents()
 {
-	ASSERT (m_pApplicationEventsObj != NULL);
+	ASSERT(m_pApplicationEventsObj != NULL);
 	if (m_pApplicationEventsObj)
 	{
-		m_pApplicationEventsObj->Disconnect (m_pApplication);
-		m_pApplicationEventsObj->Release ();
+		m_pApplicationEventsObj->Disconnect(m_pApplication);
+		m_pApplicationEventsObj->Release();
 		m_pApplicationEventsObj = NULL;
 	}
 
@@ -121,10 +124,10 @@ void CCommands::UnadviseFromEvents ()
 		// unadvise from its events (thus the VERIFY_OK below--see
 		// stdafx.h).
 		CComPtr < IDispatch > pDebugger;
-		VERIFY_OK (m_pApplication->get_Debugger (&pDebugger));
-		ASSERT (pDebugger != NULL);
-		m_pDebuggerEventsObj->Disconnect (pDebugger);
-		m_pDebuggerEventsObj->Release ();
+		VERIFY_OK(m_pApplication->get_Debugger(&pDebugger));
+		ASSERT(pDebugger != NULL);
+		m_pDebuggerEventsObj->Disconnect(pDebugger);
+		m_pDebuggerEventsObj->Release();
 		m_pDebuggerEventsObj = NULL;
 	}
 #endif
@@ -136,21 +139,21 @@ void CCommands::UnadviseFromEvents ()
 
 // Application events
 
-HRESULT CCommands::XApplicationEvents::BeforeBuildStart ()
+HRESULT CCommands::XApplicationEvents::BeforeBuildStart()
 {
-	AFX_MANAGE_STATE (AfxGetStaticModuleState ());
+	AFX_MANAGE_STATE(AfxGetStaticModuleState());
 	return S_OK;
 }
 
-HRESULT CCommands::XApplicationEvents::BuildFinish (long nNumErrors, long nNumWarnings)
+HRESULT CCommands::XApplicationEvents::BuildFinish(long nNumErrors, long nNumWarnings)
 {
-	AFX_MANAGE_STATE (AfxGetStaticModuleState ());
+	AFX_MANAGE_STATE(AfxGetStaticModuleState());
 	return S_OK;
 }
 
-HRESULT CCommands::XApplicationEvents::BeforeApplicationShutDown ()
+HRESULT CCommands::XApplicationEvents::BeforeApplicationShutDown()
 {
-	AFX_MANAGE_STATE (AfxGetStaticModuleState ());
+	AFX_MANAGE_STATE(AfxGetStaticModuleState());
 	return S_OK;
 }
 
@@ -158,9 +161,9 @@ HRESULT CCommands::XApplicationEvents::B
 // is done.
 // Vim gets called from here.
 //
-HRESULT CCommands::XApplicationEvents::DocumentOpen (IDispatch * theDocument)
+HRESULT CCommands::XApplicationEvents::DocumentOpen(IDispatch * theDocument)
 {
-	AFX_MANAGE_STATE (AfxGetStaticModuleState ());
+	AFX_MANAGE_STATE(AfxGetStaticModuleState());
 
 	if (! g_bEnableVim)
 		// Vim not enabled or empty command line entered
@@ -169,7 +172,7 @@ HRESULT CCommands::XApplicationEvents::D
 	// First get the current file name and line number
 
 	// Get the document object
-	CComQIPtr < ITextDocument, &IID_ITextDocument > pDoc (theDocument);
+	CComQIPtr < ITextDocument, &IID_ITextDocument > pDoc(theDocument);
 	if (! pDoc)
 		return S_OK;
 
@@ -177,26 +180,26 @@ HRESULT CCommands::XApplicationEvents::D
 	long LineNr = -1;
 
 	// Get the document name
-	if (FAILED (pDoc->get_FullName (&FileName)))
+	if (FAILED(pDoc->get_FullName(&FileName)))
 		return S_OK;
 
 	LPDISPATCH pDispSel;
 
 	// Get a selection object dispatch pointer
-	if (SUCCEEDED (pDoc->get_Selection (&pDispSel)))
+	if (SUCCEEDED(pDoc->get_Selection(&pDispSel)))
 	{
 		// Get the selection object
-		CComQIPtr < ITextSelection, &IID_ITextSelection > pSel (pDispSel);
+		CComQIPtr < ITextSelection, &IID_ITextSelection > pSel(pDispSel);
 
 		if (pSel)
 			// Get the selection line number
-			pSel->get_CurrentLine (&LineNr);
+			pSel->get_CurrentLine(&LineNr);
 
-		pDispSel->Release ();
+		pDispSel->Release();
 	}
 
 	// Open the file in Vim and position to the current line
-	if (VimOpenFile (FileName, LineNr))
+	if (VimOpenFile(FileName, LineNr))
 	{
 		if (! g_bDevStudioEditor)
 		{
@@ -204,30 +207,30 @@ HRESULT CCommands::XApplicationEvents::D
 			CComVariant vSaveChanges = dsSaveChangesPrompt;
 			DsSaveStatus Saved;
 
-			pDoc->Close (vSaveChanges, &Saved);
+			pDoc->Close(vSaveChanges, &Saved);
 		}
 	}
 
 	// We're done here
-	SysFreeString (FileName);
+	SysFreeString(FileName);
 	return S_OK;
 }
 
-HRESULT CCommands::XApplicationEvents::BeforeDocumentClose (IDispatch * theDocument)
+HRESULT CCommands::XApplicationEvents::BeforeDocumentClose(IDispatch * theDocument)
 {
-	AFX_MANAGE_STATE (AfxGetStaticModuleState ());
+	AFX_MANAGE_STATE(AfxGetStaticModuleState());
 	return S_OK;
 }
 
-HRESULT CCommands::XApplicationEvents::DocumentSave (IDispatch * theDocument)
+HRESULT CCommands::XApplicationEvents::DocumentSave(IDispatch * theDocument)
 {
-	AFX_MANAGE_STATE (AfxGetStaticModuleState ());
+	AFX_MANAGE_STATE(AfxGetStaticModuleState());
 	return S_OK;
 }
 
-HRESULT CCommands::XApplicationEvents::NewDocument (IDispatch * theDocument)
+HRESULT CCommands::XApplicationEvents::NewDocument(IDispatch * theDocument)
 {
-	AFX_MANAGE_STATE (AfxGetStaticModuleState ());
+	AFX_MANAGE_STATE(AfxGetStaticModuleState());
 
 	if (! g_bEnableVim)
 		// Vim not enabled or empty command line entered
@@ -235,19 +238,19 @@ HRESULT CCommands::XApplicationEvents::N
 
 	// First get the current file name and line number
 
-	CComQIPtr < ITextDocument, &IID_ITextDocument > pDoc (theDocument);
+	CComQIPtr < ITextDocument, &IID_ITextDocument > pDoc(theDocument);
 	if (! pDoc)
 		return S_OK;
 
 	BSTR FileName;
 	HRESULT hr;
 
-	hr = pDoc->get_FullName (&FileName);
-	if (FAILED (hr))
+	hr = pDoc->get_FullName(&FileName);
+	if (FAILED(hr))
 		return S_OK;
 
 	// Open the file in Vim and position to the current line
-	if (VimOpenFile (FileName, 0))
+	if (VimOpenFile(FileName, 0))
 	{
 		if (! g_bDevStudioEditor)
 		{
@@ -255,49 +258,49 @@ HRESULT CCommands::XApplicationEvents::N
 			CComVariant vSaveChanges = dsSaveChangesPrompt;
 			DsSaveStatus Saved;
 
-			pDoc->Close (vSaveChanges, &Saved);
+			pDoc->Close(vSaveChanges, &Saved);
 		}
 	}
 
-	SysFreeString (FileName);
+	SysFreeString(FileName);
 	return S_OK;
 }
 
-HRESULT CCommands::XApplicationEvents::WindowActivate (IDispatch * theWindow)
+HRESULT CCommands::XApplicationEvents::WindowActivate(IDispatch * theWindow)
 {
-	AFX_MANAGE_STATE (AfxGetStaticModuleState ());
+	AFX_MANAGE_STATE(AfxGetStaticModuleState());
 	return S_OK;
 }
 
-HRESULT CCommands::XApplicationEvents::WindowDeactivate (IDispatch * theWindow)
+HRESULT CCommands::XApplicationEvents::WindowDeactivate(IDispatch * theWindow)
 {
-	AFX_MANAGE_STATE (AfxGetStaticModuleState ());
+	AFX_MANAGE_STATE(AfxGetStaticModuleState());
 	return S_OK;
 }
 
-HRESULT CCommands::XApplicationEvents::WorkspaceOpen ()
+HRESULT CCommands::XApplicationEvents::WorkspaceOpen()
 {
-	AFX_MANAGE_STATE (AfxGetStaticModuleState ());
+	AFX_MANAGE_STATE(AfxGetStaticModuleState());
 	return S_OK;
 }
 
-HRESULT CCommands::XApplicationEvents::WorkspaceClose ()
+HRESULT CCommands::XApplicationEvents::WorkspaceClose()
 {
-	AFX_MANAGE_STATE (AfxGetStaticModuleState ());
+	AFX_MANAGE_STATE(AfxGetStaticModuleState());
 	return S_OK;
 }
 
-HRESULT CCommands::XApplicationEvents::NewWorkspace ()
+HRESULT CCommands::XApplicationEvents::NewWorkspace()
 {
-	AFX_MANAGE_STATE (AfxGetStaticModuleState ());
+	AFX_MANAGE_STATE(AfxGetStaticModuleState());
 	return S_OK;
 }
 
 // Debugger event
 
-HRESULT CCommands::XDebuggerEvents::BreakpointHit (IDispatch * pBreakpoint)
+HRESULT CCommands::XDebuggerEvents::BreakpointHit(IDispatch * pBreakpoint)
 {
-	AFX_MANAGE_STATE (AfxGetStaticModuleState ());
+	AFX_MANAGE_STATE(AfxGetStaticModuleState());
 	return S_OK;
 }
 
@@ -308,17 +311,18 @@ HRESULT CCommands::XDebuggerEvents::Brea
 class CMainDialog : public CDialog
 {
     public:
-	CMainDialog (CWnd * pParent = NULL);	// Standard constructor
+	CMainDialog(CWnd * pParent = NULL);	// Standard constructor
 
 	//{{AFX_DATA(CMainDialog)
 	enum { IDD = IDD_ADDINMAIN };
 	int	m_ChangeDir;
 	BOOL	m_bDevStudioEditor;
+	BOOL	m_bNewTabs;
 	//}}AFX_DATA
 
 	//{{AFX_VIRTUAL(CMainDialog)
     protected:
-	virtual void DoDataExchange (CDataExchange * pDX);	// DDX/DDV support
+	virtual void DoDataExchange(CDataExchange * pDX);	// DDX/DDV support
 	//}}AFX_VIRTUAL
 
     protected:
@@ -326,100 +330,106 @@ class CMainDialog : public CDialog
 	afx_msg void OnEnable();
 	afx_msg void OnDisable();
 	//}}AFX_MSG
-	DECLARE_MESSAGE_MAP ()
+	DECLARE_MESSAGE_MAP()
 };
 
-CMainDialog::CMainDialog (CWnd * pParent /* =NULL */ )
-	: CDialog (CMainDialog::IDD, pParent)
+CMainDialog::CMainDialog(CWnd * pParent /* =NULL */ )
+	: CDialog(CMainDialog::IDD, pParent)
 {
 	//{{AFX_DATA_INIT(CMainDialog)
 	m_ChangeDir = -1;
 	m_bDevStudioEditor = FALSE;
+	m_bNewTabs = FALSE;
 	//}}AFX_DATA_INIT
 }
 
-void CMainDialog::DoDataExchange (CDataExchange * pDX)
+void CMainDialog::DoDataExchange(CDataExchange * pDX)
 {
-	CDialog::DoDataExchange (pDX);
+	CDialog::DoDataExchange(pDX);
 	//{{AFX_DATA_MAP(CMainDialog)
 	DDX_Radio(pDX, IDC_CD_SOURCE_PATH, m_ChangeDir);
-	DDX_Check (pDX, IDC_DEVSTUDIO_EDITOR, m_bDevStudioEditor);
+	DDX_Check(pDX, IDC_DEVSTUDIO_EDITOR, m_bDevStudioEditor);
+	DDX_Check(pDX, IDC_NEW_TABS, m_bNewTabs);
 	//}}AFX_DATA_MAP
 }
 
-BEGIN_MESSAGE_MAP (CMainDialog, CDialog)
+BEGIN_MESSAGE_MAP(CMainDialog, CDialog)
 	//{{AFX_MSG_MAP(CMainDialog)
 	//}}AFX_MSG_MAP
-END_MESSAGE_MAP ()
+END_MESSAGE_MAP()
 
 
 /////////////////////////////////////////////////////////////////////////////
 // CCommands methods
 
-STDMETHODIMP CCommands::VisVimDialog ()
+STDMETHODIMP CCommands::VisVimDialog()
 {
-	AFX_MANAGE_STATE (AfxGetStaticModuleState ());
+	AFX_MANAGE_STATE(AfxGetStaticModuleState());
 
 	// Use m_pApplication to access the Developer Studio Application
 	// object,
 	// and VERIFY_OK to see error strings in DEBUG builds of your add-in
 	// (see stdafx.h)
 
-	VERIFY_OK (m_pApplication->EnableModeless (VARIANT_FALSE));
+	VERIFY_OK(m_pApplication->EnableModeless(VARIANT_FALSE));
 
 	CMainDialog Dlg;
 
 	Dlg.m_bDevStudioEditor = g_bDevStudioEditor;
+	Dlg.m_bNewTabs = g_bNewTabs;
 	Dlg.m_ChangeDir = g_ChangeDir;
-	if (Dlg.DoModal () == IDOK)
+	if (Dlg.DoModal() == IDOK)
 	{
 		g_bDevStudioEditor = Dlg.m_bDevStudioEditor;
+		g_bNewTabs = Dlg.m_bNewTabs;
 		g_ChangeDir = Dlg.m_ChangeDir;
 
 		// Save settings to registry HKEY_CURRENT_USER\Software\Vim\VisVim
-		HKEY hAppKey = GetAppKey ("Vim");
+		HKEY hAppKey = GetAppKey("Vim");
 		if (hAppKey)
 		{
-			HKEY hSectionKey = GetSectionKey (hAppKey, "VisVim");
+			HKEY hSectionKey = GetSectionKey(hAppKey, "VisVim");
 			if (hSectionKey)
 			{
-				WriteRegistryInt (hSectionKey, "DevStudioEditor",
+				WriteRegistryInt(hSectionKey, "DevStudioEditor",
 						  g_bDevStudioEditor);
-				WriteRegistryInt (hSectionKey, "ChangeDir", g_ChangeDir);
-				RegCloseKey (hSectionKey);
+				WriteRegistryInt(hSectionKey, "NewTabs",
+						  g_bNewTabs);
+				WriteRegistryInt(hSectionKey, "ChangeDir", g_ChangeDir);
+				RegCloseKey(hSectionKey);
 			}
-			RegCloseKey (hAppKey);
+			RegCloseKey(hAppKey);
 		}
 	}
 
-	VERIFY_OK (m_pApplication->EnableModeless (VARIANT_TRUE));
+	VERIFY_OK(m_pApplication->EnableModeless(VARIANT_TRUE));
 	return S_OK;
 }
 
-STDMETHODIMP CCommands::VisVimEnable ()
+STDMETHODIMP CCommands::VisVimEnable()
 {
-	AFX_MANAGE_STATE (AfxGetStaticModuleState ());
-	VimSetEnableState (true);
+	AFX_MANAGE_STATE(AfxGetStaticModuleState());
+	VimSetEnableState(true);
 	return S_OK;
 }
 
-STDMETHODIMP CCommands::VisVimDisable ()
+STDMETHODIMP CCommands::VisVimDisable()
 {
-	AFX_MANAGE_STATE (AfxGetStaticModuleState ());
-	VimSetEnableState (false);
+	AFX_MANAGE_STATE(AfxGetStaticModuleState());
+	VimSetEnableState(false);
 	return S_OK;
 }
 
-STDMETHODIMP CCommands::VisVimToggle ()
+STDMETHODIMP CCommands::VisVimToggle()
 {
-	AFX_MANAGE_STATE (AfxGetStaticModuleState ());
-	VimSetEnableState (! g_bEnableVim);
+	AFX_MANAGE_STATE(AfxGetStaticModuleState());
+	VimSetEnableState(! g_bEnableVim);
 	return S_OK;
 }
 
-STDMETHODIMP CCommands::VisVimLoad ()
+STDMETHODIMP CCommands::VisVimLoad()
 {
-	AFX_MANAGE_STATE (AfxGetStaticModuleState ());
+	AFX_MANAGE_STATE(AfxGetStaticModuleState());
 
 	// Use m_pApplication to access the Developer Studio Application object,
 	// and VERIFY_OK to see error strings in DEBUG builds of your add-in
@@ -430,7 +440,7 @@ STDMETHODIMP CCommands::VisVimLoad ()
 	CComPtr < IDispatch > pDispDoc, pDispSel;
 
 	// Get a document object dispatch pointer
-	VERIFY_OK (m_pApplication->get_ActiveDocument (&pDispDoc));
+	VERIFY_OK(m_pApplication->get_ActiveDocument(&pDispDoc));
 	if (! pDispDoc)
 		return S_OK;
 
@@ -438,30 +448,30 @@ STDMETHODIMP CCommands::VisVimLoad ()
 	long LineNr = -1;
 
 	// Get the document object
-	CComQIPtr < ITextDocument, &IID_ITextDocument > pDoc (pDispDoc);
+	CComQIPtr < ITextDocument, &IID_ITextDocument > pDoc(pDispDoc);
 
 	if (! pDoc)
 		return S_OK;
 
 	// Get the document name
-	if (FAILED (pDoc->get_FullName (&FileName)))
+	if (FAILED(pDoc->get_FullName(&FileName)))
 		return S_OK;
 
 	// Get a selection object dispatch pointer
-	if (SUCCEEDED (pDoc->get_Selection (&pDispSel)))
+	if (SUCCEEDED(pDoc->get_Selection(&pDispSel)))
 	{
 		// Get the selection object
-		CComQIPtr < ITextSelection, &IID_ITextSelection > pSel (pDispSel);
+		CComQIPtr < ITextSelection, &IID_ITextSelection > pSel(pDispSel);
 
 		if (pSel)
 			// Get the selection line number
-			pSel->get_CurrentLine (&LineNr);
+			pSel->get_CurrentLine(&LineNr);
 	}
 
 	// Open the file in Vim
-	VimOpenFile (FileName, LineNr);
+	VimOpenFile(FileName, LineNr);
 
-	SysFreeString (FileName);
+	SysFreeString(FileName);
 	return S_OK;
 }
 
@@ -472,16 +482,16 @@ STDMETHODIMP CCommands::VisVimLoad ()
 
 // Set the enable state and save to registry
 //
-static void VimSetEnableState (BOOL bEnableState)
+static void VimSetEnableState(BOOL bEnableState)
 {
 	g_bEnableVim = bEnableState;
-	HKEY hAppKey = GetAppKey ("Vim");
+	HKEY hAppKey = GetAppKey("Vim");
 	if (hAppKey)
 	{
-		HKEY hSectionKey = GetSectionKey (hAppKey, "VisVim");
+		HKEY hSectionKey = GetSectionKey(hAppKey, "VisVim");
 		if (hSectionKey)
-			WriteRegistryInt (hSectionKey, "EnableVim", g_bEnableVim);
-		RegCloseKey (hAppKey);
+			WriteRegistryInt(hSectionKey, "EnableVim", g_bEnableVim);
+		RegCloseKey(hAppKey);
 	}
 }
 
@@ -490,7 +500,7 @@ static void VimSetEnableState (BOOL bEna
 // letter.
 // 'LineNr' must contain a valid line number or 0, e. g. for a new file
 //
-static BOOL VimOpenFile (BSTR& FileName, long LineNr)
+static BOOL VimOpenFile(BSTR& FileName, long LineNr)
 {
 
 	// OLE automation object for com. with Vim
@@ -507,7 +517,7 @@ static BOOL VimOpenFile (BSTR& FileName,
 	// Get a dispatch id for the SendKeys method of Vim;
 	// enables connection to Vim if necessary
 	DISPID DispatchId;
-	DispatchId = VimGetDispatchId (VimOle, "SendKeys");
+	DispatchId = VimGetDispatchId(VimOle, "SendKeys");
 	if (! DispatchId)
 		// OLE error, can't obtain dispatch id
 		goto OleError;
@@ -525,20 +535,28 @@ static BOOL VimOpenFile (BSTR& FileName,
 #ifdef SINGLE_WINDOW
 	// Update the current file in Vim if it has been modified.
 	// Disabled, because it could write the file when you don't want to.
-	sprintf (VimCmd + 2, ":up\n");
+	sprintf(VimCmd + 2, ":up\n");
 #endif
-	if (! VimOle.Method (DispatchId, "s", TO_OLE_STR_BUF (VimCmd, Buf)))
+	if (! VimOle.Method(DispatchId, "s", TO_OLE_STR_BUF(VimCmd, Buf)))
 		goto OleError;
 
 	// Change Vim working directory to where the file is if desired
 	if (g_ChangeDir != CD_NONE)
-		VimChangeDir (VimOle, DispatchId, FileName);
+		VimChangeDir(VimOle, DispatchId, FileName);
 
 	// Make Vim open the file.
 	// In the filename convert all \ to /, put a \ before a space.
-	sprintf(VimCmd, ":drop ");
+	if (g_bNewTabs)
+	{
+		sprintf(VimCmd, ":tab drop ");
+		s = VimCmd + 11;
+	}
+	else
+	{
+		sprintf(VimCmd, ":drop ");
+		s = VimCmd + 6;
+	}
 	sprintf(FileNameTmp, "%S", (char *)FileName);
-	s = VimCmd + 6;
 	for (p = FileNameTmp; *p != '\0' && s < FileNameTmp + MAX_OLE_STR - 4;
 									  ++p)
 		if (*p == '\\')
@@ -552,20 +570,20 @@ static BOOL VimOpenFile (BSTR& FileName,
 	*s++ = '\n';
 	*s = '\0';
 
-	if (! VimOle.Method (DispatchId, "s", TO_OLE_STR_BUF (VimCmd, Buf)))
+	if (! VimOle.Method(DispatchId, "s", TO_OLE_STR_BUF(VimCmd, Buf)))
 		goto OleError;
 
 	if (LineNr > 0)
 	{
 		// Goto line
-		sprintf (VimCmd, ":%d\n", LineNr);
-		if (! VimOle.Method (DispatchId, "s", TO_OLE_STR_BUF (VimCmd, Buf)))
+		sprintf(VimCmd, ":%d\n", LineNr);
+		if (! VimOle.Method(DispatchId, "s", TO_OLE_STR_BUF(VimCmd, Buf)))
 			goto OleError;
 	}
 
 	// Make Vim come to the foreground
-	if (! VimOle.Method ("SetForeground"))
-		VimOle.ErrDiag ();
+	if (! VimOle.Method("SetForeground"))
+		VimOle.ErrDiag();
 
 	// We're done
 	return true;
@@ -573,7 +591,7 @@ static BOOL VimOpenFile (BSTR& FileName,
     OleError:
 	// There was an OLE error
 	// Check if it's the "unknown class string" error
-	VimErrDiag (VimOle);
+	VimErrDiag(VimOle);
 	return false;
 }
 
@@ -581,18 +599,18 @@ static BOOL VimOpenFile (BSTR& FileName,
 // Create the Vim OLE object if necessary
 // Returns a valid dispatch id or null on error
 //
-static DISPID VimGetDispatchId (COleAutomationControl& VimOle, char* Method)
+static DISPID VimGetDispatchId(COleAutomationControl& VimOle, char* Method)
 {
 	// Initialize Vim OLE connection if not already done
-	if (! VimOle.IsCreated ())
+	if (! VimOle.IsCreated())
 	{
-		if (! VimOle.CreateObject ("Vim.Application"))
+		if (! VimOle.CreateObject("Vim.Application"))
 			return NULL;
 	}
 
 	// Get the dispatch id for the SendKeys method.
 	// By doing this, we are checking if Vim is still there...
-	DISPID DispatchId = VimOle.GetDispatchId ("SendKeys");
+	DISPID DispatchId = VimOle.GetDispatchId("SendKeys");
 	if (! DispatchId)
 	{
 		// We can't get a dispatch id.
@@ -604,12 +622,12 @@ static DISPID VimGetDispatchId (COleAuto
 		// should not be kept long enough to allow the user to terminate Vim
 		// to avoid memory corruption (why the heck is there no system garbage
 		// collection for those damned OLE memory chunks???).
-		VimOle.DeleteObject ();
-		if (! VimOle.CreateObject ("Vim.Application"))
+		VimOle.DeleteObject();
+		if (! VimOle.CreateObject("Vim.Application"))
 			// If this create fails, it's time for an error msg
 			return NULL;
 
-		if (! (DispatchId = VimOle.GetDispatchId ("SendKeys")))
+		if (! (DispatchId = VimOle.GetDispatchId("SendKeys")))
 			// There is something wrong...
 			return NULL;
 	}
@@ -620,20 +638,20 @@ static DISPID VimGetDispatchId (COleAuto
 // Output an error message for an OLE error
 // Check on the classstring error, which probably means Vim wasn't registered.
 //
-static void VimErrDiag (COleAutomationControl& VimOle)
+static void VimErrDiag(COleAutomationControl& VimOle)
 {
-	SCODE sc = GetScode (VimOle.GetResult ());
+	SCODE sc = GetScode(VimOle.GetResult());
 	if (sc == CO_E_CLASSSTRING)
 	{
 		char Buf[256];
-		sprintf (Buf, "There is no registered OLE automation server named "
+		sprintf(Buf, "There is no registered OLE automation server named "
 			 "\"Vim.Application\".\n"
 			 "Use the OLE-enabled version of Vim with VisVim and "
 			 "make sure to register Vim by running \"vim -register\".");
-		MessageBox (NULL, Buf, "OLE Error", MB_OK);
+		MessageBox(NULL, Buf, "OLE Error", MB_OK);
 	}
 	else
-		VimOle.ErrDiag ();
+		VimOle.ErrDiag();
 }
 
 // Change directory to the directory the file 'FileName' is in or it's parent
@@ -644,7 +662,7 @@ static void VimErrDiag (COleAutomationCo
 //	CD_SOURCE_PATH
 //	CD_SOURCE_PARENT
 //
-static void VimChangeDir (COleAutomationControl& VimOle, DISPID DispatchId, BSTR& FileName)
+static void VimChangeDir(COleAutomationControl& VimOle, DISPID DispatchId, BSTR& FileName)
 {
 	// Do a :cd first
 
@@ -655,7 +673,7 @@ static void VimChangeDir (COleAutomation
 	char DirUnix[_MAX_DIR * 2];
 	char *s, *t;
 
-	_splitpath (StrFileName, Drive, Dir, NULL, NULL);
+	_splitpath(StrFileName, Drive, Dir, NULL, NULL);
 
 	// Convert to Unix path name format, escape spaces.
 	t = DirUnix;
@@ -676,19 +694,18 @@ static void VimChangeDir (COleAutomation
 	OLECHAR Buf[MAX_OLE_STR];
 	char VimCmd[MAX_OLE_STR];
 
-	sprintf (VimCmd, ":cd %s%s%s\n", Drive, DirUnix,
+	sprintf(VimCmd, ":cd %s%s%s\n", Drive, DirUnix,
 		 g_ChangeDir == CD_SOURCE_PARENT && DirUnix[1] ? ".." : "");
-	VimOle.Method (DispatchId, "s", TO_OLE_STR_BUF (VimCmd, Buf));
+	VimOle.Method(DispatchId, "s", TO_OLE_STR_BUF(VimCmd, Buf));
 }
 
 #ifdef _DEBUG
 // Print out a debug message
 //
-static void DebugMsg (char* Msg, char* Arg)
+static void DebugMsg(char* Msg, char* Arg)
 {
 	char Buf[400];
-	sprintf (Buf, Msg, Arg);
-	AfxMessageBox (Buf);
+	sprintf(Buf, Msg, Arg);
+	AfxMessageBox(Buf);
 }
 #endif
-
--- a/src/VisVim/Resource.h
+++ b/src/VisVim/Resource.h
@@ -16,6 +16,7 @@
 #define IDC_CD_SOURCE_PATH		1001
 #define IDC_CD_SOURCE_PARENT		1002
 #define IDC_CD_NONE			1003
+#define IDC_NEW_TABS			1004
 
 // Next default values for new objects
 //
--- a/src/VisVim/VisVim.rc
+++ b/src/VisVim/VisVim.rc
@@ -122,6 +122,9 @@ BEGIN
     CONTROL         "&Open file in DevStudio editor simultaneously",
                     IDC_DEVSTUDIO_EDITOR,"Button",BS_AUTOCHECKBOX | WS_GROUP | 
                     WS_TABSTOP,7,7,153,10
+    CONTROL         "Open files in new tabs",
+                    IDC_NEW_TABS,"Button",BS_AUTOCHECKBOX | WS_GROUP | 
+                    WS_TABSTOP,7,21,153,10
     GROUPBOX        "Current directory",IDC_STATIC,7,35,164,58,WS_GROUP
     CONTROL         "Set to &source file path",IDC_CD_SOURCE_PATH,"Button",
                     BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,17,49,85,10
--- a/src/version.c
+++ b/src/version.c
@@ -677,6 +677,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    150,
+/**/
     149,
 /**/
     148,