in src/org/jetbrains/r/rinterop/rstudioapi/RSessionUtils.kt [16:66]
fun sendToConsole(rInterop: RInteropImpl, args: RObject): AsyncPromise<Unit> {
val code = args.list.getRObjects(0).rString.getStrings(0)
val execute = args.list.getRObjects(1).rBoolean.getBooleans(0)
val echo = args.list.getRObjects(2).rBoolean.getBooleans(0)
val focus = args.list.getRObjects(3).rBoolean.getBooleans(0)
val call = args.list.getRObjects(4).rString.getStrings(0)
val promise = AsyncPromise<Unit>()
val console = getConsoleView(rInterop) ?: return promise.also { it.setResult(Unit) }
if (echo) {
if (rInterop.isInSourceFileExecution.get()) {
console.executeActionHandler.executeLater {
console.executeText(call)
}
return promise.also { it.setResult(Unit) }
}
}
if (focus) {
RConsoleToolWindowFactory.focusOnCurrentConsole(rInterop.project)
}
val consoleSetText = { text: String ->
invokeLater {
runWriteAction {
val consoleEditor = console.consoleEditor
consoleEditor.document.setText(text)
PsiDocumentManager.getInstance(rInterop.project).commitDocument(consoleEditor.document)
consoleEditor.caretModel.moveToOffset(consoleEditor.document.textLength)
promise.setResult(Unit)
}
}
}
if (execute) {
val text = console.editorDocument.text
console.executeActionHandler.executeLater {
console.executeText(code).then {
consoleSetText(text)
}
}
}
else {
console.executeActionHandler.executeLater {
consoleSetText(code)
}
}
return promise
}