Skip to content

Commit

Permalink
Fix inline rename
Browse files Browse the repository at this point in the history
  • Loading branch information
nosami committed Dec 14, 2019
1 parent 7d6cb07 commit d0e31f2
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 22 deletions.
14 changes: 11 additions & 3 deletions Src/VimMac/CaretUtil.cs
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
using System;
using System.ComponentModel.Composition;
using Microsoft.VisualStudio.Text.Editor;
using Microsoft.VisualStudio.Text.Formatting;

namespace Vim.Mac
{
internal static class CaretUtil
[Export(typeof(IVimBufferCreationListener))]
internal class CaretUtil : IVimBufferCreationListener
{
public static void SetCaret(IVimBuffer vimBuffer)
private void SetCaret(IVimBuffer vimBuffer)
{
var textView = vimBuffer.TextView;
if (vimBuffer.Mode.ModeKind == ModeKind.Insert)
if (vimBuffer.Mode.ModeKind == ModeKind.Insert || vimBuffer.Mode.ModeKind == ModeKind.ExternalEdit)
{
//TODO: what's the minimum caret width for accessibility?
textView.Options.SetOptionValue(DefaultTextViewOptions.CaretWidthOptionName, 1.0);
Expand All @@ -27,5 +29,11 @@ public static void SetCaret(IVimBuffer vimBuffer)
textView.Options.SetOptionValue(DefaultTextViewOptions.CaretWidthOptionName, caretWidth);
}
}

void IVimBufferCreationListener.VimBufferCreated(IVimBuffer vimBuffer)
{
SetCaret(vimBuffer);
vimBuffer.SwitchedMode += (_,__) => SetCaret(vimBuffer);
}
}
}
18 changes: 13 additions & 5 deletions Src/VimMac/DefaultKeyProcessorProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
using Microsoft.VisualStudio.Utilities;
using Vim;
using Vim.UI.Cocoa;

using Vim.UI.Cocoa.Implementation.InlineRename;

namespace VimHost
{
[Export(typeof(IKeyProcessorProvider))]
Expand All @@ -17,21 +18,28 @@ internal sealed class DefaultKeyProcessorProvider : IKeyProcessorProvider
private readonly IVim _vim;
private readonly IKeyUtil _keyUtil;
private readonly ICompletionBroker _completionBroker;
private readonly ISignatureHelpBroker _signatureHelpBroker;

private readonly ISignatureHelpBroker _signatureHelpBroker;
private readonly InlineRenameListenerFactory _inlineRenameListenerFactory;

[ImportingConstructor]
internal DefaultKeyProcessorProvider(IVim vim, IKeyUtil keyUtil, ICompletionBroker completionBroker, ISignatureHelpBroker signatureHelpBroker)
internal DefaultKeyProcessorProvider(
IVim vim,
IKeyUtil keyUtil,
ICompletionBroker completionBroker,
ISignatureHelpBroker signatureHelpBroker,
InlineRenameListenerFactory inlineRenameListenerFactory)
{
_vim = vim;
_keyUtil = keyUtil;
_completionBroker = completionBroker;
_signatureHelpBroker = signatureHelpBroker;
_inlineRenameListenerFactory = inlineRenameListenerFactory;
}

public KeyProcessor GetAssociatedProcessor(ICocoaTextView cocoaTextView)
{
var vimTextBuffer = _vim.GetOrCreateVimBuffer(cocoaTextView);
return new VimKeyProcessor(vimTextBuffer, _keyUtil, _completionBroker, _signatureHelpBroker);
return new VimKeyProcessor(vimTextBuffer, _keyUtil, _completionBroker, _signatureHelpBroker, _inlineRenameListenerFactory);
}
}
}
18 changes: 10 additions & 8 deletions Src/VimMac/InlineRename/InlineRenameListenerFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,15 @@
namespace Vim.UI.Cocoa.Implementation.InlineRename
{
[Export(typeof(IVimBufferCreationListener))]
[Export(typeof(IExtensionAdapter))]
[Export(typeof(IExtensionAdapter))]
[Export(typeof(InlineRenameListenerFactory))]
[ContentType(VimConstants.ContentType)]
[TextViewRole(PredefinedTextViewRoles.Editable)]
internal sealed class InlineRenameListenerFactory : VimExtensionAdapter, IVimBufferCreationListener
{
private readonly IVimApplicationSettings _vimApplicationSettings;

private IInlineRenameUtil _inlineRenameUtil;
private bool _inRename;
private List<IVimBuffer> _vimBufferList = new List<IVimBuffer>();

// Undo-redo is expected when the inline rename window is active.
Expand All @@ -27,7 +27,7 @@ internal sealed class InlineRenameListenerFactory : VimExtensionAdapter, IVimBuf

internal IInlineRenameUtil RenameUtil
{
//get { return _inlineRenameUtil; }
get { return _inlineRenameUtil; }
set
{
if (_inlineRenameUtil != null)
Expand All @@ -50,6 +50,8 @@ internal IInlineRenameUtil RenameUtil
/// </summary>
internal bool IsActive => _inlineRenameUtil != null && _inlineRenameUtil.IsRenameActive;

internal bool InRename { get; private set; }

[ImportingConstructor]
internal InlineRenameListenerFactory(
IVimApplicationSettings vimApplicationSettings)
Expand All @@ -64,9 +66,9 @@ internal IInlineRenameUtil RenameUtil

private void OnIsRenameActiveChanged(object sender, EventArgs e)
{
if (_inRename && !_inlineRenameUtil.IsRenameActive)
if (InRename && !_inlineRenameUtil.IsRenameActive)
{
_inRename = false;
InRename = false;
foreach (var vimBuffer in _vimBufferList)
{
vimBuffer.SwitchedMode -= OnModeChange;
Expand All @@ -76,9 +78,9 @@ private void OnIsRenameActiveChanged(object sender, EventArgs e)
}
}
}
else if (!_inRename && _inlineRenameUtil.IsRenameActive)
else if (!InRename && _inlineRenameUtil.IsRenameActive)
{
_inRename = true;
InRename = true;
foreach (var vimBuffer in _vimBufferList)
{
// Respect the user's edit monitoring setting.
Expand All @@ -93,7 +95,7 @@ private void OnIsRenameActiveChanged(object sender, EventArgs e)

private void OnModeChange(object sender, SwitchModeEventArgs args)
{
if (_inRename && _inlineRenameUtil.IsRenameActive && args.ModeArgument.IsCancelOperation)
if (InRename && _inlineRenameUtil.IsRenameActive && args.ModeArgument.IsCancelOperation)
{
_inlineRenameUtil.Cancel();
}
Expand Down
16 changes: 10 additions & 6 deletions Src/VimMac/VimKeyProcessor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using Microsoft.VisualStudio.Text.Formatting;
using MonoDevelop.Ide;
using Vim.Mac;
using Vim.UI.Cocoa.Implementation.InlineRename;

namespace Vim.UI.Cocoa
{
Expand All @@ -25,6 +26,7 @@ internal sealed class VimKeyProcessor : KeyProcessor
private IVimBuffer VimBuffer { get; }
private readonly ICompletionBroker _completionBroker;
private readonly ISignatureHelpBroker _signatureHelpBroker;
private readonly InlineRenameListenerFactory _inlineRenameListenerFactory;

public ITextBuffer TextBuffer
{
Expand All @@ -42,16 +44,15 @@ public ITextView TextView
IVimBuffer vimBuffer,
IKeyUtil keyUtil,
ICompletionBroker completionBroker,
ISignatureHelpBroker signatureHelpBroker)

ISignatureHelpBroker signatureHelpBroker,
InlineRenameListenerFactory inlineRenameListenerFactory)

{
VimBuffer = vimBuffer;
_keyUtil = keyUtil;
_completionBroker = completionBroker;
_signatureHelpBroker = signatureHelpBroker;
// TODO: We need to set the caret only after the text view has fully loaded
// so that we can measure the text width
CaretUtil.SetCaret(VimBuffer);
_inlineRenameListenerFactory = inlineRenameListenerFactory;
}

/// <summary>
Expand Down Expand Up @@ -111,6 +112,10 @@ public override void KeyDown(KeyEventArgs e)
{
handled = false;
}
else if (_inlineRenameListenerFactory.InRename)
{
handled = false;
}
else
{
var oldMode = VimBuffer.Mode.ModeKind;
Expand Down Expand Up @@ -145,7 +150,6 @@ public override void KeyDown(KeyEventArgs e)
}
IdeApp.Workbench.StatusBar.ShowMessage(text);
e.Handled = handled;
CaretUtil.SetCaret(VimBuffer);
}
}
}

0 comments on commit d0e31f2

Please sign in to comment.