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;
        }
Пример #2
0
        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();
        }
Пример #3
0
        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();
        }