[英]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.