VS for Mac扩展 - ActiveWindow中的空编辑器

问题描述 投票:0回答:1

我正尝试着为Visual Studio for Mac开发一个扩展。我正在使用 这个 教程。一切都很顺利,直到我尝试运行我的扩展。在我的情况下,编辑子菜单中的 "插入日期 "被禁用。在调试的时候,我注意到IdeApp.Workbench.ActiveDocument.Editor是空的,尽管我有一个打开的文档。下面是我的代码

using System;
using MonoDevelop.Components.Commands;
using MonoDevelop.Ide;

namespace ExampleIDEExtension
{
    public class InsertDateHandler : CommandHandler
    {
        protected override void Run()
        {
            var editor = IdeApp.Workbench.ActiveDocument.Editor;
            var currentTime = DateTime.Now.ToString();
            editor.InsertAtCaret(currentTime);
        }

        protected override void Update(CommandInfo info)
        {
            info.Enabled = IdeApp.Workbench.ActiveDocument.Editor != null;
        }
    }
}

我不知道为什么尽管有一个打开的文档,但编辑器是空的。

c# monodevelop visual-studio-mac
1个回答
1
投票

编辑器是空的,因为Monodevelop使用的是Microsoft.VisualStudio.Text.Editor,并且在下面的链接中提到该API已经过时了。

https:/github.commonomonodevelopblob50fbe0a7e65c5439e3313c6b50e7ef927f5f1fe9mainsrccoreMonoDevelop.IdeMonoDevelop.Ide.EditorTextEditor.cs。

无论如何,为了回答你的问题,我必须这样做才能实现插入日期处理程序的演示插件。

    protected override void Run()
    {
        var textBuffer = IdeApp.Workbench.ActiveDocument.GetContent<ITextBuffer>();
        var date = DateTime.Now.ToString();
        var textView = IdeApp.Workbench.ActiveDocument.GetContent<ITextView>();
        var caretPosition = textView.Caret.Position;
        textBuffer.Insert(caretPosition.BufferPosition.Position,date);
    }

    protected override void Update(CommandInfo info)
    {
        var textBuffer = IdeApp.Workbench.ActiveDocument.GetContent<ITextBuffer>();
        if (textBuffer != null && textBuffer.AsTextContainer() is SourceTextContainer container)
        {
            var document = container.GetTextBuffer();
            if (document != null)
            {
                info.Enabled = true;
            }
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.