public static bool DoShow(CommandKeyBindingSnapshot snapshot) { var window = new ConflictingKeyBindingDialog(); var removed = window.ConflictingKeyBindingControl.RemovedKeyBindingData; removed.AddRange(snapshot.Removed.Select(x => new KeyBindingData(x))); var current = window.ConflictingKeyBindingControl.ConflictingKeyBindingData; current.AddRange(snapshot.Conflicting.Select(x => new KeyBindingData(x))); var ret = window.ShowModal(); if (ret.HasValue && ret.Value) { // Remove all of the removed bindings foreach (var cur in removed) { var tuple = snapshot.TryGetCommand(cur.Name); if ( tuple.Item1 ) { tuple.Item2.SafeResetBindings(); } } // Restore all of the conflicting ones foreach (var cur in current) { KeyBinding binding; var tuple = snapshot.TryGetCommand(cur.Name); if ( tuple.Item1 && KeyBinding.TryParse(cur.Keys, out binding)) { tuple.Item2.SafeSetBindings(binding); } } var settings = Settings.Settings.Default; settings.RemovedBindings = removed .Select(x => new Settings.CommandBindingSetting() { Name = x.Name, CommandString = x.Keys }) .ToArray(); settings.HaveUpdatedKeyBindings = true; settings.Save(); } return ret.HasValue && ret.Value; }
private void UpdateKeyBindings() { var keyBindingsByHandled = _keyBindingList.ToLookup(data => data.HandledByVsVim); // For commands being handled by VsVim, we shall remove any other bindings foreach (var cur in _keyBindingList.Where(binding => binding.HandledByVsVim).SelectMany(data => data.Bindings)) { var tuple = _snapshot.TryGetCommand(cur.Name); if (tuple.Item1) { tuple.Item2.SafeResetBindings(); } } // Restore all commands we are not handling foreach (var cur in _keyBindingList.Where(binding => !binding.HandledByVsVim).SelectMany(data => data.Bindings)) { var tuple = _snapshot.TryGetCommand(cur.Name); if (tuple.Item1) { var command = tuple.Item2; // It's very possible that the user has added new mappings to a given key since we stored // the original mappings. Make sure we don't erase those values here and instead append the // previous binding we stored back to the command var bindingList = command.GetBindings().ToList(); var commandString = cur.KeyBinding.CommandString; if (!bindingList.Contains(commandString, StringComparer.OrdinalIgnoreCase)) { bindingList.Add(commandString); command.SafeSetBindings(bindingList); } } } _legacySettings.RemovedBindings = _keyBindingList.Where(binding => binding.HandledByVsVim).SelectMany(data => data.Bindings) .Select(x => new CommandBindingSetting(x.Name, x.KeyBinding.CommandString)) .ToReadOnlyCollection(); _legacySettings.HaveUpdatedKeyBindings = true; _legacySettings.Save(); }
private void UpdateKeyBindings() { var keyBindingsByHandled = _keyBindingList.ToLookup(data => data.HandledByVsVim); // For commands being handled by VsVim, we shall remove any other bindings foreach (var cur in _keyBindingList.Where(binding => binding.HandledByVsVim).SelectMany(data => data.Bindings)) { EnvDTE.Command command; ReadOnlyCollection <CommandKeyBinding> bindings; if (!_snapshot.TryGetCommandData(cur.Id, out command, out bindings)) { continue; } // Remove the bindings from the command which are currently in conflict with // Vim. Do not remove all bindings because a command can contain bindings that don't // conflict with vim in any way var keepBindings = bindings .Select(x => x.KeyBinding) .Where(x => !_snapshot.VimFirstKeyInputs.Contains(x.FirstKeyStroke.AggregateKeyInput)) .Select(x => x.CommandString) .ToList(); command.SafeSetBindings(keepBindings); } // Restore all commands we are not handling foreach (var cur in _keyBindingList.Where(binding => !binding.HandledByVsVim).SelectMany(data => data.Bindings)) { EnvDTE.Command command; if (_snapshot.TryGetCommand(cur.Id, out command)) { // It's very possible that the user has added new mappings to a given key since we stored // the original mappings. Make sure we don't erase those values here and instead append the // previous binding we stored back to the command var bindingList = command.GetBindings().ToList(); var commandString = cur.KeyBinding.CommandString; if (!bindingList.Contains(commandString, StringComparer.OrdinalIgnoreCase)) { bindingList.Add(commandString); command.SafeSetBindings(bindingList); } } } _vimApplicationSettings.RemovedBindings = _keyBindingList.Where(binding => binding.HandledByVsVim).SelectMany(data => data.Bindings) .ToReadOnlyCollection(); _vimApplicationSettings.HaveUpdatedKeyBindings = true; }
private void UpdateKeyBindings() { var keyBindingsByHandled = _keyBindingList.ToLookup(data => data.HandledByVsVim); // For commands being handled by VsVim, we shall remove any other bindings foreach (var cur in _keyBindingList.Where(binding => binding.HandledByVsVim).SelectMany(data => data.Bindings)) { var tuple = _snapshot.TryGetCommand(cur.Name); if (tuple.Item1) { tuple.Item2.SafeResetBindings(); } } // Restore all commands we are not handling foreach (var cur in _keyBindingList.Where(binding => !binding.HandledByVsVim).SelectMany(data => data.Bindings)) { var tuple = _snapshot.TryGetCommand(cur.Name); if (tuple.Item1) { tuple.Item2.SafeSetBindings(cur.KeyBinding); } } var settings = Settings.Settings.Default; settings.RemovedBindings = _keyBindingList.Where(binding => binding.HandledByVsVim).SelectMany(data => data.Bindings) .Select(x => new Settings.CommandBindingSetting() { Name = x.Name, CommandString = x.KeyBinding.CommandString }) .ToArray(); settings.HaveUpdatedKeyBindings = true; settings.Save(); }