about summary refs log tree commit homepage
path: root/lib/PublicInbox/LeiEditSearch.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/PublicInbox/LeiEditSearch.pm')
-rw-r--r--lib/PublicInbox/LeiEditSearch.pm15
1 files changed, 12 insertions, 3 deletions
diff --git a/lib/PublicInbox/LeiEditSearch.pm b/lib/PublicInbox/LeiEditSearch.pm
index fb36fdcd..30ac65bd 100644
--- a/lib/PublicInbox/LeiEditSearch.pm
+++ b/lib/PublicInbox/LeiEditSearch.pm
@@ -13,10 +13,19 @@ sub lei_edit_search {
         my $lss = PublicInbox::LeiSavedSearch->up($lei, $out) or return;
         my @cmd = (qw(git config --edit -f), $lss->{'-f'});
         $lei->qerr("# spawning @cmd");
+        $lss->edit_begin($lei);
         if ($lei->{oneshot}) {
-                exec(@cmd) or die "exec @cmd: $!\n";
-        } else {
-                $lei->send_exec_cmd([], \@cmd, {});
+                require PublicInbox::Spawn;
+                waitpid(PublicInbox::Spawn::spawn(\@cmd), 0);
+                # non-fatal, editor could fail after successful write
+                $lei->child_error($?) if $?;
+                $lss->edit_done($lei);
+        } else { # run in script/lei foreground
+                require PublicInbox::PktOp;
+                my ($op_c, $op_p) = PublicInbox::PktOp->pair;
+                # $op_p will EOF when $EDITOR is done
+                $op_c->{ops} = { '' => [$lss->can('edit_done'), $lss, $lei] };
+                $lei->send_exec_cmd([ @$lei{qw(0 1 2)}, $op_p ], \@cmd, {});
         }
 }