📄 jedittextarea.java
字号:
} /** * Returns the `magic' caret position. This can be used to preserve * the column position when moving up and down lines. */ public final int getMagicCaretPosition() { return (magicCaret == -1 ? offsetToX(caretLine,caret - getLineStartOffset(caretLine)) : magicCaret); } /** * 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 */ public final void setMagicCaretPosition(int magicCaret) { this.magicCaret = magicCaret; } /** * Handles the insertion of the specified character. Performs * auto indent, expands abbreviations, does word wrap, etc. * @param ch The character * @see #setSelectedText(String) * @see #isOverwriteEnabled() * @since jEdit 2.7pre3 */ public void userInput(char ch) { if(!isEditable()) { getToolkit().beep(); return; } if(ch == ' ' && Abbrevs.getExpandOnInput() && Abbrevs.expandAbbrev(view,false)) return; else if(ch == '\t') { if(buffer.getBooleanProperty("indentOnTab") && selection.size() == 0 && buffer.indentLine(caretLine,true,false)) return; else if(buffer.getBooleanProperty("noTabs")) { int lineStart = getLineStartOffset(caretLine); String line = getText(lineStart,caret - lineStart); setSelectedText(createSoftTab(line,buffer.getTabSize())); } else setSelectedText("\t"); return; } else if(ch == '\n') { try { buffer.beginCompoundEdit(); setSelectedText("\n"); if(buffer.getBooleanProperty("indentOnEnter")) buffer.indentLine(caretLine,true,false); } finally { buffer.endCompoundEdit(); } return; } else { String str = String.valueOf(ch); if(selection.size() != 0) { setSelectedText(str); return; } try { if(ch == ' ') { if(doWordWrap(caretLine,true)) return; } else doWordWrap(caretLine,false); } catch(BadLocationException bl) { Log.log(Log.ERROR,this,bl); } try { buffer.beginCompoundEdit(); // Don't overstrike if we're on the end of // the line if(overwrite) { int caretLineEnd = getLineEndOffset(caretLine); if(caretLineEnd - caret > 1) buffer.remove(caret,1); } buffer.insertString(caret,str,null); } catch(BadLocationException bl) { Log.log(Log.ERROR,this,bl); } finally { buffer.endCompoundEdit(); } } // check if the user entered a bracket String indentOpenBrackets = (String)buffer .getProperty("indentOpenBrackets"); String indentCloseBrackets = (String)buffer .getProperty("indentCloseBrackets"); if((indentCloseBrackets != null && indentCloseBrackets.indexOf(ch) != -1) || (indentOpenBrackets != null && indentOpenBrackets.indexOf(ch) != -1)) { buffer.indentLine(caretLine,false,true); } } /** * Returns true if overwrite mode is enabled, false otherwise. */ public final boolean isOverwriteEnabled() { return overwrite; } /** * Sets overwrite mode. */ public final void setOverwriteEnabled(boolean overwrite) { this.overwrite = overwrite; invalidateLine(caretLine); if(view.getStatus() != null) view.getStatus().updateMiscStatus(); } /** * Toggles overwrite mode. * @since jEdit 2.7pre2 */ public final void toggleOverwriteEnabled() { overwrite = !overwrite; invalidateLine(caretLine); if(view.getStatus() != null) view.getStatus().updateMiscStatus(); } /** * Returns the position of the highlighted bracket (the bracket * matching the one before the caret) */ public final int getBracketPosition() { return bracketPosition; } /** * Returns the line of the highlighted bracket (the bracket * matching the one before the caret) */ public final int getBracketLine() { return bracketLine; } /** * Adds a caret change listener to this text area. * @param listener The listener */ public final void addCaretListener(CaretListener listener) { listenerList.add(CaretListener.class,listener); } /** * Removes a caret change listener from this text area. * @param listener The listener */ public final void removeCaretListener(CaretListener listener) { listenerList.remove(CaretListener.class,listener); } /** * Adds a scroll listener to this text area. * @param listener The listener * @since jEdit 3.2pre2 */ public final void addScrollListener(ScrollListener listener) { listenerList.add(ScrollListener.class,listener); } /** * Removes a scroll listener from this text area. * @param listener The listener * @since jEdit 3.2pre2 */ public final void removeScrollListener(ScrollListener listener) { listenerList.remove(ScrollListener.class,listener); } /** * Deletes the character before the caret, or the selection, if one is * active. * @since jEdit 2.7pre2 */ public void backspace() { if(!buffer.isEditable()) { getToolkit().beep(); return; } if(selection.size() != 0) setSelectedText(""); else { if(caret == 0) { getToolkit().beep(); return; } try { buffer.remove(caret - 1,1); } catch(BadLocationException bl) { Log.log(Log.ERROR,this,bl); } } } /** * Deletes the word before the caret. * @since jEdit 2.7pre2 */ public void backspaceWord() { if(!buffer.isEditable()) { getToolkit().beep(); return; } if(selection.size() != 0) { setSelectedText(""); return; } int lineStart = getLineStartOffset(caretLine); int _caret = caret - lineStart; String lineText = getLineText(caretLine); if(_caret == 0) { if(lineStart == 0) { getToolkit().beep(); return; } _caret--; } else { String noWordSep = (String)buffer.getProperty("noWordSep"); _caret = TextUtilities.findWordStart(lineText,_caret-1,noWordSep); } try { buffer.remove(_caret + lineStart, caret - (_caret + lineStart)); } catch(BadLocationException bl) { Log.log(Log.ERROR,this,bl); } } /** * Deletes the character after the caret. * @since jEdit 2.7pre2 */ public void delete() { if(!buffer.isEditable()) { getToolkit().beep(); return; } if(selection.size() != 0) setSelectedText(null); else { if(caret == buffer.getLength()) { getToolkit().beep(); return; } try { buffer.remove(caret,1); } catch(BadLocationException bl) { Log.log(Log.ERROR,this,bl); } } } /** * Deletes from the caret to the end of the current line. * @since jEdit 2.7pre2 */ public void deleteToEndOfLine() { if(!buffer.isEditable()) { getToolkit().beep(); return; } try { buffer.remove(caret,getLineEndOffset(caretLine) - caret - 1); } catch(BadLocationException bl) { Log.log(Log.ERROR,this,bl); } } /** * Deletes the line containing the caret. * @since jEdit 2.7pre2 */ public void deleteLine() { if(!buffer.isEditable()) { getToolkit().beep(); return; } Element map = buffer.getDefaultRootElement(); Element lineElement = map.getElement(caretLine); try { int start = lineElement.getStartOffset(); int end = lineElement.getEndOffset(); if(end > buffer.getLength()) { if(start != 0) start--; end--; } buffer.remove(start,end - start); } catch(BadLocationException bl) { Log.log(Log.ERROR,this,bl); } } /** * Deletes the paragraph containing the caret. * @since jEdit 2.7pre2 */ public void deleteParagraph() { if(!buffer.isEditable()) { getToolkit().beep(); return; } int start = 0, end = buffer.getLength();loop: for(int i = caretLine - 1; i >= 0; i--) { //if(!buffer.isLineVisible(i)) // continue loop; getLineText(i,lineSegment); for(int j = 0; j < lineSegment.count; j++) { switch(lineSegment.array[lineSegment.offset + j]) { case ' ': case '\t': break; default: continue loop; } } start = getLineStartOffset(i); break loop; }loop: for(int i = caretLine + 1; i < getLineCount(); i++) { //if(!buffer.isLineVisible(i)) // continue loop; getLineText(i,lineSegment); for(int j = 0; j < lineSegment.count; j++) { switch(lineSegment.array[lineSegment.offset + j]) { case ' ': case '\t': break; default: continue loop; } } end = getLineEndOffset(i) - 1; break loop; } try { buffer.remove(start,end - start); } catch(BadLocationException bl) { Log.log(Log.ERROR,this,bl); } } /** * Deletes from the caret to the beginning of the current line. * @since jEdit 2.7pre2 */ public void deleteToStartOfLine() { if(!buffer.isEditable()) { getToolkit().beep(); return; } Element map = buffer.getDefaultRootElement(); Element lineElement = map.getElement(caretLine); try { buffer.remove(lineElement.getStartOffset(), caret - lineElement.getStartOffset()); } catch(BadLocationException bl) { Log.log(Log.ERROR,this,bl); } } /** * Deletes the word in front of the caret. * @since jEdit 2.7pre2 */ public void deleteWord() { if(!buffer.isEditable()) { getToolkit().beep(); return; } if(selection.size() != 0) { setSelectedText(""); return; } int lineStart = getLineStartOffset(caretLine); int _caret = caret - lineStart; String lineText = getLineText(caretLine); if(_caret == lineText.length()) { if(lineStart + _caret == buffer.getLength()) { getToolkit().beep(); return; } _caret++; } else { String noWordSep = (String)buffer.getProperty("noWordSep"); _caret = TextUtilities.findWordEnd(lineText, _caret+1,noWordSep); } try { buffer.remove(caret,(_caret + lineStart) - caret); } catch(BadLocationException bl) { Log.log(Log.ERROR,this,bl); } } /** * Moves the caret to the next closing bracket. * @since jEdit 2.7pre2. */ public void goToNextBracket(boolean select) { String text = getText(caret,buffer.getLength() - caret - 1); int newCaret = -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); } } /** * Moves the caret to the next character. * @since jEdit 2.7pre2. */ public void goToNextCharacter(boolean select) { if(!select && selection.size() != 0) { Selection s = getSelectionAtOffset(caret); if(s != null) { if(multi) { if(caret != s.end) { moveCaretPosition(s.end); return; } } else { setCaretPosition(s.end); return; } } } if(caret == buffer.getLength()) getToolkit().beep(); int newCaret; if(caret == getLineEndOffset(caretLine) - 1) { int line = buffer.getNextVisibleLine(caretLine); if(line == -1) { getToolkit().beep(); return; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -