fun sendToConsole()

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
  }