Как отключить поведение MRU в VS2013 после закрытия вкладки

Я уже перегруппировал ctl + tab и ctl + shift + tab в Window.NextTab и Window.PreviousTab.

Но когда я вызываю File.Close, Visual Studio 2013 по-прежнему использует MRU, чтобы решить, какую вкладку вывести на передний план, что обычно приводит к тому, что фокус прыгает где-то небезопасным. Я хотел бы изменить это поведение так, чтобы вкладка сразу после только что закрытой (справа на вкладке хорошо) выведена на передний план (если она существует). Это приведет к тому, что поведение VS будет соответствовать поведению ff, chrome, notepad ++ и т.д.

Я пробовал кучу расширений, и, хотя многие из них меняют или создают свои собственные следующие/предыдущие функции вкладки, ни одна из них не создает новую версию File.Close.

Кто-нибудь знает, возможно ли это или личность каких-либо расширений, которые это делают?

Ответ 1

Вы можете использовать следующую команду, созданную в Visual Commander вместо File.Close для активации следующей вкладки после закрытия:

public class C : VisualCommanderExt.ICommand
{
    public void Run(EnvDTE80.DTE2 DTE, Microsoft.VisualStudio.Shell.Package package) 
    {
        dte = DTE;
        if (IsCommandAvailable("Window.NextTab"))
        {
            DTE.ExecuteCommand("Window.NextTab");
            DTE.ExecuteCommand("Window.PreviousTab");
        }
        if (IsCommandAvailable("File.Close"))
            DTE.ExecuteCommand("File.Close");
    }

    private bool IsCommandAvailable(string commandName)
    {
        EnvDTE80.Commands2 commands = dte.Commands as EnvDTE80.Commands2;
        if (commands == null)
            return false;

        EnvDTE.Command command = commands.Item(commandName, 0);
        if (command == null)
            return false;

        return command.IsAvailable;
    }

    private EnvDTE80.DTE2 dte;
}

Обновление Вероятно, лучшая реализация, которая предотвращает потенциальные визуальные побочные эффекты:

public void Run(EnvDTE80.DTE2 DTE, Microsoft.VisualStudio.Shell.Package package) 
{
    dte = DTE;
    if (IsCommandAvailable("Window.NextTab"))
    {
        EnvDTE.Window w = DTE.ActiveWindow;
        DTE.ExecuteCommand("Window.NextTab");
        w.Close();
    }
    else if (IsCommandAvailable("File.Close"))
        DTE.ExecuteCommand("File.Close");
}