繁体   English   中英

Intellij插件开发,覆盖CaretImpl

[英]Intellij plugin development, overriding CaretImpl

我试图改变上一页和下一页的处理方式。

我已经成功扩展了EditorAction,并且可以更改其执行的跳转的大小。

这是为其运行的代码:

    @Override
    public void execute(Editor editor, DataContext dataContext) {
            boolean $isWithSelection = false;
            int     $divider         = 2;

            int lineHeight = editor.getLineHeight();
            Rectangle visibleArea = editor.getScrollingModel().getVisibleArea();

            int linesIncrement = (visibleArea.height / lineHeight) / $divider;

            editor.getScrollingModel().scrollVertically(visibleArea.y - visibleArea.y % lineHeight - linesIncrement * lineHeight);

            int lineShift = -linesIncrement;

            editor.getCaretModel().moveCaretRelatively(0, lineShift, $isWithSelection, editor.isColumnMode(), true);
    }

我将页面的大小除以2。

但是,我也想更改没有其他内容时,将插入记号放在页面上的工资。

Intellij会烦人地将插入符号放在第一行,第一个字符上,中断任何向下翻页的流程, 如果以后再向下翻页,则会返回到上一次的位置。

实际上,您应该能够进行向上翻页和向下翻页,并且始终返回同一行,同一列,同一字符。

向上翻页和向下翻页通常用于使较高的代码达到顶峰,但是Intellij使其成为真正的麻烦。 您一直向上翻页,并且总是被搞砸。

所以最后一行:

            editor.getCaretModel().moveCaretRelatively(0, lineShift, $isWithSelection, editor.isColumnMode(), true);

负责移动插入符,但是获得caretModel是我认为的单例,这就是移动插入符的神奇之处。

这种方法是巨大的,而且我不知道究竟将插入符号移动到第一个字符的真正原因,但是在到达那里之前,我没有任何线索:

我需要做什么才能能够在CaretImpl中重写moveCaretRelatively

我可以参加Caret for Editor的创建吗?

编辑


注意 如果向下翻页过多,也会将插入符号移动到第一行,但是,此后向上翻页似乎会记住您的插入符号位置。 但是向上翻页然后向下翻页却没有, 所以似乎出现了一个错误,因为按我希望的那样从下往上翻页确实可以工作

不可以,您不能参与CaretImpl的创建,也不能覆盖moveCaretRelatively()方法。

但是,您实际上并不需要它:无需调用该方法,而是可以计算希望插入标记移动的确切位置,然后调用CaretModel.moveToOffset()或CaretModel.moveToLogicalPosition()来将插入标记移动到那里。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM