Как можно сортировать вкладки в Visual Studio 2008 по типу файла? - PullRequest
1 голос
/ 23 сентября 2011

Я пытался (без особой удачи) написать макрос для Visual Studio 2008, который будет сортировать открытые файлы .cpp и .h в две группы вкладок, размещая заголовки в левой группе вкладок и файлы .cpp справа. Мне бы хотелось иметь эту функцию из-за количества времени, которое я трачу, перемещая свои вкладки, чтобы я мог видеть обе части класса, над которым я работаю. Я знаю, что существует несвободная надстройка для Visual Studio, которая позволяет управлять вкладками, но она конфликтует с надстройкой, которую мне нужно использовать для работы, поэтому на данный момент мой макрос - лучший вариант.

Я уверен, что это можно применить и к другим макетам, а также к сортировке, если я смогу заставить ее работать. Я думал, чтобы сортировка выполнялась автоматически каждый раз, когда я открываю окно документа, поэтому я создал макрос Visual Basic в разделе событий среды в Visual Studio Macro IDE. Ниже приведен код, который у меня есть:

Public Sub keepHeaderAndCxxInDifferentTabs() Handles WindowEvents.WindowCreated
     Dim openedFile As String
     openedFile = ActiveWindow.Document.FullName

     If openedFile.Contains(".h") Then
         ' if the file being opened is a header file make sure it appears on the left
         If DTE.ActiveDocument.ActiveWindow.Left > 600 Then
             DTE.ExecuteCommand("Window.MovetoNextTabGroup")
         End If
     ElseIf openedFile.Contains(".cpp") Then
         ' if the file being opened is a cpp file make sure it appears on the right
         If DTE.ActiveDocument.ActiveWindow.Left < 250 Then
             DTE.ExecuteCommand("Window.MovetoNextTabGroup")
         End If
     Else
         ' if the file being opened is anything else make sure it appears on the right
         If DTE.ActiveDocument.ActiveWindow.Left < 250 Then
             DTE.ExecuteCommand("Window.MovetoNextTabGroup")
         End If
     End If
 End Sub

К сожалению, этот макрос в настоящее время ничего не делает. Мое лучшее предположение состояло в том, что я мог использовать свойство «Left» активного окна, чтобы выяснить, в какой группе вкладок появилось новое окно, а затем переместить окно в следующую группу вкладок, если оно не там, где я хочу его видеть. Я испробовал ряд различных значений для свойства 'Left', но пока ни одна из моих вкладок не перемещается.

Кто-нибудь знает, что я сделал не так или есть предложения? Заранее спасибо за ваше время.

1 Ответ

1 голос
/ 23 сентября 2011

Я нашел способ сделать то, что хотел, используя функцию ниже. Пока у меня установлены две вертикальные вкладки, когда я запускаю макрос, он помещает все заголовки в левую группу вкладок и все остальные файлы в правую группу вкладок. Это может быть дополнительно расширено, так что, когда я открываю любые файлы с использованием любых других макросов, которые я пишу, он также сортирует их, вызывая его после запуска макроса. К сожалению, это не работает автоматически, у меня возникают проблемы с тем, чтобы заставить его фактически выполнять сортировку всякий раз, когда определенное событие инициируется (используя раздел событий среды).

'=====================================================================
' Sorts all opened documents putting headers into the left tab group
' and everything else into the right tab group
'===================================================================== 
Public Sub SortFilesInTabs()
    For i = 1 To DTE.Windows.Count Step 1
        If DTE.Windows.Item(i).Document IsNot Nothing Then
            If DTE.Windows.Item(i).Document.FullName.Contains(".h") Then
                ' if the file is a header file make sure it appears on the left
                If DTE.Windows.Item(i).Document.ActiveWindow.Left > 600 Then
                    WriteOutput("moved file " & DTE.Windows.Item(i).Document.FullName & " to left")
                    DTE.Windows.Item(i).Document.Activate()
                    DTE.ExecuteCommand("Window.MovetoPreviousTabGroup")
                End If
            ElseIf DTE.Windows.Item(i).Document.FullName.Contains(".cpp") Then
                ' if the file is a cpp file make sure it appears on the right
                If DTE.Windows.Item(i).Document.ActiveWindow.Left < 250 Then
                    WriteOutput("moved file " & DTE.Windows.Item(i).Document.FullName & " to right")
                    DTE.Windows.Item(i).Document.Activate()
                    DTE.ExecuteCommand("Window.MovetoNextTabGroup")
                End If
            ElseIf DTE.Windows.Item(i).Document.FullName.Length > 0 Then
                ' if the file is any other valid document then make sure it appears on the right
                If DTE.Windows.Item(i).Document.ActiveWindow.Left < 250 Then
                    WriteOutput("moved file " & DTE.Windows.Item(i).Document.FullName & " to right")
                    DTE.Windows.Item(i).Document.Activate()
                    DTE.ExecuteCommand("Window.MovetoNextTabGroup")
                End If
            End If
        End If
    Next i
End Sub

Если кто-то может улучшить это, пожалуйста

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...