Skip to content

Commit 7d87fd0

Browse files
committed
feat(ext-terminal): refactor suggestCommand method to support 241 new UI context and add TerminalUtil class for message sending #135.
1 parent 6d4e800 commit 7d87fd0

File tree

1 file changed

+15
-10
lines changed

1 file changed

+15
-10
lines changed

exts/ext-terminal/src/241/main/kotlin/cc/unitmesh/terminal/TerminalUtil.kt

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,38 +4,43 @@ import cc.unitmesh.terminal.ShellCommandSuggestAction.Companion.suggestCommand
44
import com.intellij.openapi.actionSystem.AnActionEvent
55
import com.intellij.openapi.actionSystem.DataProvider
66
import com.intellij.openapi.application.runInEdt
7-
import com.intellij.openapi.editor.ex.EditorEx
7+
import com.intellij.openapi.ide.CopyPasteManager
88
import com.intellij.openapi.project.Project
99
import com.intellij.openapi.wm.ToolWindowManager
1010
import com.intellij.terminal.ui.TerminalWidget
1111
import com.intellij.ui.components.panels.Wrapper
1212
import com.intellij.ui.content.Content
1313
import org.jetbrains.plugins.terminal.TerminalToolWindowFactory
1414
import org.jetbrains.plugins.terminal.TerminalToolWindowManager
15-
import org.jetbrains.plugins.terminal.exp.TerminalOutputController
15+
import org.jetbrains.plugins.terminal.exp.TerminalPromptController
1616

1717
object TerminalUtil {
1818
fun sendMsg(project: Project, data: String, e: AnActionEvent) {
1919
val content = getContent(project) ?: return
2020
val findWidgetByContent = TerminalToolWindowManager.findWidgetByContent(content) ?: return
21-
val editor = tryGetBlockTerminalEditor(findWidgetByContent)
22-
if (editor == null) {
21+
val controller: TerminalPromptController? = tryGetBlockTerminalEditor(findWidgetByContent)
22+
if (controller == null) {
2323
trySendMsgInOld(project, data, content)
2424
return
2525
}
2626

27+
val sb = StringBuilder()
2728
suggestCommand(data, project) { string ->
28-
runInEdt {
29-
editor.document.insertString(editor.caretModel.offset, string)
30-
}
29+
sb.append(string)
30+
null
31+
}
32+
33+
runInEdt {
34+
CopyPasteManager.copyTextToClipboard(sb.toString())
35+
controller.performPaste(e.dataContext)
3136
}
3237
}
3338

34-
private fun tryGetBlockTerminalEditor(findWidgetByContent: TerminalWidget): EditorEx? {
39+
private fun tryGetBlockTerminalEditor(findWidgetByContent: TerminalWidget): TerminalPromptController? {
3540
val terminalView = (findWidgetByContent.component as Wrapper).targetComponent
3641
if (terminalView is DataProvider) {
37-
val controller = terminalView.getData(TerminalOutputController.KEY.name)
38-
return (controller as? TerminalOutputController)?.outputModel?.editor
42+
val controller = terminalView.getData(TerminalPromptController.KEY.name)
43+
return (controller as? TerminalPromptController)
3944
}
4045

4146
return null

0 commit comments

Comments
 (0)