registerTerminalActions.ts 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import * as vscode from "vscode"
  2. import { ClineProvider } from "../core/webview/ClineProvider"
  3. import { Terminal } from "../integrations/terminal/Terminal"
  4. import { t } from "../i18n"
  5. const TERMINAL_COMMAND_IDS = {
  6. ADD_TO_CONTEXT: "roo-cline.terminalAddToContext",
  7. FIX: "roo-cline.terminalFixCommand",
  8. EXPLAIN: "roo-cline.terminalExplainCommand",
  9. } as const
  10. export const registerTerminalActions = (context: vscode.ExtensionContext) => {
  11. registerTerminalAction(context, TERMINAL_COMMAND_IDS.ADD_TO_CONTEXT, "TERMINAL_ADD_TO_CONTEXT")
  12. registerTerminalAction(context, TERMINAL_COMMAND_IDS.FIX, "TERMINAL_FIX")
  13. registerTerminalAction(context, TERMINAL_COMMAND_IDS.EXPLAIN, "TERMINAL_EXPLAIN")
  14. }
  15. const registerTerminalAction = (
  16. context: vscode.ExtensionContext,
  17. command: string,
  18. promptType: "TERMINAL_ADD_TO_CONTEXT" | "TERMINAL_FIX" | "TERMINAL_EXPLAIN",
  19. ) => {
  20. context.subscriptions.push(
  21. vscode.commands.registerCommand(command, async (args: any) => {
  22. let content = args.selection
  23. if (!content || content === "") {
  24. content = await Terminal.getTerminalContents(promptType === "TERMINAL_ADD_TO_CONTEXT" ? -1 : 1)
  25. }
  26. if (!content) {
  27. vscode.window.showWarningMessage(t("common:warnings.no_terminal_content"))
  28. return
  29. }
  30. await ClineProvider.handleTerminalAction(command, promptType, {
  31. terminalContent: content,
  32. })
  33. }),
  34. )
  35. }