📄 jedittextarea.java
字号:
* @since jEdit 4.2pre1 */ public void moveCaretPosition(int newCaret, int scrollMode) { if(newCaret < 0 || newCaret > buffer.getLength()) { throw new IllegalArgumentException("caret out of bounds: " + newCaret); } if(match != null) { if(caretLine < match.startLine) invalidateLineRange(caretLine,match.endLine); else invalidateLineRange(match.startLine,caretLine); match = null; } if(caret == newCaret) { if(scrollMode == NORMAL_SCROLL) finishCaretUpdate(false,false); else if(scrollMode == ELECTRIC_SCROLL) finishCaretUpdate(true,false); } else { int newCaretLine = getLineOfOffset(newCaret); magicCaret = -1; if(caretLine == newCaretLine) { if(caretScreenLine != -1) invalidateScreenLineRange(caretScreenLine,caretScreenLine); } else { int newCaretScreenLine = chunkCache.getScreenLineOfOffset(newCaretLine, newCaret - buffer.getLineStartOffset(newCaretLine)); if(caretScreenLine == -1) invalidateScreenLineRange(newCaretScreenLine,newCaretScreenLine); else invalidateScreenLineRange(caretScreenLine,newCaretScreenLine); caretScreenLine = newCaretScreenLine; } caret = newCaret; caretLine = newCaretLine; if(scrollMode == NORMAL_SCROLL) finishCaretUpdate(false,true); else if(scrollMode == ELECTRIC_SCROLL) finishCaretUpdate(true,true); } } //}}} //{{{ getCaretPosition() method /** * Returns a zero-based index of the caret position. */ public int getCaretPosition() { return caret; } //}}} //{{{ getCaretLine() method /** * Returns the line number containing the caret. */ public int getCaretLine() { return caretLine; } //}}} //{{{ getMagicCaretPosition() method /** * Returns an internal position used to keep the caret in one * column while moving around lines of varying lengths. * @since jEdit 4.2pre1 */ public int getMagicCaretPosition() { if(magicCaret == -1) { magicCaret = chunkCache.subregionOffsetToX( caretLine,caret - getLineStartOffset(caretLine)); } return magicCaret; } //}}} //{{{ setMagicCaretPosition() method /** * Sets the `magic' caret position. This can be used to preserve * the column position when moving up and down lines. * @param magicCaret The magic caret position * @since jEdit 4.2pre1 */ public void setMagicCaretPosition(int magicCaret) { this.magicCaret = magicCaret; } //}}} //{{{ addCaretListener() method /** * Adds a caret change listener to this text area. * @param listener The listener */ public final void addCaretListener(CaretListener listener) { listenerList.add(CaretListener.class,listener); } //}}} //{{{ removeCaretListener() method /** * Removes a caret change listener from this text area. * @param listener The listener */ public final void removeCaretListener(CaretListener listener) { listenerList.remove(CaretListener.class,listener); } //}}} //{{{ goToNextBracket() method /** * Moves the caret to the next closing bracket. * @since jEdit 2.7pre2. */ public void goToNextBracket(boolean select) { int newCaret = -1; if(caret != buffer.getLength()) { String text = getText(caret,buffer.getLength() - caret - 1);loop: for(int i = 0; i < text.length(); i++) { switch(text.charAt(i)) { case ')': case ']': case '}': newCaret = caret + i + 1; break loop; } } } if(newCaret == -1) getToolkit().beep(); else { if(select) extendSelection(caret,newCaret); else if(!multi) selectNone(); moveCaretPosition(newCaret); } } //}}} //{{{ goToNextCharacter() method /** * Moves the caret to the next character. * @since jEdit 2.7pre2. */ public void goToNextCharacter(boolean select) { Selection s = getSelectionAtOffset(caret); if(!select && s instanceof Selection.Range) { if(multi) { if(caret != s.end) { moveCaretPosition(s.end); return; } } else { setCaretPosition(s.end); return; } } int extraStartVirt, extraEndVirt; if(s instanceof Selection.Rect) { extraStartVirt = ((Selection.Rect)s).extraStartVirt; extraEndVirt = ((Selection.Rect)s).extraEndVirt; } else { extraStartVirt = 0; extraEndVirt = 0; } int newCaret = caret; if(caret == buffer.getLength()) { if(select && (rectangularSelectionMode || s instanceof Selection.Rect)) { if(s != null && caret == s.start) extraStartVirt++; else extraEndVirt++; } else { getToolkit().beep(); return; } } else if(caret == getLineEndOffset(caretLine) - 1) { if(select && (rectangularSelectionMode || s instanceof Selection.Rect)) { if(s != null && caret == s.start) extraStartVirt++; else extraEndVirt++; } else { int line = displayManager.getNextVisibleLine(caretLine); if(line == -1) { getToolkit().beep(); return; } else newCaret = getLineStartOffset(line); } } else newCaret = caret + 1; if(select) extendSelection(caret,newCaret,extraStartVirt,extraEndVirt); else if(!multi) selectNone(); moveCaretPosition(newCaret); } //}}} //{{{ goToNextLine() method /** * Move the caret to the next line. * @since jEdit 2.7pre2 */ public void goToNextLine(boolean select) { Selection s = getSelectionAtOffset(caret); boolean rectSelect = (s == null ? rectangularSelectionMode : s instanceof Selection.Rect); int magic = getMagicCaretPosition(); int newCaret = chunkCache.getBelowPosition(caretLine, caret - buffer.getLineStartOffset(caretLine),magic + 1, rectSelect && select); if(newCaret == -1) { int end = getLineEndOffset(caretLine) - 1; if(caret == end) { getToolkit().beep(); return; } else newCaret = end; } if(select) { RectParams params = getRectParams(caret,newCaret); int extraStartVirt; int extraEndVirt; if(params == null) { extraStartVirt = 0; extraEndVirt = 0; } else { extraStartVirt = params.extraStartVirt; extraEndVirt = params.extraEndVirt; newCaret = params.newCaret; } extendSelection(caret,newCaret,extraStartVirt,extraEndVirt); } else if(!multi) selectNone(); moveCaretPosition(newCaret); setMagicCaretPosition(magic); } //}}} //{{{ goToNextMarker() method /** * Moves the caret to the next marker. * @since jEdit 2.7pre2 */ public void goToNextMarker(boolean select) { Vector markers = buffer.getMarkers(); if(markers.size() == 0) { getToolkit().beep(); return; } Marker marker = null; for(int i = 0; i < markers.size(); i++) { Marker _marker = (Marker)markers.get(i); if(_marker.getPosition() > caret) { marker = _marker; break; } } if(marker == null) marker = (Marker)markers.get(0); if(select) extendSelection(caret,marker.getPosition()); else if(!multi) selectNone(); moveCaretPosition(marker.getPosition()); } //}}} //{{{ goToNextPage() method /** * Moves the caret to the next screenful. * @since jEdit 2.7pre2. */ public void goToNextPage(boolean select) { scrollToCaret(false); int magic = getMagicCaretPosition(); if(caretLine < displayManager.getFirstVisibleLine()) { caretLine = displayManager.getNextVisibleLine( caretLine); } int newCaret; if(getFirstLine() + getVisibleLines() >= displayManager .getScrollLineCount()) { int lastVisibleLine = displayManager .getLastVisibleLine(); newCaret = getLineEndOffset(lastVisibleLine) - 1; } else { int caretScreenLine = getScreenLineOfOffset(caret); scrollDownPage(); newCaret = xToScreenLineOffset(caretScreenLine, magic,true); } if(select) extendSelection(caret,newCaret); else if(!multi) selectNone(); moveCaretPosition(newCaret,false); setMagicCaretPosition(magic); } //}}} //{{{ goToNextParagraph() method /** * Moves the caret to the start of the next paragraph. * @since jEdit 2.7pre2 */ public void goToNextParagraph(boolean select) { int lineNo = getCaretLine(); int newCaret = getBufferLength(); boolean foundBlank = false;loop: for(int i = lineNo + 1; i < getLineCount(); i++) { if(!displayManager.isLineVisible(i)) continue; getLineText(i,lineSegment); for(int j = 0; j < lineSegment.count; j++) { switch(lineSegment.array[lineSegment.offset + j]) { case ' ': case '\t': break; default: if(foundBlank) { newCaret = getLineStartOffset(i); break loop; } else continue loop; } } foundBlank = true; } if(select) extendSelection(caret,newCaret); else if(!multi) selectNone(); moveCaretPosition(newCaret); } //}}} //{{{ goToNextWord() method /** * Moves the caret to the start of the next word. * Note that if the "view.eatWhitespace" boolean propery is false, * this method moves the caret to the end of the current word instead. * @since jEdit 2.7pre2 */ public void goToNextWord(boolean select) { goToNextWord(select,false); } //}}} //{{{ goToNextWord() method /** * Moves the caret to the start of the next word. * @since jEdit 4.1pre5 */ public void goToNextWord(boolean select, boolean eatWhitespace) { int lineStart = getLineStartOffset(caretLine); int newCaret = caret - lineStart; String lineText = getLineText(caretLine); if(newCaret == lineText.length()) { int nextLine = displayManager.getNextVisibleLine(caretLine); if(nextLine == -1) { getToolkit().beep(); return; } newCaret = getLineStartOffset(nextLine); } else { String noWordSep = buffer.getStringProperty("noWordSep"); newCaret = TextUtilities.findWordEnd(lineText, newCaret + 1,noWordSep,true,eatWhitespace); newCaret += lineStart; } if(select) extendSelection(caret,newCaret); else if(!multi) selectNone(); moveCaretPosition(newCaret); } //}}} //{{{ goToPrevBracket() method /** * Moves the caret to the previous bracket. * @since jEdit 2.7pre2 */ public void goToPrevBracket(boolean select) { String text = getText(0,caret); int newCaret = -1;loop: for(int i = getCaretPosition() - 1; i >= 0; i--) { switch(text.charAt(i)) { case '(': case '[': case '{': newCaret = i; break loop; } } if(newCaret == -1) getToolkit().beep(); else { if(select) extendSelection(caret,newCaret); else if(!multi) selectNone(); moveCaretPosition(newCaret); } } //}}} //{{{ goToPrevCharacter() method /** * Moves the caret to the previous character. * @since jEdit 2.7pre2. */ public void goToPrevCharacter(boolean select) { Selection s = getSelectionAtOffset(caret); if(!select && s instanceof Selection.Range) { if(multi) { if(caret != s.start) { moveCaretPosition(s.start); return; } } else { setCaretPosition(s.start); return; } } int extraStartVirt = 0; int extraEndVirt = 0; int newCaret = caret; if(select && caret == getLineEndOffset(caretLine) - 1) { if(s instanceof Selection.Rect) { extraStartVirt = ((Selection.Rect)s).extraStartVirt; extraEndVirt = ((Selection.Rect)s).extraEndVirt; if(caret == s.start) { if(extraStartVirt == 0) newCaret = caret - 1; else extraStartVirt--; } else { if(extraEndVirt == 0) newCaret = caret - 1; else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -