on main help sign in
fix(ui): always clean up external editor temp file (#2503)
4501438iceymoss
internal/ui/model/ui.go+7−3
@@ -2611,13 +2611,14 @@ func (m *UI) openEditor(value string) tea.Cmd {
2611 if err != nil {
2611 if err != nil {
2612 return util.ReportError(err)
2612 return util.ReportError(err)
2613 }
2613 }
2614+ tmpPath := tmpfile.Name()
2614 defer tmpfile.Close() //nolint:errcheck
2615 defer tmpfile.Close() //nolint:errcheck
2615 if _, err := tmpfile.WriteString(value); err != nil {
2616 if _, err := tmpfile.WriteString(value); err != nil {
2616 return util.ReportError(err)
2617 return util.ReportError(err)
2617 }
2618 }
2618 cmd, err := editor.Command(
2619 cmd, err := editor.Command(
2619 "crush",
2620 "crush",
2620− tmpfile.Name(),
2621+ tmpPath,
2621 editor.AtPosition(
2622 editor.AtPosition(
2622 m.textarea.Line()+1,
2623 m.textarea.Line()+1,
2623 m.textarea.Column()+1,
2624 m.textarea.Column()+1,
@@ -2627,17 +2628,20 @@ func (m *UI) openEditor(value string) tea.Cmd {
2627 return util.ReportError(err)
2628 return util.ReportError(err)
2628 }
2629 }
2629 return tea.ExecProcess(cmd, func(err error) tea.Msg {
2630 return tea.ExecProcess(cmd, func(err error) tea.Msg {
2631+ defer func() {
2632+ _ = os.Remove(tmpPath)
2633+ }()
2634+
2630 if err != nil {
2635 if err != nil {
2631 return util.ReportError(err)
2636 return util.ReportError(err)
2632 }
2637 }
2633− content, err := os.ReadFile(tmpfile.Name())
2638+ content, err := os.ReadFile(tmpPath)
2634 if err != nil {
2639 if err != nil {
2635 return util.ReportError(err)
2640 return util.ReportError(err)
2636 }
2641 }
2637 if len(content) == 0 {
2642 if len(content) == 0 {
2638 return util.ReportWarn("Message is empty")
2643 return util.ReportWarn("Message is empty")
2639 }
2644 }
2640− os.Remove(tmpfile.Name())
2641 return openEditorMsg{
2645 return openEditorMsg{
2642 Text: strings.TrimSpace(string(content)),
2646 Text: strings.TrimSpace(string(content)),
2643 }
2647 }