ソースを参照

fix: tui: Fix /editor command (#3663)

Haris Gušić 3 ヶ月 前
コミット
c72f8b17c6

+ 2 - 2
packages/opencode/src/cli/cmd/tui/component/dialog-command.tsx

@@ -41,10 +41,10 @@ function init() {
   })
 
   const result = {
-    trigger(name: string) {
+    trigger(name: string, source?: "prompt") {
       for (const option of options()) {
         if (option.value === name) {
-          option.onSelect?.(dialog)
+          option.onSelect?.(dialog, source)
           return
         }
       }

+ 1 - 1
packages/opencode/src/cli/cmd/tui/component/prompt/autocomplete.tsx

@@ -263,7 +263,7 @@ export function Autocomplete(props: {
       {
         display: "/editor",
         description: "open editor",
-        onSelect: () => command.trigger("prompt.editor"),
+        onSelect: () => command.trigger("prompt.editor", "prompt"),
       },
       {
         display: "/help",

+ 2 - 7
packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx

@@ -98,14 +98,9 @@ export function Prompt(props: PromptProps) {
         category: "Session",
         keybind: "editor_open",
         value: "prompt.editor",
-        onSelect: async (dialog) => {
+        onSelect: async (dialog, trigger) => {
           dialog.clear()
-          const value = input.plainText
-          input.clear()
-          setStore("prompt", {
-            input: "",
-            parts: [],
-          })
+          const value = trigger === "prompt" ? "" : input.plainText
           const content = await Editor.open({ value, renderer })
           if (content) {
             input.setText(content, { history: false })

+ 1 - 1
packages/opencode/src/cli/cmd/tui/ui/dialog-select.tsx

@@ -35,7 +35,7 @@ export interface DialogSelectOption<T = any> {
   category?: string
   disabled?: boolean
   bg?: RGBA
-  onSelect?: (ctx: DialogContext) => void
+  onSelect?: (ctx: DialogContext, trigger?: "prompt") => void
 }
 
 export type DialogSelectRef<T> = {

+ 1 - 0
packages/opencode/src/cli/cmd/tui/util/editor.ts

@@ -24,6 +24,7 @@ export namespace Editor {
     })
     await proc.exited
     const content = await Bun.file(filepath).text()
+    opts.renderer.currentRenderBuffer.clear()
     opts.renderer.resume()
     opts.renderer.requestRender()
     return content || undefined