Tabs Studio v1.4.0 public is released – added experimental support and separate installer for Visual Studio 2005.
June 24, 2009
June 20, 2009
Visual Studio 2005 support
I tried to run Tabs Studio under VS 2005 with .NET 3.0 and C++ 2008 SP1 redistributable installed. The only problem I’ve found is a slight tabs displacement on initial loading. It is fixed by changing VS window size, for example. I enabled VS 2005 support in Tabs Studio add-in metadata, but I was not able to make a single .vsi installer for both VS 2005 and VS 2008 versions.
Download separate Tabs Studio 2005 v1.3.5 installer.
Tabs Studio v1.3.5 is released
Tabs Studio v1.3.5 is released – added advanced tab grouping options, added digital signature to the Tabs Studio installer and TabsStudio.dll, fixed missing underscores in context menu file name, fixed missing corresponding file for documents with path in tab name, fixed tabs displacement and reordering when using virtual desktop software.
June 19, 2009
Corresponding Files in different folders
Now that documents from different folders can be grouped together, OpenCorrespondingFile command and Open context menu command have been augmented to find corresponding files in other folders (other than current folder for active document). Currently opened solution is scanned for files and those files that match grouping options are displayed in context menu.

Opening corresponding file from different folder
June 17, 2009
Document path grouping
Currently, tabs are combined only if their associated documents are in the same folder. This is a good default as you don’t want Window1 .xaml .xaml.cs from Project1 to be combined with Window1 .xaml .xaml.cs from Project2. But sometimes files that are really relevant can reside in different folders. For example, it would be nice to combine c:\Projects\4\4\Scripts\1033\default.js and c:\Projects\4\4\HTML\1033\default.htm files. It will be possible in the next version.

Path grouping settings
Paths matching is somewhat convoluted as I wanted to achieve maximal customizability. Having two files c:\src\Window1.xaml and c:\src\Window1.xaml.cs matching algorithm removes common path from two files, appends ‘$’ symbol to the end of both files and concatenates them. Resulting Window1.xaml$Window1.xaml.cs$ string is matched with paths matching regex. If M named group matches the string then two files are combinable. If not, two full paths with ‘$’ symbol are concatenated (resulting in c:\src\Window1.xaml$c:\src\Window1.xaml.cs$ string) and again matched with paths matching regex. If M named group matches the string then two files are combinable. If not, then files are not combinable. If files are combinable then additional tab title grouping rules are checked.
Default paths matching regex (?<M>^[^\\]+$) checks that there are no back slashes in first paths concatenation and thus allows files only from the same directory. If we try c:\Project1\Window1.xaml and c:\Project2\Window1.xaml.cs files, then first concatenation would be Project1\Window1.xaml$Project2\Window1.xaml.cs$ – it has two back slashes and would not match default regex. Two file names are lexicographically “sorted”, it is guaranteed that concatenation would be Project1\Window1.xaml$Project2\Window1.xaml.cs$ and not Project2\Window1.xaml.cs$Project1\Window1.xaml$.
Let’s create rule that allows htm files from HTML folder to be combinable with js files in Scripts folder. For c:\Projects\4\4\Scripts\1033\default.js and c:\Projects\4\4\HTML\1033\default.htm first concatenation would be HTML\1033\default.htm$Scripts\1033\default.js$ and simple matching regex would be (?<M>^HTML.+?htm\$Scripts.+?js\$). As for other cases we want that default same folder restriction apply, we add our new rule before default one using OR symbol. The result is (?<M>^HTML.+?htm\$Scripts.+?js\$)|(?<M>^[^\\]+$).
We can solve htm files combining problem differently if there is only one project with htm files. In this case htm files can’t clash with htm files in other folders and simply allowing htm extension to be combinable with everything else would suffice – (?<M>htm\$)|(?<M>^[^\\]+$). Using absolute path in regex would achieve the same –
(?<M>c:\\Projects\\4\\4\\HTML)|(?<M>^[^\\]+$).
When one of two files is in a subfolder (for example, c:\Projects\4\default.htm and c:\Projects\4\code\default.js), regex matching single back slash would allow files to be combinable – (?<M>^[^\\]+\\[^\\]+$)|(?<M>^[^\\]+$).
It’s possible to create a rule that denies files combining. Use matching regex without M group for it. E.g., to deny files with .Designer.cs extension to be combinable and deny their appearance in corresponding files list use (.+Designer\.cs\$)|(?<M>^[^\\]+$) regex.
June 15, 2009
Tab Title Grouping
I’m working on better tab grouping. Currently, there is a hardcoded list of combinable extensions and I gradually add more and more extensions to it. Right now the list is: aspx.designer.cs, aspx.vb, xaml.vb, aspx.cs, Designer.cs, xaml.cs, svc.cs, ascx.cs, master.cs, c, cpp, h, hpp, h [Design], inl, vb [Design], vb, cs [Design], cs, aspx, xaml, xml, resX, settings, js, svc, ascx, master. I was afraid that allowing all extensions to be combinable could lead to some unforeseen consequences. Still, I couldn’t find a single case when combining arbitrary extensions is bad. So, I’m making all extensions combinable now by default and I have a mechanism to block undesired extensions from combining if needed.

Title grouping settings
Each tab title is now matched with title splitting regular expression. Tabs that have the same group name are combined. Default title splitting regex matches Name as all symbols before first dot and matches Ext as first dot and all subsequent symbols. Customizing splitting regex allows different grouping options. Let’s see some examples:
1. Grouping all extensions (default):

(?<Name>.+?)(?<Ext>\..+)
2. Explicit list of combinable extensions (xaml and xaml.cs):

(?<Name>.+?)(?<Ext>\.(xaml|xaml.cs))$
3. Additional grouping by part of a name and an extension (_i.h and _c.h):

Additional grouping by part of a name and an extension
(?<Name>.+?)(?<Ext>(_i\.h|_c\.h))$|(?<Name>.+?)(?<Ext>\..+)
4. Exclude extension (cs) from grouping:

Exclude extension from grouping
[^.]+\.(cs)$|(?<Name>.+?)(?<Ext>\..+)
5. Additional grouping by (xaml) extension:

(?<Ext>.+?)(?<Name>\.xaml)$|(?<Name>.+?)(?<Ext>\..+)
6. Hide dot from extensions:

(?<Name>.+?)\.(?<Ext>.+)
7. Additional grouping by title prefix (Window):

(?<Name>Window)(?<Ext>.+?\..+)|(?<Name>.+?)(?<Ext>\..+)
Opening corresponding file follows rules of customized title grouping.
June 4, 2009
Tabs Studio v1.3.2 is released
Tabs Studio v1.3.2 is released – added support for larger than normal DPI scaling display settings.
June 3, 2009
Tabs Studio v1.3.1 is released
Tabs Studio v1.3.1 is released – fixed assertion failure when closing Web Browser window (and windows based on Web Browser such as Integrated Help and Samples) using Window.CloseDocumentWindow keyboard command or using Window – Hide menu command.
June 2, 2009
Tabs Studio v1.3.0 is released
Tabs Studio v1.3.0 public is released – fixed accidental tab drag on tab selection when number of toolbars changes, added .inl to the list of combinable extensions.