# HG changeset patch # User vimboss # Date 1240398506 0 # Node ID 3af484dca921e30a0bb1e4975a4fb214c3911f94 # Parent e7f6ca5594cf9c6a3902458e0635bec7a7c40d87 updated for version 7.2-150 diff --git a/src/VisVim/Commands.cpp b/src/VisVim/Commands.cpp --- 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 - diff --git a/src/VisVim/Resource.h b/src/VisVim/Resource.h --- 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 // diff --git a/src/VisVim/VisVim.rc b/src/VisVim/VisVim.rc --- 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 diff --git a/src/version.c b/src/version.c --- 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,