📄 jedittextarea.java
字号:
newCaret = getLineStartOffset(line); } else newCaret = caret + 1; if(select) extendSelection(caret,newCaret); else if(!multi) selectNone(); moveCaretPosition(newCaret); } /** * Movse the caret to the next line. * @since jEdit 2.7pre2 */ public void goToNextLine(boolean select) { int caret = getCaretPosition(); int line = getCaretLine(); int magic = getMagicCaretPosition(); int nextLine = buffer.getNextVisibleLine(line); if(nextLine == -1) { getToolkit().beep(); return; } int newCaret = getLineStartOffset(nextLine) + xToOffset(nextLine,magic + 1); if(select) extendSelection(caret,newCaret); else if(!multi) selectNone(); moveCaretPosition(newCaret); setMagicCaretPosition(magic); } /** * Moves the caret to the next marker. * @since jEdit 2.7pre2 */ public void goToNextMarker(boolean select) { Vector markers = buffer.getMarkers(); Marker marker = null; for(int i = 0; i < markers.size(); i++) { Marker _marker = (Marker)markers.elementAt(i); if(_marker.getPosition() > caret) { marker = _marker; break; } } if(marker == null) getToolkit().beep(); else { if(select) extendSelection(caret,marker.getPosition()); else if(!multi) selectNone(); moveCaretPosition(marker.getPosition()); } } /** * Moves the caret to the next screenful. * @since jEdit 2.7pre2. */ public void goToNextPage(boolean select) { int lineCount = buffer.getVirtualLineCount(); int magic = getMagicCaretPosition(); if(firstLine + visibleLines * 2 >= lineCount - 1) setFirstLine(lineCount - visibleLines); else setFirstLine(firstLine + visibleLines); int newLine = buffer.virtualToPhysical(Math.min(lineCount - 1, buffer.physicalToVirtual(caretLine) + visibleLines)); int newCaret = getLineStartOffset(newLine) + xToOffset(newLine,magic + 1); if(select) extendSelection(caret,newCaret); else if(!multi) selectNone(); moveCaretPosition(newCaret); setMagicCaretPosition(magic); } /** * 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(!buffer.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); } /** * Moves the caret to the start of the next word. * @since jEdit 2.7pre2 */ public void goToNextWord(boolean select) { int lineStart = getLineStartOffset(caretLine); int newCaret = caret - lineStart; String lineText = getLineText(caretLine); if(newCaret == lineText.length()) { int nextLine = buffer.getNextVisibleLine(caretLine); if(nextLine == -1) { getToolkit().beep(); return; } newCaret = getLineStartOffset(nextLine); } else { String noWordSep = (String)buffer.getProperty("noWordSep"); newCaret = TextUtilities.findWordEnd(lineText,newCaret + 1,noWordSep) + lineStart; } if(select) extendSelection(caret,newCaret); else if(!multi) selectNone(); moveCaretPosition(newCaret); } /** * 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); } } /** * Moves the caret to the previous character. * @since jEdit 2.7pre2. */ public void goToPrevCharacter(boolean select) { if(!select && selection.size() != 0) { Selection s = getSelectionAtOffset(caret); if(s != null) { if(multi) { if(caret != s.start) { moveCaretPosition(s.start); return; } } else { setCaretPosition(s.start); return; } } } int newCaret; if(caret == getLineStartOffset(caretLine)) { int line = buffer.getPrevVisibleLine(caretLine); if(line == -1) { getToolkit().beep(); return; } newCaret = getLineEndOffset(line) - 1; } else newCaret = caret - 1; if(select) extendSelection(caret,newCaret); else if(!multi) selectNone(); moveCaretPosition(newCaret); } /** * Moves the caret to the previous line. * @since jEdit 2.7pre2 */ public void goToPrevLine(boolean select) { int magic = getMagicCaretPosition(); int prevLine = buffer.getPrevVisibleLine(caretLine); if(prevLine == -1) { getToolkit().beep(); return; } int newCaret = getLineStartOffset(prevLine) + xToOffset(prevLine,magic + 1); if(select) extendSelection(caret,newCaret); else if(!multi) selectNone(); moveCaretPosition(newCaret); setMagicCaretPosition(magic); } /** * Moves the caret to the previous marker. * @since jEdit 2.7pre2 */ public void goToPrevMarker(boolean select) { Vector markers = buffer.getMarkers(); Marker marker = null; for(int i = markers.size() - 1; i >= 0; i--) { Marker _marker = (Marker)markers.elementAt(i); if(_marker.getPosition() < caret) { marker = _marker; break; } } if(marker == null) getToolkit().beep(); else { if(select) extendSelection(caret,marker.getPosition()); else if(!multi) selectNone(); moveCaretPosition(marker.getPosition()); } } /** * Moves the caret to the previous screenful. * @since jEdit 2.7pre2 */ public void goToPrevPage(boolean select) { if(firstLine < visibleLines) setFirstLine(0); else setFirstLine(firstLine - visibleLines); int magic = getMagicCaretPosition(); int newLine = buffer.virtualToPhysical(Math.max(0, buffer.physicalToVirtual(caretLine) - visibleLines)); int newCaret = getLineStartOffset(newLine) + xToOffset(newLine,magic + 1); if(select) extendSelection(caret,newCaret); else if(!multi) selectNone(); moveCaretPosition(newCaret); setMagicCaretPosition(magic); } /** * Moves the caret to the start of the previous paragraph. * @since jEdit 2.7pre2 */ public void goToPrevParagraph(boolean select) { int lineNo = caretLine; int newCaret = 0; boolean foundBlank = false;loop: for(int i = lineNo - 1; i >= 0; i--) { if(!buffer.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 = getLineEndOffset(i) - 1; break loop; } else continue loop; } } foundBlank = true; } if(select) extendSelection(caret,newCaret); else if(!multi) selectNone(); moveCaretPosition(newCaret); } /** * Moves the caret to the start of the previous word. * @since jEdit 2.7pre2 */ public void goToPrevWord(boolean select) { int lineStart = getLineStartOffset(caretLine); int newCaret = caret - lineStart; String lineText = getLineText(caretLine); if(newCaret == 0) { if(lineStart == 0) { view.getToolkit().beep(); return; } else { int prevLine = buffer.getPrevVisibleLine(caretLine); if(prevLine == -1) { getToolkit().beep(); return; } newCaret = getLineEndOffset(prevLine) - 1; } } else { String noWordSep = (String)buffer.getProperty("noWordSep"); newCaret = TextUtilities.findWordStart(lineText,newCaret - 1,noWordSep) + lineStart; } if(select) extendSelection(caret,newCaret); else if(!multi) selectNone(); moveCaretPosition(newCaret); } /** * On subsequent invocations, first moves the caret to the first * non-whitespace character of the line, then the beginning of the * line, then to the first visible line. * @since jEdit 2.7pre2 */ public void smartHome(boolean select) { if(!jEdit.getBooleanProperty("view.homeEnd")) goToStartOfLine(select); else { switch(view.getInputHandler().getLastActionCount()) { case 1: goToStartOfWhiteSpace(select); break; case 2: goToStartOfLine(select); break; default: //case 3: goToFirstVisibleLine(select); break; } } } /** * On subsequent invocations, first moves the caret to the last * non-whitespace character of the line, then the end of the * line, then to the last visible line. * @since jEdit 2.7pre2 */ public void smartEnd(boolean select) { if(!jEdit.getBooleanProperty("view.homeEnd")) goToEndOfLine(select); else { switch(view.getInputHandler().getLastActionCount()) { case 1: goToEndOfWhiteSpace(select); break; case 2: goToEndOfLine(select); break; default: //case 3: goToLastVisibleLine(select); break; } } } /** * Moves the caret to the beginning of the current line. * @since jEdit 2.7pre2 */ public void goToStartOfLine(boolean select) { // do this here, for weird reasons Macros.Recorder recorder = view.getMacroRecorder(); if(recorder != null) recorder.record("textArea.goToStartOfLine(" + select + ");"); int newCaret = getLineStartOffset(getCaretLine()); if(select) extendSelection(caret,newCaret); else if(!multi) selectNone(); moveCaretPosition(newCaret); } /** * Moves the caret to the end of the current line. * @since jEdit 2.7pre2 */ public void goToEndOfLine(boolean select) { // do this here, for weird reasons Macros.Recorder recorder = view.getMacroRecorder(); if(recorder != null) recorder.record("textArea.goToEndOfLine(" + select + ");"); int newCaret = getLineEndOffset(getCaretLine()) - 1; if(select) extendSelection(caret,newCaret); else if(!multi) selectNone(); moveCaretPosition(newCaret); // so that end followed by up arrow will always put caret at // the end of the previous line, for example setMagicCaretPosition(Integer.MAX_VALUE); } /** * Moves the caret to the first non-whitespace character of the current * line. * @since jEdit 2.7pre2 */ public void goToStartOfWhiteSpace(boolean select) { // do this here, for weird reasons Macros.Recorder recorder = view.getMacroRecorder(); if(recorder != null) recorder.record("textArea.goToStartOfWhiteSpace(" + select + ");"); int firstIndent = MiscUtilities.getLeadingWhiteSpace(getLineText(caretLine)); int firstOfLine = getLineStartOffset(caretLine); firstIndent = firstOfLine + firstIndent; if(firstIndent == getLineEndOffset(caretLine) - 1) firstIndent = firstOfLine; if(select) extendSelection(caret,firstIndent); else if(!multi) selectNone(); moveCaretPosition(firstIndent); } /** * Moves the caret to the last non-whitespace character of the current * line. * @since jEdit 2.7pre2 */ public void goToEndOfWhiteSpace(boolean select) { // do this here, for weird reasons Macros.Recorder recorder = view.getMacroRecorder(); if(recorder != null) recorder.record("textArea.goToEndOfWhiteSpace(" + select + ");"); int lastIndent = MiscUtilities.getTrailingWhiteSpace(getLineText(caretLine)); int lastOfLine = getLineEndOffset(caretLine) - 1; lastIndent = lastOfLine - lastIndent; if(lastIndent == getLineStartOffset(caretLine)) lastIndent = lastOfLine; if(select) extendSelection(caret,lastIndent); else if(!multi) selectNone(); moveCaretPosition(lastIndent); } /** * Moves the caret to the first visible line. * @since jEdit 2.7pre2 */ public void goToFirstVisibleLine(boolean select) { // do this here, for weird reasons Macros.Recorder recorder = view.getMacroRecorder(); if(recorder != null) recorder.record("textArea.goToFirstVisibleLine(" + select + ");"); int firstVisibleLine = (firstLine <= electricScroll) ? 0 : firstLine + electricScroll; if(firstVisibleLine >= getVirtualLineCount()) firstVisibleLine = getVirtualLineCount() - 1; firstVisibleLine = buffer.virtualToPhysical(firstVisibleLine); int firstVisible = getLineEndOffset(firstVisibleLine) - 1; if(select) extendSelection(caret,firstVisible); else if(!multi) selectNone(); moveCaretPosition(firs
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -