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.