簡體   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