Reputation: 51064
We work on several different branches of the same code, and when working on two branches at once, it can become confusing and time wasting.
Presently, the VS title bar has the text <solution-name> - Visual Studio
.
Is it possible for me to write an extension that will make that text <solution-name>: <branch-name> - <Visual Studio>
?
Upvotes: 62
Views: 32383
Reputation: 511
I added a symbolic link with a different name targeting the solution file. Open the solution with the symbolic link and the window title has the symbolic link name.
In windows: mklink BlawBranch.sln Blaw.sln
EDIT: Found that a hard link breaks if target .sln file is updated by our source control. A symbolic link doesn't have the same problem.
Upvotes: 1
Reputation: 1
In 2012, you have to set System.Windows.Application.Current.MainWindow.Title
in order for this to work. This will update both the TaskBarItem title and the MainWindow title.
This is only possible from the main thread and since the title will get updated at various points by Visual Studio, you have to hook up to some events and reset it to whatever you wanted it to be (in my AddIn, I use some EnvDTE.SolutionEvents
among others).
Hope this helps.
Upvotes: 0
Reputation: 13832
From http://www.helixoft.com/blog/archives/32 sets the title to the current filename. It also works on Visual Studio 10
Private timer As System.Threading.Timer
Private ideTitle As String = Nothing
Declare Auto Function SetWindowText Lib "user32" (ByVal hWnd As System.IntPtr, _
ByVal lpstring As String) As Boolean
'''<summary>Called when any window in VS gets activated.</summary>
'''<param name="GotFocus">Window that got focus.</param>
'''<param name="LostFocus">Window that lost focus.</param>
Private Sub WindowEvents_WindowActivated(ByVal GotFocus As EnvDTE.Window, ByVal LostFocus As EnvDTE.Window) Handles WindowEvents.WindowActivated
Try
If timer Is Nothing Then
' Create timer which refreshes the caption because
' IDE resets the caption very often
Dim autoEvent As New System.Threading.AutoResetEvent(False)
Dim timerDelegate As System.Threading.TimerCallback = _
AddressOf tick
timer = New System.Threading.Timer(timerDelegate, autoEvent, 0, 200)
End If
If GotFocus.Document Is Nothing Then
ideTitle = Nothing
Else
ideTitle = GotFocus.Document.FullName
showTitle(ideTitle)
End If
Catch ex As System.Exception
End Try
End Sub
''' <summary>Dispose the timer on IDE shutdown.</summary>
Public Sub DTEEvents_OnBeginShutdown() Handles DTEEvents.OnBeginShutdown
If Not timer Is Nothing Then
timer.Dispose()
End If
End Sub
'''<summary>Called by timer.</summary>
Public Sub tick(ByVal state As Object)
Try
If Not ideTitle Is Nothing Then
showTitle(ideTitle)
End If
Catch ex As System.Exception
End Try
End Sub
'''<summary>Shows the title in main window.</summary>
Private Sub showTitle(ByVal title As String)
SetWindowText(New System.IntPtr(DTE.MainWindow.HWnd), title & " - " & DTE.Name)
End Sub
Upvotes: 0
Reputation: 1640
Check out latest release of VSCommands 2010 Lite. It introduced a feature called Friendly Solution Name where you can set up a regex pattern to extract branch name from folder structure and have it placed in Visual Studio main window title. More details: http://vscommands.com/releasenotes/3.6.8.0 and http://vscommands.com/releasenotes/3.6.9.0
Upvotes: 19
Reputation: 2194
there is a property by name AppName for any visual studio based IDE, that should do the trick.
Upvotes: 0
Reputation: 18670
I just created a small Visual Studio extension that can help: http://visualstudiogallery.msdn.microsoft.com/f3f23845-5b1e-4811-882f-60b7181fa6d6
This small extension will detect whenever two instances of Visual Studio are running and change the window title of Visual Studio to include the parent folder name of the solution. It will therefore change SolutionFolder - Microsoft Visual Studio into SolutionFolderParent\SolutionFolder - Microsoft Visual Studio.
This is particularly useful when branching a solution: it becomes possible to easily identify which branch you are working on, in the case where both would have the same solution name.
Official page here: http://erwinmayer.com/labs/visual-studio-2010-extension-rename-visual-studio-window-title/
Upvotes: 57
Reputation: 51064
Trying to set MainWindow.Caption throws an exception. You have to use the Win32 SetWindowText function to change the title, but beware: Visual Studio resets the title bar text at the drop of a hat, so you should implement a Timer to keep setting your desired text. The following code from the Connect
class of the add-in will permanently (or, as long as the add-in is running) keep the title bar text as "Hello World!"
public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom)
{
_applicationObject = (DTE2)application;
_addInInstance = (AddIn)addInInst;
resetTitleTimer = new Timer(new TimerCallback(SetMainWindowTitle), "Hello world!", 0, 10);
}
[DllImport("user32.dll")]
private static extern bool SetWindowText(IntPtr hWnd, string lpString);
private void SetMainWindowTitle(object state)
{
IntPtr hWnd = (IntPtr)_applicationObject.MainWindow.HWnd;
SetWindowText(hWnd, "Hello World!");
}
Upvotes: 3
Reputation: 48546
Perhaps a simpler solution would be to use virtual desktops? Spacial arrangement is easier to remember, you could group any related windows with the corresponding VS, and switching would be simpler.
Upvotes: 0
Reputation: 1867
To be honest, I am not sure I am understanding your question correctly, but I had asked one here on SO that seems to be about a similar problem:
Working with different versions/branches of the same Visual Studio 2005 solution
Upvotes: 0
Reputation: 109005
In the VS automation model there is
_DTE.MainWindow.Capation
which you could start with.
See http://msdn.microsoft.com/en-us/library/envdte._dte.mainwindow.aspx
Upvotes: -1