1 /*
2  * DocDisplay.java
3  *
4  * Copyright (C) 2021 by RStudio, PBC
5  *
6  * Unless you have received this program directly from RStudio pursuant
7  * to the terms of a commercial license agreement with RStudio, then
8  * this program is licensed to you under the terms of version 3 of the
9  * GNU Affero General Public License. This program is distributed WITHOUT
10  * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,
11  * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the
12  * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.
13  *
14  */
15 package org.rstudio.studio.client.workbench.views.source.editors.text;
16 
17 import java.util.function.BiPredicate;
18 import org.rstudio.core.client.Rectangle;
19 import org.rstudio.core.client.command.KeySequence;
20 
21 import java.util.List;
22 
23 import org.rstudio.core.client.js.JsMap;
24 import org.rstudio.core.client.patch.TextChange;
25 import org.rstudio.studio.client.common.debugging.model.Breakpoint;
26 import org.rstudio.studio.client.common.filetypes.TextFileType;
27 import org.rstudio.studio.client.server.Void;
28 import org.rstudio.studio.client.workbench.model.ChangeTracker;
29 import org.rstudio.studio.client.workbench.views.console.shell.assist.CompletionManager;
30 import org.rstudio.studio.client.workbench.views.console.shell.editor.InputEditorDisplay;
31 import org.rstudio.studio.client.workbench.views.console.shell.editor.InputEditorPosition;
32 import org.rstudio.studio.client.workbench.views.console.shell.editor.InputEditorSelection;
33 import org.rstudio.studio.client.workbench.views.output.lint.model.AceAnnotation;
34 import org.rstudio.studio.client.workbench.views.output.lint.model.LintItem;
35 import org.rstudio.studio.client.workbench.views.source.editors.text.ace.AceCommandManager;
36 import org.rstudio.studio.client.workbench.views.source.editors.text.ace.AceFold;
37 import org.rstudio.studio.client.workbench.views.source.editors.text.ace.Anchor;
38 import org.rstudio.studio.client.workbench.views.source.editors.text.ace.LineWidget;
39 import org.rstudio.studio.client.workbench.views.source.editors.text.ace.Marker;
40 import org.rstudio.studio.client.workbench.views.source.editors.text.ace.Mode.InsertChunkInfo;
41 import org.rstudio.studio.client.workbench.views.source.editors.text.ace.Position;
42 import org.rstudio.studio.client.workbench.views.source.editors.text.ace.Range;
43 import org.rstudio.studio.client.workbench.views.source.editors.text.ace.Renderer.ScreenCoordinates;
44 import org.rstudio.studio.client.workbench.views.source.editors.text.ace.Selection;
45 import org.rstudio.studio.client.workbench.views.source.editors.text.ace.Token;
46 import org.rstudio.studio.client.workbench.views.source.editors.text.ace.TokenIterator;
47 import org.rstudio.studio.client.workbench.views.source.editors.text.ace.spelling.CharClassifier;
48 import org.rstudio.studio.client.workbench.views.source.editors.text.ace.spelling.TokenPredicate;
49 import org.rstudio.studio.client.workbench.views.source.editors.text.cpp.CppCompletionContext;
50 import org.rstudio.studio.client.workbench.views.source.editors.text.events.ActiveScopeChangedEvent;
51 import org.rstudio.studio.client.workbench.views.source.editors.text.events.BreakpointMoveEvent;
52 import org.rstudio.studio.client.workbench.views.source.editors.text.events.BreakpointSetEvent;
53 import org.rstudio.studio.client.workbench.views.source.editors.text.events.CommandClickEvent;
54 import org.rstudio.studio.client.workbench.views.source.editors.text.events.CursorChangedEvent;
55 import org.rstudio.studio.client.workbench.views.source.editors.text.events.EditorModeChangedEvent;
56 import org.rstudio.studio.client.workbench.views.source.editors.text.events.FindRequestedEvent;
57 import org.rstudio.studio.client.workbench.views.source.editors.text.events.HasDocumentChangedHandlers;
58 import org.rstudio.studio.client.workbench.views.source.editors.text.events.HasFoldChangeHandlers;
59 import org.rstudio.studio.client.workbench.views.source.editors.text.events.HasLineWidgetsChangedHandlers;
60 import org.rstudio.studio.client.workbench.views.source.editors.text.events.HasRenderFinishedHandlers;
61 import org.rstudio.studio.client.workbench.views.source.editors.text.events.PasteEvent;
62 import org.rstudio.studio.client.workbench.views.source.editors.text.events.ScopeTreeReadyEvent;
63 import org.rstudio.studio.client.workbench.views.source.editors.text.events.UndoRedoEvent;
64 import org.rstudio.studio.client.workbench.views.source.editors.text.rmd.ChunkDefinition;
65 import org.rstudio.studio.client.workbench.views.source.editors.text.spelling.SpellingDoc;
66 import org.rstudio.studio.client.workbench.views.source.events.CollabEditStartParams;
67 import org.rstudio.studio.client.workbench.views.source.events.SaveFileEvent;
68 
69 import com.google.gwt.core.client.JavaScriptObject;
70 import com.google.gwt.core.client.JsArray;
71 import com.google.gwt.core.client.JsArrayString;
72 import com.google.gwt.event.dom.client.BlurHandler;
73 import com.google.gwt.event.dom.client.FocusHandler;
74 import com.google.gwt.event.dom.client.HasContextMenuHandlers;
75 import com.google.gwt.event.dom.client.HasFocusHandlers;
76 import com.google.gwt.event.dom.client.HasKeyDownHandlers;
77 import com.google.gwt.event.logical.shared.AttachEvent;
78 import com.google.gwt.event.logical.shared.HasValueChangeHandlers;
79 import com.google.gwt.event.shared.HandlerRegistration;
80 import com.google.gwt.user.client.ui.IsWidget;
81 import com.google.gwt.user.client.ui.Widget;
82 
83 import org.rstudio.studio.client.workbench.views.source.events.ScrollYEvent;
84 import org.rstudio.studio.client.workbench.views.source.model.DirtyState;
85 import org.rstudio.studio.client.workbench.views.source.model.RnwCompletionContext;
86 import org.rstudio.studio.client.workbench.views.source.model.SourcePosition;
87 
88 public interface DocDisplay extends HasValueChangeHandlers<Void>,
89                                     HasFoldChangeHandlers,
90                                     HasLineWidgetsChangedHandlers,
91                                     IsWidget,
92                                     HasContextMenuHandlers,
93                                     HasFocusHandlers,
94                                     HasKeyDownHandlers,
95                                     HasRenderFinishedHandlers,
96                                     HasDocumentChangedHandlers,
97                                     InputEditorDisplay,
98                                     NavigableSourceEditor
99 {
100    public interface AnchoredSelection
101    {
getValue()102       String getValue();
getRange()103       Range getRange();
apply()104       void apply();
detach()105       void detach();
106    }
getFileType()107    TextFileType getFileType();
setFileType(TextFileType fileType)108    void setFileType(TextFileType fileType);
setFileType(TextFileType fileType, boolean suppressCompletion)109    void setFileType(TextFileType fileType, boolean suppressCompletion);
setFileType(TextFileType fileType, CompletionManager completionManager)110    void setFileType(TextFileType fileType, CompletionManager completionManager);
syncCompletionPrefs()111    void syncCompletionPrefs();
syncDiagnosticsPrefs()112    void syncDiagnosticsPrefs();
setRnwCompletionContext(RnwCompletionContext rnwContext)113    void setRnwCompletionContext(RnwCompletionContext rnwContext);
setCppCompletionContext(CppCompletionContext cppContext)114    void setCppCompletionContext(CppCompletionContext cppContext);
setRCompletionContext(CompletionContext rContext)115    void setRCompletionContext(CompletionContext rContext);
getCode()116    String getCode();
getLines()117    JsArrayString getLines();
getLines(int startRow, int endRow)118    JsArrayString getLines(int startRow, int endRow);
setCode(String code, boolean preserveCursorPosition)119    void setCode(String code, boolean preserveCursorPosition);
insertCode(String code, boolean blockMode)120    void insertCode(String code, boolean blockMode);
applyChanges(TextChange[] changes)121    void applyChanges(TextChange[] changes);
applyChanges(TextChange[] changes, boolean preserveCursorPosition)122    void applyChanges(TextChange[] changes, boolean preserveCursorPosition);
focus()123    void focus();
isFocused()124    boolean isFocused();
print()125    void print();
codeCompletion()126    void codeCompletion();
goToHelp()127    void goToHelp();
goToDefinition()128    void goToDefinition();
getSelectionValue()129    String getSelectionValue();
getCurrentLine()130    String getCurrentLine();
getCurrentLineUpToCursor()131    String getCurrentLineUpToCursor();
getNextLineIndent()132    String getNextLineIndent();
133    // This returns null for most file types, but for Sweave it returns "R" or
134    // "TeX". Use SweaveFileType constants to test for these values.
getLanguageMode(Position position)135    String getLanguageMode(Position position);
getModeId()136    String getModeId();
137 
inMultiSelectMode()138    boolean inMultiSelectMode();
exitMultiSelectMode()139    void exitMultiSelectMode();
140 
quickAddNext()141    void quickAddNext();
142 
yankBeforeCursor()143    void yankBeforeCursor();
yankAfterCursor()144    void yankAfterCursor();
pasteLastYank()145    void pasteLastYank();
146 
clearSelection()147    void clearSelection();
replaceSelection(String code)148    void replaceSelection(String code);
replaceRange(Range range, String text)149    void replaceRange(Range range, String text);
moveSelectionToNextLine(boolean skipBlankLines)150    boolean moveSelectionToNextLine(boolean skipBlankLines);
moveSelectionToBlankLine()151    boolean moveSelectionToBlankLine();
152 
expandSelection()153    void expandSelection();
shrinkSelection()154    void shrinkSelection();
clearSelectionHistory()155    void clearSelectionHistory();
156 
expandRaggedSelection()157    void expandRaggedSelection();
158 
reindent()159    void reindent();
reindent(Range range)160    void reindent(Range range);
getChangeTracker()161    ChangeTracker getChangeTracker();
162 
getCode(Position start, Position end)163    String getCode(Position start, Position end);
createAnchoredSelection(Widget hostWidget, Position start, Position end)164    DocDisplay.AnchoredSelection createAnchoredSelection(Widget hostWidget,
165                                                         Position start,
166                                                         Position end);
createAnchoredSelection(Position start, Position end)167    DocDisplay.AnchoredSelection createAnchoredSelection(Position start,
168                                                         Position end);
getCode(InputEditorSelection selection)169    String getCode(InputEditorSelection selection);
170 
fitSelectionToLines(boolean expand)171    void fitSelectionToLines(boolean expand);
getSelectionOffset(boolean start)172    int getSelectionOffset(boolean start);
173 
174    // Fix bug 964
onActivate()175    void onActivate();
176 
setReadOnly(boolean readOnly)177    void setReadOnly(boolean readOnly);
setFontSize(double size)178    void setFontSize(double size);
179 
onVisibilityChanged(boolean visible)180    void onVisibilityChanged(boolean visible);
onResize()181    void onResize();
182 
setHighlightSelectedLine(boolean on)183    void setHighlightSelectedLine(boolean on);
setHighlightSelectedWord(boolean on)184    void setHighlightSelectedWord(boolean on);
setShowLineNumbers(boolean on)185    void setShowLineNumbers(boolean on);
setUseSoftTabs(boolean on)186    void setUseSoftTabs(boolean on);
setUseWrapMode(boolean on)187    void setUseWrapMode(boolean on);
getUseWrapMode()188    boolean getUseWrapMode();
setTabSize(int tabSize)189    void setTabSize(int tabSize);
autoDetectIndentation(boolean on)190    void autoDetectIndentation(boolean on);
setShowPrintMargin(boolean on)191    void setShowPrintMargin(boolean on);
setPrintMarginColumn(int column)192    void setPrintMarginColumn(int column);
setShowInvisibles(boolean show)193    void setShowInvisibles(boolean show);
setShowIndentGuides(boolean show)194    void setShowIndentGuides(boolean show);
setBlinkingCursor(boolean blinking)195    void setBlinkingCursor(boolean blinking);
setScrollPastEndOfDocument(boolean enable)196    void setScrollPastEndOfDocument(boolean enable);
setHighlightRFunctionCalls(boolean highlight)197    void setHighlightRFunctionCalls(boolean highlight);
setRainbowParentheses(boolean rainbow)198    void setRainbowParentheses(boolean rainbow);
getRainbowParentheses()199    boolean getRainbowParentheses();
200 
setScrollLeft(int x)201    void setScrollLeft(int x);
setScrollTop(int y)202    void setScrollTop(int y);
scrollTo(int x, int y)203    void scrollTo(int x, int y);
204 
enableSearchHighlight()205    void enableSearchHighlight();
disableSearchHighlight()206    void disableSearchHighlight();
207 
setUseEmacsKeybindings(boolean use)208    void setUseEmacsKeybindings(boolean use);
isEmacsModeOn()209    boolean isEmacsModeOn();
clearEmacsMark()210    void clearEmacsMark();
211 
setUseVimMode(boolean use)212    void setUseVimMode(boolean use);
isVimModeOn()213    boolean isVimModeOn();
isVimInInsertMode()214    boolean isVimInInsertMode();
215 
isRendered()216    boolean isRendered();
217 
getFolds()218    JsArray<AceFold> getFolds();
getFoldState(int row)219    String getFoldState(int row);
addFold(Range range)220    void addFold(Range range);
addFoldFromRow(int row)221    void addFoldFromRow(int row);
unfold(AceFold fold)222    void unfold(AceFold fold);
unfold(int row)223    void unfold(int row);
unfold(Range range)224    void unfold(Range range);
225 
getMarks()226    JsMap<Position> getMarks();
setMarks(JsMap<Position> marks)227    void setMarks(JsMap<Position> marks);
228 
toggleCommentLines()229    void toggleCommentLines();
230 
getSpellingDoc()231    SpellingDoc getSpellingDoc();
232 
getCommandManager()233    AceCommandManager getCommandManager();
setEditorCommandBinding(String id, List<KeySequence> keys)234    void setEditorCommandBinding(String id, List<KeySequence> keys);
resetCommands()235    void resetCommands();
236 
addAttachHandler(AttachEvent.Handler handler)237    HandlerRegistration addAttachHandler(AttachEvent.Handler handler);
addEditorFocusHandler(FocusHandler handler)238    HandlerRegistration addEditorFocusHandler(FocusHandler handler);
addEditorBlurHandler(BlurHandler handler)239    HandlerRegistration addEditorBlurHandler(BlurHandler handler);
addCommandClickHandler(CommandClickEvent.Handler handler)240    HandlerRegistration addCommandClickHandler(CommandClickEvent.Handler handler);
addFindRequestedHandler(FindRequestedEvent.Handler handler)241    HandlerRegistration addFindRequestedHandler(FindRequestedEvent.Handler handler);
addCursorChangedHandler(CursorChangedEvent.Handler handler)242    HandlerRegistration addCursorChangedHandler(CursorChangedEvent.Handler handler);
addEditorModeChangedHandler(EditorModeChangedEvent.Handler handler)243    HandlerRegistration addEditorModeChangedHandler(EditorModeChangedEvent.Handler handler);
addSaveCompletedHandler(SaveFileEvent.Handler handler)244    HandlerRegistration addSaveCompletedHandler(SaveFileEvent.Handler handler);
addPasteHandler(PasteEvent.Handler handler)245    HandlerRegistration addPasteHandler(PasteEvent.Handler handler);
246 
isScopeTreeReady(int row)247    boolean isScopeTreeReady(int row);
addScopeTreeReadyHandler(ScopeTreeReadyEvent.Handler handler)248    HandlerRegistration addScopeTreeReadyHandler(ScopeTreeReadyEvent.Handler handler);
addActiveScopeChangedHandler(ActiveScopeChangedEvent.Handler handler)249    HandlerRegistration addActiveScopeChangedHandler(ActiveScopeChangedEvent.Handler handler);
250 
getCursorPosition()251    Position getCursorPosition();
setCursorPosition(Position position)252    void setCursorPosition(Position position);
253 
getCursorPositionScreen()254    Position getCursorPositionScreen();
255 
moveCursorBackward()256    void moveCursorBackward();
moveCursorBackward(int characters)257    void moveCursorBackward(int characters);
moveCursorForward()258    void moveCursorForward();
moveCursorForward(int characters)259    void moveCursorForward(int characters);
260 
moveCursorNearTop()261    void moveCursorNearTop();
moveCursorNearTop(int rowOffset)262    void moveCursorNearTop(int rowOffset);
ensureCursorVisible()263    void ensureCursorVisible();
scrollCursorIntoViewIfNecessary()264    void scrollCursorIntoViewIfNecessary();
scrollCursorIntoViewIfNecessary(int rowsAround)265    void scrollCursorIntoViewIfNecessary(int rowsAround);
isCursorInSingleLineString()266    boolean isCursorInSingleLineString();
267 
gotoPageDown()268    void gotoPageDown();
gotoPageUp()269    void gotoPageUp();
270 
ensureRowVisible(int row)271    void ensureRowVisible(int row);
272 
search(String needle, boolean backwards, boolean wrap, boolean caseSensitive, boolean wholeWord, Position start, Range range, boolean regexpModex)273    InputEditorSelection search(String needle,
274                                boolean backwards,
275                                boolean wrap,
276                                boolean caseSensitive,
277                                boolean wholeWord,
278                                Position start,
279                                Range range,
280                                boolean regexpModex);
281 
insertCode(InputEditorPosition position, String code)282    void insertCode(InputEditorPosition position, String code);
283 
getScrollLeft()284    int getScrollLeft();
scrollToX(int x)285    void scrollToX(int x);
286 
getScrollTop()287    int getScrollTop();
scrollToY(int y, int animateMs)288    void scrollToY(int y, int animateMs);
289 
scrollToLine(int row, boolean center)290    void scrollToLine(int row, boolean center);
291 
alignCursor(Position position, double ratio)292    void alignCursor(Position position, double ratio);
centerSelection()293    void centerSelection();
294 
getCurrentScope()295    Scope getCurrentScope();
getCurrentChunk()296    Scope getCurrentChunk();
getCurrentSection()297    Scope getCurrentSection();
getCurrentFunction(boolean allowAnonymous)298    ScopeFunction getCurrentFunction(boolean allowAnonymous);
299 
getScopeAtPosition(Position position)300    Scope getScopeAtPosition(Position position);
getChunkAtPosition(Position position)301    Scope getChunkAtPosition(Position position);
getFunctionAtPosition(Position position, boolean allowAnonymous)302    ScopeFunction getFunctionAtPosition(Position position, boolean allowAnonymous);
getSectionAtPosition(Position position)303    Scope getSectionAtPosition(Position position);
hasCodeModelScopeTree()304    boolean hasCodeModelScopeTree();
getScopeTree()305    JsArray<Scope> getScopeTree();
getInsertChunkInfo()306    InsertChunkInfo getInsertChunkInfo();
307 
foldAll()308    void foldAll();
unfoldAll()309    void unfoldAll();
toggleFold()310    void toggleFold();
setFoldStyle(String style)311    void setFoldStyle(String style); // see FoldStyle constants
312 
jumpToMatching()313    void jumpToMatching();
selectToMatching()314    void selectToMatching();
expandToMatching()315    void expandToMatching();
316 
addCursorAbove()317    void addCursorAbove();
addCursorBelow()318    void addCursorBelow();
editLinesFromStart()319    void editLinesFromStart();
320 
addUndoRedoHandler(UndoRedoEvent.Handler handler)321    HandlerRegistration addUndoRedoHandler(UndoRedoEvent.Handler handler);
getCleanStateToken()322    JavaScriptObject getCleanStateToken();
checkCleanStateToken(JavaScriptObject token)323    boolean checkCleanStateToken(JavaScriptObject token);
324 
getNativeSelection()325    Selection getNativeSelection();
getSelectionStart()326    Position getSelectionStart();
getSelectionEnd()327    Position getSelectionEnd();
getSelectionRange()328    Range getSelectionRange();
setSelectionRange(Range range)329    void setSelectionRange(Range range);
330 
getLength(int row)331    int getLength(int row);
getRowCount()332    int getRowCount();
getLine(int row)333    String getLine(int row);
getPixelWidth()334    int getPixelWidth();
335 
positionFromIndex(int index)336    Position positionFromIndex(int index);
indexFromPosition(Position position)337    int indexFromPosition(Position position);
338 
getCharacterAtCursor()339    char getCharacterAtCursor();
getCharacterBeforeCursor()340    char getCharacterBeforeCursor();
341 
debug_getDocumentDump()342    String debug_getDocumentDump();
debug_setSessionValueDirectly(String s)343    void debug_setSessionValueDirectly(String s);
344 
345    // HACK: This should not use Ace-specific data structures
createSelection(Position pos1, Position pos2)346    InputEditorSelection createSelection(Position pos1, Position pos2);
347 
348    // HACK: InputEditorPosition should just become AceInputEditorPosition
selectionToPosition(InputEditorPosition pos)349    Position selectionToPosition(InputEditorPosition pos);
350 
createInputEditorPosition(Position pos)351    InputEditorPosition createInputEditorPosition(Position pos);
352 
getWords(TokenPredicate tokenPredicate, CharClassifier charClassifier, Position start, Position end)353    Iterable<Range> getWords(TokenPredicate tokenPredicate,
354                             CharClassifier charClassifier,
355                             Position start,
356                             Position end);
357 
getTextForRange(Range range)358    String getTextForRange(Range range);
359 
tokenizeDocument()360    void tokenizeDocument();
retokenizeDocument()361    void retokenizeDocument();
getTokenAt(int row, int column)362    Token getTokenAt(int row, int column);
getTokenAt(Position position)363    Token getTokenAt(Position position);
getTokens(int row)364    JsArray<Token> getTokens(int row);
365 
createTokenIterator()366    TokenIterator createTokenIterator();
createTokenIterator(Position position)367    TokenIterator createTokenIterator(Position position);
368 
createAnchor(Position pos)369    Anchor createAnchor(Position pos);
370 
getStartOfCurrentStatement()371    int getStartOfCurrentStatement();
getEndOfCurrentStatement()372    int getEndOfCurrentStatement();
373 
getMultiLineExpr(Position pos, int startRow, int endRow)374    Range getMultiLineExpr(Position pos, int startRow, int endRow);
getParagraph(Position pos, int startRow, int endRow)375    Range getParagraph(Position pos, int startRow, int endRow);
376 
highlightDebugLocation( SourcePosition startPos, SourcePosition endPos, boolean executing)377    void highlightDebugLocation(
378          SourcePosition startPos,
379          SourcePosition endPos,
380          boolean executing);
endDebugHighlighting()381    void endDebugHighlighting();
382 
addBreakpointSetHandler(BreakpointSetEvent.Handler handler)383    HandlerRegistration addBreakpointSetHandler
384       (BreakpointSetEvent.Handler handler);
addBreakpointMoveHandler(BreakpointMoveEvent.Handler handler)385    HandlerRegistration addBreakpointMoveHandler
386       (BreakpointMoveEvent.Handler handler);
addScrollYHandler(ScrollYEvent.Handler handler)387    HandlerRegistration addScrollYHandler
388       (ScrollYEvent.Handler handler);
addOrUpdateBreakpoint(Breakpoint breakpoint)389    void addOrUpdateBreakpoint(Breakpoint breakpoint);
removeBreakpoint(Breakpoint breakpoint)390    void removeBreakpoint(Breakpoint breakpoint);
removeAllBreakpoints()391    void removeAllBreakpoints();
toggleBreakpointAtCursor()392    void toggleBreakpointAtCursor();
hasBreakpoints()393    boolean hasBreakpoints();
394 
setAnnotations(JsArray<AceAnnotation> annotations)395    void setAnnotations(JsArray<AceAnnotation> annotations);
showLint(JsArray<LintItem> lint)396    void showLint(JsArray<LintItem> lint);
clearLint()397    void clearLint();
removeMarkersAtCursorPosition()398    void removeMarkersAtCursorPosition();
removeMarkersOnCursorLine()399    void removeMarkersOnCursorLine();
removeMarkers(BiPredicate<AceAnnotation, Marker> predicate)400    void removeMarkers(BiPredicate<AceAnnotation, Marker> predicate);
removeMarkersAtWord(String word)401    void removeMarkersAtWord(String word);
402 
beginCollabSession(CollabEditStartParams params, DirtyState dirtyState)403    void beginCollabSession(CollabEditStartParams params, DirtyState dirtyState);
hasActiveCollabSession()404    boolean hasActiveCollabSession();
hasFollowingCollabSession()405    boolean hasFollowingCollabSession();
endCollabSession()406    void endCollabSession();
407 
setPopupVisible(boolean visible)408    void setPopupVisible(boolean visible);
isPopupVisible()409    boolean isPopupVisible();
selectAll(String needle)410    void selectAll(String needle);
411 
getTabSize()412    int getTabSize();
insertRoxygenSkeleton()413    void insertRoxygenSkeleton();
414 
getLastModifiedTime()415    long getLastModifiedTime();
getLastCursorChangedTime()416    long getLastCursorChangedTime();
417 
moveLinesUp()418    void moveLinesUp();
moveLinesDown()419    void moveLinesDown();
expandToLine()420    void expandToLine();
copyLinesDown()421    void copyLinesDown();
joinLines()422    void joinLines();
removeLine()423    void removeLine();
424 
blockIndent()425    void blockIndent();
blockOutdent()426    void blockOutdent();
splitIntoLines()427    void splitIntoLines();
428 
getFirstFullyVisibleRow()429    int getFirstFullyVisibleRow();
430 
getPositionBounds(Position position)431    Rectangle getPositionBounds(Position position);
getRangeBounds(Range range)432    Rectangle getRangeBounds(Range range);
433 
toDocumentPosition(ScreenCoordinates coordinates)434    Position toDocumentPosition(ScreenCoordinates coordinates);
documentPositionToScreenCoordinates(Position position)435    ScreenCoordinates documentPositionToScreenCoordinates(Position position);
screenCoordinatesToDocumentPosition(int pageX, int pageY)436    Position screenCoordinatesToDocumentPosition(int pageX, int pageY);
437 
forceImmediateRender()438    void forceImmediateRender();
isPositionVisible(Position position)439    boolean isPositionVisible(Position position);
440 
getFirstVisibleRow()441    int getFirstVisibleRow();
getLastVisibleRow()442    int getLastVisibleRow();
443 
showInfoBar(String message)444    void showInfoBar(String message);
445 
setDragEnabled(boolean enabled)446    void setDragEnabled(boolean enabled);
447 
isSnippetsTabStopManagerActive()448    boolean isSnippetsTabStopManagerActive();
449 
addLineWidget(LineWidget widget)450    void addLineWidget(LineWidget widget);
removeLineWidget(LineWidget widget)451    void removeLineWidget(LineWidget widget);
removeAllLineWidgets()452    void removeAllLineWidgets();
onLineWidgetChanged(LineWidget widget)453    void onLineWidgetChanged(LineWidget widget);
454 
hasLineWidgets()455    boolean hasLineWidgets();
getLineWidgets()456    JsArray<LineWidget> getLineWidgets();
getLineWidgetForRow(int row)457    LineWidget getLineWidgetForRow(int row);
458 
showChunkOutputInline()459    boolean showChunkOutputInline();
setShowChunkOutputInline(boolean show)460    void setShowChunkOutputInline(boolean show);
getChunkDefs()461    JsArray<ChunkDefinition> getChunkDefs();
setChunkLineExecState(int start, int end, int state)462    void setChunkLineExecState(int start, int end, int state);
463 
getDocumentEnd()464    Position getDocumentEnd();
465 
setInsertMatching(boolean value)466    void setInsertMatching(boolean value);
setSurroundSelectionPref(String value)467    void setSurroundSelectionPref(String value);
468 
goToLineStart()469    void goToLineStart();
goToLineEnd()470    void goToLineEnd();
471 
toggleTokenInfo()472    void toggleTokenInfo();
setTextInputAriaLabel(String label)473    void setTextInputAriaLabel(String label);
474 }
475