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